前言
经过数据探索与数据预处理,得到了可以直接建模的数据。根据**挖掘目标**和**挖掘形式**可以建立
- 分类与预测
- 聚类分析
- 关联规则
- 时序模式
- 偏差检测
等模型
分类与预测
假设对于餐饮企业来说,碰到如下问题
- 基于菜品销售历史,以及节假日、气候和竞争对手等影响因素,对菜品销量进行预测分析
- 预测未来一段时间内哪些顾客会流失,哪个会充值VIP
- 预测新品的销量,在不同人群中的受欢迎程度
实现过程
分类
分类是构造一个分类模型,输入样本的属性值,输出对应的类别,将每个样本映射到预先定义好的类别。
分类模型建立在已有类标记的数据集上。
预测
建立两种或者两种以上变量间相互依赖的函数模型。然后进行预测和控制。
实现过程
分类和预测的实现过程类似,以分类模型为例,
常用的分类与预测算法
回归分析
确定预测属性与其他变量间相互依赖的定量关系最常用的统计学方法。包括线性回归、非线性回归、Login回归、岭回归、主成分回归、最偏小二乘回归等模型
决策树
自顶向下的递归方式,在内部节点进行属性值的比较,并根据不同的属性值从该节点向下分支
人工神经网络
模仿大脑神经网络结构和功能而建立起的信息处理系统,表示神经网络的输入与输出变量之间的关系模型
贝叶斯网络
Bayes方法的拓展,不确定知识表达和拓展、推理领域最有效的理论模型之一
支持向量机
通过某种非线性映射,把低纬度的非线性转换为高纬度的线性可分,在高维空间进行线性分析的算法。
回归分析
Logistic回归建模步骤
#-*- coding: utf-8 -*-
# 逻辑回归 自动建模
import pandas as pd
# 参数初始化
filename = '../data/bankloan.xls'
data = pd.read_excel(filename)
x = data.iloc[:, :8].values
y = data.iloc[:, 8].values
from sklearn.linear_model import LogisticRegression as LR
from sklearn.linear_model import RandomizedLogisticRegression as RLR
rlr = RLR() # 建立随机逻辑回归模型,筛选变量
rlr.fit(x, y) # 训练模型
rlr.get_support() # 获取特征筛选结果,也可以通过.scores_方法获取各个特征的分数
print(u'通过随机逻辑回归模型筛选特征结束。')
print(u'有效特征为:%s' % ','.join(data.columns[rlr.get_support()]))
x = data[data.columns[rlr.get_support()]].as_matrix() # 筛选好特征
lr = LR() # 建立逻辑货柜模型
lr.fit(x, y) # 用筛选后的特征数据来训练模型
print(u'逻辑回归模型训练结束。')
print(u'模型的平均正确率为:%s' % lr.score(x, y)) # 给出模型的平均正确率,本例为81.4%
决策树
- ID3算法:在决策树各个节点上,使用信息增益方法作为属性的选择目标,帮助生成属性。
- C4.5算法:相对于ID3的改进为:使用信息增益率来选择节点属性。克制其不足,ID3只适用于离散的描述属性,C4.5既能处理离散描述属性,也能处理连续描述属性
- CART算法:构件数、修剪树、评估树来构造一个二叉树。当终点是连续变量时,该树为回归树;当终点是分类变量,该树木为分类树
#-*- coding: utf-8 -*-
# 使用ID3决策树算法预测销量高低
import pandas as pd
# 参数初始化
inputfile = '../data/sales_data.xls'
data = pd.read_excel(inputfile, index_col=u'序号') # 导入数据
# 数据是类别标签,要将它转换为数据
# 用1来表示“好”、“是”、“高”这三个属性,用-1来表示“坏”、“否”、“低”
data[data == u'好'] = 1
data[data == u'是'] = 1
data[data == u'高'] = 1
data[data != 1] = -1
x = data.iloc[:, :3].as_matrix().values
y = data.iloc[:, 3].as_matrix().values
from sklearn.tree import DecisionTreeClassifier as DTC
dtc = DTC(criterion='entropy') # 建立决策树模型,基于信息熵
dtc.fit(x, y) # 训练模型
# 导入相关函数,可视化决策树。
# 导出的结果是一个dot文件,需要安装Graphviz才能将它转换为pdf或png等格式。
from sklearn.tree import export_graphviz
x = pd.DataFrame(x)
from sklearn.externals.six import StringIO
x = pd.DataFrame(x)
with open("tree.dot", 'w') as f:
f = export_graphviz(dtc, feature_names=x.columns, out_file=f)
# show tree.dot
# $dot -Tpdf tree.dot -o tree.pdf
神经网络
#-*- coding: utf-8 -*-
# 使用神经网络算法预测销量高低
import pandas as pd
# 参数初始化
inputfile = '../data/sales_data.xls'
data = pd.read_excel(inputfile, index_col=u'序号') # 导入数据
# 数据是类别标签,要将它转换为数据
# 用1来表示“好”、“是”、“高”这三个属性,用0来表示“坏”、“否”、“低”
data[data == u'好'] = 1
data[data == u'是'] = 1
data[data == u'高'] = 1
data[data != 1] = 0
x = data.iloc[:, :3].as_matrix().astype(int)
y = data.iloc[:, 3].as_matrix().astype(int)
from keras.models import Sequential
from keras.layers.core import Dense, Activation
model = Sequential() # 建立模型
model.add(Dense(input_dim=3, output_dim=10))
model.add(Activation('relu')) # 用relu函数作为激活函数,能够大幅提供准确度
model.add(Dense(input_dim=10, output_dim=1))
model.add(Activation('sigmoid')) # 由于是0-1输出,用sigmoid函数作为激活函数
model.compile(loss='binary_crossentropy',
optimizer='adam', class_mode='binary')
# 编译模型。由于我们做的是二元分类,所以我们指定损失函数为binary_crossentropy,以及模式为binary
# 另外常见的损失函数还有mean_squared_error、categorical_crossentropy等,请阅读帮助文件。
# 求解方法我们指定用adam,还有sgd、rmsprop等可选
model.fit(x, y, nb_epoch=1000, batch_size=10) # 训练模型,学习一千次
yp = model.predict_classes(x).reshape(len(y)) # 分类预测
from cm_plot import * # 导入自行编写的混淆矩阵可视化函数
cm_plot(y, yp).show() # 显示混淆矩阵可视化结果