机器学习-第一章

1.5 第一个机器学习应用:鸢(yuan)尾花分类

代码1.1

python 复制代码
# ----------------------------数据加载与探索----------------------------
# 从sklearn的数据集模块导入加载鸢尾花数据集的函数
from sklearn.datasets import load_iris
# 加载鸢尾花数据集,返回一个Bunch对象(类似字典的结构)
iris_dataset = load_iris()

# 打印数据集包含的键,了解数据集的组成部分
print('iris_dataset.keys() = ',iris_dataset.keys())
# 查看特征数据的数据类型(通常是numpy数组)
print(type(iris_dataset['data']))
# 查看特征数据的形状 (样本数, 特征数),鸢尾花数据集包含150个样本,每个样本有4个特征
print(iris_dataset['data'].shape)
# 查看标签数据的形状 (样本数,),每个样本对应一个标签
print(iris_dataset['target'].shape)
# 查看标签对应的鸢尾花品种名称(3个类别)
print(iris_dataset['target_names'])
# 查看标签值(0, 1, 2分别代表三种不同的鸢尾花)
print(iris_dataset['target'])
# 查看前6个样本的特征数据(4个特征分别是:花萼长度、花萼宽度、花瓣长度、花瓣宽度)
print(iris_dataset['data'][:6])

# ----------------------------数据划分----------------------------
# 从模型选择模块导入训练集和测试集分割函数
from sklearn.model_selection import train_test_split
# 将数据集划分为训练集(用于训练模型)和测试集(用于评估模型)
# X_train: 训练集特征, X_test: 测试集特征, y_train: 训练集标签, y_test: 测试集标签
# random_state=0 用于固定随机种子,确保每次运行划分结果一致
X_train, X_test, y_train, y_test = train_test_split(
    iris_dataset['data'], iris_dataset['target'], random_state=0)

# 打印训练集的前10个特征数据,查看划分结果
print("X_train:{}".format(X_train[:10]))
# 打印训练集的前10个标签数据,查看特征与标签的对应关系
print("y_train:{}".format(y_train[:10]))

# ----------------------------模型构建与训练----------------------------
# 从近邻算法模块导入K近邻分类器
from sklearn.neighbors import KNeighborsClassifier
# 创建KNN分类器对象,设置参数n_neighbors=1表示使用最近的1个邻居进行预测
knn = KNeighborsClassifier(n_neighbors=1)
# 使用训练集数据训练模型,拟合特征与标签之间的关系
knn.fit(X_train, y_train)

# 打印KNN分类器的详细参数(默认参数)
KNeighborsClassifier(algorithm='auto', leaf_size=30, metric='minkowski',
                     metric_params=None, n_jobs=1, n_neighbors=1, p=2,
                     weights='uniform')

# ----------------------------模型预测----------------------------
# 导入numpy库,用于处理数组数据
import numpy as np
# 创建一个新的样本数据(花萼长5,花萼宽2.9,花瓣长1,花瓣宽0.2)
Xnew = np.array([[5, 2.9, 1, 0.2]])
# 使用训练好的模型对新样本进行预测,得到预测的标签
prediction = knn.predict(Xnew)
# 打印预测的标签值
print("Prediction: {}".format(prediction))
# 根据标签值获取对应的鸢尾花品种名称并打印
print("Predicted target name:{}".format(iris_dataset['target_names'][prediction]))

# ----------------------------模型评估----------------------------
# 使用测试集评估模型性能,score方法返回模型在测试集上的准确率
# 准确率 = 预测正确的样本数 / 测试集总样本数
print("Test set score:{}".format(knn.score(X_test, y_test)))

运行结果

C:\Users\71042\.conda\envs\tf_gpu_new\python.exe E:\教学\2025教学\机器学习\机器学习数据代码\1-2章数据代码\ch1.1_iris_classification.py

iris_dataset.keys() = dict_keys('data', 'target', 'frame', 'target_names', 'DESCR', 'feature_names', 'filename', 'data_module')

<class 'numpy.ndarray'>

(150, 4)

(150,)

'setosa' 'versicolor' 'virginica'

[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]

\[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\]

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

Prediction: 0

Predicted target name:'setosa'

Test set score:0.9736842105263158

Process finished with exit code 0

相关推荐
向上的车轮1 小时前
AI音乐创作实战:用Workbuddy定制专属BGM并仿写《Star Sky》
人工智能·ai音乐·workbuddy
宸津-代码粉碎机6 小时前
OpenAI 连夜迎战 Grok Bot 和 Muse:AI 智能体从 “会聊天” 到 “能办事”,现在入场还来得及吗
java·大数据·人工智能·分布式·python
做萤石二次开发的哈哈7 小时前
视频解码器怎么对接?解码上墙、电视墙开窗与场景切换的ISAPI接入实战
人工智能·物联网·监控·视频编解码·大屏端·萤石开放平台·蓝海aiot一站式工作台
Leo.yuan7 小时前
2026年本地化Data Agent优质厂商盘点:哪些产品更适合企业生产环境
大数据·数据库·人工智能
长谷深风1118 小时前
Tool与Skill:AI能力设计的分水岭
java·人工智能·ai·大模型·aiagent
科技观察哨8 小时前
六足平台选型与纳米定位系统集成:HEB-640六自由度位移台在半导体光刻对准中的参数边界与国产替代评估
前端·人工智能
云上先途8 小时前
任务智能体可以自动完成哪些类型工作,是不是只能做简单重复操作?
大数据·人工智能
明志数科8 小时前
具身智能数据供给的分层:分布式采集与入厂采集的工程边界分析
人工智能·机器学习·机器人
像风一样自由20208 小时前
41.用FastAPI搭建一个RAG后端需要哪些接口
人工智能·大模型·fastapi·rag·智能体
小蒋观天下8 小时前
两轮车检测AI摄像头——2026行业竞争格局、商业模式与核心痛点
大数据·人工智能·安全·计算机视觉·ai大模型