scikit-learn Tutorials-KNN

scikit-learn Tutorials-KNN

@(scikit-learn)


scikit-learn处理的数据是二维数组的形式的,数组的第一个轴是Sample(样本)轴,第二个轴是”Feature”(特征)轴;
例如:以Iris花数据集为例,Jupyter输入:

    from sklearn import datasets
    iris=dataset.load_iris()
    data=iris.data
    data.shape
    //输出(1504

以上150个样本,4个特征;
如果数据不是(nsample,nfeature)这样的,需要经过预处理才能在scikit-learn使用
例如:digits数据集

    digits=datasets.load_digits()
    digits.images.shape
    //(1797,8,8)

为了在scikit-learn中使用digits数据集,需要将每个8*8的图像转换为一个长度为64的特征向量:

data=digits.images.reshape((digits.images.shape[0],-1))
data.shape
//(1797,64)

监督学习在于学习两个数据集之间的联系,以观察的数据集X和一个预测变量y,成为目标或者标签,通常y是个一维数组,长度为nsample长度。
监督学习估计器实现了一个训练方法fit(X,y)来训练模型,一个predic(X)方法,给定一个数据集X,返回预测数据y。


如果一个预测任务是使用一组有限标签来对观察进行分类,成为分类问题,如手写数字识别就是个分类任务;如果目标是预测一个连续目标变量的值,称为一个回归问题,如kaggle上的房价预测。


我们使用的第一个分类算法是KNN(k-Nearest neighbors 最近邻算法)
k近邻算法写在CSDN博客,点击查看
scikit-learn教程最近邻详解,点击链接
scikit-learn提供了两种最近邻分类器方法:KNeighborsClassifier:就是一般意义上的k近邻算法,选取测试点附近k个最近点的label,按照投票来选择出现最多的label作为测试样本的label,k可以由用户指定;
RadiusNeighborsClassifier:用户指定一个固定的半径r,在测试点为圆心,半径r内选取近邻点,根据投票选择出现最多的label作为测试样本的label。(高维参数空间不太适用。)
两个分类器方法都可以选择权重系数weights=’uniform’,weights=’distance’,uniform表示k近邻点的权重是均匀的,而distance是按照离测试点的距离来分配权重,离得越近权重越大,一般就是k*1/d

    from sklearn.neighbors import KNeighborsClassifier
    from sklearn.neighbors import RadiusNeighborsClassifier

同理:scikit-learn提供了两种最近邻回归方法:KNeighborsRegressor和RadiusNeighborsRegressor解释和分类器类似,同样提供了权重选择参数。

    from sklearn.neighbors import KNeighborsRegressor
    from sklearn.neighbors import RadiusNeighborsRegressor

最近邻的实现算法:上述博客中一般使用的是1、暴力法(Brute Force),即分别和训练集N中每个点求距离,每个点是D维度的,总的时间复杂度为O[DN^2],训练集增大,所消耗的时间会非常大;
2、K-D树:当点A和点B距离非常远,而点B和点C距离很近,那么点A和点C距离也是非常远才是,这样就节省了A-C距离计算了。
通过使用KD树,最近邻算法的复杂度可以降到O[DNlog(N)],KD树对低维样本数据是非常快的(D<20),但是维度更高,KD树效率也不高;
3、Ball-Tree:应对高维数据更有效。
以上三种通过在分类/回归方法中作为参数传入,如KNeighborsClassifier(algorithm=’brute’ or ‘kd_tree’ or ‘ball_tree’)
而上述分类/回归方法中algorithm参数默认为’auto’,函数会根据N值自动选择合适的算法计算。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值