实验一:鸢尾花数据集分类

实验⼀:鸢尾花数据集分类
实验⼀:鸢尾花数据集分类
⼀、问题描述
利⽤机器学习算法构建模型,根据鸢尾花的花萼和花瓣⼤⼩,区分鸢尾花的品种。实现⼀个基础的三分类问题。
⼆、数据集分析
Iris 鸢尾花数据集内包含 3 种类别,分别为⼭鸢尾(Iris-setosa)、变⾊鸢尾(Iris-versicolor)和维吉
尼亚鸢尾(Iris-virginica)。
数据集共 150 条记录,每类各 50 个数据,每条记录有花萼长度、花萼宽度、花瓣长度、花瓣宽度4项特征,通过这4个特征预测鸢尾花卉属于哪⼀品种。
iris数据集包含在sklearn库当中,具体在sklearn\datasets\data⽂件夹下,⽂件名为iris.csv。
通常数据⽂件存储在\Python36\Lib\site-packages\sklearn\datasets\data\iris.csv。
打开iris.csv,数据格式如下:
第⼀⾏数据意义为:
盈余公积
150:数据集中数据的总条数
4:特征值的类别数,即花萼长度、花萼宽度、花瓣长度、花瓣宽度。
setosa、versicolor、virginica:三种鸢尾花名
从第⼆⾏及以下数据的意义为:
第⼀列为花萼长度值
第⼆列为花萼宽度值
第三列为花瓣长度值
雷锋有老婆吗
第四列为花瓣宽度值
第五列对应是种类(三类鸢尾花分别⽤0,1,2表⽰)
三、代码实现
异体蛋白
import numpy as np
from sklearn.datasets import load_iris
del_selection import train_test_split
骄杨ighbors import KNeighborsClassifier
iris_data = load_iris()
# 该函数返回⼀个Bunch对象,它直接继承⾃Dict类,与字典类似,由键值对组成。
# 可以使⽤bunch.keys(),bunch.values(),bunch.items()等⽅法。
print(type(iris_data))
# data⾥⾯是花萼长度、花萼宽度、花瓣长度、花瓣宽度的测量数据,格式为 NumPy数组
print(iris_data['data'])    # 花的样本数据
print("花的样本数量:{}".format(iris_data['data'].shape))
print("花的前5个样本数据:{}".format(iris_data['data'][:5]))
# 0 代表 setosa, 1 代表 versicolor,2 代表 virginica
print(iris_data['target'])  # 类别
print(iris_data['target_names'])  # 花的品种
# 构造训练数据和测试数据2017年国家科学技术奖励大会
X_train,X_test,y_train,y_test = train_test_split(\
iris_data['data'],iris_data['target'],random_state=0)
print("训练样本数据的⼤⼩:{}".format(X_train.shape))
print("训练样本标签的⼤⼩:{}".format(y_train.shape))
print("测试样本数据的⼤⼩:{}".format(X_test.shape))
print("测试样本标签的⼤⼩:{}".format(y_test.shape))
# 构造KNN模型
knn = KNeighborsClassifier(n_neighbors=1)
# knn = KNeighborsClassifier(n_neighbors=3)
# 训练模型
knn.fit(X_train,y_train)
y_pred = knn.predict(X_test)
# 评估模型
print("模型精度:{:.2f}".an(y_pred==y_test)))
print("模型精度:{:.2f}".format(knn.score(X_test,y_test)))
# 做出预测
X_new = np.array([[1.1,5.9,1.4,2.2]])
prediction = knn.predict(X_new)
print("预测的⽬标类别是:{}".format(prediction))
print("预测的⽬标类别花名是:{}".format(iris_data['target_names'][prediction]))
补充说明:
样本和特征:机器学习中每个个体叫做样本,其属性叫做特征。在本例中,每朵鸢尾花就是⼀个样本,每朵鸢尾花的花萼长度、宽度、花瓣长度、宽带就是特征。
训练数据和测试数据
训练数据:⽤于构建模型。
测试数据:⽤于评估模型性能。
利⽤scikit-learn中的train_test_split函数将原始数据集分为训练数据和测试数据,75%的数据⽤作训练集,25%⽤作测试集。
scikit-learn中的数据通常⽤⼤写的X表⽰,标签⽤⼩写的y表⽰,f(X)= y, X是函数的输⼊,是⼀个⼆
维矩阵,⼩写的y是输出的⼀维数组。
该函数需要设置random_state,给其赋⼀个值,当多次运⾏此段代码能够得到完全⼀样的结果。若不设置此参数则会随机选择⼀个种⼦,执⾏结果也会因此⽽不同了。虽然可以对random_state进⾏调参,但是调参后在训练集上表现好的模型未必在陌⽣训练集上表现好,所以⼀般会随便选取⼀个random_state的值作为参数。
predict⽅法进⾏预测的时候,该函数的输⼊数据必须是⼆维数组,因此⾸先将建⽴的⼀维数组转换为⼆维数组的⼀⾏。
KNN对象的score⽅法⽤于计算测试集的精度。
四、KNN算法
KNN,全称为K Nearest Neighbors,⼜叫K最近邻算法,是机器学习算法中最简单的分类算法之⼀。其核⼼思想是,如果⼀个样本在特征空间中的K个最相邻的样本中的⼤多数属于某⼀类别,则该样本也属于这个类别,并具有这个类别上样本的特性。K就是最近的样本的个数,其取值⾄关重要,关系最终的分类结果。
如上图所⽰,绿⾊的点为要进⾏分类的点。如果K=3,与之最近的三个点中,蓝⾊三⾓形多,那么绿⾊的点被归为蓝⾊三⾓形⼀类;如果
K=5,与之最近的五个点中,红⾊圆形多,那么绿⾊的点被归为红⾊圆形⼀类。从此可以得出,K值的选取将影响分类结果。
另外⼀个重要的因素是点距离的计算。常见的距离度量⽅式有曼哈顿距离、欧式距离等等。通常KNN采⽤欧式距离。以⼆维平⾯为例,⼆维空间中两个点的欧式距离计算公⽰如下:
br710将其拓展到多维空间,公⽰则变为如下:
KNN简单的将预测点与所有点距离进⾏计算后排序,选出前⾯K个值查看类别,类别多的⾃然归类。

本文发布于:2024-09-22 04:37:29,感谢您对本站的认可!

本文链接:https://www.17tex.com/xueshu/326248.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:数据   样本   类别   鸢尾花   花瓣   长度   花萼   分类
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议