Scikit-learn(sklearn)是机器学习中常用的第三方模块,对常用的机器学习方法进行了封装,包括回归(Regression)、降维(Dimensionality Reduction)、分类(Classfication)、聚类(Clustering)等方法。
![在这里插入图片描述](https://img-blog.csdnimg.cn/20200420100407241.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2N1bmd1ZGFmYQ==,size_16,color_FFFFFF,t_70)
参考这篇文章的代码:
【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分类例子
- dataset:特征数组X,标签Y,比例X:Y=1:1
- clf : 构造分类器(lr线性分类,svm支持向量机分类,beyes贝叶斯分类…)
- clf.fit():用训练数据拟合分类器模型
- joblib.dump:保存模型
- joblib.load:加载模型
- 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
更多参考学习:
-
sklearn一般流程
关键词讲解很清晰