以乳腺癌資料為例做邏輯回歸并儲存模型
- 加載資料
- 删除無用資料
- 删除缺失資料
- 過采樣平衡資料
- 提取資料
- 對資料進行标準化
- 切分資料
- 訓練模型
- 儲存模型
- 加載模型
資料來源
資料來源: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_)
效果展示
訓練好的模型
儲存的二進制模型
再次調用的模型參數