以xgboost爲例,模型保存學習
from sklearn.model_selection import train_test_split from sklearn import metrics from sklearn.feature_extraction.text import CountVectorizer from sklearn.feature_extraction.text import TfidfTransformer
model = XGBClassifier( silent=0, # 設置成1則沒有運行信息輸出,最好是設置爲0.是否在運行升級時打印消息。 # nthread=4,# cpu 線程數 默認最大 learning_rate=0.3, # 如同窗習率 min_child_weight=1, # 這個參數默認是 1,是每一個葉子裏面 h 的和至少是多少,對正負樣本不均衡時的 0-1 分類而言 # ,假設 h 在 0.01 附近,min_child_weight 爲 1 意味着葉子節點中最少須要包含 100 個樣本。 # 這個參數很是影響結果,控制葉子節點中二階導的和的最小值,該參數值越小,越容易 overfitting。 max_depth=6, # 構建樹的深度,越大越容易過擬合 gamma=0, # 樹的葉子節點上做進一步分區所需的最小損失減小,越大越保守,通常0.一、0.2這樣子。 subsample=1, # 隨機採樣訓練樣本 訓練實例的子採樣比 max_delta_step=0, # 最大增量步長,咱們容許每一個樹的權重估計。 colsample_bytree=1, # 生成樹時進行的列採樣 reg_lambda=1, # 控制模型複雜度的權重值的L2正則化項參數,參數越大,模型越不容易過擬合。 # reg_alpha=0, # L1 正則項參數 # scale_pos_weight=1, #若是取值大於0的話,在類別樣本不平衡的狀況下有助於快速收斂。平衡正負權重 # objective= 'multi:softmax', #多分類的問題 指定學習任務和相應的學習目標 # num_class=2, # 類別數,多分類與 multisoftmax 並用 objective='binary:logistic', n_estimators=100, # 樹的個數 seed=1000 # 隨機種子 # eval_metric= 'auc' ) model.fit(train_weight, y_train, eval_metric='auc') # 保存模型 model_path = 'models/xgboost.pkl' with open(model_path, 'wb') as f: pickle.dump(model, f)
xgboost模型加載spa
# 加載模型 model_path = 'models/xgboost.pkl' # 加載模型 with open(model_path, 'rb') as f:
model = pickle.load(f)
預測結果報告打印線程
y_true, y_pred = y_test, model.predict(test_weight)
target_names = ['class 0', 'class 1']
#輸出報告 print(metrics.classification_report(y_true, y_pred, target_names=target_names))
#計算準確率 print("Accuracy : %.4g" % metrics.accuracy_score(y_true, y_pred))