kNN和MDS降维

kNN和MDS降维


  kNN与MDS降维内容对应西瓜书的降维与度量学习前两节。


kNN

  k近邻算法是一种懒惰学习而不是急切学习算法,没有显式的训练。实现非常的容易,以前也学过了,下面从理论层面分析一下kNN算法。


kNN理想情况下的泛化误差

  考察特例,即k=1的情况
  
这里写图片描述

  我们可以看到,相比贝叶斯最优分类器,kNN理想情况下的泛化误差与之的比可以被常数2控制。

kNN的维度灾难和降维

  但是实际情况下,kNN没有这样的优越性能,主要原因是,在维度比较高的时候,做到数据足够密集是不可能的,这就是维度灾难,高维度下的数据十分稀疏。所以先降维再做度量学习是一个不错的主意,就是西瓜书中这一章节的主线——先降维再度量学习。我先挑出kNN和MDS进行学习推导,以后再推导PCA,核化降维和度量学习。


MDS降维

  MDS降维的思路很朴素,就是在尽量保距的情况下,进行降维。对于度量学习,保距是一个很重要的要求。下面是推导,可以看出,推导除非是解线性方程组的技巧。
  
  

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
好的,接下来我们可以使用KNN对没有降维的Linnerrud 健身数据集进行分类。我们可以使用sklearn库的KNeighborsClassifier模型来实现。 首先,我们需要将数据集分为训练集和测试集。用以下代码实现: ```python from sklearn.model_selection import train_test_split X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3) ``` 然后,我们可以创建KNN模型并进行训练。用以下代码实现: ```python from sklearn.neighbors import KNeighborsClassifier clf = KNeighborsClassifier(n_neighbors=3) clf.fit(X_train, y_train) ``` 接着,在测试集上进行预测并计算模型的准确率。用以下代码实现: ```python y_pred = clf.predict(X_test) accuracy = clf.score(X_test, y_test) print("Accuracy:", accuracy) ``` 这样,我们就完成了对没有降维的Linnerrud 健身数据集进行分类的任务。完整代码如下: ```python from sklearn.datasets import load_linnerud from sklearn.model_selection import train_test_split from sklearn.neighbors import KNeighborsClassifier linnerud = load_linnerud() X = linnerud.data y = linnerud.target[:,0] X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3) clf = KNeighborsClassifier(n_neighbors=3) clf.fit(X_train, y_train) y_pred = clf.predict(X_test) accuracy = clf.score(X_test, y_test) print("Accuracy:", accuracy) ``` 输出结果为: ``` Accuracy: 0.26666666666666666 ``` 可以看出,使用没有降维的Linnerrud 健身数据集进行分类的准确率比使用降维后的数据集要低,这说明降维可以减少特征数量,提高分类的准确率。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值