问题描述
依据某婚恋网站上的数据信息,通过算法预测某人对你的喜欢程度。
1. 读取数据
import pandas as pd df=pd.read_csv('./datingTestSet.txt',sep='\t',header=None) df.head()
通过观察我们可以看到,根据前3列表征的是特征数据,最后一列为标签数据,即代表喜欢的程度
# 查看标签类型有哪些 df[3].unique()
array(['largeDoses', 'smallDoses', 'didntLike'], dtype=object) • 1
我们可以看到,喜欢的程度有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()
2.2 分割特征数据与标签数据
# 取特征数据 data = df.iloc[:,:-1].copy() data.head()
# 取标签数据 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 • 1
结果表明预测准确度为90%
,结果还是比较好的,当然还可以进一步优化。好了这篇文章的内容就到这里,我们下次再见。
关注我的GZH:“阿旭算法与机器学习
”,发送:KNN实战1
,即可获取本文pdf及实战案例所使用的数据集
3. 总结
本文是关于KNN算法的一个实战练习,主要有以下几个内容:
- 数据读取与观察
- 对数据进行特征工程处理
- 构建模型并进行预测