K邻近算法——约会成功预测【python实现】

题目

我们从:飞行公里数,玩游戏时间和冷饮消耗量来分析约会是否成功~

代码实现

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

# 字体设置
plt.rcParams['font.sans-serif'] = ['SimHei']

# 训练集的载入
datingTest = pd.read_table('datingTestSet.txt', header=None)
# 测试集标签添加
datingTest.columns = ['a', 'b', 'c', 'd']

# 对应三类训练集数据,用来制作三维散点图
Colors1 = datingTest.loc[datingTest['d'].str.contains('didntLike')]
Colors2 = datingTest.loc[datingTest['d'].str.contains('smallDoses')]
Colors3 = datingTest.loc[datingTest['d'].str.contains('largeDoses')]

ax = plt.axes(projection='3d')

# 散点图的坐标轴标签
ax.set_xlabel('飞行公里数')
ax.set_ylabel('玩游戏时间')
ax.set_zlabel('冷饮消耗数')

# 三维坐标轴数据天花, c 是颜色
ax.scatter(Colors1.iloc[:, 0], Colors1.iloc[:, 1], Colors1.iloc[:, 2], c='black')
ax.scatter(Colors2.iloc[:, 0], Colors2.iloc[:, 1], Colors2.iloc[:, 2], c='orange')
ax.scatter(Colors3.iloc[:, 0], Colors3.iloc[:, 1], Colors3.iloc[:, 2], c='red')

# 输入测试数据
new_datax = int(input('飞行公里数:'))
new_datay = int(input('玩游戏时间:'))
new_dataz = int(input('冷饮消耗数:'))

# 测试数据整合
new_data = np.array([new_datax, new_datay, new_dataz])

# 测试数据描点,并展现三维散点图
ax.scatter(new_datax, new_datay, new_dataz, c='purple')
plt.show()

# 归一化处理找到最大值和最小值
max_ = datingTest.iloc[:,0:3].max()
min_ = datingTest.iloc[:,0:3].min()

# 训练集制作,归一化处理
training_set = (datingTest.iloc[:,0:3]-min_)/(max_-min_)
new_data = (new_data-min_)/(max_-min_)
# print(training_set)
# print(max_, min_)
# print(new_data)
# 欧氏距离公式
data_set = list((((training_set-new_data)**2).sum(1))**0.5)
# print(data_set)

# 完成数据集
Test_set = pd.DataFrame({
    'dist':data_set,
    'like':datingTest.iloc[:, -1]
})
# print(Test_set)

# 输入k值
k = int(input('k:'))

# 找到前k个值
dr = Test_set.sort_values(by='dist')[0:k]

# 统计标签数
re = dr.loc[:, 'like'].value_counts()

# 显示标签最多的,即预测结果
print(re.index[0])

结果展示

在这里插入图片描述
在这里插入图片描述感觉自己终于可以开始筑基修炼了,好鸡冻~

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值