一.鸢尾花
鸢尾属(拉丁学名:Iris L.),鸢尾科多年生草本植物,有块茎或匍匐状根茎;叶剑形,嵌叠状;花美丽,状花序或圆锥花序;花被花瓣状,有一长或短的管,外弯,花柱分枝扩大,花瓣状而有颜色,外展而覆盖着雄蕊;子房下位,胚珠多数,果为蒴果。
![f3f5a6d9d71a9bfc140afb41ef0432e8.png](https://i-blog.csdnimg.cn/blog_migrate/eb2c932a85a11a16c1030278314cb558.jpeg)
![b5200a09998e7b83cd723c328bc53f82.png](https://i-blog.csdnimg.cn/blog_migrate/f3be6e5ad71eded940c6d73d2d05cd9c.jpeg)
知道了鸢尾花的大致外形后,进行分类就有一个比较清楚的定位了。主要以花瓣的长度和宽度以及花萼的长度和宽度作为分类标准。对不同的采集数据进行打点,使用KNN也就是聚类的方式进行类别区分。
二.代码实现
#coding:utf-8from sklearn.datasets import load_irisfrom sklearn.model_selection import train_test_splitfrom sklearn.neighbors import KNeighborsClassifierimport numpy as npimport matplotlib.pyplot as pltiris_dataset = load_iris() # 获取数据# 对数据进行拆分,分为训练数据和测试数据x_train, x_test, y_train, y_test = train_test_split(iris_dataset["data"], iris_dataset["target"], random_state=0)knn = KNeighborsClassifier(n_neighbors=1) # 获取KNN对象knn.fit(x_train, y_train) # 训练模型# 评估模型y_pre = knn.predict(x_test)score = knn.score(x_test, y_test) # 调用打分函数print("test set predictions:{}".format(y_test))print("test set score:{:.2f}".format(score))if score > 0.9: x_new = np.array([[5, 2.9, 1, 0.3]]) # 用于预测的原始数据 print("x_new.shape:{}".format(x_new.shape)) prediction = knn.predict(x_new) # 预测 print("prediction:{}".format(prediction)) print("predicted target name:{}".format(iris_dataset["target_names"][prediction])) # 可视化展示 plt.title("KNN Classification") plt.plot(x_train, y_train, "b.") # 训练数据打点 plt.plot(x_test, y_test, "y.") # 测试数据打点 plt.plot(x_new, prediction, "ro") # 预测数据打点 plt.show()else: print("used train or test data is not available !")
三.执行结果
![e81649618dec0e77cf11d9c8e17e2a3c.png](https://i-blog.csdnimg.cn/blog_migrate/415466eabf23986100cf316b98d90a6e.jpeg)
![1ba38ec3d98f236219ecd0f4e2ed2353.png](https://i-blog.csdnimg.cn/blog_migrate/453d5e5b5fd455474172b01095b86c12.jpeg)
根据打点的情况看,预测数据和测试及训练数据相吻合,模型预测较为准确!