阿旭机器学习实战【4】KNN算法实战练习1:利用KNN算法预测某人对你喜欢程度

本系列文章为机器学习实战内容,旨在通过实战的方式学习各种机器学习算法知识,更易于掌握和学习,更多干货内容持续更新…

目录

  • 问题描述
  • 1. 读取数据
  • 2. 特征工程
    • 2.1 将标签数据映射为数字
    • 2.2 分割特征数据与标签数据
    • 2.3 将特征数据进行归一化处理
    • 2.4 训练模型并进行预测
  • 3. 总结

问题描述

依据某婚恋网站上的数据信息,通过算法预测某人对你的喜欢程度。

1. 读取数据

import pandas as pd
df=pd.read_csv('./datingTestSet.txt',sep='\t',header=None)
df.head()
0 1 2 3
0 40920 8.326976 0.953952 largeDoses
1 14488 7.153469 1.673904 smallDoses
2 26052 1.441871 0.805124 didntLike
3 75136 13.147394 0.428964 didntLike
4 38344 1.669788 0.134296 didntLike

通过观察我们可以看到,根据前3列表征的是特征数据,最后一列为标签数据,即代表喜欢的程度

# 查看标签类型有哪些
df[3].unique()
array(['largeDoses', 'smallDoses', 'didntLike'], dtype=object)

我们可以看到,喜欢的程度有3种:largeDoses:非常喜欢,smallDoses:有一点喜欢,didntLike:不喜欢

2. 特征工程

2.1 将标签数据映射为数字

我们将标签用数字表示,能够更加直观的通过数值大小观察喜欢程度。

largeDoses:3 ;smallDoses:2, didntLike:1

# 建立映射关系
target_map = {'largeDoses':3,
             'smallDoses':2,
             'didntLike':1}
df[3] = df[3].map(target_map)
df.head()
0 1 2 3
0 40920 8.326976 0.953952 3
1 14488 7.153469 1.673904 2
2 26052 1.441871 0.805124 1
3 75136 13.147394 0.428964 1
4 38344 1.669788 0.134296 1

2.2 分割特征数据与标签数据

# 取特征数据
data = df.iloc[:,:-1].copy()
data.head()
0 1 2
0 40920 8.326976 0.953952
1 14488 7.153469 1.673904
2 26052 1.441871 0.805124
3 75136 13.147394 0.428964
4 38344 1.669788 0.134296
# 取标签数据
target = df.iloc[:,-1].copy()
target.head()
0    3
1    2
2    1
3    1
4    1
Name: 3, dtype: int64

2.3 将特征数据进行归一化处理

# 我们直接使用sklearn库中的MinMaxScaler类
from sklearn.preprocessing import MinMaxScaler

scaler = MinMaxScaler() #实例化
std_data = scaler.fit_transform(data)
std_data[:5]
array([[0.44832535, 0.39805139, 0.56233353],
       [0.15873259, 0.34195467, 0.98724416],
       [0.28542943, 0.06892523, 0.47449629],
       [0.82320073, 0.62848007, 0.25248929],
       [0.42010233, 0.07982027, 0.0785783 ]])

2.4 训练模型并进行预测

from sklearn.model_selection import train_test_split
# 切分训练集与测试集
x_train,x_test,y_train,y_test = train_test_split(std_data,target,test_size=0.01)
from sklearn.neighbors import KNeighborsClassifier

# 创建模型
knn = KNeighborsClassifier()
# 模型训练
knn.fit(x_train,y_train)
# 预测准确度
knn.score(x_test,y_test)
0.9

结果表明预测准确度为90%,结果还是比较好的,当然还可以进一步优化。好了这篇文章的内容就到这里,我们下次再见。

关注我的GZH:“阿旭算法与机器学习”,发送:KNN实战1,即可获取本文pdf及实战案例所使用的数据集

3. 总结

本文是关于KNN算法的一个实战练习,主要有以下几个内容:

  1. 数据读取与观察
  2. 对数据进行特征工程处理
  3. 构建模型并进行预测

如果内容对你有帮助,感谢记得点赞+关注哦!

更多干货内容持续更新中…

你可能感兴趣的:(机器学习,python,机器学习,KNN算法,机器学习案例,sklearn)