1. 數據集介紹
1. SMSSpamCollection數據集
英文詳細介紹看這裏
我簡單歸納一下,
第一列是短信的label,ham表示非垃圾短信,spam表示垃圾短信。在\t鍵後是短信正文。
2. 數據集的獲取
點擊這裏下載(大約0.5MB很快的)
2. 我的實驗
導入要用的包
import pandas as pd
from sklearn import linear_model
from sklearn.feature_extraction.text import TfidfVectorizer # sklearn包中,特殊提取中的文本模塊中,特殊字符向量化方法
1. 讀入數據集
我放到的目錄是當前工作目錄下的date文件夾下
# 讀取文件
path = "date/" # 請根據自己的文件目錄方式填寫path
filename = "SMSSpamCollection"
df = pd.read_csv(path + filename, delimiter='\t', header=None)# 用\t分割,沒有文件頭
# 生成label和x輸入
y, X_train = df[0], df[1]
2. 預處理
因爲Logit迴歸的輸入必須是數值的,而這個數據集是文本的,故要對label和x都做預處理
sklearn.feature_extraction.text.TfidfVectorizer,計算單詞在所給數據集中的頻率和在當前數據中的頻率。對單詞在所有數據集中的概率做導數。
# 向量化
vectorizer = TfidfVectorizer()
X = vectorizer.fit_transform(X_train)
3. 訓練模型
# 使用Logic迴歸方法訓練
lr = linear_model.LogisticRegression()
lr.fit(X, y)
運行結果
LogisticRegression(C=1.0, class_weight=None, dual=False, fit_intercept=True,
intercept_scaling=1, max_iter=100, multi_class=‘ovr’, n_jobs=1,
penalty=‘l2’, random_state=None, solver=‘liblinear’, tol=0.0001,
verbose=0, warm_start=False)
4. 進行測試
# 測試
testX = vectorizer.transform(['Urgent: Your mobile No. 1234 was awarded a Prize!',
'Hey honey, whats up?'])
predictions = lr.predict(testX)
print(predictions)
運行結果
[‘spam’ ‘ham’]