机器学习knn算法学习笔记使用sklearn库 ,莺尾花实例
**
机器学习knn算法学习笔记使用sklearn库 ,莺尾花实例。
具体knn算法是怎样的我这里就不再详细论述。在这里我注意总结我使用knn算法进行一个分类的分析
**
分析过程
1.前期准备
引入相关的库,model_selection这个模块采用我这种写法,不然就用不了
import numpy as np
from sklearn import model_selection #将训练集和测试集分开的模块
from sklearn.neighbors import KNeighborsClassifier # K-近邻算法模块
import matplotlib.pyplot as plt
import pandas as pd
引入数据看看数据是怎样的
data = pd.read_csv(r'C:\Users\lenovo\Desktop\毕业论文文献2\iris.csv')
data.head()
如图所示,一个数据有四个特征值,为了发方面后续分析,我们将各数据的类别重新命名。
###将种类名称替换成对应的数字, 1:setosa, 2:versicolor, 3: virginica. 这一步在这个分类预测中没有必要, 但可以用在回归中。
data['encode'] = data['Species'].map(lambda x :1 if x =='setosa' else (2 if x =='versicolor' else 3))
data.info()
一共有150个数据集,没存在空值的情况。
#设置变量x 与变量y
x = np.array(data.iloc[:,:4])
y = np.array(data.encode)#将x,y分别划分为训练集与测试集
train_x,test_x,train_y,test_y = model_selection.train_test_split(x,y,test_size=0.3)#将train_x,test_x 做标准化处理, 因为数据特征值之间差距过大,容易让某一特征值不起作用
from sklearn.preprocessing import StandardScaler
scaler = StandardScaler().fit(train_x)
x_train = scaler.transform(train_x)
x_test = scaler.transform(test_x)scaler 是根据train_x 来计算的。x_train是通过train_x的均值与标准差,用x-mena/std来标准化每一个值,均值,标准差是按列来计算
x_test是同理。一般情况下,测试集要用训练集的均值与标准差来标准化
- scaler.mean_ 各列的均值
- scaler.scale_ 各列的方差
2.尝试建模
我们首先尝试建立一种模型,再使用交叉验证法,寻找最好的模型参数
2.1建立一个模型
#将训练集引入knn模块训练
k = 3
clf1 = KNeighborsClassifier(k)
clf1.fit(x_train, train_y)
#.score() 输出训练级或者测试集的正确率
clf1.score(x_train, train_y) #训练集正确率
clf1.score(x_test, test_y) #测试集正确率#使用交叉验证发估计测试误差,因为在真实数据中,测试集是不知道y值,只能使用重抽样方法估计测试误差
from sklearn import model_selection as cv
scores = cv.cross_val_score(clf1, x_train, train_y, cv = 5) #这里用5折交叉验证法
score = scores.mean() #scores是总的正确率,还要平均才行
score
2.2寻找最优拟合
建立多个模型,使用交叉验证法寻找最优拟合的k,通过选择cv错误率最低的k。
#=利用交叉验证发为模型选择最合适的k值(即cv正确率最高时,模型最好)
ks = range(1,100)
inSampleScores = [] #记录每个k的训练集得分
crossValidationScores = [] #记录每个k交叉验证得分
d = {} #key = k ,value = cv accuracy rate 记录每个k交叉验证得分,以k为键for k in ks:clf = KNeighborsClassifier(k).fit(x_train, train_y)inSampleScores.append(1-clf.score(x_train, train_y)) #训练集得分scores = 1-cv.cross_val_score(clf, x_train, train_y, cv = 5) #交叉验证得分crossValidationScores.append(scores.mean())d[k] = scores.mean()#画出训练集得分,交叉验证得分,随k值的变化
p1 = plt.plot(ks, inSampleScores)
p2 = plt.plot(ks, crossValidationScores)
plt.legend(["train_error rate", "cv_error rate"])
plt.show()
由图可以看出随着k值的增加,train_error rate呈下降趋势,cv_accuracy rate呈上升趋势,我们选择cv_error rate最小的值对于k值作为模型的最优拟合
# 选择最好的k
best_k = sorted(d.items(), key = lambda x:x[1], reverse = False)[0][0]
print("最优的k值:{}".format(best_k))
最好的k值为7,当k值为7时,cv错误率为最低为3.81%
2.3建模
#建模,k值为7
clf2 = KNeighborsClassifier(7).fit(x_train, train_y)
#预测
y_test_pred = clf2.predict(x_test)#测试集错误率
1-clf2.score(x_test, test_y)
这里测试集错误率为0,我也感觉很惊讶
2.4通过混淆矩阵可视化,来对模型分类进行评价
#建立混淆矩阵,来看模型的分类结果,以及分类错误程度
from sklearn.metrics import confusion_matrix
import seaborn as sns
cnf_matrix = confusion_matrix(test_y, y_test_pred) #混淆矩阵#可视化混淆矩阵
class_names = [1,2,3] #图例
dataframe = pd.DataFrame(cnf_matrix, index=class_names, columns=class_names)
# create heatmap 绘制热力图ax = plt.gca() #获取到当前坐标轴信息
ax.xaxis.set_ticks_position('top') #将X坐标轴移到上面
plt.title("Confusion Matrix")
plt.tight_layout() #调整子图参数的sns.heatmap(dataframe, annot=True, cbar=None, cmap="Blues")
plt.ylabel("True Class"),
plt.xlabel("Predicted Class")
#ax.invert_yaxis() #反转y轴
plt.show()
建立混淆矩阵后,可以计算一系列指标来评价模型的拟合优度,最常用的有精确率,召回率,当然含有一些其他的指标,具体可以百度,这里我就用了精确率和召回率。
from sklearn.metrics import classification_report
target_names = ['class 0', 'class 1', 'class 2']
print(classification_report(test_y, y_test_pred,target_names=target_names))
- 列表最左边一列为分类的标签,行依次为精确率,召回率,f1值
- 精确率P是针对预测数据而言的,表示预测的样本中有多少是真正的样本,如第一行第一轮的1,表示模型中分类为1的总数有17个,其中就17个是真实的数据
- 召回率R是针对真实数据(测试数据)而言的,它表示的是测试样本中的有多少被预测正确了,如第一行第二列的1,表示测试样本中1的值有17个,其中模型预测出17个
- F1值是精确度和召回率的调和平均值:2/F1 = 1/P +1/R,精确度和召回率都高时, F1值也会高. F1值在1时达到最佳值(完美的精确度和召回率),最差为0
- suppor 为测试集中各类别的总数
- 微平均值:micro average,所有数据结果的平均值
- 宏平均值:macro average,所有标签结果的平均值
- 加权平均值:weighted average,所有标签结果的加权平均值
3总结
第一次再python写出机器学习的代码,也是第一次写博客,写得有点乱大家请见谅呀,在我分析的过程中测试集的错误率竟然为0,具体什么原因我也不清楚,还需要慢慢学习,欢迎大家指出我的错误。
数据集链接
机器学习knn算法学习笔记使用sklearn库 ,莺尾花实例相关推荐
- 机器学习入门 —— 超级详细的KNN算法学习笔记、KNN算法的三要素、KNN算法的优缺点
文章目录 KNN(K nearest neighbors) K值的选择和影响 k取值偏小 k取值偏大 样本点距离的计算方式 闵可夫斯基距离 曼哈顿距离 欧几里得距离 切比雪夫距离 余弦距离 决策函数的 ...
- 机器学习之KNN算法学习笔记
1. 综述 1.1 Cover和Hart在1968年提出了最初的邻近算法 1.2 分类(classification)算法|回归算法,这里讨论的是分类算法 1.3 输入基于实例的学习(instance ...
- 《机器学习实战》学习笔记(七):利用AdaBoost 元算法提高分类性能
欢迎关注WX公众号:[程序员管小亮] [机器学习]<机器学习实战>读书笔记及代码 总目录 https://blog.csdn.net/TeFuirnever/article/details ...
- 《基于张量网络的机器学习入门》学习笔记8(Shor算法)
<基于张量网络的机器学习入门>学习笔记8 Shor算法 来源 Shor算法的大致流程 因数分解 周期求取与量子傅里叶变换(QFT) Shor算法 来源 1994 1994 1994年,应用 ...
- 『ML』利用K-Means聚类算法对未标注数据分组——《机器学习实战》学习笔记(Ch10)
本节用Python实现K-Means算法,对未标注的数据进行聚类. 在做完聚类后,如何对于聚类结果进行评估?请看 用Python实现聚类效果的评估(轮廓系数.互信息) 导航 K-Means简介 代码实 ...
- 机器学习篇01:在线学习的支持向量机算法学习笔记
在线学习的支持向量机算法学习笔记 oisvm算法实现说明 oisvm算法实现说明 % 本程序是用于实现基于在线学习的调制信号识别的程序 % % % 第一步:调制信号的生成 % 首先是7个信号:2ASK ...
- 《机器学习实战》学习笔记(八):预测数值型数据 - 回归
欢迎关注WX公众号:[程序员管小亮] [机器学习]<机器学习实战>读书笔记及代码 总目录 https://blog.csdn.net/TeFuirnever/article/details ...
- 《机器学习实战》学习笔记(四):基于概率论的分类方法 - 朴素贝叶斯
欢迎关注WX公众号:[程序员管小亮] [机器学习]<机器学习实战>读书笔记及代码 总目录 https://blog.csdn.net/TeFuirnever/article/details ...
- 《机器学习实战》学习笔记(八)
文章目录 第八章 预测数值型数据:回归 引言 线性回归优缺点 回归的一般方法 : 8 . 1 用线性回归找到最佳拟合直线 最佳估计回归系数表示 给出数据的最佳拟合直线 判断拟合曲线的拟合效果 8.2 ...
最新文章
- 如何打印网页版的发票_梦幻西游网页版:陷入瓶颈期,如何快速提升战力?氪金能解决问题...
- WebDAV服务漏洞利用工具DAVTest
- rabbitmq3.5.1 原理和集群安装
- springboot与php通讯,Springboot第二篇:与前端fetch通信(关于传输数据上传文件等前后端的处理)...
- SAS线缆为什么这样多
- spark计算操作整理
- 通过web的方式动态查看tomcat的catalina.out的日志(web.py)
- 新出版书籍《Python预测之美:数据分析与算法实战》,送书活动!参与即可机会,获得一本实体书,中奖后可填写地址寄送。
- linux的vi详细命令
- 哥斯拉Godzilla shell管理工具
- PASCAL VOC数据集分析及下载、解压
- Ubuntu18搭建SVN可视化工具if.svnadmin
- 利用clamav为程序添加查毒功能
- 交互设计和UI设计有区别吗 UI学习路线是什么
- Android自定义View之CircleView
- 分析测试电视遥控总结
- 【新知实验室】TRTC腾讯实时音视频动手实验
- 直接内存 直接内存的释放和回收
- 您可能不知道WooCommerce可以做的10件事
- 从0开始一步一步安装walle