风火编程--机器学习之k近邻(knn)

机器学习算法–k近邻

描述
根据距离(欧拉距离,曼哈顿距离等)最近的k个样本进行类别的投票, 票数最高的类别. 认为是该样本的类别是所属类别. k值可以通过网格搜索确定,过小容易受异常点影响,泛化能力弱, 过大会削弱距离的作用
效率低,不具有可解释性,维度灾难(距离随维度的升高迅速变大),需要pca降维. 需要进行归一化处理.
适用于样本数量不大的训练集, 没有可解释性要求的场景.
python实现
x_train为训练集, x为测试样本

import numpy as np
from collections import Counter
distences = [sqrt(sum((x_t-x)**2)) for x_t in x_train]
nearest = np.argsort(distences)[:k]
# distence的索引和y_train是一一对应的
topk_y = y_train[nearest]
# 统计每个元素出现的次数,返回类字典的counter结果集
votes = Counter(topk_y)
# 取出出现次数最多的一个元素的item,用列表保存.
ret = votes.most_common(1)
predict_y = ret[0][0]

sklearn接口

from sklearn.neighbors import KNeighborsClassifier
# k值设置为3
knn = KNeighborsClassifier(n_neighbors=3)

调参
knn默认的参数为: n_neighbors=5,weights=“uniform”
其他可选(区别距离的远近,明可夫司机距离幂指参数为n): weights=“distence”,p=n

from sklearn.model_selection import GridSearchCV

  # 定义参数列表套字典,键是超参数名值是测试值得列表
params = [{
        "weights": ["uniform"],
        "n_neibors": [i for i in range(1,11)]
           },
          {
            "weights": ["distence"],
            "n_neibors": [i for i in range(1,11)],
           "p":[i for i in range(1,6)]
           }
          ]
# 参数为估计器模型实例和参数,交叉验证次数
gride_search = GridSearchCV(cnn,params, cv=5)
gride_search.fit(x_test,y_test)
from sklearn.model_selection import GridSearchCV
# 参数为估计器模型实例和参数,使用CPU内核数,输出测试过程
gride_search = GridSearchCV(cnn,params,n_jobs=-1,verbose=2)
gride_search.fit(x_test,y_test)
# 最佳准确度的值
score1 = gride_search.best_score_
 score2 = gride_search.best_estimator_.score(X_test_s, y)
# 获取最佳参数
param = gride_search.best_params_
# 获取最佳参数的模型
best_knn = gride_search.best_estimator_
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值