机器学习-浅谈KNN算法

作为刚开始学习机器算法,其中knn算法是比较重要的,我就根据自己的相关理解来浅谈一下knn算法,请大佬指正不正确的地方,我努力改正。

1.knn算法步骤

首先选择k个与目标相近的邻居,然后根据欧几里得距离计算离目标最近的k个邻居,在这k个邻居中数出每个类别数量的邻居,将目标划分到在这k个邻居中数量最多的那个类别,直到把所有的目标数据点划分完成。

import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
dataset = pd.read_csv('./data/Social_Network_Ads.csv')
#特征提取
X = dataset.iloc[:, [2, 3]].values
y = dataset.iloc[:, 4].values
print(dataset)
#划分数据集
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.202, random_state = 0)
from sklearn.preprocessing import StandardScaler
sc = StandardScaler()
X_train = sc.fit_transform(X_train)
X_test = sc.transform(X_test)

2.1.手动knn调参

#手动knn调参
from sklearn.neighbors import KNeighborsClassifier
classifier1 = KNeighborsClassifier(n_neighbors = 5, metric = 'minkowski', p = 2)   #K就是n_neighbors     p=1是曼哈顿距离,p=2是欧式距离
classifier1.fit(X_train, y_train)                                                                        #p趋于无穷大是切比雪夫距离
classifier1.score(X_test,y_test)   #准确率

2.2.自动knn调参

#4、调参,p超参数
best_score=0.0
best_k=-1
best_weight ='distance'
best_p=0
for j in range(1,6):#p值
    for i in range(1,11): # 如果最大k值为最优,需要继续更大的k值循环
            #print(i)
            knn_clf = KNeighborsClassifier(n_neighbors=i, weights=best_weight, p=j) # 创建空分类器
            knn_clf.fit(X_train, y_train) #训练
            score = knn_clf. score(X_test, y_test)#查看准确率
            
            if best_score < score:
                best_score=score
                best_k = i
                best_p = j
              

print('best_weight = {} 的条件下:'.format (best_weight))
print (' best_score ={}'.format (best_score))
print('best_k = {}'. format(best_k))

在选择knn算法模型的时候可以选择2.1的手动调参,也可以选择2.2的自动找参数(只需要适当的划分数据集即可)

不断努力中...

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值