5. 對測試集的資料進行**
6. 按照kaggle比賽官網的要求整理格式疑問
kaggle競賽**:
import pandas as pd
data_train = pd.read_csv(
'./train.tsv'
, sep =
'\t'
)data_test = pd.read_csv(
'./test.tsv'
, sep =
'\t'
)data_train.head(
)data_train.shape
# 提取訓練集中的文字內容
train_sentences = data_train[
'phrase'
]# 提取測試集中的文字內容
test_sentences = data_test[
'phrase'
]# 構建乙個語料庫。通過pandas中的contcat函式將訓練集和測試集的文字內容合併到一起
sentences = pd.concat(
[train_sentence, test_sentence]
)# 合併的一起的語料庫的規模
sentences.shape
# 提取訓練集中的情感標籤
label = data_train[
'sentiment'
]# 匯入停詞庫
stop_words =
open
('./stop_words.txt'
, encoding =
'utf-8'
).read(
).splitlines(
)
詞袋模型,tf-idf模型,word2vec模型進行文字的特徵工程。
3.1 構建模型
二選一:
詞袋模型
from sklearn.feature_extraction.text import countvectorizer
co = countvectorizer(
analyzer =
'word'
, ngram_range=(1
,4),
stop_words=stop_words,
max_features=
15000
)
tf-idf模型
from sklearn.feature_extraction.text import tfidfvectorizer
tf = tfidfvectorizer(
analyzer =
'word'
, ngram_range=(1
,4),
max_features=
150000
)
3.2 訓練模型
二選一:
co.fit(sentences)
tf.fit(sentences)
3.3 資料集拆分
將訓練集隨機拆分為新的訓練集和驗證集
from sklearn.model_selection import train_test_split
x_train,x_test,y_train,y_test = train_test_split(train_sentence, label,random_state =
1234
)#- x_train 訓練集資料 (相當於課後習題)
#- x_test 驗證集資料 (相當於模擬考試題)
#- y_train 訓練集標籤 (相當於課後習題答案)
#- y_test 驗證集標籤(相當於模擬考試題答案)
3.4 拆分後的訓練集和驗證集特徵工程
二選一:
用詞袋模型,把訓練集和驗證集進行特徵工程變為向量。
x_train = co.transform(x_train)
x_test = co.transform(x_test)
#檢視訓練集中的乙個資料
x_train[
1]
用 tf-idf 模型,把訓練集和驗證集進行特徵工程變為向量。
x_train = tf.transform(x_train)
x_test = tf.transform(x_test)
x_train[
1]
4.1 多項式樸素貝葉斯分類器from sklearn.*****_bayes import multinomialnb
classifier = multinomialnb(
)classifier.fit(x_train,y_train)
print
('詞袋方法進行文字特徵工程,使用sklearn預設的多項式樸素貝葉斯分類器,驗證集上的**正確率'
, classifier.score(x_test,y_test)
)
4.2 邏輯回歸分類器from sklearn.linear_model import logisticregression
#例項化乙個邏輯回歸類
lgl = logisticregression(
)#訓練模型
lgl.fit(x_train,y_train)
#**正確率
print
('詞袋方法進行文字特徵工程,使用sklearn預設的邏輯回歸分類器,驗證集上的**正確率'
,lgl.score(x_test,y_test)
)
4.3 增加了2個引數的邏輯回歸分類器lg2 = logisticregression(c=
3,dual=
true
,solver=
'liblinear'
)
超引數的網格搜尋 gridsearchcv
在邏輯回歸中增加c和dual這兩個引數可以提高驗證集上的**準確率,每次手動太麻煩。
使用sklearn提供強大的網格搜尋功能進行超引數的批量試驗。
搜尋空間:1-9。對每乙個c,都分別嘗試dual為true和false的兩種引數。
最後從所有引數中跳出能夠使模型在驗證集**準確率最高的。
from sklearn.model_selection import gridsearchcv
param_grid =
lggs = logisticregression(
)grid = gridsearchcv(lggs, param_grid=param_grid,cv=
3, n_jobs=-1
)grid.fit(x_train,y_train)
#最優引數
grid.best_params_
#獲取最佳模型
lg_final = grid.best_estimator_
print
('經過網格搜尋,找到最優超引數組合對應的邏輯回歸模型,在驗證集上的**正確率'
, lg_final.score(x_test,y_test)
)
#使用tf-idf對測試集中的文字進行特徵工程
test_x = tf.transform(data_test[
'phrase'])
# 對測試集中的文字,使用lg_final邏輯回歸分類器進行**
predictions = lg_final.predict(test_x)
# 檢視**結果
predictions
#將測試結果加在測試集中
data_test.loc[:,
'sentiment'
]= predictions
data_test.head(
)
#loc通過索引標籤來抽取資料:
final_data = data_test.loc[:,
['phraseid'
,'sentiment']]
final_data.head(
)#儲存為.csv檔案,即為最終結果
final_data.to_csv(
'final_data.csv'
,index=
none
)
lg2 = logisticregression(c=
3,dual=
true
)
這語句會報錯,不知道什麼原因?
留坑!! !
利用sklearn進行豆瓣電影評論的文字分類
在之前,我已經在豆瓣電影top250中爬取了約6w條好評和差評,在此我們來利用這些資料,進行入門級別的文字分類。使用xlrd庫進行xlsx檔案的讀取,讀取完畢後使用jieba分詞工具進行分詞。import numpy as np import pandas as pd import re impor...
電影評論二分類問題
jyupter notebook上編寫 from tensorflow.python.keras.datasets import imdb import numpy as np train data,train labels test data,test labels imdb.load data ...
貝葉斯(Kaggle比賽之影評與觀影者情感判定)
本文參考部落格而來 import re 正規表示式 from bs4 import beautifulsoup html標籤處理 import pandas as pd 資料匯入 train pd.read csv f learning tensorflow bynet bags of popcor...