KNN 是有监督算法
KNN使用要求(同时满足)
1,有y
2,y是类别类型(y是离散的)
所谓K最近邻,就是k个最近的邻居的意思,每个样本都可以用它最接近的k个邻居来代表
K最近邻算法的核心思想是:如果一个样本在特征空间中的k个最相邻(最相似,距离最近)的样本中的大多数属于某一个类别,则该样本也属于这个类别,并具有这个类别上样本的特性
局限:
适用于10w行数据以下(每次分类都要进行全局算距离)
准确度不是很高
优点:
随时加入数据都可以
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()
三个方法
test_size是测试集,默认是None,
train_size是训练集,默认是None,
只需要给其中一个系统自动就知道另一个了,这里给出测试集是0.2
看看x_train这四个numpy arry是几行几列 .shape
用knn.predict(X)
注意预测()里面只有x,没有y
得到的预测数据y_p和测试数据y_test个数都一样,说明预测成功了
#### 导入包
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)