[2019計算機視覺]——貪心學院 學習筆記 【實驗】2.2 使用邏輯函數 對垃圾短信的分類 基於數據集SMSSpamCollection

1. 數據集介紹

1. SMSSpamCollection數據集

英文詳細介紹看這裏
我簡單歸納一下,
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’]

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