sklearn库调用k近邻算法

python实现KNN算法的全体流程代码#1-1KNN算法的原理底层代码import numpy as npimport matplotlib.pyplot as plt #导入相应的数据可视化模块raw_data_X=[[3.393533211,2.331273381],            [3.110073483,1.781539638],            [1.343808831,3.368360954],            [3.582294042,4.679179110],            [2.280362439,2.866990263],            [7.423436942,4.696522875],            [5.745051997,3.533989803],            [9.172168622,2.511101045],            [7.792783481,3.424088941],            [7.939820817,0.791637231]]raw_data_Y=[0,0,0,0,0,1,1,1,1,1]print(raw_data_X)print(raw_data_Y)x_train=np.array(raw_data_X)y_train=np.array(raw_data_Y)     #数据的预处理,需要将其先转换为矩阵,并且作为训练数据集print(x_train.ndim)print(y_train.ndim)print(x_train)print(y_train)plt.figure(1)plt.scatter(x_train[y_train==0,0],x_train[y_train==0,1],color="g")plt.scatter(x_train[y_train==1,0],x_train[y_train==1,1],color="r") #将其散点图输出x=np.array([8.093607318,3.365731514]) #定义一个新的点,需要判断它到底属于哪一类数据类型plt.scatter(x[0],x[1],color="b") #在算点图上输出这个散点,看它在整体散点图的分布情况#kNN机器算法的使用from math import sqrtdistance=[]for x_train in x_train:    d=sqrt(np.sum((x_train-x)**2))    distance.append(d)    print(distance)d1=np.argsort(distance) #输出distance排序的索引值print(d1)k=6n_k=[y_train[(d1[i])] for i in range(0,k)]print(n_k)from collections import Counter #导入Counter模块c=Counter(n_k).most_common(1)[0][0] #Counter模块用来输出一个列表中元素的个数,输出的形式为列表,其里面的元素为不同的元组#另外的话对于Counter模块它有.most_common(x)可以输出统计数字出现最多的前x个元组,其中元组的key是其元素值,后面的值是出现次数print(Counter(n_k))y_predict=cprint(y_predict)plt.show() #输出点的个数

#1-2KNN算法在scikitlearn中的调用import matplotlibimport matplotlib.pyplot as pltfrom sklearn import datasetsfrom sklearn.neighbors import KNeighborsClassifierfrom sklearn.model_selection import train_test_splitiris=datasets.load_iris()     #鸢尾花数据集(150,4)x=iris.datay=iris.targetdata=datasets.load_digits()   #手写字体识别的数据集(1797,64),8x8的像素点数据,0-16之间表示灰度x=data.datay=data.targetprint(x.shape)print(y.shape)shuffle_index=np.random.permutation(len(x))  #对索引进行随机打乱x_train,x_test,y_train,y_test=train_test_split(x,y,test_size=0.2,random_state=666)knn_classifier=KNeighborsClassifier(n_neighbors=4)knn_classifier.fit(x_train,y_train)y_predict=knn_classifier.predict(x_test)p=(sum(knn_classifier.predict(x_test)==y_test)/len(x_test))*100print("准确度为:%d"% (p)+"%")#输出1个数字字体的实例s=x[666]s=s.reshape(8,8)plt.imshow(s,cmap=matplotlib.cm.binary)plt.show()from sklearn import metricsprint(metrics.accuracy_score(y_test,y_predict))  #输出准确度print(metrics.accuracy_score(y_test,y_predict,normalize=False))  #输出准确的预测个数print(metrics.confusion_matrix(y_test,y_predict)) #输出混淆矩阵的大小print(knn_classifier.score(x_test,y_test))#超参数调节寻找最好的K值,weights=["uniform","distance"],p=0-10#采用for循环来进行寻找最好的超参数k与pbest_score=0.0best_k=1best_p=0for k in range(1,11):    for p in range(1,6):        knn=KNeighborsClassifier(n_neighbors=k,weights="distance",p=p)        knn.fit(x_train,y_train)        score=knn.score(x_test,y_test)        if score>best_score:            best_score=score            best_k=k            best_p=pprint("best_k=%d" % k)print("best_score=",best_score)print("best_p=",p)#网格搜索方法寻找最优的超参数,它采用的评价指标是预测准确度,采用的方式是交叉验证CV#导入scikitlearn中的网格搜索函数GridSearchCVparam_grid=[    {        "weights":["uniform"],        "n_neighbors":[i for i in range(1,11)]    },    {        "weights":["distance"],        "n_neighbors":[i for i in range(1,11)],        "p":[i for i in range(1,5)]    }]k=KNeighborsClassifier()from sklearn.model_selection import GridSearchCV#定义相应网格搜索方式(输入初始化参数:1机器学习算法、2超参数组合列表、3n_jobs(选择并行内核数目,-1表示全部是用),4verbose=2表示输出相应搜索过程)grid_search=GridSearchCV(k,param_grid,n_jobs=-1)grid_search.fit(x_train,y_train)print(grid_search.best_estimator_)print(grid_search.best_params_) #输出最好的超参数组合print(grid_search.best_score_) #输出最好的模型的时候的准确度knn_best=grid_search.best_estimator_ #定义出最好的分类器y_pre=knn_best.predict(x_test)print(y_pre)print(knn_best.score(x_test,y_test))

