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分類例子
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.封裝鄭州人流醫院哪家好 http://mobile.zhongyuan120.com/
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