2017-12-02 186 views
0
我使用Scikit學會做工作

K最近Neigbour分類:Scikit學習不字符串值在KNN

from sklearn.neighbors import KNeighborsClassifier 

model=KNeighborsClassifier() 
model.fit(train_input,train_labels) 

如果打印我的數據:

print("train_input:") 
print(train_input.iloc[0]) 
print("\n") 
print("train_labels:") 
print(train_labels.iloc[0]) 

我得到這樣的:

train_input: 
PassengerId       1 
Pclass        3 
Name   Braund, Mr. Owen Harris 
Sex        male 
Age         22 
SibSp        1 
Parch        0 
Ticket      A/5 21171 
Fare        7.25 
Cabin        NaN 
Embarked        S 
Name: 0, dtype: object 


train_labels: 
0 

代碼失敗,此錯誤:

ValueError        Traceback (most recent call last) 
<ipython-input-21-1f18eec1e602> in <module>() 
    63 
    64 model=KNeighborsClassifier() 
---> 65 model.fit(train_input,train_labels) 
ValueError: could not convert string to float: 'Q' 

那麼,KNN算法不適用於String值嗎?

如何修改我的數據,使其符合Scikit-Learn中的KNN實現?

+2

問題不在於Scikit Learn,而在於您的理解/制定。 kNN衡量特徵空間中「接近」是兩個數據點。爲了使其正常工作,您必須對功能進行編碼,以便測量差異/距離。例如。從男性到女性的區別在於語義,而不是字符串表示。因此,如果你編碼「男= 0」和「女= 1」,你可以開始測量差異。同樣適用於其他所有「功能」。 –

+0

不僅僅是KNN,所有scikit估計器都只能處理數字數據。 –

回答