七月算法机器学习 6 特征工程 小案例
目录
加载数据
把datetime域切成 日期 和 时间 两部分
处理时间数据
统计一周各天的情况
一周各天的租赁情况
删除一些字段
特征向量化
标准化连续值特征
类别特征编码
把特征拼一起
Kaggle上有这样一个比赛:城市自行车共享系统使用状况。
https://www.kaggle.com/c/bike-sharing-demand
提供的数据为2年内按小时做的自行车租赁数据,其中训练集由每个月的前19天组成,测试集由20号之后的时间组成
数据和代码下载 https://download.csdn.net/download/moonlightpeng/12543907
加载数据
#先把数据读进来
import pandas as pd
data = pd.read_csv('kaggle_bike_competition_train.csv', header = 0, error_bad_lines=False)
把datetime域切成 日期 和 时间 两部分
# 处理时间字段
temp = pd.DatetimeIndex(data['datetime'])
data['date'] = temp.date
data['time'] = temp.time
data.head()
处理时间数据
时间那部分,好像最细的粒度也只到小时,所以我们干脆把小时字段拿出来作为更简洁的特征
# 设定hour这个小时字段
data['hour'] = pd.to_datetime(data.time, format="%H:%M:%S")
data['hour'] = pd.Index(data['hour']).hour
data[:10]
统计一周各天的情况
仔细想想,数据只告诉我们是哪天了,按照一般逻辑,应该周末和工作日出去的人数量不同吧。我们设定一个新的字段dayofweek表示是一周中的第几天。再设定一个字段dateDays表示离第一天开始租车多久了
# 我们对时间类的特征做处理,产出一个星期几的类别型变量
data['dayofweek'] = pd.DatetimeIndex(data.date).dayofweek# 对时间类特征处理,产出一个时间长度变量
data['dateDays'] = (data.date - data.date[0]).astype('timedelta64[D]')data[::1000]
一周各天的租赁情况
其实我们刚才一直都在猜测,并不知道真实的日期相关的数据分布对吧,所以我们要做一个小小的统计来看看真实的数据分布,我们统计一下一周各天的自行车租赁情况(分注册的人和没注册的人)
byday = data.groupby('dayofweek')
# 统计下没注册的用户租赁情况
byday['casual'].sum().reset_index()
非注册用户周末会突然增大10万左右
周末既然有不同,就单独拿一列出来给星期六,再单独拿一列出来给星期日
data['Saturday']=0
data.Saturday[data.dayofweek==5]=1data['Sunday']=0
data.Sunday[data.dayofweek==6]=1data[::500]
删除一些字段
从数据中,把原始的时间字段等踢掉
# remove old data features
dataRel = data.drop(['datetime', 'count','date','time','dayofweek'], axis=1)
dataRel.head()
特征向量化
我们这里打算用scikit-learn来建模。对于pandas的dataframe我们有方法/函数可以直接转成python中的dict。 另外,在这里我们要对离散值和连续值特征区分一下了,以便之后分开做不同的特征处理。
from sklearn.feature_extraction import DictVectorizer
# 我们把连续值的属性放入一个dict中
featureConCols = ['temp','atemp','humidity','windspeed','dateDays','hour']
dataFeatureCon = dataRel[featureConCols]
dataFeatureCon = dataFeatureCon.fillna( 'NA' ) #in case I missed any
X_dictCon = dataFeatureCon.T.to_dict().values() # 把离散值的属性放到另外一个dict中
featureCatCols = ['season','holiday','workingday','weather','Saturday', 'Sunday']
dataFeatureCat = dataRel[featureCatCols]
dataFeatureCat = dataFeatureCat.fillna( 'NA' ) #in case I missed any
X_dictCat = dataFeatureCat.T.to_dict().values() # 向量化特征
vec = DictVectorizer(sparse = False)
X_vec_cat = vec.fit_transform(X_dictCat)
X_vec_con = vec.fit_transform(X_dictCon)
标准化连续值特征
我们要对连续值属性做一些处理,最基本的当然是标准化,让连续值属性处理过后均值为0,方差为1。 这样的数据放到模型里,对模型训练的收敛和模型的准确性都有好处
from sklearn import preprocessing
# 标准化连续值数据 处理的是列,一列是一个特征数据集
scaler = preprocessing.StandardScaler().fit(X_vec_con)
X_vec_con = scaler.transform(X_vec_con)
X_vec_con[:5]
类别特征编码
最常用的当然是one-hot编码咯,比如颜色 红、蓝、黄 会被编码为[1, 0, 0],[0, 1, 0],[0, 0, 1]
from sklearn import preprocessing
# one-hot编码
enc = preprocessing.OneHotEncoder()
enc.fit(X_vec_cat)
X_vec_cat = enc.transform(X_vec_cat).toarray()
X_vec_cat[:10]
把特征拼一起
把离散和连续的特征都组合在一起
import numpy as np
# combine cat & con features
X_vec = np.concatenate((X_vec_con,X_vec_cat), axis=1)
X_vec[:3]
最后的特征,前6列是标准化过后的连续值特征,后面是编码后的离散值特征
七月算法机器学习 6 特征工程 小案例相关推荐
- 面向机器学习的特征工程 七、非线性特征提取和模型堆叠
七.非线性特征提取和模型堆叠 来源:ApacheCN<面向机器学习的特征工程>翻译项目 译者:friedhelm739 校对:(虚位以待) 当在数据一个线性子空间像扁平饼时 PCA 是非常 ...
- 机器学习之 特征工程
之前相关文章目录: 机器学习 之线性回归 机器学习 之逻辑回归及python实现 机器学习项目实战 交易数据异常检测 机器学习之 决策树(Decision Tree) 机器学习之 决策树(Decisi ...
- 【AlgorithmStar机器学习】AS机器学习库特征工程使用说明文档
目录 Algorithm Star介绍 概述 AS库的一般处理流程 数据采集与清洗 向量生成与特征提取选择 机器学习 后续处理 Algorithm Star使用 数据类型-操作数 浮点类型操作数 整数 ...
- 【机器学习】特征工程概述
特征工程 "数据和特征决定了机器学习的上限,而模型和算法只是逼近这个上限而已." 1.概念 维基百科:特征工程是利用数据领域的相关知识来创建能够使机器学习算法达到最佳性能的特征的过 ...
- 面向机器学习的特征工程翻译版
前些日子推荐了一个仓库,是知名开源apachecn组织翻译的<面向机器学习的特征工程>英文版,可以说是特征工程的宝典,值得推荐. 仓库说明 知名开源apachecn组织翻译了<面向机 ...
- 面向机器学习的特征工程 三、文本数据: 展开、过滤和分块
来源:ApacheCN<面向机器学习的特征工程>翻译项目 译者:@kkejili 校对:@HeYun 如果让你来设计一个算法来分析以下段落,你会怎么做? Emma knocked on t ...
- 【CS224W】(task2)传统图机器学习和特征工程
note 和CS224W课程对应,将图的基本表示写在task1笔记中了:传统图特征工程:将节点.边.图转为d维emb,将emb送入ML模型训练 Traditional ML Pipeline Hand ...
- 面向机器学习的特征工程 六、降维:用 PCA 压缩数据集
来源:ApacheCN<面向机器学习的特征工程>翻译项目 译者:@cn-Wziv 校对:@HeYun 通过自动数据收集和特征生成技术,可以快速获得大量特征,但并非所有这些都有用.在第 3 ...
- 面向机器学习的特征工程 一、引言
来源:ApacheCN<面向机器学习的特征工程>翻译项目 译者:@ZhipengYe 校对:(虚位以待) 机器学习将数据拟合到数学模型中来获得结论或者做出预测.这些模型吸纳特征作为输入.特 ...
- 面向机器学习的特征工程 八、自动化特征提取器:图像特征提取和深度学习
来源:ApacheCN<面向机器学习的特征工程>翻译项目 译者:friedhelm739 校对:(虚位以待) 视觉和声音是人类固有的感觉输入.我们的大脑是可以迅速进化我们的能力来处理视觉和 ...
最新文章
- SoundPool 音频播放 详解 示例
- python中文名字叫什么-Python为什么取名为Python,很少人知道
- 2019牛客多校一 D. Parity of Tuples
- canal mysql5.6_超详细的Canal入门,看这篇就够了!
- jquery动态改变div宽度和高度
- 【2015.9.1】微信开放平台
- 圣诞快乐(祝福的话和音乐盒)
- 自学python能学成吗-没有任何编程基础可以直接学习python语言吗?学会后能够做什么?...
- 苹果Mac开启root用户及切换到root用户的方法
- tomcat查看线程数
- 软考-软件设计师持续更新
- mysql 存微信表情_MySQL保存 emoji 表情(微信昵称表情)
- 数据同步工具简单介绍
- 【项目管理】开发方法和生命周期绩效域管理
- 什么是计算机网络体系结构?
- 天梯赛座位 分配分数 20作者 陈越单位 浙江大学
- Vuepress Reco主题备忘
- ip中继对接_【关关闯关】AR和Cisco 2900通过SIP IP中继对接案例
- html5网页制作代码-我的班级网页 HTML期末大作业
- 基带0day漏洞可攻击数百万部华为手机
热门文章
- SecureCRT的Backspace显示为^H的解决办法
- linux下安装nginx1.10,Linux(RHEL7.0)下安装Nginx-1.10.2
- 梦幻西游69人最多的服务器,梦幻西游:老王探访难以形容的鬼区,没有摆摊摊位,找不到69玩家...
- centos下mysql执行命令_CentOS下mysql数据库常用命令总结
- 匹配网页里的zip_ZIP 也能边下载边解压?流式解压技术揭秘
- kafka报错 WARN Session 0x0 for server null, unexpected error, closing socket connection
- Ajax 学习(一)
- python lambda函数详细解析(面试经常遇到)
- 开源医学图像处理平台NiftyNet介绍
- (26)基于cookie的登陆认证(写入cookie、删除cookie、登陆后所有域下的网页都可访问、登陆成功跳转至用户开始访问的页面、使用装饰器完成所有页面的登陆认证)...