精通特征工程(从原始数据中提取特征并转化为适合机器学习模型的格式)【参考书籍:《精通特征工程》陈光欣·译】第二章:简单而又奇妙的数值【2】

2.2.2 区间量化(分箱)

数据集来源:Yelp Dataset | KaggleA trove of reviews, businesses, users, tips, and check-in data!icon-default.png?t=N7T8https://www.kaggle.com/yelp-dataset/yelp-dataset

Yelp 点评数据集(第6轮)的统计信息:

 782个商业分类。

数据集包含大约160万条点评和61841个商家。

就点评数量而言,“Restaurants”(990627条点评)和“Nightlife”(210028条点评)是最普遍的分类。

没有商家既餐馆又属于夜生活场所,所以两个评分分组不会出现重叠。

每个商家都有一个点评数量。

 假设任务是使用协同过滤方法:

协同过滤方法是一种常用的推荐算法,它基于用户的历史行为数据,通过计算用户之间的相似度,来预测用户对未知物品的喜好程度。该算法的核心思想是“物以类聚,人以群分”,即相似的用户往往具有相似的兴趣爱好,因此可以通过找到与目标用户兴趣相似的其他用户,来推荐他们喜欢的物品。协同过滤方法主要分为两种:基于用户的协同过滤和基于物品的协同过滤。

预测某用户给商家的打分。

那么点评数量将是我们进行协同过滤的最重要的输入特征来评估不同用户之间的相似度

Question:使用原始的点评数量?还是使用进一步处理后的点评数量?

首先,查看数据的基本的分布信息,了解基本情况。

绘制所有商家点评数量的直方图

import pandas as pd
import json

#加载商家数据
biz_f = open('data/yelp/v6/yelp_dataset_challenge_academic_dataset/yelp_academic_dataset_business.json')
biz_df = pd.DataFrame([json.loads(x) for x in biz_f.readlines()])
#通过读取原始数据的每一行将其转化为JSON格式的python字典,然后再通过pd.DataFrame()将字典格式转化为二维表的形式,其中原先的字典中的键成为列名,而字典的值则会是二维表中的值
biz_f.close()

import matplotlib.pyplot as plt
import seaborn as sns

#绘制点评数量直方图
#设置图形风格为 'whitegrid',绘制的图形将会有一个白色的背景,并在背景上绘制网格线
sns.set_style('whitegrid')
#fig 是图形对象,代表整个图形窗口或画布,可以用来设置图形的大小、标题等属性。而 ax 是子图对象,代表图形窗口中的一个子图,用于绘制具体的图形或图表。
fig, ax = plt.subplots()
# 使用 'review_count' 列的数据绘制直方图,将数据分为 100 个箱子(bins)
biz_df['review_count'].hist(ax=ax, bins=100)
#特点是刻度之间的间隔会随数值的增长而放大。  10-100-1000-10000
ax.set_yscale('log')
ax.tick_params(labelsize=14)
ax.set_xlabel('Review Count', fontsize=14)
ax.set_ylabel('Occurrence', fontsize=14)

可以发现大多数的商家的点评数量是很少的,但是有的商家的点评数量具有几千条点评。分布很不均匀。 原始的点评数量横跨了若干个数量级。对模型来说是个问题。项对于无监督学习中的k-means聚类,使用欧氏距离作为相似度函数来测量数据点之间的相似度。如果某个计数较大的计数值那么就会对相似度的影响远远超过其他元素。

解决方法:区间量化

将点评数量放到多个箱子里面,去掉实际的计数值。将连续型数值映射到离散型数值。

关键:确定每个分箱的宽度。

  1. 固定宽度分箱
  2. 自适应分箱
  3. 分位数分箱(中位数【二分位数】,四分位数,十分位数...)

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值