未加星标

数据挖掘4流程(R vs python)

字体大小 | |
[大数据技术 所属分类 大数据技术 | 发布者 店小二05 | 时间 2017 | 作者 红领巾 ] 0人收藏点击收藏

数据挖掘从开始到结束主要分为6个步骤:业务理解、数据搜集、数据整理、数据建模、模型评估以及模型部署。抛开将业务转化为模型的业务理解以及对建立好的模型的模型部署两部分,本文将对建模过程当中的核心4步骤:数据搜集、数据整理、数据建模、模型评估进行归纳和整理。每一部分,笔者都会从三个角度进行归纳:1.该部分到底是要做什么;2.该部分常用的R实现;3.该部分常用的python实现。

下面就让我们进入正题吧——gogogo!

一.数据采集

当将业务问题转化成建模目标之后,第一步要做的便是根据业务采集本次建模所需要的所有数据。将数据采集好之后,我们需要将其导入数据分析软件中,以便于接下来的建模使用。

1.1R实现

建模最开始,需要设置路径,以方便后续导入导出以及保存等流程。在R中,设置路径方式如下。

#查看工作路径<br />
getwd()<br />
#设置工作路径<br />
setwd('G:/test/')<br />

在R中,笔者最常用的数据导入方式有三种。

1.1.2csv导入

导入csv文件,有两种常用写法。

#法1<br />
data<-read.csv('filename.csv',seq=',',header=TRUE)<br />
#法2<br />
data<-read.table('filename.csv')<br />
1.1.3excel导入

导入excel文件,在R中有两个惯常使用的包——xlsx和XLConnect。

#法1<br />
library(xlsx)<br />
workbook<-"/data.xlsx"<br />
data<-readxlsx(workbook,1)<br />
#法2<br />
library(XLConnect)<br />
wb<-loadWorkbook("data.xlsx")<br />
data<-readWorksheet(wb,sheet=getSheets(wb)[1])<br />
1.1.4数据库导入

导入数据库数据,通常使用ROCBC包。

library(RODBC)<br />
#连接数据库<br />
channel<-odbcConnect("数据库名",uid="用户名",pwd="密码",believeNRows=FALSE)<br />
#读取数据的sql<br />
data<-sqlQuery(channel,"select * from data")<br />
1.2python实现
1.2.1路径设置
import os<br />
#查看工作路径<br />
os.getcwd()<br />
#设置工作路径<br />
os.chdir("G:\\test\\")<br />
1.2.2csv导入
import pandas as pd<br />
data = pd.read_csv("filename.csv")<br />
1.2.3数据库导入

因为笔者用的是oracle数据库,所以这里以oracle数据库为例。

import cx_Oracle as co<br />
#创建连接<br />
db = co.connect('用户名/密码@ip:1521/服务名')<br />
#创建cursor<br />
cursor = db.cursor()<br />
#用sql写出想要的数据<br />
sqldata='select * from data'<br />
#执行sql语句<br />
cursor.execute(sqldata)<br />
#用完之后关闭数据库<br />
db.close()<br />
二.数据处理

导入数据之后,第二步需要做的是对数据进行处理,使得数据达到建模对数据的要求。

数据处理主要分为如下的几个步骤:数据探索、缺失值处理、异常值处理、数据格式转换、数据标准化。

2.1数据探索

数据处理的第一步,通常使用描述性统计去探索数据量、字段类型等基本信息。

#R实现<br />
#查看数据结构<br />
class(data)<br />
str(data)<br />
#最小值、最大值、四分位数和数值型变量的均值,以及因子向量和逻辑型向量的频数统计<br />
summary(data)<br />
#python实现<br />
#查看数据结构<br />
data.shape<br />
data.dtypes<br />
#最小值、最大值、四分位数和数值型变量的均值,以及因子向量和逻辑型向量的频数统计<br />
data.describe()<br />

查看数据信息,如果不同字段均值差异很大或者模型有需要,就要考虑数据标准化;如果某些字段类型不符合建模需要,就要对字段类型进行转换。

2.2缺失值处理

很多模型是要求数据当中不能存在缺失值的,因此,我们要检查数据当中是否存在缺失值,如果存在,需要对缺失值进行一定的处理。

2.2.1判断缺失值是否存在
#R实现
#判断数据是否有缺失值
#1.每个值都判断,然后做矩阵判断整体
table(is.na(data))
#2.判断矩阵
library(mice)
md.pattern(data)
#作图判断数据是否有缺失值
library(VIM)
aggr(data,prop=FALSE,numbers=TRUE)
#python实现
isnull = pd.isnull(data)
isnull_count = len(data[isnull.values==True])

判断之后,如果没有缺失值皆大欢喜,如果有缺失值,需要对缺失值进行插补或者是删除。

2.2.2删除缺失值
#r
data=data[complete.cases(data),]
#or
data=na.omit(data)
data = data[isnull.values==False]

插补缺失值太过细化,这里暂不展开赘诉。

2.3异常值处理
2.3.1判断是否存在异常值

可用箱线图来判断数据是否存在异常值。

2.4数据格式转换

数据探索之后,如果发现有字段数据格式不符合建模要求,需要对格式进行转换。

