ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

机器学习应用开发的典型步骤

2021-10-12 20:33:19  阅读:197  来源: 互联网

标签:digits 典型 机器 训练 步骤 模型 数据 clf sklearn


目录

1.数据采集和标记

2.特征选择

3.数据清洗

4.模型选择

5.模型训练

6.模型测试

7.模型保存与加载

8.实例(手写数字识别)

1.数据采集和标记

2.特征选择

3.模型训练

4.模型测试

5.模型保存与加载

6.上述sk-learn模型以及模型参数


1.数据采集和标记

先采集数据,再将数据进行标记

作用:尽可能多的采集的不同的数据,防止出现偶然性,使得采集到的数据具有代表性,才能保证最终训练出来的模型的准确性。

2.特征选择

选择合适的特征,将数据保存为样本个数x特征个数格式

3.数据清洗

在采集数据完后,对数据进行数据清洗,即把采集到的、不适合用来做机器学习训练的数据进行预处理,从而转化为适合机器学习的数据

作用:防止在训练数据特征的时候计算量过大。为了减少计算量,也为了模型的稳定性

4.模型选择

对于不同的数据集,选择不同的模型有不同的效率。因此在选择模型要考虑很多的因素,从众多的因素中找到一个最适合模型,同时这个模型要使结果模拟评分达到最高。

5.模型训练

在进行模型训练之前,要将数据集划分为训练数据集和测试数据集,再利用划分好的数据集进行模型训练,最后得到我们训练出来的模型参数

6.模型测试

用上面训练出来的模型预测测试数据集,然后将预测出来的结果与真正的结果进行比较,最后比较出来的结果即为模型的准确度

7.模型保存与加载

当我们训练出一个满意的模型后可以将模型进行保存,这样当我们再一次需要使用此模型时可以直接利用此模型进行预测,不用再一次进行模型训练。

8.实例(手写数字识别)

(此实例跳过数据清洗与模型选择,数据是sklearn库里自带的,已经处理好了。此实例已经确定了模型,直接进行模型训练即可)

1.数据采集和标记

导入相关的包

%matplotlib inline
import matplotlib.pyplot as plt
import numpy as np

导入数据(sk-learn库中自带了一些数据集,此处使用的就是手写数字识别图片的数据)

# 导入sklearn库中datasets模块
from sklearn import datasets
# 利用datasets模块中的函数load_digits()进行数据加载
digits = datasets.load_digits() 

把数据所代表的图片显示出来

# 把数据所代表的图片显示出来
images_and_labels = list(zip(digits.images, digits.target))
plt.figure(figsize=(8, 6))
for index, (image, label) in enumerate(images_and_labels[:8]):
    plt.subplot(2, 4, index + 1)
    plt.axis('off')
    plt.imshow(image, cmap=plt.cm.gray_r, interpolation='nearest')
    plt.title('Digit: %i' % label, fontsize=20);

 

2.特征选择

# 将数据保存为 样本个数x特征个数 格式的array对象 的数据格式进行输出
# 数据已经保存在了digits.data文件中
print("shape of raw image data: {0}".format(digits.images.shape))
print("shape of data: {0}".format(digits.data.shape))
shape of raw image data: (1797, 8, 8)
shape of data: (1797, 64)

3.模型训练

将数据划分为训练数据集和测试数据集

# 把数据分成训练数据集和测试数据集(此处将数据集的百分之二十作为测试数据集)
from sklearn.model_selection import train_test_split
Xtrain, Xtest, Ytrain, Ytest = train_test_split(digits.data, digits.target, test_size=0.20, random_state=2);

进行模型训练

# 训练完成后clf对象就会包含我们训练出来的模型参数,可以使用这个模型对象来进行预测
​
# 使用支持向量机来训练模型
from sklearn import svm
clf = svm.SVC(gamma=0.001, C=100., probability=True)
# 使用训练数据集Xtrain和Ytrain来训练模型
clf.fit(Xtrain, Ytrain);

4.模型测试

评估模型的准确度

