python实现训练模型之后的模型评价(以鸢尾花数据集为例+KNN训练预测)

第一部分:导包

#第一步:导包
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 分数进行加权平均。因此,加权平均更能反映类别不平衡的情况。如果某个类别的样本数量很多,它对加权平均的影响就更大。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

还不秃顶的计科生

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

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

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

打赏作者

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

抵扣说明:

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

余额充值