L4 机器学习——K-邻近算法模型(KNN)

一、基本概念

KNN(K-Nearest Neighbor)是最简单的机器学习算法之一,可以用于分类和回归,是一种监督学习算法。在此算法中,给定一个训练数据集,输入一个新的实例,在训练数据集中找到与该实例最邻近的K个实例,这K个实例主要是哪一类别,那么就把该实例分类到这个类中。它属于基于实例的学习(instance-based learning),属于懒惰学习(lazy learning)即KNN没有显式的学习过程,也就是说没有训练阶段,数据集事先已有了分类和特征值,待收到新样本后直接进行处理。

二、代码实现

1. 问题简介

背景: 海伦一直使用在线约会网站寻找适合自己的约会对象。尽管约会网站会推荐不同的人选,但她没有从中找到喜欢的人。经过一番总结,她发现曾交往过三种类型的人:

  • ①不喜欢的人;
  • ②魅力一般的人;
  • ③极具魅力的人。

她现在总结好的数据中(即训练集)包含三种特征:

  • ①每年获得的飞行常客里程数
  • ②玩视频游戏所耗时间百分比
  • ③每周消费的冰淇淋公升数

她希望根据现有的数据来判断一个陌生男人会被她归到哪一类。

2. 导入数据集

import pandas as pd

df = pd.read_csv('datingTestSet2.txt', sep='\t', header=None)
df.head()

3. 分割数据集

# Split the data
X = df.iloc[:, :-1].values
y = df.iloc[:, -1].values

from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.25, random_state=6)
print('X_train:', X_train.shape)
print('X_test:', X_test.shape)
print('y_train:', y_train.shape)
print('y_test:', y_test.shape)

4. K-邻近算法模型 

此处n_neighbors的默认值为5

K值小,相当于用较小的领域中的训练实例进行预测,只要与输入实例相近的实例才会对预测结果,模型变得复杂,只要改变一点点就可能导致分类结果出错,泛化性不佳。(学习近似误差小,但是估计误差增大,过拟合)
K值大,相当于用较大的领域中的训练实例进行预测,与输入实例较远的实例也会对预测结果产生影响,模型变得简单,可能预测出错。(学习近似误差大,但是估计误差小,欠拟合)

# Train the model
from sklearn.neighbors import KNeighborsClassifier
classifier = KNeighborsClassifier()
classifier.fit(X_train, y_train)

5. 结果预测

# Predict the test set
y_pred = classifier.predict(X_test)

# Create a new DataFrame for the test set predictions
df_test = pd.DataFrame(X_test, columns=[f'feature_{i}' for i in range(X_test.shape[1])])
umns=[f'feature_{i}' for i in range(X_test.shape[1])])
df_test['label'] = y_test
df_test['predict'] = y_pred

df_test.head()

 

6. 结果评估 

# Evaluate the model
score = classifier.score(X_test, y_test)
print('Score:', score)

from sklearn.metrics import confusion_matrix, accuracy_score
cm = confusion_matrix(y_test, y_pred)
accuracy = accuracy_score(y_test, y_pred)
print('Confusion Matrix:', cm)
print('Accuracy:', accuracy)

  • 17
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值