实现K近邻算法多分类sklearn.neighbors
.KNeighborsClassifier¶
实现步骤
from sklearn.metrics import mean_squared_error
from sklearn.metrics import mean_absolute_error
from sklearn.metrics import r2_score
#k近邻分类
from sklearn.neighbors import KNeighborsClassifier
#k近邻回归
from sklearn.neighbors import KNeighborsRegressor
#加载数据集
from sklearn import datasets
iris=datasets.load_iris()
x=iris.data
y=iris.target
#拆分数据集为训练集,测试集,test_size为拆分比例
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)
#步骤1,创建对象
knn_classifer=KNeighborsClassifier(n_neighbors=3)
#步骤2,通过fit()方法生成模型
knn_classifer.fit(x_train,y_train)
#步骤3,通过predict()方法预测结果
y_test_predict=knn_classifer.predict(x_test)
#准确度
#根据x_test,y_test确定当前模型的准确度
knn_score=knn_classifer.score(x_test,y_test)
print(knn_score)
判断机器学习算法的性能
交叉验证
超参数 ——在算法运行前需要决定的参数
模型参数——训练得到的参数
K近邻算法中的超参数:1.k值
2.距离的权重(距离的倒数):距离越近
3.明可夫距离p值
4.其他距离度量方法
网格搜索
#步骤1.定义搜索参数
param_grid=[
{
"weights":["uniform"],
"n_neighbors":[i for i in range(1,11)]
},
{
"weights": ["uniform"],
"n_neighbors": [i for i in range(1, 11)],
"p":[i for i in range(1, 6)]
}
]
knn_clf=KNeighborsClassifier()
#步骤2.导入网格搜索对象
from sklearn.model_selection import GridSearchCV
#创建网格搜索对象。
grid_search=GridSearchCV(knn_clf,param_grid)
grid_search.fit(x_train,y_train)
#输出网格搜索到的最佳模型对应的参数
print(grid_search.best_estimator_)
#获取网格搜索到的最佳模型
knn_clf=grid_search.best_estimator_
print(knn_clf.score(x_test,y_test))
数据归一化
不同特征值的量纲不同,会出现被某个特征主导的情况,所以需要进行归一化处理
最值归一化:将所有数据映射到0-1,适用于数据有明显的边界
均值方差归一化:将所有数据映射到均值为0,方差为1的分布
注意:测试数据集集需要用训练数据集的均值,方差进行归一化
#数据归一化,均值方差归一化
from sklearn.preprocessing import StandardScaler
#数据归一化,最值归一化
from sklearn.preprocessing import MinMaxScaler
#1.创建归一化对象
standardscaler=StandardScaler()
#2.生成模型
standardscaler.fit(x_train)
#2.1获取均值
x_mean=standardscaler.mean_
#2.1获取方差
x_s=standardscaler.scale_
#3.获取归一化后的结果
x_train_mean=standardscaler.transform(x_train)
k近邻的缺点
1.计算效率低下
2.高数据相关性
3.预测结构不具有可解释性
4.维度灾难