第1章 引言

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
# 参数: 测试数据,测试标记

相关推荐

  1. 1 开始

    2024-01-10 13:54:03       21 阅读
  2. 7 1 异常处理

    2024-01-10 13:54:03       36 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-01-10 13:54:03       19 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-01-10 13:54:03       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-01-10 13:54:03       20 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-01-10 13:54:03       20 阅读

热门阅读

  1. 探寻C++经典程序之美

    2024-01-10 13:54:03       29 阅读
  2. 用js的生成a标签下载文件,同时设置请求头

    2024-01-10 13:54:03       36 阅读
  3. FRIDA 调用原生函数时使用补丁也生效

    2024-01-10 13:54:03       36 阅读
  4. Node.js学习

    2024-01-10 13:54:03       31 阅读
  5. Node.js实现数据验证和校验功能

    2024-01-10 13:54:03       35 阅读
  6. 【办公软件】C#使用itextsharp新建PDF文件

    2024-01-10 13:54:03       31 阅读
  7. Hive之set参数大全-6

    2024-01-10 13:54:03       27 阅读