机器学习7-K-近邻算法(K-NN)

K-Nearest Neighbors(K-近邻算法,简称KNN)是一种基本的监督学习算法,用于解决分类和回归问题。KNN的核心思想是基于距离度量,在特征空间中找到最近的K个样本,然后使用它们的标签进行决策。以下是KNN的基本概念和工作原理:

工作原理:

  1. 距离度量
    KNN使用欧氏距离或其他距离度量方法来计算样本之间的距离。
  2. 选择K值
    选择一个合适的K值,表示在决策时考虑的最近邻居的数量。
  3. 投票决策
    对于分类问题,根据K个最近邻居中出现最频繁的类别进行决策;对于回归问题,根据K个最近邻居的平均值进行决策。

KNN的优缺点:

优点:

  • 简单且易于理解。
  • 适用于小型数据集和特征数较少的问题。
  • 无需训练阶段,模型保存了整个训练集。

缺点:

  • 对于大型数据集,预测速度较慢。
  • 对于高维数据,容易受到维数灾难的影响。
  • 对噪声和冗余特征敏感。

KNN通常在小型数据集和相对较简单的问题中表现良好,但在处理大型高维数据时可能会面临挑战。在实际应用中,合适的K值的选择和数据的预处理对KNN的性能影响较大。

需求:

预测哪些用户会购买SUV。

代码:

python 复制代码
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.neighbors import KNeighborsClassifier
from sklearn.metrics import confusion_matrix, accuracy_score, classification_report

# 加载数据
dataset = pd.read_csv('Social_Network_Ads.csv')
X = dataset.iloc[:, [2, 3]].values
y = dataset.iloc[:, 4].values

# 划分数据集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.25, random_state=0)

# 特征标准化
sc = StandardScaler()
X_train = sc.fit_transform(X_train)
X_test = sc.transform(X_test)

# 创建并训练KNN模型
k_value = 5
classifier = KNeighborsClassifier(n_neighbors=k_value, metric='minkowski', p=2)
classifier.fit(X_train, y_train)

# 预测
y_pred = classifier.predict(X_test)

# 将预测值添加到数据集
dataset['Predicted'] = classifier.predict(sc.transform(X))

# 将包含预测值的数据集写入新的 CSV 文件
dataset.to_csv('Social_Network_Ads_KNN_Pred.csv', index=False)

# 混淆矩阵及模型评估
cm = confusion_matrix(y_test, y_pred)
accuracy = accuracy_score(y_test, y_pred)
report = classification_report(y_test, y_pred)

# 展示混淆矩阵及模型评估结果
print("Confusion Matrix:\n", cm)
print("\nAccuracy:", accuracy)
print("Classification Report:\n", report)

结果:

Accuracy: 0.93

结论:

看文件Social_Network_Ads_KNN_Pred.csv的Predicted列,预测结果基本满意。

相关推荐
凡人的AI工具箱5 分钟前
每天40分玩转Django:Django类视图
数据库·人工智能·后端·python·django·sqlite
千天夜11 分钟前
深度学习中的残差网络、加权残差连接(WRC)与跨阶段部分连接(CSP)详解
网络·人工智能·深度学习·神经网络·yolo·机器学习
凡人的AI工具箱15 分钟前
每天40分玩转Django:实操图片分享社区
数据库·人工智能·后端·python·django
小军军军军军军19 分钟前
MLU运行Stable Diffusion WebUI Forge【flux】
人工智能·python·语言模型·stable diffusion
Kenneth風车34 分钟前
【机器学习(九)】分类和回归任务-多层感知机(Multilayer Perceptron,MLP)算法-Sentosa_DSML社区版 (1)11
算法·机器学习·分类
诚威_lol_中大努力中42 分钟前
关于VQ-GAN利用滑动窗口生成 高清图像
人工智能·神经网络·生成对抗网络
中关村科金1 小时前
中关村科金智能客服机器人如何解决客户个性化需求与标准化服务之间的矛盾?
人工智能·机器人·在线客服·智能客服机器人·中关村科金
逸_1 小时前
Product Hunt 今日热榜 | 2024-12-25
人工智能
Luke Ewin1 小时前
基于3D-Speaker进行区分说话人项目搭建过程报错记录 | 通话录音说话人区分以及语音识别 | 声纹识别以及语音识别 | pyannote-audio
人工智能·语音识别·声纹识别·通话录音区分说话人
DashVector1 小时前
如何通过HTTP API检索Doc
数据库·人工智能·http·阿里云·数据库开发·向量检索