机器学习——K近邻案例——鸢尾花分类

实验  K近邻

1 实验目的

(1)掌握特征缩放的语法。

(2)掌握K近邻模型的语法。

(3)掌握csv文件的读操作。

(4)理解混淆矩阵及准确率、召回率和F1分数的计算。

2 实验内容案例一:鸢尾花分类


1、首先导入必要的库

#数学函数库                                   

import numpy as npimport 

#数据可视化库                                 

import matplotlib.pyplot as plt

#读写数据文件                               

import pandas as pd

2、接着装载数据

url=r"iris.csv"

# 给数据分类加标签名                  

names=['sepal-length','sepal-width','petal-length','petal-width','Class']

#读出csv文件并把数据保存到文件中

dataset=pd.read_csv(url,names=names)

#我们查看一下数据,默认查看前五行      #参数为查看的行数           

dataset.head()

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5ZCb6I6r56yR5ZOm,size_10,color_FFFFFF,t_70,g_se,x_16

 4、把数据集分解成属性(X)和标签(Y),把数据集划分%80成训练集和%20测试集

#把数据集分解成属性(X)和标签(Y)

X=dataset.iloc[:,:-1].values

y=dataset.iloc[:,4].values

#数据集划分%80成训练集和%20测试集

from sklearn.model_selection import train_test_split

X_train,X_test,y_train,y_test=train_test_split(X,y,test_size=0.20)

5、原来的数据的取值范围变化大,我们要对数据进行缩放。

规范化

from sklearn.preprocessing import  StandardScaler

scaler=StandardScaler()

scaler.fit(X_train)

X_train=scaler.transform(X_train)

X_test=scaler.transform(X_test)

6、对模型进行训练

from sklearn.neighbors import KNeighborsClassifier

classifier=KNeighborsClassifier(n_neighbors=5)

classifier.fit(X_train,y_train)

7、在测试集上预测

y_pred=classifier.predict(X_test)

8、对测试集上预测的结果,进行评估,判断模型的优劣性,可以使用混淆矩阵,准确率、召回率和F1评分等指标

from sklearn.metrics import classification_report,confusion_matrix

print(confusion_matrix(y_test,y_pred))

print(classification_report(y_test,y_pred))

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5ZCb6I6r56yR5ZOm,size_19,color_FFFFFF,t_70,g_se,x_16

 输出的混淆矩阵显示,只有一个样本分类错误,

9、选择一个怎样的参数K能够获取较好的分类效果呢,我们可以把K的各种可能取值及其对应的分类误差绘制在一张图上。

这里我们选择K的取值范围[1,40]

error=[]

for i in range(1,40):           

 knn=KNeighborsClassifier(n_neighbors=i)  knn.fit(X_train,y_train)    pred_i=knn.predict(X_test)    error.append(np.mean(pred_i !=y_test))  

10、计算了K=1~40的分类误差率以后,可以绘画出其图像

plt.figure(figsize=(12,6))

plt.plot(range(1,40),error,color='red',linestyle='dashed',marker='o',markerfacecolor='blue',markersize=10)

plt.title('Error Rate K Value')

plt.xlabel('K Value')

plt.ylabel('Mean Error')

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5ZCb6I6r56yR5ZOm,size_20,color_FFFFFF,t_70,g_se,x_16

结论分析:

当K取值在[6,25]的时候,分类器的错误率最低。所以取[6,25]中的任何一个值,作为模型的K参数,都是可以的。

  • 3
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

猿童学

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值