KNN 是有监督算法
前提
KNN使用要求(同时满足)
1,有y
2,y是类别类型(y是离散的)
概念
所谓K最近邻,就是k个最近的邻居的意思,每个样本都可以用它最接近的k个邻居来代表
K最近邻算法的核心思想是:如果一个样本在特征空间中的k个最相邻(最相似,距离最近)的样本中的大多数属于某一个类别,则该样本也属于这个类别,并具有这个类别上样本的特性
近朱者赤,近墨者黑


实战经验
局限:
适用于10w行数据以下(每次分类都要进行全局算距离)
准确度不是很高
优点:
随时加入数据都可以
KNN和KMeans区别
1,有没有y(监督,无监督):KNN有y,监督类算法
2,算法原理:KMeans有挨个遍历各个点的距离,聚成簇,KNN没有
3,KNN结果是分类(监督类),KMeans结果是簇(非监督类)
代码
导入模块
KMeans
from sklearn.cluster import KMeans
DBSCAN
from sklearn.cluster import DBSCAN
KNN
from sklearn.neighbors import KNeighborsClassifier
函数

参数
n_neighbors 邻居数,默认为5 int型
weight 权重,默认为'uniform'(领域内所有点的权重一样),可改为'distance'(越近权重越大)
方法

总结:监督类型的算法都是围绕 fit(),predict(),score()三个方法
导入包

编程 项目流程

1,数据准备

2,划分训练集和测试集
先用?提示所需要的参数

test_size是测试集,默认是None,
train_size是训练集,默认是None,
只需要给其中一个系统自动就知道另一个了,这里给出测试集是0.2

看看x_train这四个numpy arry是几行几列 .shape

3,构建训练模型

4,预测(可能没有)
用knn.predict(X) 注意预测()里面只有x,没有y

得到的预测数据y_p和测试数据y_test个数都一样,说明预测成功了
5,准确度
用knn.score(X,Y) 越接近1越好


全文代码
#### 导入包
import numpy as np
#datasets是自带demo数据集,方便自学
from sklearn import datasets
#train_test_split是数据集划分 8:2 7:3
from sklearn.model_selection import train_test_split
#KNN
from sklearn.neighbors import KNeighborsClassifier
#### 鸢尾花iris数据集
iris = datasets.load_iris()
"""
sepal length: 萼片长度(厘米)
sepal width: 萼片宽度(厘米)
petal length: 花瓣长度(厘米)
petal width: 花瓣宽度(厘米)
"""
#### 数据准备
iris
x = iris['data']
x
y = iris['target']
y
#### 训练集和测试集划分
train_test_split?
x_train, x_test, y_train, y_test = train_test_split(x, y, test_size=0.2)
#看看数据几行几列
x_train.shape
x_test.shape
y_train.shape
y_test.shape
x.shape
y.shape
#### 构建训练模型
knn = KNeighborsClassifier() #模型准备
knn.fit(x_train,y_train) #模型训练
#### 预测(可能没有)
knn.predict?
y_p = knn.predict(x_test)
y_p
y_test
#### 准确度
knn.score(x_test,y_test)
1432

被折叠的 条评论
为什么被折叠?



