2017-08-29 96 views
2

我目前正在與既有分類和連續特徵的數據幀的工作多分類,看起來像這樣:Logistic迴歸 - 與分類變量

https://ibb.co/bKJwSQ

我想運行一個邏輯迴歸預測目標值。在這種情況下的目標值是種族,可以是「A」,「W」,「B」,「H」,「N」或「O」,代表「亞洲」,「白色」,「黑色「,」西班牙裔「,」美洲原住民「或」其他「。

我已經將所有功能轉換爲虛擬變量(除了來自「比賽」欄),在一個名爲「傻瓜」的新數據框中。訓練模式,我用這個代碼:

from sklearn import linear_model, metrics 

X = dummies.drop("race", axis=1) 
y = dummies["race"] 

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=101) 


from sklearn.linear_model import LogisticRegression 

logmodel = LogisticRegression() 
logmodel.fit(X_train, y_train) 

predictions = logmodel.predict(X_test) 

我沒有得到任何錯誤,但是,當我在看分類矩陣我得到的1.00都準確率,召回和f1-分滿分。這似乎有點太好,不能成爲真的...我做錯了什麼?

這是我用假人轉換代碼:

dummies = pd.get_dummies(df[["date", "armed", "age", "gender", "city", "state", "signs_of_mental_illness", "threat_level", "flee", "body_camera", "total_population"]], drop_first=True) 
dummies = pd.concat([df, dummies], axis=1) 

dummies.drop(df[["date", "armed", "age", "gender", "city", "state", "signs_of_mental_illness", "threat_level", "flee", "body_camera", "total_population"]], axis=1, inplace=True) 
+0

你可以分享你的數據,你使用的代碼將其轉換爲虛擬變量? –

+0

@VivekKumar,把它放在問題的最後。 –

+1

和數據?請做一個完整的[mvce示例](https://stackoverflow.com/help/mcve) –

回答

0

你得到完美的1.0的分類評分的原因是因爲你是治療數值數據爲分類數據。當您在數據框的所有列上使用pandas.get_dummies時,實質上是將所有日期,年齡等(即數字數據)轉換爲虛擬變量指示器,這是不正確的。這是因爲在這樣做時,您正在爲數據集中的所有年齡段創建虛擬變量。對於你的小數據集有可能做到這一點,但在現實世界的情況下,這意味着對於1-100歲,你將有100種不同的可能組合!對於pandas.get_dummies描述如下:

轉換分類變量成虛設/指示器變量

這是使用分類的不正確的方式。我建議你只使用pandas.get_dummies()來轉換分類變量,然後驗證結果。 至於爲什麼你得到100%的準確性:這是因爲你可以通過使用這種不正確的技術將數字列轉換成分類類型來考慮所有可能的情況(因爲你的數據集很小,這種技術不會太多但是,對於真實世界的情況,這是不正確的)。

如果您想查看一些其他方式來編碼您的數據,check out this link

您的數據也包含數字列。考慮到這一點,只有這樣你才能得到正確的結果。