《机器学习实战》第2章—约会网站配对效果(Jupyter版K邻近算法)

 

目录

1.导入相关 Python 第三方库

2.读取数据,进行相关可视化操作

2.1 读取数据

 2.2 将数据进行简单的可视化

 2.3 可以用任意两个特征值进行展示。

3.数据预处理

3.1 将标签值进行处理

 3.2 提取特征值,并进行标准化

 3.3 划分训练集和测试集,构建训练模型

4.实战检验


本篇文章为《机器学习实战》第2章—约会网站配对效果的Jupyter版本,书中代码比较底层,容易让大家理解相关原理,本篇文章主要是结合 sklearn 库进行尝试,有不对的地方,希望大佬不吝赐教。

1.导入相关 Python 第三方库

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.neighbors import KNeighborsClassifier

2.读取数据,进行相关可视化操作

2.1 读取数据

(需要数据的朋友联系我即可)

data = pd.read_csv('datingTestSet.txt',header=None,sep='\s+')
print(data)

 2.2 将数据进行简单的可视化

# 建立颜色集合,用于在图中区分不同标签
colorlList= []
for i in data_label_num:
    if i == 1:
        colorlList.append('green')
    elif i == 2:
        colorlList.append('orange')
    else:
        colorlList.append('blue')

# 创建图例
didntLike = plt.Line2D([],[],color='green',label='didntLike',markersize=6,marker='.')
smallDoses = plt.Line2D([],[],color='orange',label='smallDoses',markersize=6,marker='.')
largeDoses = plt.Line2D([],[],color='blue',label='largeDoses',markersize=6,marker='.')

# 进行可视化
plt.scatter(x=data_array[:,1],y=data_array[:,2],c=colorlList)
plt.legend(handles=[didntLike,smallDoses,largeDoses])
plt.xlabel("play game time")
plt.ylabel("ice cream consumed per week")
plt.show()

 2.3 可以用任意两个特征值进行展示。

plt.scatter(x=data_array[:,0],y=data_array[:,1],c=colorlList)
plt.legend(handles=[didntLike,smallDoses,largeDoses])
plt.show()

 

 

3.数据预处理

3.1 将标签值进行处理

# 将数据转换成 array 格式
data_array = np.array(data)

# 将标签值提取出来,并转换为对应的数据
data_label = data_array[:,3]
data_label_num = []
for i in range(0,len(data_label)):
    if data_label[i] == 'largeDoses':
        data_label_num.append(3)
    if data_label[i] == 'smallDoses':
        data_label_num.append(2)
    if data_label[i] == 'didntLike':
        data_label_num.append(1)
data_label_num = array(data_label_num)
print(data_label_num)

 3.2 提取特征值,并进行标准化

data_array = data_array[:,0:3]

# 利用 sklearn 库中 StandardScaler 函数进行标准化
transfer = StandardScaler()
data_array = transfer.fit_transform(data_array)
print(data_array)

 3.3 划分训练集和测试集,构建训练模型

# 划分训练集,测试集
x_train,x_test,y_train,y_test = train_test_split(data_array,data_label_num,random_state=21,test_size=0.3)

#构建训练模型
estimator = KNeighborsClassifier(n_neighbors=9)
estimator.fit(x_train,y_train)

# 用测试集进行验证
y_pre = estimator.predict(x_test)

# 输出准确率
print(estimator.score(x_test,y_test))

 到此,我们就建立了一个准确率在 97.3%的模型,最后我们进行一下简单的验证

4.实战检验

# 将数据转化成对应的结果
def LikePerson(i):
    if i == 1:
        Per = 'didntLike'
    elif i == 2:
        Per = 'smallDoses'
    else:
        Per = 'largeDoses'
    return Per

resultList = ['not at all','in small doses','in large doses']
game = float(input('percentage of time spent playing video games ? :'))
iceCream = float(input('liters of ice cream consumed per year ? :'))
ffMile = float(input('frequent flier miles earned per year ? :'))
# 将原数据放到一个 temp 中,用于标准化操作
temp =data_array
# 将输入的数值添加到源数据集中
new_data = np.append(temp,[[ffMile,game,iceCream]],axis=0)
# 将输入的数据进行标准化,并取出
new_data =transfer.fit_transform(new_data)
new_data =array([new_data[-1]]) 
# 利用之前的训练模型进行预测
result_new = estimator.predict(new_data)
# 将预测的值,转换成相应的信息
result_final = LikePerson(result_new)
print('你对这个人的感兴趣程度为:',result_final)

 

声明:作者为新入门小白,有不对的地方希望能和各位大佬相互交流。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值