1. 程式人生 > >機器學習演算法進階一

機器學習演算法進階一

- 長文字的智慧解析實戰

如何從紛繁多變、資訊量龐雜的冗長文字中獲取關鍵資訊,一直是文字領域難題。隨著深度學習的熱潮來臨,有許多新方法來到了 NLP 領域,給相關任務帶來了更多優秀成果,也給大家帶來了更多應用和想象的空間。

用傳統的監督學習模型對一段文文字進行分類的基本過程:

 

一段原始文字→(資料預處理)→處理後的文字→(特徵工程)→Features→(輸入)→y=f(x_1,x_2,x_3,...)→(輸出)→類別

注:特徵工程是整個機器學習過程中最要的部分。特徵決定了機器學習的上限,而機器學習演算法只是逼近這個上限。

train_set.csv:此資料集用於訓練模型,每一行對應一篇文章。文章分別在“字”和“詞”的級別上做了脫敏處理。共有四列: 第一列是文章的索引(id),第二列是文章正文在“字”級別上的表示,即字元相隔正文(article);第三列是在“詞”級別上的表示,即詞語相隔正文(word_seg);第四列是這篇文章的標註(class)。

注:每一個數字對應一個“字”,或“詞”,或“標點符號”。“字”的編號與“詞”的編號是獨立的!

test_set.csv:此資料用於測試。資料格式同train_set.csv,但不包含class。

注:test_set與train_test中文章id的編號是獨立的。

 - CountVectorizer() #文字特徵提取

 

- 達觀杯智慧文字處理競賽程式碼

 1 # -*- coding: utf-8 -*-
 2 """
 3 Created on Sat Dec  1 17:14:12 2018
 4 
 5 @author: Administrator
6 """ 7 8 9 print("開始......") 10 import pandas as pd 11 # pandas用於處理更大的資料集 12 from sklearn.linear_model import LogisticRegression 13 # 定義邏輯迴歸函式 14 from sklearn.feature_extraction.text import CountVectorizer 15 # 定義文字特徵提取 16 df_train = pd.read_csv('./train_set.csv') 17 df_test = pd.read_csv('./test_set.csv
') 18 df_train.drop(columns=['article','id'], inplace=True) 19 # 刪除指定列 , inplace可選引數 20 df_test.drop(columns=['article'],inplace=True) 21 # 測試資料刪除指定列article 22 vectorizer = CountVectorizer(ngram_range=(1,2),min_df=3,max_df=0.9,max_features=100000) 23 vectorizer.fit(df_train['word_seg']) 24 x_train = vectorizer.transform(df_train['word_seg']) 25 x_test = vectorizer.transform(df_test['word_seg']) 26 y_train = df_train['class']-1 27 # 訓練一分類器 28 # 知識點定位:統監督學習演算法之線性邏輯迴歸模型AAA 29 lg = LogisticRegression(C=4,dual = True) 30 #c:正則化係數λ的倒數,float型別,預設為1.0。 31 #必須是正浮點型數。像SVM一樣,越小的數值表示越強的正則化; 32 lg.fit(x_train,y_train) 33 '''根據訓練好的分型別對測試集的樣本進行預測''' 34 y_test = lg.predict(x_test) 35 """儲存預測結果至本地""" 36 df_test['class'] = y_test.tolist()#tolist()將陣列或者矩陣轉換成列表 37 df_test['class'] = df_test['class'] + 1 38 df_result = df_test.loc[:,['id','class']] 39 df_result.to_csv('./result.csv',index = False) 40 41 print("ok")