Python机器学习实验二:2.编写代码,实现对iris数据集的KNN算法分类及预测并改进

该实验使用Python实现鸢尾花数据集的KNN算法,通过10折交叉验证选取最优的n_neighbors参数(5-10之间),最终找到最佳模型并预测未知鸢尾花种类。实验结果显示,最佳n_neighbors值为9,改进后的模型预测准确率为XX%。
摘要由CSDN通过智能技术生成

Python机器学习实验二:2.编写代码,实现对iris数据集的KNN算法分类及预测并改进

2、改进模型,要求:
(1)数据集划分采用10折交叉验证;
(2)寻找最优的n_neighbors值(在5-10之间);
(3)使用新的模型预测未知种类的鸢尾花。

待预测未知数据:
X1=[[1.5 , 3 , 5.8 , 2.2], [6.2 , 2.9 , 4.3 , 1.3]]
点个👍吧

#引入十折交叉验证算法
import numpy as np
from sklearn.model_selection import train_test_split
from sklearn.datasets import load_iris
from sklearn.neighbors import KNeighborsClassifier
from sklearn.metrics import precision_score
from sklearn.model_selection import cross_val_score

iris = load_iris()
x = iris.data
y = iris.target

#找出最有n_neighbors,暴力遍历每一种可能的n_neighbors
#划分数据集
x_train,x_test,y_train,y_test = train_test_split(x,y,test_size=0.2)
# print(x_train)
# print('----------------------')
# print(x_test)
# print('----------------------')
# print(y_train)
# print('----------------------')
# print(y_test)
# print('----------------------')
knn_scores_res = []
#找出最有n_neighbors,暴力遍历每一种可能的n_neighbors
for i in range(5,11):
    knn = KNeighborsClassifier(n_neighbors = i)
    knn = knn.fit(x_train,y_train)
    # y_pre = knn.predict()
    #十折交叉验证算法
    knn_scores = []
    for j in range(10):
        knn_score = cross_val_score(knn,x_train,y_train,cv=10).mean()
        knn_scores.append(knn_score)
        pass
    print(knn_scores)
    knn_scores_res.append(sum(knn_scores)/len(knn_scores))
print(knn_scores_res)
print("最大的准确率为:",max(knn_scores_res))
for i in range(len(knn_scores_res)):
    if knn_scores_res[i] == max(knn_scores_res):
        print("达到最好训练模型的n_neighbors为:%d"%(i + 5))
        k = i + 5
#当n_neighbors=9时对鸢尾花进行预测,第一次算的n_neighbors = 9,准确率比不改进还低
knn = KNeighborsClassifier(n_neighbors= k)
knn = knn.fit(x_train,y_train)
y_pre = knn.predict(x_test)
s = precision_score(y_test,y_pre,average=None)
print("改进后的模型的准确率为:",s)
outputLabel = knn.predict([[1.5, 3, 5.8, 2.2],[6.2, 2.9, 4.3, 1.3]])
print("改进后的算法的预测结果为:",outputLabel)

点个👍吧
在这里插入图片描述
点个👍吧
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

henu-于笨笨

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

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

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

打赏作者

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

抵扣说明:

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

余额充值