(五)Python数据分析与挖掘实战——挖掘建模

本文档详细介绍了使用Python进行数据分析与挖掘的实战内容,涉及逻辑回归、决策树、人工神经网络、K-means聚类、Apriori关联规则以及时间序列模型等。通过实例代码,阐述了在餐饮行业的应用,如菜品销量预测、客户分类、点餐规则挖掘和销售预测等,展示了各类模型的优缺点和评价指标。
摘要由CSDN通过智能技术生成

这个专栏用来记录我在学习和实践《Python数据分析与挖掘实战》一书时的一些知识点总结和代码实现。

代码

logistic_regression.py

这里利用稳定性选择方法中的随机逻辑回归进行特征筛选,然后利用筛选后的特征建立逻辑回归模型,输出平均正确率。

#-*- coding: utf-8 -*-
# 逻辑回归 自动建模
import pandas as pd

# 参数初始化
filename = '../data/bankloan.xls'
data = pd.read_excel(filename)
x = data.iloc[:, :8].as_matrix()
y = data.iloc[:, 8].as_matrix()

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%

decision_tree.py

#-*- 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().astype(int)
y = data.iloc[:, 3].as_matrix().astype(int)

from sklearn.tree import DecisionTreeClassifier as DTC
dtc = DTC(criterion='entropy')  # 建立决策树模型,基于信息熵;也可以指定gini,则为基尼系数
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

neural_network.py

该脚本中建立的神经网络有3个输入节点、10个隐藏节点和1个输出节点。

这个案例比较简单,没有考虑过拟合的问题。实际上,神经网络的拟合能力很强,很容易出现过拟合现象。跟传统的添加”惩罚项“的做法不同,目前神经网络(尤其是深度神经网络)中,防止过拟合的方法是随机地让部分神经网络节点休眠。

#-*- 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()  # 显示混淆矩阵可视化结果

k_means.py

下面的例子中使用了客户的RFM三个指标进行聚类。

设定聚类个数K=3,最大迭代次数为500次,距离函数取欧式距离

#-*- coding: utf-8 -*-
# 使用K-Means算法聚类消费行为特征数据

import pandas as pd

# 参数初始化
inputfile = '../data/consumption_data.xls'  # 销量及其他属性数据
outputfile = '../tmp/data_type.xls'  # 保存结果的文件名

data = pd.read_excel
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值