[英]What distance function is scikit-learn using for categorical features?
我正在學習一點ML。 我知道k最近鄰(kNN)的基礎知識,但我一直在示例中始終看到它用於連續數據。
我正在關注的教程現在使用kNN對一些混合類型的數據(連續特征和一些分類特征)進行分類。 我知道連續的通常只使用諸如歐幾里得距離之類的東西,但是當它們混合時如何處理呢?
我知道如何輕松地計算一個二進制變量的距離,但是沒有“順序”的絕對變量又如何呢?
編輯:我正在關注Kaggle問題的本教程。 清除數據后,他具有以下形式:
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個年齡段),分類但無序(例如,Embarked基於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
然后將它們全部傳遞給kNN,如下所示:
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呢? 我們尚未提供任何信息或指示。
sklearn的kNN將對所有功能使用相同的(選擇的)度量(在API中指示;沒有選擇混合度量!)。
沒錯,在混合情況下這是有問題的,但是為此准備數據是您的工作! 標准的方法是使用一個熱碼為解釋在這里 :
通常,特征不是連續值,而是分類值。
...
這樣的整數表示不能直接與scikit-learn估計器一起使用,因為它們期望連續輸入,並且會將類別解釋為有序的,這通常是不希望的(即,任意設置瀏覽器的順序)。
將分類特征轉換為可與scikit-learn估計器一起使用的特征的一種可能性是使用在OneHotEncoder中實現的K之一或一熱編碼。 該估計器將具有m個可能值的每個分類特征轉換為m個二進制特征,並且只有一個處於活動狀態。
根據您的數據,這可能會增加很多功能! 在這種情況下,您需要做出決定:
Note: fitting on sparse input will override the setting of this parameter, using brute force.
)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.