机器学习实战|第一周|第一个机器学习应用:鸢尾花分类

本文介绍了使用Scikit-learn库中的鸢尾花数据集进行机器学习的基础步骤,包括理解特征数据与标签数据、划分训练集和测试集、构建K近邻模型进行预测以及评估模型性能。通过KNeighborsClassifier实现了K近邻算法,并对新数据进行预测,展示了模型的精度。
摘要由CSDN通过智能技术生成

目录

1. 特征数据与标签数据

2. 训练数据与测试数据

3. 构建模型机器学习模型

4. 预测与评估

4.1 预测

4.2 评估 

5. 学习小结


机器学习实战|第一周|第1章:机器学习基础|理论知识:http://t.csdn.cn/CLqdv 

准备:采用Scikit- learn中鸢尾花数据集,完成一个简单的机器学习应用,构建第一个机器学习模型。

已知:这些花已经被植物学专家鉴定为三个类别:setosa、versicolor、virginica

问题:要在多个选项(3个鸢尾花类别)中预测其中一个鸢尾花的品种,这是一个分类问题。可能的输出叫作类别。数据集中每朵鸢尾花都属于三个类别之一,所以这是一个三分类问题。单个数据点(一朵鸢尾花)的预期输出是这朵花的品种。对于一个数据点来说,它的品种叫作标签。

关键函数:load_iris() 载入iris数据集

1. 特征数据与标签数据

调用load_iris()函数,载入iris数据集。

#鸢尾花⚜️分类
from sklearn.datasets import load_iris
iris_dataset = load_iris()
# 返回一个bunch对象,它直接继承自dict类,与字典类似,由键值对组成。
# 同样可以使用bunch.keys(),bunch.values(),bunch.items()等方法
print(iris_dataset.keys())
# out1:dict_keys(['data', 'target', 'frame', 'target_names', 'DESCR', 
# 'feature_names', 'filename', 'data_module'])

#鸢尾花的data属性:iris鸢尾花数据集内包含3类分别为setosa、versicolor、virginica
#共150条记录,每类各50个数据,每条记录都有4项特征:花萼长度、花萼宽度、花瓣长度、花瓣宽度
#可以通过这4个特征预测鸢尾花卉属于哪一品种


print(type(iris_dataset['data']))
# out2:<class 'numpy.ndarray'>
# 输出表示iris数据集的类型为ndarray类型

print(iris_dataset['data'].shape)
# out3:(150, 4)
# 查看了数据集的形状,表示iris数据集有150朵花,每朵花有4列,即4个特征,
# 机器学习的个体叫作样本,其属性叫作特征,data数组的形状是样本数乘以特征数。

print(iris_dataset['target'].shape)
# out4:(150,)
# 数据集'target'表示标签,即鸢尾花的类别,其数值为150,表明有150个标签。

print(iris_dataset['target_names'])
# out5:['setosa' 'versicolor' 'virginica'] 输出鸢尾花标签的名称
# target_names为'setosa' 'versicolor' 'virginica'

print(iris_dataset['target'])
#out6:[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
#0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
#1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 2
#2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
#2 2]
#数字的代表含义由iris['target_names']数组给出:0代表setosa,1代表versicolor,
# 2

print(iris_dataset['data'][:6])

# out6:[5.1 3.5 1.4 0.2]
# [4.9 3.  1.4 0.2]
# [4.7 3.2 1.3 0.2]
# [4.6 3.1 1.5 0.2]
# [5.  3.6 1.4 0.2]
# [5.4 3.9 1.7 0.4]]

#显示前6行的特征数据,每一列为鸢尾花的1个特征数据,4列分别为鸢尾花的花瓣的长度、宽度,花萼的长度、宽度。

显示前6行的特征数据,每一列为鸢尾花的1个特征数据,4列分别为鸢尾花的花瓣的长度、宽度,花萼的长度、宽度。

