机器学习:鸢尾花(Iris)分类

机器学习:鸢尾花(Iris)分类

背景

她还有一些鸢尾花的测量数据,这些花之前已经被植物学专家鉴定为属于 setosa、versicolor 或virginica 三个品种之一。对于这些测量数据,她可以确定每朵鸢尾花所属的品种。我们假设这位植物学爱好者在野外只会遇到这三种鸢尾花。我们的目标是构建一个机器学习模型,可以从这些已知品种的鸢尾花测量数据中进行学习,从而能够预测新鸢尾花的品种。因为我们有已知品种的鸢尾花的测量数据,所以这是一个监督学习问题。在这个问题中,我们要在多个选项中预测其中一个(鸢尾花的品种)。这是一个分类(classification)问题的示例。可能的输出(鸢尾花的不同品种)叫作类别(class)。数据集中的每朵鸢尾花都属于三个类别之一,所以这是一个三分类问题。

了解Iris数据集

准备工作

import sklearn
import numpy as np
import pandas as pd
from sklearn.datasets import load_iris

iris_dataset = load_iris()
#调用 load_iris 函数来加载数据
#load_iris 返回的 iris 对象是一个 Bunch 对象,与字典非常相似,里面包含键和值

#了解数据
print("keys of iris_dataset: \n{}".format(iris_dataset.keys()))
print(iris_dataset)
print(iris_dataset['DESCR']+"\n..")

print("target names: \n{}".format(iris_dataset['data']))

print("target names: \n{}".format(iris_dataset['target_names']))

print("Feature names: \n{}".format(iris_dataset['feature_names']))
#'sepal length':花萼长度 'sepal width':花萼宽度 'petal length':花瓣长度 'petal width':花瓣宽度

衡量模型是否成功:训练数据与测试数据

我们想要利用这些数据构建一个机器学习模型,用于预测新测量的鸢尾花的品种。但在将模型应用于新的测量数据之前,我们需要知道模型是否有效,也就是说,我们是否应该相信它的预测结果。

但是,我们不能将用于构建模型的数据用于评估模型。因为这样的话模型会一直记住整个训练集,所以对于训练集中的任何数据点总会预测正确的标签。这种“记忆”无法告诉我们模型的泛化(generalize)能力如何(换句话说,在新数据上能否正确预测)。

我们要用新数据来评估模型的性能。新数据是指模型之前没有见过的数据,而我们有这些新数据的标签。通常的做法是将收集好的带标签数据(此例中是 150 朵花的测量数据)分成两部分。一部分数据用于构建机器学习模型,叫作训练数据(training data)或训练集(raining set)。其余的数据用来评估模型性能,叫作测试数据(test data)、测试集(test set)或留出集(hold-out set)。

观察数据

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)
iris_dataframe = pd.DataFrame(X_train, columns=iris_dataset.feature_names)
'''scikit-learn 中的 train_test_split 函数可以打乱数据集并进行拆分。这个函数将 75% 的
行数据及对应标签作为训练集,剩下 25% 的数据及其标签作为测试集。训练集与测试集的分配比例
可以是随意的,但使用 25% 的数据作为测试集是很好的经验法则。利用 random_state 参数指定了
随机数生成器的种子。这样函数输出就是固定不变的,所以这行代码的输出始终相同'''

grr = pd.plotting.scatter_matrix(iris_dataframe, c=y_train, figsize=(15, 15), marker='o',
  hist_kwds={'bins': 20}, s=60, alpha=.8)  #画出散点图

在这里插入图片描述

构建模型

k近邻算法

from sklearn.neighbors import KNeighborsClassifier
knn = KNeighborsClassifier(n_neighbors=1) #k近邻分类器
knn.fit(X_train, y_train) 
'''想要基于训练集来构建模型,需要调用 knn 对象的 fit 方法,输入参数为 X_train 和 y_
train,二者都是 NumPy 数组,前者包含训练数据,后者包含相应的训练标签'''

'''
#prediction 测试1
X_new = np.array([[5, 2.9, 1, 0.2]])
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]))
'''

y_pred = knn.predict(X_test)
print("Test set predictions:\n {}".format(y_pred))

print("Test set score: {:.2f}".format(np.mean(y_pred == y_test)))

通过调整参数的值将获得不同的测试集精度
test1

knn = KNeighborsClassifier(n_neighbors=25)

在这里插入图片描述

knn = KNeighborsClassifier(n_neighbors=50)

在这里插入图片描述

  • 5
    点赞
  • 65
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
鸢尾花分类是一个经典的机器学习案例,可以使用机器学习模型对鸢尾花的品种进行分类。在这个问题中,我们使用了鸢尾花数据集,该数据集包含了鸢尾花的花瓣和花萼的长度与宽度等测量数据。根据这些已知品种的鸢尾花数据,我们可以构建一个机器学习模型,通过学习这些数据来预测新鸢尾花的品种。\[1\] 在这个问题中,我们使用了k近邻分类器作为分类算法。k近邻分类器是一种简单易懂的算法,它通过在训练集中寻找与新数据点最近的邻居来进行预测。k的值表示我们考虑训练集中最近的k个邻居,然后根据这些邻居中数量最多的类别来做出预测。在这个案例中,我们将k设为1,即只考虑最近的邻居。\[3\] 在实现这个项目时,我们首先需要导入数据,并对数据进行概述和可视化。然后,我们使用k近邻分类器对数据进行训练,并进行预测。最后,我们评估算法的性能。\[2\] 总结来说,通过使用机器学习模型和k近邻分类器算法,我们可以对鸢尾花的品种进行分类,并根据花瓣和花萼的测量数据来进行预测。 #### 引用[.reference_title] - *1* *3* [【机器学习鸢尾花分类](https://blog.csdn.net/weixin_43651049/article/details/122639847)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [机器学习-鸢尾花(Iris Flower)分类](https://blog.csdn.net/weixin_42611925/article/details/122902579)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值