机器学习开发应用步骤的理解

1.数据采集和标记

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

2.特征选择

选择合适的特征,将数据保存为样本个数×特征个数格式的array对象。

3.数据清洗

在采集数据完后,对数据进行数据清洗,即把采集到的、不适合用来做机器学习训练的数据进行预处理,从而转化为适合机器学习的数据。
作用:防止在训练数据特征的时候计算量过大。为了减少计算量,也为了模型的稳定性。

4.模型选择

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

5.模型训练

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

6.模型测试

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

7.模型保存与加载

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

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

1)数据采集和标记
导入包

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

加载数据。scikit-learn自带了一些数据集,其中有手写数字识别图片的数据,利用datasets模块中的函数load_digits()进行数据加载。

from sklearn import datasets
digits=datasets.load_digits()

把数据所表示的图片用Mathplotlib显示出来:

# 把数据所代表的图片显示出来
images_and_labels=list(zip(digits.images,digits.target))
plt.figure(figsize=(8,6),dpi=200)
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)特征选择

# 数据已经转换保存在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)模型训练
先将数据集分为训练数据集和测试数据集

# 把数据分成训练数据集和测试数据集
# 将数据集分出%20作为测试数据集
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.0010,C=100.)
# 使用训练数据集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

用训练出来的clf预测测试数据集,评估模型的准确度。

# 用训练出来的模型clf预测测试数据集
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([])

在这里插入图片描述
5)模型保存与加载
保存模型

# 保存模型参数
import joblib
# 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

scikit - learn一般性原理和通用规则

scikit-learn包含大部分流行的有监督学习算法(分类和回归)和无监督学习算法(聚类和数据降维)的实现。
scikit-learn所有的评估模型对象都有fit()这个接口,这是用来训练模型的接口。针有监督的机器学习,使用fit(X,y)来进行训练,其中y是标记数据。针对无监督的机器学习算法,使用fit(X)来进行训练,因为无监督机器学习算法的数据集是没有标记的,不需要传入y。
针对所有的有监督机器学习算法,scikit-learn的模型对象提供了predict()接口,经过训练的模型,可以用这个接口来进行预测。针对分类问题,有些模型还提供了predict_proba()的接口,用来输出一个待预测的数据属于各种类型的可能性,而predict()接口直接返回了可能性最高的那个类别。
针对无监督的机器学习算法,scikit-learn的模型对象也提供了predict()接口,它是用来对数据进行聚类分析,即把新数据归入某个聚类里。除此之外,无监督学习算法还有transform()接口,这个接口用来进行转换,比如使用PCA算法对数据进行降维处理时,把三维数据降为二维数据,此时调用transform()算法即可把一个三维数据转换为对应的二维数据。

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值