2. 训练数据与测试数据

将鸢尾花数据集分为两个子集:

训练集:用于训练模型。

测试集:用于测试训练后模型的性能。

训练集数据用于算法的学习,构建模型。

机器学习将训练好的模型应用于新的数据,判断这个训练的模型是否可用,需要有评估模型性能的方法,故将测试集数据用于评估模型的性能。

利用Scikit- learn中的train_test_split函数可以将数据划分为训练集和测试集。

这个函数将75%的数据用作训练集,将25%的数据用作测试集。

# 利用scikit- learn中的train_test_split函数可以将数据划分为训练集和测试集。
from sklearn.model_selection import train_test_split #train_test_split可以返回四个数据集

X_train,X_test,y_train,y_test=train_test_split(iris_dataset['data'],iris_dataset['target'],random_state=0)
# 一般会随机选取一个random_state的值作为参数
print(X_train[:5])

print("X_train:{}".format(X_train[:10]))
print("y_train:{}".format(y_train[:10]))

# X_train:[[5.9 3.  4.2 1.5]
# [5.8 2.6 4.  1.2]
# [6.8 3.  5.5 2.1]
# [4.7 3.2 1.3 0.2]
# [6.9 3.1 5.1 2.3]
# [5.  3.5 1.6 0.6]
# [5.4 3.7 1.5 0.2]
# [5.  2.  3.5 1. ]
# [6.5 3.  5.5 1.8]
# [6.7 3.3 5.7 2.5]]
# y_train:[1 1 2 0 2 0 0 1 2 2]

可以对random_state进行调参,但是调参后在训练集上表现好的模型未必在陌生训练集上表现好,所以一般会随机选取一个random_state的值作为参数。

3. 构建模型机器学习模型

K近邻算法的核心思想是:依据统计学的理论看它所处的位置特征,衡量它周围邻居的数量,而把它归为(或分配)到数量更多的那一类。

在Scikit- learn中,K近邻分类算法是在neighbors模块的KNeighborClassifier类中实现的。需要将这个类实例化为一个对象,才能使用这个模型。注意使用时需要设置模型的参数。

from sklearn.neighbors import KNeighborsClassifier
# 实例化对象,“n_neighbors=1”表示选取一个邻居,knn.fit()表示训练模型
knn=KNeighborsClassifier(n_neighbors=1)
knn.fit(X_train,y_train)

4. 预测与评估

4.1 预测

问题:发现一朵鸢尾花,花萼长5cm、宽2.9cm,花瓣长1cm、宽0.2cm,这朵花属于哪个品种?

# 将输入数据放在一个numpy数组中,使用predict方法进行预测

import numpy as np
Xnew = np.array([[5, 2.9, 1, 0.2]])
prediction = knn.predict(Xnew)
print("Prediction:{}".format(prediction))
print("Predictiontargetname:{}".format(iris_dataset['target_names'][prediction]))

# out8:
# Prediction:[0]
# Predictiontargetname:['setosa']

ValueError: Expected 2D array, got 1D array instead: array=[5. 2.9 1. 0.2]. Reshape your data either using array.reshape(-1, 1) if your data has a single feature or array.reshape(1, -1) if it contains a single sample.

报错原因:Xnew = np.array([5, 2.9, 1, 0.2])

订正:Xnew = np.array([[5, 2.9, 1, 0.2]])

注意:

在建立一个数组的时候要将其转换为二维数组的一行,因为该函数的输入数据必须满足之前提到的约定:二维数组。

4.2 评估 

用到之前创建的测试集。

通过计算精度(Accuracy)来衡量模型的性能,精度就是品种预测正确的花所占的比例。

print("Test set score:{}".format(knn.score(X_test,y_test)))

# out9: Test set score:0.9736842105263158

5. 学习小结

习题见博客:http://t.csdn.cn/8ZLkK !

 


(2023年4月19日 23:40首次发布) 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值