SKlearn实现鸢尾花分类

一,sklearn
sklearn是基于Numpy和Scipy的机器学习库,在利用sklearn进行实际应用时常会和以下的几个库联合使用
Numpy:是Python中用于科学计算的基础包之一。在sklearn中,numpy数组是基本的数据结构(类似的有DataFrame),numpy的核心功能是ndarray类,即多维数组/张量,注意:scikit-learn的输入数据必须为numpy数组/二维数组
Scipy:是Python中用于科学计算的函数集合。在实际编写代码时,常用scipy中的sparse模块,该模块可以给出稀疏矩阵(eg:可用于保存一个大部分元素为0的二维数组)
matplotlib/pandas:关于pandas的使用可参考学习Datawhale的pandas教程joyful-pandas

二,鸢尾花数据集介绍:

Iris数据集是常用的分类实验数据集,由Fisher在1936收集整理。Iris也称鸢尾花卉数据集,是一类多重变量分析的数据集。
数据集包含150个数据集,分为3类,每类50个数据,每个数据包含4个属性。
可通过花萼长度,花萼宽度,花瓣长度,花瓣宽度4个属性预测鸢尾花卉属于(Setosa,Versicolour,Virginica)三个种类中的哪一类。
基于Fisher的线性判别模型,该数据集成为了机器学习中各种分类技术的典型实验案例。
数据集如何获取:在sklearn库中已经包含了一些经典的示例数据集,通过datasets载入。

三,代码

# 利用scikit-learn开始鸢尾花分类项目

# 第一步:导入鸢尾花数据
# 鸢尾花数据集作为一个经典的数据集被内嵌在scikit-learn库中的datasets模块中,可以使用load_iris函数来加载该数据集
# load_iris返回的是一个Bunch对象,类似于字典,里面包含键和值
from sklearn.datasets import load_iris

iris_dataset = load_iris()

print("Key of iris_dataset:\n{}".format(iris_dataset.keys()))   #这里的键也可理解成datafrmae结构中的列名
# DESCR(descr)键对应的值是数据集的简要说明
# print(iris_dataset['DESCR'])
# target_names键对应的值是一个字符串数组,里面包含我们要预测的花的品种
print("Target names:{}".format(iris_dataset['target_names']))  # ['setosa' 'versicolor' 'virginica']
# feature_names 键对应的值是一个字符串列表,对每个特征进行说明
print("Feature_names:\n{}".format(iris_dataset['feature_names']))  # ['sepal length (cm)', 'sepal width (cm)', 'petal length (cm)', 'petal width (cm)']
# 查看数据类型
print("Type of data:\n{}".format(type(iris_dataset['data'])))  # data数组的每一行对应一朵花,列代表每朵花的四个测量数据
print("data:\n{}".format(iris_dataset['data']))  # 数据详情
# 查看数据形状
print("Shape of data:\n{}".format(iris_dataset['data'].shape))  #属性shape,函数type

# 第二步:数据划分
# 划分训练集与测试集
# 常使用sklearn库下的model_selection模块的trian_test_split函数,使用该函数可以打乱数据集并进行拆分,由经验,常使用25%的数据作为测试集
# 在sklearn中常使用X表示数据(数据通常是二维矩阵),y表示标签(目标常是一个一维向量)
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(iris_dataset['data'], iris_dataset['target'], random_state=0)

# 第三步:训练
# 构建模型(k近邻算法)
# sklearn中所有的机器学习模型都在各自的类中实现,这些类被称为estimator类,k近邻算法是在neighbors模块下的KNeighborsClassifier类中实现的
# 使用sklearn库中的模型首先需要将类实例化为一个对象(面向对象编程),设置函数参数,其中k近邻算法的estimator类最重要的参数为邻居的数目
from sklearn.neighbors import KNeighborsClassifier
knn = KNeighborsClassifier(n_neighbors=1)
# sklearn中的大多数模型都有很多的参数,但是多用于速度优化或者非常特殊的用途。事实上,很多参数我们不必关注,而对于n_neighbors参数这类重要参数(knn模型的重要参数)需要引起注意

# 面向对象编程,想要基于训练集来构建模型,需要调用knn对象的fit方法,输入参数为X_train和y_train,二者均为numpy数组
knn.fit(X_train, y_train)

# 第四步:预测
# 调用knn对象的predict方法来进行预测
import numpy as np

X_new = np.array([[5, 2.9, 1, 0.2]])
prediction = knn.predict(X_new)
print("Prediction :{}".format(prediction))
print("Predicted target name:{}".format(iris_dataset['target_names'][prediction]))

# 第五步:评估模型
y_pred = knn.predict(X_test)
print("Test set predictions:\n{}".format(y_pred))
print("Test set score:{:.2f}".format(knn.score(X_test, y_test)))

posted @ 2022-02-22 22:24  技术改变命运Andy  阅读(686)  评论(0编辑  收藏  举报