机器学习(实战)facebook地址预测

目录

一、读取数据

二、 数据处理

1、缩小数据范围

2、得到正常时分秒

 2-1、时间戳化时分秒

2-2、得到时间列表

2-3、添加时间信息到数据data中

3、得到数据集

3-1、获取各地点签到次数

3-2、过滤签到次数过少的地点

3-3、筛选特征值和目标值

3-4、数据集划分

4、特征工程(标准化)

5、KNN算法预估器训练

6、模型评估

总代码


特征值:坐标、准确度、hour、day、weekday

目标值:地址id

一、读取数据

文件下载地址1(推荐): train.rar(train.csv,facebook签到信息)-机器学习文档类资源-CSDN下载

文件下载地址2(不推荐):

https://pan.baidu.com/s/17DeVm48VRG0tlEzQM0KfSA 
提取码:gx4a

# 1、读取数据
data = pd.read_csv('train.csv')

二、 数据处理

可以看出,上面的数据量非常大。

1、缩小数据范围

# 2-1、缩小数据范围
data = data.query('x>2.0 & x<2.5 & y>1.0 & y<1.5')

2、得到正常时分秒

可以看到时间戳是这种,需要转换成时分秒。

 

 2-1、时间戳化时分秒

# 2-2、转换时间戳为时分秒
time_value = pd.to_datetime(data['time'], unit='s')

 

2-2、得到时间列表

# 获取时间列表
time_list = pd.DatetimeIndex(time_value)

2-3、添加时间信息到数据data中

# 添加时间信息到数据data中
data['hour'] = time_list.hour
data['day'] = time_list.day
data['weekday'] = time_list.weekday

3、得到数据集

3-1、获取各地点签到次数

# 3、过滤签到次数过少的地点
place_count = data.groupby('place_id').count()['row_id']

3-2、过滤签到次数过少的地点

# 3-2、过滤签到次数过少的地点
place_count = place_count[place_count>3]

 

可以看出,现在的签到次数都是在3次以上了,3次及以下的已经被过滤掉了。 

 获得签到次数过少地点的索引

index = data['place_id'].isin(place_count.index)

 过滤:

data = data[index]

3-3、筛选特征值和目标值

选取特征值和目标值

train = data[['x', 'y', 'accuracy', 'hour', 'day', 'weekday']]  #特征值
target = data['place_id']                                       #目标值

3-4、数据集划分

# 3-4、数据集划分
train_data, test_data, train_target, test_target = train_test_split(train, target)

4、特征工程(标准化)

# 4、特征工程(标准化)
transfer = StandardScaler()
train_data = transfer.fit_transform(train_data)
test_data = transfer.transform(test_data)
# 注:不进行fit处理:测试集要用训练集的特征值和标准差(否则测试集就是在自己对自己进行测试,没有意义)
# 注:target是目标值,不能进行标准化(所以train_target和test_target不进行标准化)

5、KNN算法预估器训练

# 5、KNN算法预估器
# 5-1、得到预估器
estimator = KNeighborsClassifier()          #后面会有超参数搜索,这里先不用设置k值
# 5-2、超参数搜索(模型选择与调优):得到最佳k值(最佳预估器)
# 1、参数准备
param_dict = {'n_neighbors':[3,5,7,9]}
# 2、开始搜索
estimator = GridSearchCV(estimator, param_dict, cv=3)
#                       预估器       参数范围     选择次数
# 5-3、训练(用预估器对训练值进行训练)
estimator.fit(train_data, train_target)

6、模型评估

# 6、模型评估
# 6-1、得到预测结果
predict = estimator.predict(test_data)
print(predict)
# 6-2、对比预测值和测量目标值
print("直接比对预测值和测量目标值:\n", predict==test_target)
# 6-3、得到准确率(对比特征集和目标集测试值)
score = estimator.score(test_data, test_target)
print("准确率:\n", score)

总代码

# 签到地址预估
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.neighbors import KNeighborsClassifier
from sklearn.model_selection import GridSearchCV

# 1、读取数据
data = pd.read_csv('train.csv')

# 2、数据处理
# 2-1、缩小数据范围
data = data.query('x>2.0 & x<2.5 & y>1.0 & y<1.5')

# 2-2、转换时间戳为时分秒
time_value = pd.to_datetime(data['time'], unit='s')
# 获取时间列表
time_list = pd.DatetimeIndex(time_value)
# print(time_list)

# 添加时间信息到数据data中
data['hour'] = time_list.hour
data['day'] = time_list.day
data['weekday'] = time_list.weekday

# 3、过滤签到次数过少的地点
# 3-1、获取各地点签到次数
place_count = data.groupby('place_id').count()['row_id']

# 3-2、过滤签到次数过少的地点
place_count = place_count[place_count>3]
# 获取签到次数过少地点的索引
index = data['place_id'].isin(place_count.index)
# 过滤
data = data[index]

# 3-3、筛选特征值和目标值
train = data[['x', 'y', 'accuracy', 'hour', 'day', 'weekday']]  #特征值
target = data['place_id']                                       #目标值

# 3-4、数据集划分
train_data, test_data, train_target, test_target = train_test_split(train, target)

# 4、特征工程(标准化)
transfer = StandardScaler()
train_data = transfer.fit_transform(train_data)
test_data = transfer.transform(test_data)
# 注:不进行fit处理:测试集要用训练集的特征值和标准差(否则测试集就是在自己对自己进行测试,没有意义)
# 注:target是目标值,不能进行标准化(所以train_target和test_target不进行标准化)

# 5、KNN算法预估器
# 5-1、得到预估器
estimator = KNeighborsClassifier()          #后面会有超参数搜索,这里先不用设置k值
# 5-2、超参数搜索(模型选择与调优):得到最佳k值(最佳预估器)
# 1、参数准备
param_dict = {'n_neighbors':[3,5,7,9]}
# 2、开始搜索
estimator = GridSearchCV(estimator, param_dict, cv=3)
#                       预估器       参数范围     选择次数
# 5-3、训练(用预估器对训练值进行训练)
estimator.fit(train_data, train_target)

# 6、模型评估
# 6-1、得到预测结果
predict = estimator.predict(test_data)
print(predict)
# 6-2、对比预测值和测量目标值
print("直接比对预测值和测量目标值:\n", predict==test_target)
# 6-3、得到准确率(对比特征集和目标集测试值)
score = estimator.score(test_data, test_target)
print("准确率:\n", score)

print(data)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

_(*^▽^*)_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值