#R实现
#在R中,可以使用as.xx函数对数据格式进行转换,例如:
#将x1转化成数值型
data$x1<-as.numeric(data$x1)
#将x2转化成字符串型
data$x2<-as.character(data$x2)
#python实现
#在python中,使用astype对数据格式进行转换,例如:
#将x1转化成数值型
data['x1'] =data['x1'].astype('Int32')
#将x2转化成字符串型
data['x2'] = data['x2'].astype('str')
2.5数据标准化

如果不同字段均值差异很大或者模型有需要,为了统一量纲,减小量纲给模型带来的误差,需要对数据进行标准化。

#R实现
##1.标准化(公式:(实际值-均值)/sd)
#scale函数:center和scale默认为真,如果只有scale为真则 :实际值/SD
data_scale<-scale(data,center=T,scale=T)
##2.中心化处理(公式:实际值-均值)(此函数也可以标准化),默认和scale相同,中心化并没有消除量纲的影响
library(caret)
data_center<-preProcess(data,method=c("center"))
###3.归一化(公式:(x-min(x))/max(x)-min(x))
data_range<-preProcess(data,method = c("range"))
#python实现
import numpy as np
##1.标准化
data = data.apply(lambda x:(x-np.mean(x)/np.std(data)))
##2.中心化
data = data.apply(lambda x:(x-np.mean(x)))
##3.归一化
data = data.apply(lambda x:(x-np.min(x))/(np.max(x)-np.min(x)))
三.数据建模

当数据整理成建模需要的格式之后,就进入数据挖掘最重要也是最核心的一步:数据建模。

在数据挖掘中,常用的数据挖掘算法分为预测、分类、聚类、关联规则、时间序列以及文本挖掘六个大类。下面,我将会归纳每个类常用的常用的几个算法,每个算法我将会简单地拎一拎它的理论核心以及在R或python中运用算法会用到的包。

在讲算法之前,还需要先提一个知识点,那就是数据分区。

3.1数据分区

在机器学习中,一般将建模的数据样本data分为训练集train和测试集test,使用训练集估计模型,使用测试集评估模型优劣。

#R实现
library(caret)
index<-createDataPartition(y,times=1,p=0.75)
train<-data[index,]
test<-data[-index,]
#python实现
from sklearn.cross_validation import train_test_split
x=data.iloc[:,1:(n-1)].values
y=data.iloc[:,n].values
(x_train,x_test,y_train,y_test)=train_test_split(x,y,train_size=0.75,random_state=1234)

除了将数据简单地分为训练集和测试集之外,还可以进行k折交叉验证,这不是本文的重点,在此不进行展开。

3.2预测

预测模型指的是建立模型对连续函数值型的目标函数进行估计预测。属于预测的模型中,常见的有线性回归,岭回归,lasso回归,回归树,SVM,神经网络,下面,我将会对它们一一进行概要总结。

3.2.1线性回归

线性回归,即是对Y=∑βX做最小二乘法(OLS)估计,求解参数β,从而得出模型。

#R实现
lr_fit<-lm(x,y,data=train)
#python实现
from sklearn.linear_model import LinearRegression
lr = LinearRegression()
lr_fit=lr.fit(x_train,y_train)
3.2.2岭回归

偏差描述了训练集在样本上的拟合程度,方差描述了模型的移植性,即用测试集验证模型模型的优度。方差和偏差需要同时小模型才好,如果偏差大,模型本身的优度糟糕,但如果一味地追求偏差使得方差大,那么即使在训练样本上拟合再好,一换了测试集就GG的这种可移植性差的模型也是没有意义的。

随着模型复杂度增加,方差和偏差会经历先同高,后同低,最后过拟合,方差高偏差低的过程。

岭回归是在线性回归的基础上给线性回归实际值减去估计值得到的平方误差((YXW)2

λ∑ω2j

.通过正则项,可以使偏差和方差达到平衡。加上正则项,可以确定λ是的方差和偏差达到平衡。

#R实现
library(MASS)
ridge_fit<-lm.ridge(y~.,lambda =0.1,data=train)
#python实现
from sklearn import linear_model
ridge = linear_model.Ridge(alpha=0.1)
ridge_fit = ridge.fit(x_train,y_train)
3.2.3lasso回归

类似于岭回归,只不过lasso回归的惩罚项是绝对值λ||ω||1而不是平方。这导致惩罚值使一些参数估计结果为0,将会从给定的n个变量中选择变量。

因此,lasso不光可以用于预测,也可以用于选择合适的自变量。

tags: lt,data,br,gt,数据,train,模型,建模,导入,library,缺失,#R,import,#python
分页:12
转载请注明
本文标题:数据挖掘4流程(R vs python)
本站链接:http://www.codesec.net/view/570370.html
分享请点击:


1.凡CodeSecTeam转载的文章,均出自其它媒体或其他官网介绍,目的在于传递更多的信息,并不代表本站赞同其观点和其真实性负责;
2.转载的文章仅代表原创作者观点,与本站无关。其原创性以及文中陈述文字和内容未经本站证实,本站对该文以及其中全部或者部分内容、文字的真实性、完整性、及时性,不作出任何保证或承若;
3.如本站转载稿涉及版权等问题,请作者及时联系本站,我们会及时处理。
登录后可拥有收藏文章、关注作者等权限...
技术大类 技术大类 | 大数据技术 | 评论(0) | 阅读(362)