kaggle----NLP線性迴歸---Real or Not? NLP with Disaster Tweets

依然是按照老樣子拿到了我們的訓練集測試集還有提交模板
競賽網站:
https://www.kaggle.com/c/nlp-getting-started/overview/description

數據初步可視化

import numpy as np
import pandas as pd
from sklearn import feature_extraction, linear_model, model_selection, preprocessing
train = pd.read_csv('路徑/train.csv')
test = pd.read_csv('路徑/test.csv')

此處以keyword作爲例子,查看不同的度量對於預測結果的影響

#劃分數據集,查看相應變量中的
target1=train.keyword[train.target == 1].value_counts()
target0=train.keyword[train.target == 0].value_counts()
df=pd.DataFrame({'target1':target1,'target0':target0})
df.plot(kind='bar',stacked=True,title='keyword')

當然呢,這個圖可能略顯的凌亂,但我們可以發現有的藍色條尤其長是說明其中有的keyword是對於判斷文本是否是有顯著影響的,我們可以點開詳情查看統計
在這裏插入圖片描述
發現了次數的統計,那麼這幾個keyword就可以作爲後續的限制條件
在這裏插入圖片描述

本例只做了簡單樣例,各位老闆做參考就可

向量構築

每條 tweet中包含的單詞都是一個很好的指標,表明它們是否是真正的Disaster (可能並不完全正確)。
使用scikit learn中的countvector對每條tweet中的單詞進行計數,並將它們轉換爲機器學習模型可以處理的數據。

注:在這種情況下,向量是機器學習模型可以使用的一組數字

用前五條爲例

count_vectorizer = feature_extraction.text.CountVectorizer()
# count_vectorizer.get_feature_names() 可以查看生成的字典名

# count_vectorizer.vocabulary_  字典形式呈現,key:詞,value:詞頻
# 讓我們計算一下數據中前5條tweets的單詞數量
example_train_vectors = count_vectorizer.fit_transform(train["text"][0:5])
## 我們在這裏使用.todense(),因爲這些向量是“離散的”(只保留非零元素以節省空間)
print(example_train_vectors[0].todense().shape)
print(example_train_vectors[0].todense())

參考:sklearn——CountVectorizer詳解
在這裏插入圖片描述

上面告訴我們:
前五條 tweets中有54個獨特的單詞(或“標記”)。
第一條tweet([0])只包含其中一些唯一的標記——上面所有的非零計數都是第一條tweet中存在的標記。

現在爲所有的tweets創建向量:

train_vectors = count_vectorizer.fit_transform(train_df["text"])

## 注意,這裏沒有使用.fit_transform(),只是用了.transform()確保列向量中的標記是映射到測試向量的唯一標記
# 也就是說,訓練集向量和測試集向量使用同一組變化
test_vectors = count_vectorizer.transform(test_df["text"])

線性模型

正如前面提到的,每條tweet中包含的文字是一個很好的指標,可以判斷它們是否是Disaster。tweet中特定單詞(或一組單詞)的出現可能直接鏈接到該tweet是否真實。

假設這是一個線性關係,建立一個線性模型看看!

我們的向量很大,所以我們想推進模型的權重趨近於0但不完全消除,ridge regression是一個很好的方式

clf = linear_model.RidgeClassifier()

使用交叉驗證,我們對已知數據的一部分進行訓練,然後使用其他數據對其進行驗證。

這次競賽的評價標準是F1,所以我們的模型也選用這個標準
在這裏插入圖片描述

scores = model_selection.cross_val_score(clf, train_vectors, train_df["target"], cv=3, scoring="f1")

在這裏插入圖片描述

預測並提交模型

clf.fit(train_vectors, train_df["target"])

在這裏插入圖片描述

sample_submission = pd.read_csv("路徑/sample_submission.csv")
sample_submission["target"] = clf.predict(test_vectors)
sample_submission.head()

在這裏插入圖片描述

sample_submission.to_csv("路徑/submission.csv", index=False)

完成,可以提交

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章