#数据归一化,将数据映射到同一个尺度,降低数据引起的偏差#最值归一化,收到outline影响比较大,有明显边界,成绩等#均值方差归一化:均值为0,方差为1,数据没有明显边界,有可能存在极端的数据值,收入等#最值归一化import randomx=np.random.randint(0,100,size=100)x=(x-np.min(x))/(np.max(x)-np.min(x))print(x)x=np.random.randint(0,100,size=(50,2))x=np.array(x,dtype=float)x[:,0]=(x[:,0]-np.min(x[:,0]))/(np.max(x[:,0]-np.min(x[:,0])))  #将0列第一个特征数据进行最值归一化处理print(x[:,0])print(np.mean(x[:,0]))print(np.std(x[:,0]))#均值方差归一化函数x[:,1]=(x[:,1]-np.mean(x[:,1]))/np.std(x[:,1])print(x[:,1])print(np.mean(x[:,1]))print(np.std(x[:,1]))

#数据归一化的使用#scikit-learn中的StandardScaler均值方差归一化from sklearn import datasetsfrom sklearn.neighbors import KNeighborsClassifierfrom sklearn.model_selection import train_test_splitiris=datasets.load_iris()     #鸢尾花数据集(150,4)x=iris.datay=iris.targetx_train,x_test,y_train,y_test=train_test_split(x,y,test_size=0.2,random_state=666)from sklearn.preprocessing import StandardScalers=StandardScaler()s.fit(x_train)print(s.mean_)print(s.scale_)#将两个数据集进行归一化处理x_train=s.transform(x_train)x_test=s.transform(x_test)#使用归一化的数据集进行模型训练k=KNeighborsClassifier(n_neighbors=3)k.fit(x_train,y_train)print(k.predict(x_test))print(k.score(x_test,y_test))#scikit-learn中的MinMaxScaler最值归一化from sklearn.preprocessing import MinMaxScalers=MinMaxScaler()s.fit(x_train)#将两个数据集进行归一化处理x_train=s.transform(x_train)x_test=s.transform(x_test)#使用归一化的数据集进行模型训练k=KNeighborsClassifier(n_neighbors=3)k.fit(x_train,y_train)print(k.predict(x_test))print(k.score(x_test,y_test))实现效果如下所示:



原文地址:https://www.cnblogs.com/Yanjy-OnlyOne/p/12506816.html

时间: 2024-10-06 02:47:42

sklearn库调用k近邻算法的相关文章

02-18 scikit-learn库之k近邻算法

目录 scikit-learn库之k近邻算法 一.KNeighborsClassifier 1.1 使用场景 1.2 代码 1.3 参数详解 1.4 方法 1.4.1 kneighbors([X, n_neighbors, return_distance]) 1.4.2 kneighbors_graph([X, n_neighbors, mode]) 二.KNeighborsRegressor 三.RadiusNeighborsClassifier 四.RadiusNeighborsRegres

scikitlearn库中调用K近邻算法的操作步骤

1.k近邻算法可以说是唯一一个没有训练过程的机器学习算法,它含有训练基础数据集,但是是一种没有模型的算法,为了将其和其他算法进行统一,我们把它的训练数据集当做它的模型本身.2.在scikitlearn中调用KNN算法的操作步骤如下(利用实际例子举例如下):#1导入相应的数据可视化模块import numpy as npimport matplotlib.pyplot as plt #2输入训练的数据集x_train.y_trainraw_data_X=[[3.393533211,2.331273

02-16 k近邻算法

