天天看點

機器學習之訓練好的模型儲存與加載

以乳腺癌資料為例做邏輯回歸并儲存模型

  1. 加載資料
  2. 删除無用資料
  3. 删除缺失資料
  4. 過采樣平衡資料
  5. 提取資料
  6. 對資料進行标準化
  7. 切分資料
  8. 訓練模型
  9. 儲存模型
  10. 加載模型

資料來源

資料來源:http://archive.ics.uci.edu/ml/datasets/Breast+Cancer+Wisconsin+(Original)

機器學習之訓練好的模型儲存與加載

代碼實作

import pandas as pd
import numpy as np
# 導入邏輯回歸模型
from sklearn.linear_model import LogisticRegression
# 導入标準化函數
from sklearn.preprocessing import StandardScaler
# 導入資料切分函數
from sklearn.model_selection import train_test_split as tts
導入儲存模型函數
from sklearn.externals import joblib

# 下載下傳下來的資料儲存的路徑
path = "../datas/breast-cancer-wisconsin.data"
# 列名
names = ['id','Clump Thickness','Uniformity of Cell Size','Uniformity of Cell Shape',
         'Marginal Adhesion','Single Epithelial Cell Size','Bare Nuclei',
        'Bland Chromatin','Normal Nucleoli','Mitoses','Class']
# 加載資料
data = pd.read_csv(path,names=names)

# 設定pandas可以顯示的結果行數/列數
pd.set_option('display.max_rows',200)
pd.set_option('display.max_columns',200)

# 删除為空的資料和帶'?'的資料
data = data.replace('?',np.nan).dropna()

# 分析資料删除無用的列
data.drop(columns=['id'],inplace=True)

# 使用過采樣,進行類别平衡
counts = data[data['Class'].isin(['2'])]['Class'].count() #444
print(counts)
# 提取所有的标簽為4的資料作為一組添加資料
data_add = data[data['Class'].isin(['4'])]
# 添加資料,保持樣本平衡
data = pd.concat([data_add,data],axis=0)
print(data.shape)

# 提取X和Y
X = data.iloc[:,:-1]
y = data.iloc[:,-1]

# 标準化
ss = StandardScaler()
X = pd.DataFrame(ss.fit_transform(X),columns=names[1:-1])

# 分割資料集
X_train,X_test,y_train,y_test = tts(X,y,test_size=0.3,random_state=3)

# 邏輯回歸模型訓練
model_LR = LogisticRegression(max_iter=500)
model_LR.fit(X_train,y_train)
print(model_LR.coef_)
print(model_LR.score(X_test,y_test))

# 儲存模型 這是一個二進制檔案
joblib.dump(filename='LR.model',value=model_LR)
           

建立Python環境,調用模型

# 導入模型儲存于加載函數
from sklearn.externals import joblib
# 加載模型
model_LR = joblib(filename='LR.model')
# 此時上述訓練好的模型就可以直接使用
# 列印參數
print(model_LR.coef_)
           

效果展示

訓練好的模型

機器學習之訓練好的模型儲存與加載

儲存的二進制模型

機器學習之訓練好的模型儲存與加載

再次調用的模型參數

機器學習之訓練好的模型儲存與加載

繼續閱讀