KNN算法----分类模型

75 篇文章 2 订阅
66 篇文章 5 订阅

KNN 算法的原理及实现—手动写法

import numpy as np 
import matplotlib.pyplot as plt
from math import sqrt
from collections import Counter

x = [
    [2.40,2.0],
    [4.1,2.8],
    [1.2,1.4],
    [0.6,3.7],
    [1.3,2.5],
    [6.4,4.2],
    [1.7,4.5],
    [8.2,3.5]
]

y= [0,0,0,0,0,1,1,1]
sample = [5.0,6.2]
k = 3

x_train = np.array(x)
y_train = np.array(y)

distance =[]
for i in x_train:
    d =sqrt(np.sum(i - sample)**2)
    distance.append(d)
nearst = np.argsort(distance)[:k]
# print(nearst)
k_y = [y_train[j] for j in nearst]
# print(k_y)
count = Counter(k_y)
print(count)
count.most_common(1)[0][0]

plt.scatter(x_train[y_train == 0,0],x_train[y_train == 0,1],color = 'g')
plt.scatter(x_train[y_train == 1,0],x_train[y_train == 1,1],color = 'r')
plt.scatter(5.0,6.2,color = 'b')
plt.show()

用 KNN 算法,对 scikit-learn 内置的手写数字识别数据集进行预测

1.导入scikit-learn 内置的手写数字识别数据集
import numpy as np
import pandas as pd
from sklearn import datasets
iris = datasets.load_digits()

# iris.keys()
x = iris.data
y = iris.target

2.将数据分为训练集和测试集
from sklearn.model_selection import train_test_split
x_train,x_test,y_train,y_test = train_test_split(x,y,test_size = 0.2,random_state = 666)

3.将数据进行归一化
from sklearn.preprocessing import StandardScaler
standscaler = StandardScaler() # 创建实例
standscaler.fit(x_train) # 训练数据,不需要特征y   存储计算出来的均值和方差

# 对数据及逆行转换,用于测试数据
std_x_train = standscaler.transform(x_train)  # 用fit中存储的均值和方差来转换x_train,使x_train标准化
std_x_test = standscaler.transform(x_test)

4.构建KNN模型
from sklearn.neighbors import KNeighborsClassifier
clf = KNeighborsClassifier(n_neighbors = 6)
clf.fit(std_x_train,y_train)
clf.score(std_x_test,y_test)

5.KNN模型进行网格搜索,寻找最优的模型和参数
from sklearn.model_selection import GridSearchCV
clf = KNeighborsClassifier()
param_grid = [{
    'n_neighbors':[i for i in range(0,10)],
    'weights':['uniform','distance']
}]
gs_clf = GridSearchCV(clf,param_grid = param_grid)
gs_clf.fit(std_x_train, y_train)
gs_clf.best_estimator_
gs_clf.best_params_
# gs_clf.best_score_
6.利用最优的模型对测试集进行预测,计算预测的准确度
clf = KNeighborsClassifier(n_neighbors = 6,weights = 'distance')
clf.fit(std_x_train,y_train)
clf.score(std_x_test,y_test)
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值