# 评估模型的准确度(此处默认为true,直接返回正确的比例,也就是模型的准确度)
from sklearn.metrics import accuracy_score
# predict是训练后返回预测结果,是标签值。
Ypred = clf.predict(Xtest);
accuracy_score(Ytest, Ypred)
0.9777777777777777

模型评分

# 用训练好的模型在测试集上进行评分(0~1)1分代表最好
clf.score(Xtest, Ytest)
0.9777777777777777

查看具体情况

"""
将测试数据集里的部分图片显示出来
图片的左下角显示预测值,右下角显示真实值
"""
# 查看预测的情况
fig, axes = plt.subplots(4, 4, figsize=(8, 8))
fig.subplots_adjust(hspace=0.1, wspace=0.1)

for i, ax in enumerate(axes.flat):
    ax.imshow(Xtest[i].reshape(8, 8), cmap=plt.cm.gray_r, interpolation='nearest')
    ax.text(0.05, 0.05, str(Ypred[i]), fontsize=32,
            transform=ax.transAxes,
            color='green' if Ypred[i] == Ytest[i] else 'red')
    ax.text(0.8, 0.05, str(Ytest[i]), fontsize=32,
            transform=ax.transAxes,
            color='black')
    ax.set_xticks([])
    ax.set_yticks([])

 

此处测试集出现问题,显示出预测所有的可能性

# Xtest[4] 的各种可能性
clf.predict_proba(Xtest[4].reshape(1, -1))
array([[0.00430518, 0.02350992, 0.01561862, 0.01075997, 0.03301238,
        0.02790444, 0.00478012, 0.15184996, 0.58209275, 0.14616666]])

5.模型保存与加载

模型保存

# 保存模型参数
from sklearn.externals import joblib
joblib.dump(clf, 'digits_svm.pkl');

模型加载

# 导入模型参数,直接进行预测
clf = joblib.load('digits_svm.pkl')
Ypred = clf.predict(Xtest);
clf.score(Xtest, Ytest)
0.9777777777777777

6.上述sk-learn模型以及模型参数

1.划分数据集

 train_test_split(digits.data, digits.target, test_size=0.20, random_state=2);
 
 """
test_size:可以为浮点、整数或None,默认为None
①若为浮点时,表示测试集占总样本的百分比
②若为整数时,表示测试样本样本数
③若为None时,test size自动设置成0.25

train_size:可以为浮点、整数或None,默认为None
①若为浮点时,表示训练集占总样本的百分比
②若为整数时,表示训练样本的样本数
③若为None时,train_size自动被设置成0.75

random_state:可以为整数、RandomState实例或None,默认为None
①若为None时,每次生成的数据都是随机,可能不一样
②若为整数时,每次生成的数据都相同
"""

2.模型评估

# 评估模型的准确度(此处默认为true,直接返回正确的比例,也就是模型的准确度)
from sklearn.metrics import accuracy_score

"""
sklearn.metrics.accuracy_score(y_true, y_pred, normalize=True, sample_weight=None)
normalize:默认值为True,返回正确分类的比例;如果为False,返回正确分类的样本数
"""

3.predict与predict_proba的区别

# predict是训练后返回预测结果,是标签值。
Ypred = clf.predict(Xtest);

# predict_proba返回的是一个 n 行 k 列的数组,n 表示测试集中样本的个数, 第 i 行 j列的数值是模型预测 第 i 个预测样本为某个标签的概率,并且每一行的概率和为1。

# Xtest[4] 的各种可能性
clf.predict_proba(Xtest[4].reshape(1, -1))

4.导入数据

# 导入sklearn库中datasets模块
from sklearn import datasets

5.使用支持向量机进行模型训练

# 使用支持向量机来训练模型
from sklearn import svm
clf = svm.SVC(gamma=0.001, C=100., probability=True)

6.模型评估准确度

# 评估模型的准确度(此处默认为true,直接返回正确的比例,也就是模型的准确度)
from sklearn.metrics import accuracy_score

7.保存模型参数

# 保存模型参数
from sklearn.externals import joblib
joblib.dump(clf, 'digits_svm.pkl');

标签:digits,典型,机器,训练,步骤,模型,数据,clf,sklearn
来源: https://blog.csdn.net/qq_51167531/article/details/120731258

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有