第一部分:导包
#第一步:导包
import numpy as np
from sklearn import datasets
第二部分:获取鸢尾花数据集
#第二步:获取数据集
iris=datasets.load_iris()
#iris可以详细查看这个数据集里面的具体内容
#2.1获取特征数据X
X=iris.data
#iris.feature_names获取特征的名字
'''
结果为:
['sepal length (cm)',
'sepal width (cm)',
'petal length (cm)',
'petal width (cm)']
'''
#2.2获取标签值
Y=iris.target
#iris.target_names#获取特征的名字
'''
结果为:
array(['setosa', 'versicolor', 'virginica'], dtype='<U10')
'''
第三部分:划分数据集
#第三步:划分数据集(训练集+测试集)
from sklearn.model_selection import train_test_split#这个是新增的
X_train,X_test,Y_train,Y_test=train_test_split(X,Y,train_size=0.8,random_state=233,stratify=Y)#train_size=0.7是测试集比例,233是随机数种子
#stratify=y作用是让这划分之后的训练集和测试集中三个样本的数量能够平均,不会出现某种类别多,某种类别少的情况
第四部分:使用KNN训练模型
#第四步:使用KNN进行训练模型
from sklearn.neighbors import KNeighborsClassifier
#创建knn对象并设置k值
knn_classifer=KNeighborsClassifier(n_neighbors=5)
#调用fit进行训练
knn_classifer.fit(X_train,Y_train)
第五部分:使用测试集开始预测
#第五步:使用训练集开始进行预测
Y_predict=knn_classifer.predict(X_test)
第六部分:评价预测的结果(四个指标)
#第六步:评价预测的结果
#将Y_predict和Y_test进行比较
accuracy_num=np.sum(Y_predict==Y_test)
#计算准确率也有两种方法
#方法1:手算
accuracy_rate=accuracy_num/len(Y_test)
#方法2:使用内置函数计算准确度
from sklearn.metrics import accuracy_score
accuracy_score(Y_test,Y_predict)
#拓展:计算精确率,召回率,f1分数
from sklearn.metrics import classification_report
print(classification_report(Y_test, Y_predict))
#0这一行support=10,表示类别 0 在测试集中有 10 个真实样本
#accuracy是模型的总体准确率,表示模型正确分类的样本占所有样本的比例。这里显示的 1.0 意味着模型在 30 个样本中有 100% 被正确分类。
#macro avg(宏平均) 是对每个类别的精确率、召回率和 F1 分数分别计算平均值,而不考虑每个类别的样本数量。简单来说,它对所有类别一视同仁地平均,不管类别的样本量多还是少。
#weighted avg (加权平均) 根据每个类别的 support(即每个类别的样本数量)对精确率、召回率和 F1 分数进行加权平均。因此,加权平均更能反映类别不平衡的情况。如果某个类别的样本数量很多,它对加权平均的影响就更大。
第七部分:pycharm版本所有代码汇总
#第一步:导包
import numpy as np
from sklearn import datasets
#第二步:获取数据集
iris=datasets.load_iris()
#iris可以详细查看这个数据集里面的具体内容
#2.1获取特征数据X
X=iris.data
#iris.feature_names获取特征的名字
'''
结果为:
['sepal length (cm)',
'sepal width (cm)',
'petal length (cm)',
'petal width (cm)']
'''
#2.2获取标签值
Y=iris.target
#iris.target_names#获取特征的名字
'''
结果为:
array(['setosa', 'versicolor', 'virginica'], dtype='<U10')
'''
#第三步:划分数据集(训练集+测试集)
from sklearn.model_selection import train_test_split#这个是新增的
X_train,X_test,Y_train,Y_test=train_test_split(X,Y,train_size=0.8,random_state=233,stratify=Y)#train_size=0.7是测试集比例,233是随机数种子
#stratify=y作用是让这划分之后的训练集和测试集中三个样本的数量能够平均,不会出现某种类别多,某种类别少的情况
#第四步:使用KNN进行训练模型
from sklearn.neighbors import KNeighborsClassifier
#创建knn对象并设置k值
knn_classifer=KNeighborsClassifier(n_neighbors=5)
#调用fit进行训练
knn_classifer.fit(X_train,Y_train)
#第五步:使用训练集开始进行预测
Y_predict=knn_classifer.predict(X_test)
#第六步:评价预测的结果
#将Y_predict和Y_test进行比较
accuracy_num=np.sum(Y_predict==Y_test)
#计算准确率也有两种方法
#方法1:手算
accuracy_rate=accuracy_num/len(Y_test)
#方法2:使用内置函数计算准确度
from sklearn.metrics import accuracy_score
accuracy_score(Y_test,Y_predict)
#拓展:计算精确率,召回率,f1分数
from sklearn.metrics import classification_report
print(classification_report(Y_test, Y_predict))
#0这一行support=10,表示类别 0 在测试集中有 10 个真实样本
#accuracy是模型的总体准确率,表示模型正确分类的样本占所有样本的比例。这里显示的 1.0 意味着模型在 30 个样本中有 100% 被正确分类。
#macro avg(宏平均) 是对每个类别的精确率、召回率和 F1 分数分别计算平均值,而不考虑每个类别的样本数量。简单来说,它对所有类别一视同仁地平均,不管类别的样本量多还是少。
#weighted avg (加权平均) 根据每个类别的 support(即每个类别的样本数量)对精确率、召回率和 F1 分数进行加权平均。因此,加权平均更能反映类别不平衡的情况。如果某个类别的样本数量很多,它对加权平均的影响就更大。