【sklearn】一般流程及模型


Scikit-learn(sklearn)是机器学习中常用的第三方模块,对常用的机器学习方法进行了封装,包括回归(Regression)、降维(Dimensionality Reduction)、分类(Classfication)、聚类(Clustering)等方法。
在这里插入图片描述

参考这篇文章的代码:
【Sklearn】入门花卉数据集实验–理解朴素贝叶斯分类器

0.sklearn运行流程

数据集处理

  • 数据集加载 X=[],标签Y=[] , 比例X:Y=1:1
  • 数据集分类 train_test_split ->(X_train,X_test,y_train,y_test)

特征提取

  • 特征提取(直方图、轮廓描述子…特征数组)

训练模型

  • 特征分类(构造分类器(lr线性分类,svm支持向量机分类,beyes贝叶斯分类…))
  • 训练数据(X_train,y_train)拟合分类器模型保存模型

预测

  • 预测 result = predit(X_test)
  • 分析 classification_report (result)

1.数据集

数据集处理中我们常用到:

  • datasets : 是sklearn库自带的数据集(iris鸢尾花数据等),前期学习非常友好
  • train_test_split 将数据分为测试集和训练集
from sklearn import datasets#引入数据集,sklearn包含众多数据集
from sklearn.model_selection import train_test_split#将数据分为测试集和训练集

iris = datasets.load_iris()#引入iris鸢尾花数据,iris数据包含4个特征变量
X = iris.data # 特征变量
y = iris.target # 目标值
X_train,X_test,y_train,y_test = train_test_split(X,y,test_size=0.3, random_state=1)#利用train_test_split进行将训练集和测试集进行分开,test_size占30%
print(y_train)#我们看到训练数据的特征值分为3类

2.模型

Sklearn的模型导出本质上是利用Python的Pickle机制。对Python的函数进行序列化,也就是把训练好的Transformer函数序列化并存为文件。

.pkl

pkl文件是python里面保存文件的一种格式,如果直接打开会显示一堆序列化的东西。

import pickle

# 重点是rb和r的区别,rb是打开2进制文件,文本文件用r
f = open('test.pkl','rb')
data = pickle.load(f)
print(data)

参考这篇文章:sklearn 中模型保存的两种方法
既然joblib在使用上比较容易,读取速度也相对pickle快,那么我们后面就用joblib进行讨论。

.m

1. 保存 、读取、预测

from sklearn.externals import joblib

joblib.dump(lr, 'lr.model') # 保存   lr是一个LogisticRegression模型

lr = joblib.load('lr.model') # 加载

lr.predit(test_X) # 预测    此处test_X为特征集

2. 一个完整的svm分类例子

  1. dataset:特征数组X,标签Y,比例X:Y=1:1
  2. clf : 构造分类器(lr线性分类,svm支持向量机分类,beyes贝叶斯分类…)
  3. clf.fit():用训练数据拟合分类器模型
  4. joblib.dump:保存模型
  5. joblib.load:加载模型
  6. clf.predit():预测
os.chdir("workspace/model_save") # 保存Model(注:model_save文件夹要预先建立,否则会报错)
from sklearn.externals import joblib
from sklearn import svm
X = [[0, 0], [1, 1]]
y = [0, 1]
clf = svm.SVC() # clf是训练的分类器
clf.fit(X, y)  
clf.fit(train_X,train_y)
joblib.dump(clf, "train_model.m") # 保存

clf = joblib.load("train_model.m")
clf.predit(test_X) #此处test_X为特征集

3.封装

from sklearn.externals import joblib

Class classificationTest():
    #保存模型
    def Save_Model(self, model, filepath):
        joblib.dump(model, filename=filepath)
    
    def SVM_classifier(self,x_train,y_train):
        clf = svm.SVC() # clf是训练的分类器
        clf.fit(x_train,y_train)
        self.Save_Model(clf,"train_model.m") # 保存模型
        return clf

    def Load_Model(self, filepath):
        model = joblib.load(filepath)
        return model

    def Predict_Model(self, x_test, filpath):
    	model = self.Load_Model(filepath)
        result = model.predit(x_test) # 预测
        return result

其他模型

其他几种模型后缀的对比:

  • .pb
    MetaGraph的protocol buffer格式的文件,MetaGraph包括计算图,数据流,以及相关的变量和输入输出。

    在tensorflow训练中直接保存为pb为格式,保存pb的好处就是使用场景是实现创建模型与使用模型的解耦,使得创建模型与使用模型的解耦,使得前向推导inference代码统一。另外的好处就是保存为pb的时候,模型的变量会变成固定的,导致模型的大小会大大减小。

  • .dat
    .dat并不是一种标准文件。DATA的意思,即数据文件,这类文件并没有进行绝对化的定义。
    在深度学习里指存放数据的文件。

  • .h5即(.hdf5)
    HDF5是一种全新的分层数据格式产品,由数据格式规范和支持库实现组成。

  • .ckpt
    这种模型文件是依赖 TensorFlow 的,只能在其框架下使用。

    checkpoint文件:用于告知某些TF函数,这是最新的检查点文件。
    .data文件:保存图中所有变量的值,没有结构。
    .index文件:保存索引。
    .meta文件:保存计算图的结构,但是不包含里面变量的值。

3.预测

介绍一个sklearn中高效的分析函数:classification_report ()

使用:

from sklearn.metrics import classification_report

在这里插入图片描述


更多参考学习:

  1. sklearn一般流程
    关键词讲解很清晰

  2. Python机器学习:6.2 K折交叉验证评估模型性能

原创文章 252 获赞 666 访问量 26万+

猜你喜欢

转载自blog.csdn.net/cungudafa/article/details/105598220