机器学习案例——鸢尾花分类学习笔记

学习书籍:Python机器学习基础教程

鸢尾花分类

工具:jupyter notebook

目标:已有花瓣的长度和宽度以及花萼的长度和宽度的训练集,训练模型鉴定花是属于setosa、versicolor 或 virginica中的哪一种。

基础

已知测量数据,所以这是一个监督学习问题(从输入 / 输出对中进行学习的机器学习算法叫作监督学习算法)。在多个品种中选择一种,所以这是一个分类问题。每个品种称作一个类别,所以这又是一个三分类问题。对一个数据点来说,它的品种叫做标签

模型

导入库

import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
import mglearn

导入数据集

鸢尾花的数据集在scikit-learn的datasets模块中,可以用load_iris函数直接加载数据:

from sklearn.datasets import load_iris # 导入数据集
iris_dataset = load_iris() # 加载数据
iris_dataset.keys()  # 查看数据集中所有键值
iris_dataset['target'] # 查看该键值对应的数据

训练数据与测试数据

我们可以将得到的数据分为训练数据和测试数据,前者用来训练模型,后者用来评估训练出的模型性能。利用 scikit-learn 中的 train_test_split可以打乱数据并集体进行拆分。(一般数据用大写的X,标签用小写的y)

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)
X_train.shape # 看看形状,这里检验下分开的结果
y_train.shape

观察数据

绘制散点图矩阵,数据点的颜色与鸢尾花的品种相对应。原书scatter_matrix已经弃用了,这里改用plotting.scatter_matrix。

# 利用X_train中的数据创建DataFrame
# 利用iris_dataset.feature_names中的字
iris_dataframe = pd.DataFrame(X_train, columns=iris_dataset.feature_names)
# 利用DataFrame创建散点图矩阵,按y_train着色
grr = pd.plotting.scatter_matrix(iris_dataframe, c=y_train, figsize=(15, 15), marker='o',
 hist_kwds={'bins': 20}, s=60, alpha=.8, cmap=mglearn.cm3)
# scatter_matrix已经弃用了

构建模型:k近邻算法

考虑训练集中与新数据点最近的任意 k 个邻居(比如
说,距离最近的 3 个或 5 个邻居),而不是只考虑最近的那一个。然后,我们可以用这些
邻居中数量最多的类别做出预测。

封装算法

from sklearn.neighbors import KNeighborsClassifier
knn = KNeighborsClassifier(n_neighbors=1) # 考虑邻居为1的情况

构建模型

想要基于训练集来构建模型,需要调用 knn 对象的 fit 方法,输入参数为 X_train 和 y_train,二者都是 NumPy 数组,前者包含训练数据,后者包含相应的训练标签

knn.fit(X_train, y_train)

做出预测

输入一个样本,并且根据模型预测样本的标签。

X_new = np.array([[5, 2.9, 1, 0.2]])
X_new.shape

调用knn的predict方法进行预测:

  • 对新样本进行预测:

    prediction = knn.predict(X_new)
    prediction
    iris_dataset['target_names'][prediction]
    #Out[]:
    #	Prediction: [0]
    #	Predicted target name: ['setosa']
    
  • 对测试集进行预测:

    y_pred = knn.predict(X_test)
    y_pred
    

评估模型

下面两种方法都可以用来计算精度来衡量模型的优劣:

np.mean(y_pred==y_test) # 预测正确率
knn.score(X_test, y_test) # 调用knn对象的score方法
  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值