簡體   English   中英

scikit-learn使用什么距離函數來分類特征?

[英]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個二進制特征,並且只有一個處於活動狀態。

根據您的數據,這可能會增加很多功能! 在這種情況下,您需要做出決定:

  • 使用密集的數據結構(並且仍然能夠在內部使用kd-trees / ball-trees)
  • 使用稀疏數據結構(將使用蠻力查找; Note: fitting on sparse input will override the setting of this parameter, using brute force.

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM