机器学习_K近邻算法

1.1 K近邻算法

如果一个样本在特征空间中的k个最相似的样本中的大多数属于某一个类别,则该样本也属于这个类别。

1.1.1 算法原理
1.1.1.1 欧式距离

计算已知类别数据集中的点与当前点之间的距离。

按距离递增次序排序。

选取与当前点距离最小的k个点。

统计前k个点所在的类别出现的频率。

返回前k个点出现频率最高的类别作为当前点的预测分类。

1.1.2 代码实现
1.1.2.1 导包
import time
import pandas as pd
import numpy as np
from sklearn.datasets import load_iris, fetch_20newsgroups, fetch_california_housing
from sklearn.model_selection import train_test_split, GridSearchCV
from sklearn.neighbors import KNeighborsClassifier
from sklearn.preprocessing import StandardScaler
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.naive_bayes import MultinomialNB
from sklearn.metrics import classification_report
from sklearn.feature_extraction import DictVectorizer
from sklearn.tree import DecisionTreeClassifier, export_graphviz
from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import roc_auc_score
1.1.2.2 导入数据
from sklearn.datasets import load_iris

li = load_iris()
print("数据集规模:", li.data.shape)
print("数据集特征:", li.feature_names)
print("数据集目标:", li.target_names)
1.1.2.3 数据划分
x_train, x_test, y_train, y_test = train_test_split(li.data,
                                                    li.target,
                                                    test_size=0.25,
                                                    random_state=1)
print("训练集特征值形状:", x_train.shape)
print("测试集特征值形状:", x_test.shape)
1.1.2.4 特征工程
std = StandardScaler()
x_train = std.fit_transform(x_train)
x_test = std.transform(x_test)
1.1.2.5 模型训练
knn = KNeighborsClassifier(n_neighbors=6)
knn.fit(x_train, y_train)
y_predict = knn.predict(x_test)
print("预测值:", y_predict)
1.1.2.6 模型评估
print("准确率:", knn.score(x_test, y_test))
1.1.3 网格搜索
1.1.3.1 参数选择
param = {"n_neighbors": [3, 5, 10, 12, 15],
         "weights": ['uniform', 'distance']}
1.1.3.2 交叉验证
gc = GridSearchCV(knn, param_grid=param, cv=3)
gc.fit(x_train,y_train)
print("在测试集上准确率:", gc.score(x_test, y_test))
print("交叉验证最好结果:", gc.best_score_)
print("选择最好的模型是:", gc.best_estimator_)
1.1.4 常见问题
1.1.4.1 优点

算法易于理解和实现,不需要进行复杂的参数调整。

用于多类别分类问题,并且对于类别不平衡的数据集也可以有效处理。

1.1.4.2 缺点

对于大规模数据集,计算复杂度较高。

KNN的性能很大程度上依赖于选择合适的K值,不同的K值可能导致不同的分类结果。

1.1.4.3 K值选择

在实际应用中,K值一般取一个比较小的数值,例如采用交叉验证法来选择最优的K值。

K值的减小就意味着整体模型变得复杂,容易发生过拟合。

K值的增大就意味着整体的模型变得简单。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值