XGBoost文字多分類記錄
阿新 • • 發佈:2020-07-09
1.資料預處理
xgb 訓練的資料是 DataFream 不能是List
- 讀取資料
利用pandas 讀取資料,這裡讀取的是excel資料
data = pd.read_excel(filename, sheet_name='tabelname')
- 分詞處理
利用jieba分詞搞定
seg1 = jieba.cut(str(table_note[i])) # 這個利用join函式連線分詞後的結果
seg1 = ' '.join(seg1)
seg1 = jieba.icut(str(table_note[i])) # 這個返回的是一個列表
- 去停處理
寫個函式 將分詞處理完成的資料傳入此函式,一定記得返回字串
def ting(content):
content = content.split(" ")
content = [w for w in content if w not in stopwords]
return " ".join(content)
- 分離訓練集與測試集
x_train, x_test, y_train, y_test = train_test_split(data, label, test_size=0.2)
- 這裡使用Tfidf作詞頻-逆向檔案頻率
# CountVectorizer會將文字中的詞語轉換為詞頻矩陣
vectorizer = CountVectorizer(max_features=5000)
# TfidfTransformer用於統計vectorizer中每個詞語的TF-IDF值
tf_idf_transformer = TfidfTransformer()
# vectorizer.fit_transform()計算每個詞出現的次數
# tf_idf_transformer.fit_transform()將詞頻矩陣統計成TF-IDF值
tf_idf = tf_idf_transformer.fit_transform(vectorizer.fit_transform(x_train))x_train_weight = tf_idf.toarray() # 訓練集TF-IDF權重矩陣
tf_idf = tf_idf_transformer.transform(vectorizer.transform(x_test))
x_test_weight = tf_idf.toarray() # 測試集TF-IDF權重矩陣
2.XGboost實現
具體參考連結https://blog.csdn.net/hbpartty/article/details/96098495
引數參考連結https://blog.csdn.net/iyuanshuo/article/details/80142730
第一步轉化為DMatrix格式的資料
dtrain = xgb.DMatrix(x_train_weight, label=y_train)
dtest = xgb.DMatrix(x_test_weight, label=y_test)
第二步定義引數 開始訓練
param = {'silent': 0,
'eta': 0.3,
'max_depth': 6,
'objective': 'multi:softmax',
'num_class': 16,
'eval_metric': 'merror'} # 引數
evallist = [(dtrain, 'train'), (dtest, 'test')]
num_round = 100 # 迴圈次數
xgb_model = xgb.train(param, dtrain, num_round, evallist)
# 儲存訓練模型
xgb_model.save_model('data/xgb_model')
y_predict = xgb_model.predict(dtest) # 模型預測
label_all = categories
confusion_mat = metrics.confusion_matrix(y_test, y_predict)
df = pd.DataFrame(confusion_mat, columns=label_all)
df.index = label_all
print('準確率:', metrics.accuracy_score(y_test, y_predict))
print('confusion_matrix:', df)
print('分類報告:', metrics.classification_report(y_test, y_predict))