数据挖掘流程总结及案例分析
这个流程主要是方便学习数据挖掘的IT人员快速了解数据挖掘的过程以及应该注意的要点
数据来源:Kaggle上有这样一个比赛:城市自行车共享系统使用状况。
https://www.kaggle.com/c/bike-sharing-demand可以下载
有一个博客对这个题目进行了专门的分析,见如下博客,题目分析以及特征的分析:
https://blog.csdn.net/u013795429/article/details/52092659
数据的处理以及特征处理,见如下博客:
https://blog.csdn.net/mlljava1111/article/details/53694055
https://blog.csdn.net/qiujiahao123/article/details/68927616
特征工程与相关算法的融合如下:
#coding=utf-8
import pandas as pd
data = pd.read_csv("train.csv", header = 0,error_bad_lines=False)
# print(data.head())# 把datetime域切成 日期 和 时间 两部分。
temp = pd.DatetimeIndex(data['datetime'])
data['date'] = temp.date
data['time'] = temp.time
# print(data.head())#设定hour这个小时字段
data["hour"] = pd.to_datetime(data.time,format= '%H:%M:%S')
data['hour'] = pd.Index(data["hour"]).hour#我们对时间类的特征处理,产出一个星期几的类别型变量
data["dayofweek"] = pd.DatetimeIndex(data.date).dayofweek#对时间类特征处理,产出一个时间长度变量
data['dateDays'] = (data.date - data.date[0]).astype('timedelta64[D]')#做一个小小的统计来看看真实的数据分布,我们统计一下一周各天的自行车租赁情况(分注册的人和没注册的人
byday = data.groupby(data["dayofweek"])
# 统计下没注册的用户租赁情况
byday['casual'].sum().reset_index()
# 统计下注册的用户的租赁情况
# print(byday['casual'].sum().reset_index())
byday['registered'].sum().reset_index()#周末因为不同于平常,所以周末另外设置一列存储
data['Saturday'] = 0
data.Saturday[data["dayofweek"]==5]=1
data['Sunday'] = 0
data.Sunday[data["dayofweek"]==6]=1
# print(data.head())# 从数据中,把原始的时间字段等踢掉
dataRel = data.drop(['datetime', 'count','date','time','dayofweek'], axis=1)
# print(dataRel.head())# 特征向量化
from sklearn.feature_extraction import DictVectorizer
#将连续值的属性放入一个dict中
featureConCols = ['temp','atemp','humidity','windspeed','dateDays','hour']
dataFeatureCon = dataRel[featureConCols]
# print(dataFeatureCon)
#当数据中存在NaN缺失值时,我们可以用NA替代NaN
dataFeatureCon = dataFeatureCon.fillna('NA')
# 把离散值的属性放到一个dict中
X_dictCon = dataFeatureCon.T.to_dict().values()
# print(X_dictCon)
# print(dataFeatureCon)# 把离散值的属性放到另外一个dict中
featureCatCols = ['season','holiday','workingday','weather','Saturday', 'Sunday']
dataFeatureCat = dataRel[featureCatCols]
# print(dataFeatureCat)
dataFeatureCat = dataFeatureCat.fillna( 'NA' ) #in case I missed any
X_dictCat = dataFeatureCat.T.to_dict().values()
# print(X_dictCat)
# print(dataFeatureCat.head())# 向量化特征,即将上述的编成的特征与数字一一对应,进行组成数组
vec = DictVectorizer(sparse = False)
X_vec_cat = vec.fit_transform(X_dictCat)
# print(X_vec_cat)
X_vec_con = vec.fit_transform(X_dictCon)
# print(X_vec_con)
#
#标准化连续值特征
from sklearn import preprocessing
#标准化连续值数据
scaler = preprocessing.StandardScaler().fit(X_vec_con)
X_vec_con = scaler.transform(X_vec_con)
# print(X_vec_con)#类别特征编码
#最常用的当然是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()
# print(X_vec_cat)# 把特征拼一起
# 把离散和连续的特征都组合在一起
import numpy as np
X_vec = np.concatenate((X_vec_con,X_vec_cat),axis=1)
# print(X_vec)#对结果值也处理一下
# 拿到结果的浮点数值
# 对Y向量化
Y_vec_reg = dataRel['registered'].values.astype(float)
Y_vec_cas = dataRel['casual'].values.astype(float)# print(Y_vec_reg)
# print(Y_vec_cas)Y = data['count'].values
#print(Y)
"""模型训练,主要采用了4种模型进行训练,
1.岭回归、2.支持向量机、3.随机森林、
4.用网格搜索给随机森林找一组参数,然后在用随机森林预测
"""
# 1.岭回归
from sklearn.model_selection import train_test_split
# from sklearn.linear_model import Ridge
from sklearn.linear_model import LinearRegression,Lasso,Ridge,ElasticNet
print("\n1.岭回归")
x_train,x_test,y_train,y_test = train_test_split(X_vec,Y,test_size=0.25,random_state=1)
clf = LinearRegression()
clf.fit(x_train, y_train)
t=clf.predict(x_test)
print(t)
print("y_test:%s"%y_test)
print("训练集准确率:{},测试集准确率:{}".format(clf.score(x_train, y_train),clf.score(x_test, y_test)
))# 2.支持向量机--为什么分类的SVM可以用来做回归
from sklearn.svm import SVR
print("\n2.支持向量机")
clf = SVR(kernel='rbf', C=10, gamma=0.001)
clf.fit(x_train, y_train)
t=clf.predict(x_test)
print(t)
print("y_test:%s"%y_test)
print("训练集准确率:{},测试集准确率:{}".format(clf.score(x_train, y_train),clf.score(x_test, y_test)
))# 3.随机森林
print("\n3.随机森林")
# from sklearn.ensemble import RandomForestClassifier
from sklearn.ensemble import RandomForestRegressorclf = RandomForestRegressor(n_estimators=80)
clf.fit(x_train, y_train)
t=clf.predict(x_test)
print(t)
print("y_test:%s"%y_test)
print("训练集准确率:{},测试集准确率:{}".format(clf.score(x_train, y_train),clf.score(x_test, y_test)
))# 4.用网格搜索给随机森林找一组参数,然后在用随机森林预测
print("\n4.用网格搜索给随机森林找一组参数,然后在用随机森林预测")
from sklearn.model_selection import GridSearchCV
params = {"n_estimators":[30,60,90]}
scores = ['r2']
for score in scores:print(score)clf = GridSearchCV(RandomForestRegressor(),params,cv=5,scoring=score)clf.fit(x_train,y_train)print(clf.best_estimator_)clf = RandomForestRegressor(bootstrap=True,criterion='mse',max_depth=None,max_features = "auto",max_leaf_nodes = None,min_impurity_decrease=0.0,min_impurity_split=None,min_samples_leaf=1,min_samples_split=2,min_weight_fraction_leaf =0.0,n_estimators = 90,n_jobs = 1,oob_score=False,random_state = None,verbose=0,warm_start=False)
clf.fit(x_train, y_train)
t=clf.predict(x_test)
print(t)
print("y_test:%s"%y_test)
print("训练集准确率:{},测试集准确率:{}".format(clf.score(x_train, y_train),clf.score(x_test, y_test)
))
结果:
SettingWithCopyWarning: A value is trying to be set on a copy of a slice from a DataFrame
See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copydata.Saturday[data["dayofweek"]==5]=1
SettingWithCopyWarning:
A value is trying to be set on a copy of a slice from a DataFrame
See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copydata.Sunday[data["dayofweek"]==6]=1
[ 16 40 32 ..., 168 129 88]1.岭回归
[ 174. 68. 392. ..., 114. -70. -26.]
y_test:[308 14 539 ..., 24 14 8]
训练集准确率:0.39493964089432243,测试集准确率:0.40186701528857862.支持向量机
[ 161.9917164 64.73611511 258.07775507 ..., 106.7790444 -4.7482686326.4338403 ]
y_test:[308 14 539 ..., 24 14 8]
训练集准确率:0.27130138131106696,测试集准确率:0.261836057281756963.随机森林
[ 309.3 6.3375 570.5375 ..., 27.0625 10.125 14.2875]
y_test:[308 14 539 ..., 24 14 8]
训练集准确率:0.9917779365294469,测试集准确率:0.94914085756678284.用网格搜索给随机森林找一组参数,然后在用随机森林预测
r2
RandomForestRegressor(bootstrap=True, criterion='mse', max_depth=None,max_features='auto', max_leaf_nodes=None,min_impurity_decrease=0.0, min_impurity_split=None,min_samples_leaf=1, min_samples_split=2,min_weight_fraction_leaf=0.0, n_estimators=90, n_jobs=1,oob_score=False, random_state=None, verbose=0, warm_start=False)
[ 304.53333333 7.82222222 565.82222222 ..., 27.72222222 10.9333333313.9 ]
y_test:[308 14 539 ..., 24 14 8]
训练集准确率:0.9918493230582454,测试集准确率:0.950078345686705
算法参考:
https://blog.csdn.net/shawroad88/article/details/87277407
https://blog.csdn.net/wong2016/article/details/87916292不一样的实现,可以看看
gridSearchCV(网格搜索)的参数、方法及示例:
https://blog.csdn.net/weixin_41988628/article/details/83098130
数据挖掘一般流程及模型整理:
https://mp.weixin.qq.com/s/mtU-58ZPW9ruOj7H16zpVQ
https://blog.csdn.net/scheezer/article/details/82794757
参考:
https://blog.csdn.net/mlljava1111/article/details/53694055
https://blog.csdn.net/qq_41185868/article/details/81711462
https://blog.csdn.net/shawroad88/article/details/87277407
数据挖掘流程总结及案例分析相关推荐
- 【设计模式】装饰者模式 ( 概念 | 适用场景 | 优缺点 | 与继承对比 | 定义流程 | 运行机制 | 案例分析 )
文章目录 I . 装饰者模式概念 II . 装饰者模式适用场景 III . 装饰者模式优缺点 IV . 装饰者模式与继承对比 V . 装饰者模式相关设计模式 VI . 装饰者模式四个相关类 VII . ...
- 数据挖掘之科比投球案例分析
为了弥补在特征工程中的不足,学习一下如何从数据获取以后进行数据处理分析,以下为数据处理学习内容: 在学习过程中遇到问题: 原因1:后来发现是学习视频中介绍导包的文件不对,下面这两个都是KFold交叉验 ...
- 案例分析 | SAP如何帮助企业实现端到端的数字化供应链管理
https://www.toutiao.com/a6687387597922107916/ 在我之前的一篇 <收藏 | 供应链管理最佳实践之S&OP> 文章中,为大家介绍了关于S& ...
- 清风数学建模学习笔记——系统(层次)聚类原理详解及案例分析
系统聚类 系统聚类的合并算法通过计算两类数据点间的距离,对最为接近的两类数据点进行组合,并反复迭代这一过程,直到将所有数据点合成一类,并生成聚类谱系图.此外,系统聚类可以解决簇数 K 的取值问题, ...
- php 许愿墙 阶段案例_房地产全周期设计管控流程解析及跨部门合作及案例分析...
时间:2021年1月22-23日 地点:北京 授课专家:高炜 联系人:文雯 手机微信:13264559187 课程前言 房地产市场虽已进入"白银时代",但中国的城市化过程并没有结束 ...
- 大数据挖掘建模案例分析:利用BP神经网络算法进行用户行为分析(一)
泰迪智能科技(数据挖掘平台:TipDM数据挖掘平台)最新推出的数据挖掘实战专栏 专栏将数据挖掘理论与项目案例实践相结合,可以让大家获得真实的数据挖掘学习与实践环境,更快.更好的学习数据挖掘知识与积累职 ...
- 员工培训案例分析答案_东海租赁组织开展案例分析和流程优化培训
2020年9月28日下午,东海融资租赁股份有限公司在月湖金汇大厦21楼会议室组织开展案例分析和流程优化培训,公司前台.中台员工参加,苏州和温州办事处同事通过远程会议系统参加本次培训. 本次培训的主要目 ...
- Unity3D案例太空射击(Space Shooter)流程介绍与代码分析(上)
最近开始接触游戏制作,用Unity制作一些简单的游戏进行入门.这几篇博客总结了Space Shooter的制作流程,并对代码进行了分析.一是方便自己日后进行回顾与补充,二是为了让让更多的游戏爱好者接触 ...
- Unity3D案例太空射击(Space Shooter)流程介绍与代码分析(下)
这部分内容关注的是游戏性的提升,包括音效.计分等功能的实现. 传送门: 太空射击(Space Shooter)流程介绍与代码分析(上) 太空射击(Space Shooter)流程介绍与代码分析(中) ...
最新文章
- 又一款4800像素手机曝光:vivo V15 Pro
- ajax基本用法介绍
- mysql数据库用户管理及日志文件
- Exchange 2016证书配置
- 农业谋定竞争力-农业大健康·万祥军:质量效益促品牌农业
- 爱我少一点,我请求你
- 返回指针_C语言面试中的问题指针和引用的使用场景?
- 问题 H: 简单的打折计算 山东科技大学OJ C语言
- 百家号在线视频编辑器的技术演进
- 计算机编程不等于符号,不等于符号(java)
- 多轴机械人运动学正逆解,简单粗暴!!!!!!
- Easy Data Transform for mac (Excel和CSV编程文件转换工具) v1.11.1激活版
- 核芯物联Command ‘cle‘ not found错误处理
- Qpython SL4A服务调用GPS定位获取获取位置信息
- Ubuntu 18.04 无法自动检测耳机解决方法
- Python后端开发(主Django)面试题
- [开源项目] 1. EMS
- [Video and Audio Data Processing] 截取部分PCM16LE单声道音频采样数据
- 【论文速递】“基于自适应辐射环编码柱状图大尺度和旋转不变性的模板匹配”
- 攻略来了!2019世界虚拟现实产业大会AR/MR参展指南