簡短NLP入門完整程式碼附詳解附資料集
阿新 • • 發佈:2019-02-18
資料集: https://pan.baidu.com/s/13IMDPMz0rf8kM1JAea53uQ
密碼: y6m4
資料集炒雞炒雞大TQT~~~
程式碼中涉及的具體的類或函式在對應的其他分支部落格下諒解~
{第一次用markdown寫程式碼塊,排版不是很好,會越來越好~}
# -*- coding: utf-8 -*-
print("開始..............")
import pandas as pd
from sklearn.linear_model import LogisticRegression
from sklearn.feature_extraction.text import CountVectorizer
df_train = pd.read_csv('./train_set.csv' )
df_test = pd.read_csv('./test_set.csv')
df_train.drop(columns=['article','id'],inplace=True)
#pandas的drop函式:刪除表中的某一行或者某一列,當inplace手動設為True時(預設為false),改變原有的df中的資料,原資料直接就被替換。
df_test.drop(columns=['article'],inplace=True)
vectorizer = CountVectorizer(ngram_range=(1,2),min_df=3,max_df=0.9,max_features=100000 )
#文字特徵提取方法:CountVectorizer,它只考慮每種詞彙在該訓練文字中出現的頻。
#CountVectorizer演算法是將文字向量轉換成稀疏表示數值向量(字元頻率向量)。
#該數值向量可以傳遞給其他演算法,譬如LDA 。在fitting過程中,CountVectorizer將會把頻率高的單詞排在前面。可選引數minDF表示文字中必須出現的次數(具體分析見另一篇部落格啦~)
vectorizer.fit(df_train['word_seg'])
# 先擬合訓練集'word_seg'列的資料
x_train = vectorizer.transform(df_train['word_seg' ])
# 再標準化訓練集'word_seg'列資料,tranform()的作用是通過找中心和縮放等實現標準化
x_test = vectorizer.transform(df_test['word_seg'])
# 標準化測試集'word_seg'列資料
y_train = df_train['class']-1
#將訓練集y 標籤為'class'列的資料全部減一
lg = LogisticRegression(C=4,dual=True)
# 使用LogisticRegression每次指定一個正則化係數C。
lg.fit(x_train,y_train)
#Fit the model according to the given training data
y_test = lg.predict(x_test)
#根據輸入的測試集x輸出預測的y值
df_test['class'] = y_test.tolist()
#將預測結果轉化為list賦值給測試集中'class'一列
df_test['class'] = df_test['class']+1
#該列每一個值加一
df_result = df_test.loc[:,['id','class']]
#選取'id','class'兩列作為結果集
df_result.to_csv('./result.csv',index=False)
#儲存結果
print("完成...............")
———-我是分隔線
如果碰到如下報錯
可嘗試這麼改,資料集一次讀取太大了,限制下一次的讀取最大值