第1章 引言

本文介绍了使用鸢尾花数据集进行分类问题的实践,包括数据加载、数据划分、k近邻算法(KNeighborsClassifier)应用、预测以及模型评估。重点讲解了训练数据与测试数据的重要性,以及如何通过可视化观察数据特征的关系。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. 鸢尾花分类

  • 在多个选项中预测其中一个(鸢尾花的品种):分类问题
  • 可能的输出(鸢尾花的不同品种):类别
  • 单个数据点(一朵鸢尾花)的预期输出:这朵花的品种
  • 对于一个数据点来说,它的品种:标签

1.1 初识数据

  • 使用鸢尾花(Iris)数据集
from sklearn.datasets import load_iris

dataset = load_iris()

print(dataset.keys())
# dict_keys(['data', 'target', 'frame', 'target_names', 'DESCR', 'feature_names', 'filename', 'data_module'])
# data: 测量数据(150*4)
# target: 每朵花的品种(150)
# target_names: 花的品种(3)
# feature_names: 对特征进行说明(4)

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

  • 不能将用于构建模型的数据用于评估模型

    • 无法告诉我们模型的泛化能力如何(在新数据上能否正确预测)
  • 将收集好的数据分成两个部分

    • 一部分用于构建机器学习模型:训练数据训练集
    • 另一部分用于评估模型性能:测试数据测试集留出集
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split

dataset = load_iris()
X_train, X_test, y_train, y_test = train_test_split(dataset["data"], dataset["target"], random_state=0)
# X: 数据
# y: 标签
# random_state: 随机数生成器的种子
# 训练数据占比75%
# 测试数据占比25%

1.3 要事第一:观察数据

  • 观察数据的方法:可视化
    • 绘制散点图
      • 一个特征作为 x x x
      • 一个特征作为 y y y
      • 缺点:只能绘制两个或三个特征,难以对多于三个特征的数据集作图
    • 绘制散点图矩阵
      • 两两查看所有的特征
      • 缺点:无法同时显示所有特征之间的关系
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
import pandas as pd
import matplotlib.pyplot as plt

dataset = load_iris()
X_train, X_test, y_train, y_test = train_test_split(dataset["data"], dataset["target"], random_state=0)
dataframe = pd.DataFrame(X_train, columns=dataset["feature_names"])
pd.plotting.scatter_matrix(frame=dataframe, c=y_train, figsize=(15, 15), marker="o", hist_kwds={"bins": 20}, s=60, alpha=0.8, cmap=plt.cm.get_cmap('Pastel1'))
# c: 颜色
# figsize: 图的尺寸
# marker: 点的样式
# hist_kwds: 柱状图的样式
# s: 点的半径
# alpha: 透明度
# cmap: 配色风格
plt.show()

Iris数据集的散点矩阵,按类别标签着色

1.4 构建第一个模型:k近邻算法(KNeighborsClassifier)

from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.neighbors import KNeighborsClassifier

dataset = load_iris()
X_train, X_test, y_train, y_test = train_test_split(dataset["data"], dataset["target"], random_state=0)
knn = KNeighborsClassifier(n_neighbors=1)
knn.fit(X_train, y_train)

1.5 做出预测(predict)

from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.neighbors import KNeighborsClassifier
import numpy as np

dataset = load_iris()
X_train, X_test, y_train, y_test = train_test_split(dataset["data"], dataset["target"], random_state=0)
knn = KNeighborsClassifier(n_neighbors=1)
knn.fit(X_train, y_train)
X_new = np.array([[5, 2.9, 1, 0.2]])
# 与训练集格式对应
prediction = knn.predict(X_new)
print(f"{prediction}: {dataset['target_names'][prediction]}")
# [0]: ['setosa']

1.6 评估模型

  • 计算精度来衡量模型的优劣
    • 精度:品种预测正确的所占比例
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.neighbors import KNeighborsClassifier
import numpy as np

dataset = load_iris()
X_train, X_test, y_train, y_test = train_test_split(dataset["data"], dataset["target"], random_state=0)
knn = KNeighborsClassifier(n_neighbors=1)
knn.fit(X_train, y_train)
y_pred = knn.predict(X_test)
print(f"score(np.mean) : {np.mean(y_test == y_pred)}")
# score(np.mean) : 0.9736842105263158
# 参数: 布尔表达式(测试标记与预测标记是否相等)
print(f"score(knn.score) : {knn.score(X_test, y_test)}")
# score(knn.score) : 0.9736842105263158
# 参数: 测试数据,测试标记
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值