[TOC] 更新.更全的<机器学习>的更新网站,更有python.go.数据结构与算法.爬虫.人工智能教学等着你:https://www.cnblogs.com/nickchen121/ k近邻算法 k近邻算法(k-nearest neighbors,KNN)是一种基本的分类和回归方法,本文只探讨分类问题中的k近邻算法,回归问题通常是得出最近的$k$个实例的标记值,然后取这$k$实例标记值的平均数或中位数. k近邻算法经常被人们应用于生活当中,比如傅玄曾说过"近朱者赤近墨者黑&quo

从K近邻算法、距离度量谈到KD树、SIFT+BBF算法

从K近邻算法.距离度量谈到KD树.SIFT+BBF算法 从K近邻算法.距离度量谈到KD树.SIFT+BBF算法 前言 前两日,在微博上说:“到今天为止,我至少亏欠了3篇文章待写:1.KD树:2.神经网络:3.编程艺术第28章.你看到,blog内的文章与你于别处所见的任何都不同.于是,等啊等,等一台电脑,只好等待..”.得益于田,借了我一台电脑(借他电脑的时候,我连表示感谢,他说“能找到工作全靠你的博客,这点儿小忙还说,不地道”,有的时候,稍许感受到受人信任也是一种压力,愿我不辜负大家对我的信任)

使用K近邻算法实现手写体识别系统

目录 1. 应用介绍 1.1实验环境介绍 1.2应用背景介绍 2. 数据来源及预处理 2.1数据来源及格式 2.2数据预处理 3. 算法设计与实现 3.1手写体识别系统算法实现过程 3.2 K近邻算法实现 3.3手写体识别系统实现 3.4算法改进与优化 4. 系统运行过程与结果展示 1.应用介绍 1.1实验环境介绍 本次实验主要使用Python语言开发完成,Python的版本为2.7,并且使用numpy函数库做一些数值计算和处理. 1.2应用背景介绍 本次实验实现的是简易的手写体识别系统,即根据

用Python从零开始实现K近邻算法

K近邻算法 (或简称kNN)是易于理解和实现的算法,而且是你解决问题的强大工具. http://python.jobbole.com/87407/ 在本教程中,你将基于Python(2.7)从零开始实现kNN算法.该实现主要针对分类问题,将会用鸢尾花分类问题来演示. 这篇教程主要针对Python程序员,或者你可以快速上手Python,并且对如何从零实现kNN算法感兴趣. kNN算法图片,来自Wikipedia,保留所有权利 什么是kNN kNN算法的模型就是整个训练数据集.当需要对一个未知数据实

K近邻算法调参方法

//2019.08.02下午#机器学习算法中的超参数与模型参数1.超参数:是指机器学习算法运行之前需要指定的参数,是指对于不同机器学习算法属性的决定参数.通常来说,人们所说的调参就是指调节超参数.2.模型参数:是指算法在使用过程中需要学习得到的参数,即输入与输出之间映射函数中的参数,它需要通过对于训练数据集训练之后才可以得到.3.对于KNN算法,它是没有模型参数的,它的k参数就属于典型的超参数. 4.好的超参数的选择主要取决于三个方面:(1)领域知识(2)经验数值(3)实验搜索5.K近邻算法常用

『cs231n』作业1问题1选讲_通过代码理解K近邻算法&amp;交叉验证选择超参数参数

通过K近邻算法探究numpy向量运算提速 茴香豆的"茴"字有... ... 使用三种计算图片距离的方式实现K近邻算法: 1.最为基础的双循环 2.利用numpy的broadca机制实现单循环 3.利用broadcast和矩阵的数学性质实现无循环 图片被拉伸为一维数组 X_train:(train_num, 一维数组) X:(test_num, 一维数组) 方法验证 import numpy as np a = np.array([[1,1,1],[2,2,2],[3,3,3]]) b

K 近邻算法

声明: 1,本篇为个人对<2012.李航.统计学习方法.pdf>的学习总结,不得用作商用,欢迎转载,但请注明出处(即:本帖地址). 2,因为本人在学习初始时有非常多数学知识都已忘记,所以为了弄懂当中的内容查阅了非常多资料.所以里面应该会有引用其它帖子的小部分内容,假设原作者看到能够私信我,我会将您的帖子的地址付到以下. 3.假设有内容错误或不准确欢迎大家指正. 4.假设能帮到你.那真是太好了. 描写叙述 给定一个训练数据集,对新的输入实例.在训练数据集中找到与该实例最邻近的K个实例,若这K个实