K近邻算法——sklean的实现

实现K近邻算法多分类sklearn.neighbors.KNeighborsClassifier¶

详解地址:https://scikit-learn.org/stable/modules/generated/sklearn.neighbors.KNeighborsClassifier.html#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.维度灾难

你可能感兴趣的:(机器学习)