【机器学习算法-K近邻(KNN)】

机器学习笔记(1)-K近邻

  • K近邻算法
  • scikit-learn
  • K近邻算法API
  • 案例
    • 机器学习算法步骤
  • k值的选择
  • 鸢尾花数据集种类预测
  • 鸢尾花数据集案例实现
  • 交叉验证

K近邻算法

什么是k近邻算法(k近邻算法又叫做knn算法):大概意思就是根据你的邻居来判断的的类别。
如果一个样本在特征空间中的k个最相似(即特征空间中最近邻)的样本中的大多数属于某一个类别,则该样本也属于这个类别。
这里面相似性的度量可以根据欧式距离来计算。欧式距离也就是高中学的两点之间的距离。
算法流程:
1.计算已知类别数据集中的点与当前点之间的距离
2.按距离递增次序排序
3.选取与当前点距离最小的k个点
4.统计前k个点所在的类别出现的频率
5.返回前k个点出现频率最高的类别作为当前点的预测分类
总结:
k近邻算法就是计算未知点和已知点之间的距离,距离通过欧式距离来计算,然后找相近的来判断自己属于类别的概率。

scikit-learn

scikit-learn包含的内容:
分类、聚类、回归
特征工程
模型选择、调优

K近邻算法API

sklearn.neighbors.KNeighborsClassifier(n_neighbors=5)

案例

机器学习算法步骤

1)获取数据集
2)数据预处理
3)特征工程
4)机器学习
5)模型评估

k值的选择

k值过小:容易受到异常值的影响
k值过大:受到样本均衡的影响(每个类别的数据多少不一样)
k值的减小模型整体变得复杂,容易过拟合
k值增大则模型整体变得简单,使得预测错误。
实际应用中一般取较小的k值
近似误差:关注训练集,容易过拟合
估计误差:关注测试集,模型本身接近最佳模型

鸢尾花数据集种类预测

获取数据集

from sklearn.datasets import load_iris
iris=load_iris()

特征预处理
特征的单位或者大小相差较大的话,容易影响目标结果。
主要包含归一化和标准化
归一化:将原始数据进行变化映射到[0,1]之间。(通过最大值最小值让数据变化)
最大最小值容易受到异常点的影响,鲁棒性较差,只适合传统精确小数据场景。

from sklearn.preprocessing import MinMaxScaler
ma=MinMaxScaler()
data=ma.fit_transform(data)

标准化:通过对原始数据进行变化把原始数据变化到均值为0,标准差为1的范围内。

from sklearn.preprocessing import StandardScaler

标准化:在已有样本足够多的情况下比较稳定,适合现代嘈杂大数据场景

鸢尾花数据集案例实现

from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.neighbors import KNeighborsClassifier

#1.获取数据集
iris=load_iris()
#2.数据基本处理,也就是将原始数据划分训练集和测试集
x_train,x_test,y_train,y_test=train_test_split(iris.data,iris,target,test_size=0.2,random_state=22)
#3.特征工程
transfer=StandardScaler()
x_train=transfer.fit_transform(x_train)
x_test=transfer.transform(x_test)
#4,机器学习(模型训练)
estimator=KNeighborsClassifier(n_neighbors=9)
estimator.fit(x_train,y_train)
#5,模型评估
y_predict=estimator.predict(x_test)
#计算准确率
score=estimator.score(x_test,y_test)

交叉验证

交叉验证:将拿到的训练数据,分为训练集和验证集(将书分为4份,其中一份作为验证集。然后经过四组测试,每次更换不同的验证集。即得到4组模型的结果,取平均值作为最终结果。又称4折交叉验证)

交叉验证的目的:为了让被评估的模型更加准确可信。
网格搜索:通过交叉验证评估模型的一些参数。

from sklearn.model_selection import GridSearchCV

estimator=KNeighborsClassifier()
#准备要调的超参数
param_dict={'n_neighbors':[1,3,5]}
estimator=GridSearchCV(estimator,param_grid=param_dict,cv=3)
estimator.fit(x_train,x_test)


#在交叉验证中最好的结果
estimator.best_score_
#最好的参数模型
estimator.best_estimator_
#每次验证后的准确率结果
estimator.cv_results_

你可能感兴趣的:(机器学习算法,机器学习,python,算法)