一、作業要求
給定訓練集spam_train.csv,要求根據每個ID各種屬性值來判斷該ID對應角色是Winner還是Losser(收入是否大於50K),這是一個典型的二分類問題。
訓練集介紹:
- CSV文件,大小爲4000行X59列;
- 4000行數據對應着4000個角色,ID編號從1到4001;
- 59列數據中, 第一列爲角色ID,最後一列爲分類結果,即label(0、1兩種),中間的57列爲角色對應的57種屬性值;
二、思路分析及代碼實現
思路分析:
這是一個典型的二分類問題,結合課上所學內容,決定採用Logistic迴歸算法。
與線性迴歸用於預測不同,Logistic迴歸則常用於分類(通常是二分類問題)。Logistic迴歸實質上就是在普通的線性迴歸後面加上了一個sigmoid函數,把線性迴歸預測到的數值壓縮成爲一個概率,進而實現二分類(關於線性迴歸模型,可參考上一次作業)。
在損失函數方面,Logistic迴歸並沒有使用傳統的歐式距離來度量誤差,而使用了交叉熵(用於衡量兩個概率分佈之間的相似程度)。
代碼實現:
具體原理可參考:傳送門
1. 數據預處理
讀入文件,先將最後兩列進行歸一化操作。然後將文件分爲訓練集和驗證集,並分佈保存爲python文件,方便調用。
2. 訓練
定義激活函數sigmoid和損失函數compute_loss。
開始利用梯度下降法進行訓練,並每隔三輪驗證一下訓練集的預測精度。
輸出訓練結果。
3. 預測
利用訓練結果進行預測。
數據集和代碼見:代碼地址