iT邦幫忙

2025 iThome 鐵人賽

DAY 18
0
AI & Data

咖狗報到-30天玩轉Kaggle競賽系列 第 18

一起來參加Kaggle競賽-提升實戰經驗

  • 分享至 

  • xImage
  •  

昨天我們玩過 Word2Vec、GloVe、FastText,還有 LSTM。這些方法都很好,但是在 Kaggle 這種比賽裡,有時候「速度 + 穩定性」比什麼都重要。
今天要帶大家看一個經典卻常常被忽略的強力 baseline:TF-IDF + Logistic Regression


為什麼 TF-IDF + Logistic Regression 這麼強?

  1. TF-IDF

    • 它的概念超直覺:字詞出現越多次越重要,但如果所有文章都出現,那它就沒什麼區別力。
    • 所以「字詞頻率 × 逆文件頻率」就是 TF-IDF。
    • 簡單講:抓出在這篇文章特別「顯眼」的詞。
  2. Logistic Regression

    • 雖然名字叫「回歸」,但它其實是分類器。
    • 對高維稀疏資料(像文字轉 TF-IDF 向量),它跑起來又快又穩。
    • 搭配 L2 正則化,還能避免 overfitting。

所以很多 NLP 任務,只要資料不是太複雜,這組合常常能打趴一堆 fancy 的模型。


程式碼實作

今天的程式碼主要分五步:

# =======================
# TF-IDF + Logistic Regression (強力且很快的 baseline)
# =======================

# 1) 讀資料
train_df = pd.read_csv("train.csv")
test_df = pd.read_csv("test.csv")
sample_sub = pd.read_csv("sample_submission.csv")

TEXT_COL = "body"
TARGET_COL = "rule_violation"
X_text = train_df[TEXT_COL].astype(str).values
y = train_df[TARGET_COL].values

# 2) 切分驗證
X_tr, X_val, y_tr, y_val = train_test_split(
    X_text, y, test_size=0.2, random_state=42, stratify=y
)

# 3) 建立 TF-IDF + LR pipeline
word_tfidf = TfidfVectorizer(analyzer="word", ngram_range=(1, 2), min_df=3, max_df=0.9)
char_tfidf = TfidfVectorizer(analyzer="char", ngram_range=(3, 5), min_df=3, max_df=0.95)

features = FeatureUnion([("word", word_tfidf), ("char", char_tfidf)])
clf = LogisticRegression(solver="saga", C=4.0, class_weight="balanced", max_iter=2000)

pipe = Pipeline([("tfidf", features), ("clf", clf)])

# 4) 驗證
pipe.fit(X_tr, y_tr)
val_pred = pipe.predict(X_val)
print("Validation Accuracy:", accuracy_score(y_val, val_pred))
print("Validation F1:", f1_score(y_val, val_pred, average="macro"))

# 5) 全量訓練 + 產生 submission.csv
pipe.fit(X_text, y)
test_pred = pipe.predict(test_df[TEXT_COL].astype(str).values)

sub = sample_sub.copy()
sub[sub.columns[1]] = test_pred
sub.to_csv("submission.csv", index=False)

執行完就能直接丟上 Kaggle 提交啦!🎉


驗證結果

在我的驗證集上,TF-IDF + Logistic Regression 很快就跑出來,準確率和 F1 分數都不差,重點是 速度超快
不用等半天,CPU 就能搞定,真的是比 Kaggle Notebook 裡面跑 LSTM、BERT 爽快太多。


明日計畫

今天我們用 TF-IDF + Logistic Regression 打出一個穩定 baseline。
明天要進一步:

  • 試著調整 n-gram 範圍
  • 嘗試不同 正則化強度 (C 值)
  • 比較 詞袋模型 vs 詞向量 的差異

一步一步堆疊,慢慢往 leaderboard 前進。💪


重點結論:有時候最簡單的方法,反而最可靠。


上一篇
一起來參加Kaggle競賽-提升實戰經驗17(長短期記憶 Long Short-Term Memory,LSTM)
系列文
咖狗報到-30天玩轉Kaggle競賽18
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言