机器学习Demo1 鸢尾花

文章代码基于 2018年3天快速入门python机器学习P21-P22 修改而来(讲课的小姐姐声音非常好听)

0.鸢尾花案例

该数据集来源于网络。Iris也称鸢尾花卉数据集,是一类多重变量分析的数据集。通过花萼长度,花萼宽度,花瓣长度,花瓣宽度4个属性预测鸢尾花卉属于(Setosa,Versicolour,Virginica)三个种类中的哪一类。
我这里记录一下课程中鸢尾花案例的一个代码实现过程,其中有关机器学习相关的知识点不是很详细,完整代码会放在最后

1.获取数据集

数据集来源

机器学习就是通过大量的数据经过算法训练建立一个模型,然后通过这个模型可以对这类数据进行一个预测。
也就是说要进行机器学习先要有数据,下面是一些可以获得数据集的网站:

  1. UCI
  2. sklearn
  3. 阿里天池
  4. kaggle

数据集获取

这里用的是sklearn的鸢尾花数据集,如果是本地的数据的话就要自己写方法引入一下。
依赖库安装顺序 numpy / scipy / matplotlib / scikit-learn
安装方式:

pip install numpy
from sklearn.datasets import load_iris

iris = load_iris()
print("数据集", iris.data)
print("目标集", iris.target)

这里通过打印我们可以看到数据集是一个二维数组,目标集是一个一维数组
其中数据集中的一个数组,对应目标中相同位置的数字 如:0而目标集中的每种数字表示一类。

2.测试集的划分

为什么要划分测试集?

因为这个数据集只有这么多,所以我们要分出一部分用于后续验证建立的模型是否正确
其中x_train, x_test, y_train, y_test分别为训练集测试集训练集类别测试集类别

x_train, x_test, y_train, y_test = train_test_split(iris.data, iris.target)

3.标准化

让不同的属性之间无量纲化,比如说我们要给房子分类,房子的大小是120平米,价格24 00 000元这时我们去构建模型时两个数字之间的相差较大不利于模型建立,所以我们要将其标准化在一定的区间上。

训练集和测试集都要进行标准化,不过测试集不需要fit过程

transfer = StandardScaler()
x_train = transfer.fit_transform(x_train)
x_test = transfer.transform(x_test)

4.算法预估器

4.1 KNN算法预估器

KNN的全称是K Nearest Neighbors,意思是K个最近的邻居,从这个名字我们就能看出一些KNN算法的蛛丝马迹了。K个最近邻居,毫无疑问,K的取值肯定是至关重要的。

  1. 这里第一步我们实例化了一个KNeighborsClassifier对象并且指定了K值为3
  2. 第二步我们传入了训练集x_train,和训练验证集y_train对其进行训练以生成模型
estimator = KNeighborsClassifier(n_neighbors=3)
estimator.fit(x_train, y_train)

4.2 加入网格搜索与模型调优

上面说到K的取值肯定是至关重要的
所以通过模型调优可以获得相对更好的K值,而不要用我们去给定
这里我给定K的范围是在[1,3,5,7,9,11]

estimator = KNeighborsClassifier()
param_dict = {"n_neighbors":[1,3,5,7,9,11]}
estimator = GridSearchCV(estimator, param_grid=param_dict, cv=10)
estimator.fit(x_train, y_train)

5.模型评估

模型建立后我们需要验证它的好坏,这里主要是两种方式

5.1 对比真实值和预测值

y_predict = estimator.predict(x_test)
print("y_predict:\n", y_predict)
print("直接比对", y_test == y_predict)

5.2 计算准确值

 score = estimator.score(x_test, y_test)
 print("准确率:", score)

6.模型成果保存

一般一个复杂的机器学习过程时间都是很长的,所以如何机器学习获得的模型达到了我们的预期,我们就需要将它保存起来,这样下一次就可以之间调用模型了

joblib.dump(estimator, "Achievements/flowers.pkl")

7.完整代码

from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split, GridSearchCV
from sklearn.preprocessing import StandardScaler
from sklearn.neighbors import KNeighborsClassifier
import joblib


def knn_iris():
    # knn算法
    # 1.获取数据
    iris = load_iris()
    print("数据集", iris.data)
    print("目标集", iris.target)
    # 2.划分
    x_train, x_test, y_train, y_test = train_test_split(iris.data, iris.target)

    # 3.标准化
    transfer = StandardScaler()
    x_train = transfer.fit_transform(x_train)
    x_test = transfer.transform(x_test)

    # 4.KNN 算法预估器
    # estimator = KNeighborsClassifier(n_neighbors=3)
    # estimator.fit(x_train, y_train)

    # 4.KNN 算法预估器 加入网格搜索与模型调优
    estimator = KNeighborsClassifier()
    param_dict = {"n_neighbors":[1,3,5,7,9,11]}
    estimator = GridSearchCV(estimator, param_grid=param_dict, cv=10)
    estimator.fit(x_train, y_train)

    # 5.模型评估
    # 5.1 对比真实值和预测值
    y_predict = estimator.predict(x_test)
    print("y_predict:\n", y_predict)
    print("直接比对", y_test == y_predict)

    # 5.2 计算准确值
    score = estimator.score(x_test, y_test)
    print("准确率:", score)

    print("最佳参数:", estimator.best_params_)
    print("最佳结果:", estimator.best_score_)
    print("最佳估计器:", estimator.best_estimator_)
    print("交叉验证结果:", estimator.cv_results_)

    # 6. 成果保存
    joblib.dump(estimator, "Achievements/flowers.pkl")


if __name__ == "__main__":
    # 鸢尾花
    knn_iris()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

空门.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值