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

在正式研究文本和图像等复杂数据之前,我们首先来看一看最简单的数据类型——数值数据。好的特征满足两点:①能够表示出数据的主要特点;②符合模型的假设。数值型数据的特征工程是比较基本的,只要将原始数据转化为数值型数据就🆗了。

对于数值型的数据要进行以下合理性的检查

  1. 检查量级(+,-),(10,10²,10³...)
  2. 特征尺度:max,min,有时需要进行标准化,逻辑函数对特征尺度没有那么的严格。但有一项特殊:输入的特征随时间变化,即特征是某种累计值,它最终会超过训练树的取值范围,这就需要调整尺度
  3. 数值型特征分布情况。
  4. 模型堆叠:就是将多个特征组合在一起成为复杂的特征,希望该特征能够很好的捕捉到原始数据的重要信息,使输入特征更加具有“信息量”代表性,并且使得模型更简单,更容易训练和评价。【简单理解就是将输入特征首先经过某个模型后,其输出有作为另一个模型的输入。神似神经网络】

2.1 标量、向量和空间

应该有些小伙伴已经很明白这些概念了,但还请我唠叨几嘴。

标量:单独的数值型特征,只有大小没有方向。

向量:指具有大小和方向的量。它可以形象化地表示为带箭头的线段。很多时候理解为从原点到向量空间中某点的画一条线或是一个箭头。

空间:很多时候我们联想到的是物理空间,但是到了抽象的数学空间中就感觉不是那么容易想象出来了。数学中的空间其实是物理空间概念的延伸和抽象。但数学的空间和物理的空间本质来讲不是一回事我们本节要讲的也是大家普遍知道的是向量空间,向量空间的定义:

设V为n维向量的集合,如果集合V非空,且集合V对于向量的加法以及数乘两种运算封闭【就是V中的向量进行加法和数乘两种运算后的新的向量仍然还是属于集合V】,那么就称集合V为向量空间。

简单理解就是空间就是加入了某些和规则的集合,【对于低纬度我们还可以联想到物理空间,但是上升到了更高维度,却是很难想象了。】

当我们对数据和特征赋予了某种意义之后,他们同样也会形成某种空间:特征空间,数据空间。

例子:特征(歌曲)空间中的数据(听众)

        歌曲二维的特征空间中,两个听众数据一个人喜欢两首歌曲,一个人两首歌曲都不喜欢。

         这个空间就是加入某些意义规则的集合。


2.2 处理计数

说到计数,大家可能想到的是1+2+3+...,其实在现在大数据时代的到来,计数已经很重要了,我们“日用而不觉”,正好想到了这句话,正好也插播一下。

日用而不觉,出自《周易·系辞上传》的一句话:“百姓日用而不知,故君子之道鲜矣”,这句话讲了佛与人本性之间的关联,本性到了足够的高度就能够自觉自悟,也就是易经中所说的开悟。通俗来说便是玄妙然而却不能够知晓,但是它时时刻刻展现在人们眼前,眼睛的用处就是看,耳朵的用处就是听声音,鼻子的用处就是用来闻味道,舌头的作用就是用来尝味道,一举一动都是自性行为。也就我们所说的潜意识或是习惯。《周易》“百姓日用而不知,故君子之道鲜矣”;孔子:“性相近,习相远”。他们的观点在大洋彼岸的美国得到了印证,美国心理学家发现,人每天高达93%的行为源自于习惯,7%是属于非习惯性的,养成一个好习惯需要21天,要经过熟知、品味和养成三个阶段。

说到计数,其实我们看视频的时候就涉及到了计数,我们看的视频的每一帧画面都是需要计数的,到那一分到那一秒,而我们重复播放甚至回放的时候就会产生大量的计数。但是由于数据是大量且快速生成的,可能会存在着极端值(为了保证模型和特征的健壮性,我们必须要考虑全面的),这就需要我们根据实际情况进行实际分析。

2.2.1 二值化

例如我们收集到的是数据集The Echo Nest Taste Profile Subset | Million Song Dataset是由4800万个由(user_id,song_id,count)组成三元组。我们想要创建一个向用户推荐歌曲的推荐器,其中的一个功能就是预测某个用户对歌曲的喜欢程度。但是我们通过绘制直方图发现,大部分的听歌次数都集中在24次以下,但是有几个数据的听歌次数唱过了9000次,很明显如果我们将这个极端的数据纳入我们的考量范围是非常不符合逻辑的,因为每个用户喜欢歌曲的表达程度是不一样的,有个用户听了十次表示他就是很喜欢这首歌的,有的人则喜欢听上上百次上千次,才觉得喜欢,为了提高健壮性,消除个性化差异,于是采用二值化处理,将所有听歌次数>=1的都提哦那故意设置为1就OK了。二值目标变量是一个既简单又健壮的用户偏好的衡量指标。

import pandas as pd
song=pd.read_csv(r"C:\Users\www\Documents\Downloads\train_triplets.txt.zip",header=None,delimiter='\t',names=["user_id","song_id","count"])
#当header=None时,read_csv会将第一行内容作为数据部分,而不是将其作为列名。
# 使用delimiter='\t'来告知解析函数在处理数据时使用制表符作为列之间的分隔符
#表中格式包含形式为:用户-歌曲-听歌次数的三元组,只包含非零收听次数
#只需要将收听次数列全部设置为1就OK了
song

max_count = song['count'].max()
max_count
song["count"]=1
song

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值