我正在學習一點ML。我知道k-最近鄰居(kNN)的基本知識,但我一直認爲它用於例子中的連續數據。什麼距離函數是用於分類特徵的scikit-learn?
我現在使用的教程使用kNN對混合類型(連續特徵和幾個分類特徵)的某些數據進行分類。我知道對於連續的人來說,通常只是使用像歐幾里德距離或其他東西,但是當它們混合時它們如何處理呢?
我看到如何容易地計算一個二元變量的距離,但是如果沒有「訂單」的分類變量呢?
編輯:我正在關注Kaggle問題的this教程。潔淨數據之後,他有它的形式:
Survived Pclass Sex Age Fare Embarked Title IsAlone Age*Class
0 0 3 0 1 0 0 1 0 3
1 1 1 1 2 3 1 3 0 2
2 1 3 1 1 1 0 2 1 3
3 1 1 1 2 3 0 3 0 2
4 0 3 0 2 1 0 1 1 6
5 0 3 0 1 1 2 1 1 3
6 0 1 0 3 3 0 1 1 3
7 0 3 0 0 2 0 4 0 0
8 1 3 1 1 1 0 3 0 3
9 1 2 1 0 2 1 3 0 0
(其中第一列實際上是ID)
所以這是一個有點陌生,因爲它是二進制的混合(如性別)分類和有序的(例如,年齡分爲4或5個年齡段),以及分類但是無序的(例如,根據他們上過哪個端口,已經入住的是0,1或2,所以我認爲它沒有訂購)。
的數據拆分,像這樣:
X_train = train_df.drop("Survived", axis=1)
Y_train = train_df["Survived"]
X_test = test_df.drop("PassengerId", axis=1).copy()
X_train.shape, Y_train.shape, X_test.shape
然後這一切只是被傳遞給k近鄰是這樣的:
knn = KNeighborsClassifier(n_neighbors = 3)
knn.fit(X_train, Y_train)
Y_pred = knn.predict(X_test)
acc_knn = round(knn.score(X_train, Y_train) * 100, 2)
acc_knn
那麼它是如何做的kNN東西?我們沒有給出任何信息或指示。
嗨,感謝您的迴應,它的內容非常豐富。我想我感到困惑的是,在我遵循的Kaggle教程中(https://www.kaggle.com/startupsci/titanic-data-science-solutions/notebook),他們只是天真地將kNN應用於火車/測試數據與所有其他模型一樣,其中包含混合功能,而不提供任何信息。這種混合數據在內部做什麼?謝謝。 – MasterZibZob
不,他們不是!他們正在將其應用於大量預處理的數據。 – sascha
對不起,我應該讓它更清楚我的OP(我現在編輯它)。數據是預處理和所有分類(我注意到我的帖子後),但它仍然是「不同」的分類類型,有些是二進制的,有些是多/有序的,有些是多/不是有序的。 kNN如何知道如何對這些不同類型應用距離? – MasterZibZob