我正在学习一点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