Python数据分析与数据挖掘day6

初探Python数据分析day6

   自我介绍一下,我是一名大四应届毕业生对数据挖掘方面很感兴趣,最近开始着手系统学习,在这里与大家分享我的学习笔记与心得,如果不足或错误请大家指出,感谢。

第五章 挖掘建模

一、分类与预测

就餐饮企业而言,经常会碰到如下问题。

  1. 如何基于菜品历史销售情况,以及节假日、气候和竞争对手等影响因素,对菜品销量进行趋势预测?
  2. 如何预测未来一段时间哪些顾客会流失,哪些顾客最有可能会成为VIP客户?
  3. 如何预测一种新产品的销售量,以及在哪种类型的客户中会较受欢迎?

​    除此之外,餐厅经理需要通过数据分析来帮助他了解具有某些特征的顾客的消费习惯;餐饮企业老板希望知道下个月的销售收入,原材料采购需要投入多少,这些都是分类与预测的例子。分类和预测是预测问题的两种主要类型,分类主要是预测分类标号(离散属性),而预测主要是建立连续值函数模型,预测给定自变量对应的因变量的值。

1、实现过程

1)分类

​    分类是构造一个分类模型,输人样本的属性值,输出对应的类别,将每个样本映射到预先定义好的类别。
​    分类模型建立在已有类标记的数据集上,模型在已有样本上的准确率可以方便地计算,所以分类属于有监督的学习。下图是一个将销售量分为高、中、低三分类问题。

(2)预测

​    预测是指建立两种或两种以上变量相互依赖的函数模型,然后进行预测或控制。

(3)实现过程

分类算法有两步过程:

  • 第一步是学习步,通过归纳分析训练样本集来建立分类模型得到分类规则
  • 第二步是分类步,先用已知的测试样本集评估分类规则的准确率,如果准确率是可以接受的,则使用该模型对未知类标号的待测样本集进行预测。

预测模型的实现也有两步:

  • 第一步是通过训练集建立预测属性(数值型的)的函数模型
  • 第二步在模型通过检验后进行预测或控制

2、常见的分类与预测算法

算法名称 算法描述
回归分析 回归分析是确定预测属性(数值型)与其他变量间相互依赖的定量关系最常用的统计学方法。包括线性回归、非线性回归、Logistic 回归、岭回归、主成分回归、偏最小二乘回归等模型
决策树 决策树采用自顶向下的递归方式,在内部节点进行属性值的比较,并根据不同的属性值从该节点向下分支,最终得到的叶节点是学习划分的类
人工神经网络 人工神经网络是一种模仿大脑神经网络结构和功能而建立的信息处理系统,表示神经网络的输人与输出变量之间关系的模型
贝叶斯网络 贝叶斯网络又称信度网络,是Bayes方法的扩展,是目前不确定知识表达和推理领域最有效的理论模型之一
支持向量机 支持向量机是一种通过某种非线性映射,把低维的非线性可分转化为高维的线性可分,在高维空间进行线性分析的算法

3、回归分析

   回归分析是通过建立模型来研究变量之间相互关系的密切程度、结构状态及进行模型预测的一种有效工具,在工商管理、经济、社会、医学和生物学等领域应用十分广泛。从19世纪初高斯提出最小二乘估计起,回归分析的历史已有200多年。从经典的回归分析方法到近代的回归分析方法,按照研究方法划分,回归分析研究的范围大致如下。

​    在数据挖掘环境下,自变量与因变量具有相关关系,自变量的值是已知的,因变量是要预测的。

主要的回归模型分类:

回归模型名称 适用条件 算法描述
线性回归 因变量与自变量是线性关系 对一个或多个自变量和因变量之间的线性关系进行建模,可用最小二乘法求解模型系数
非线性回归 因变量与自变量之间不都是线性关系 对一个或多个自变量和因变量之间的非线性关系进行建模。如果非线性关系可以通过简单的函数变换转化成线性关系,用线性回归的思想求解;如果不能转化,用非线性最小二乘方法求解
Logistic回归 因变量一般有1和0(是否)两种数值 是广义线性回归模型的特例,利用Logistic函数将因变量的取值范围控制在0和1之间,表示取值为1的概率
岭回归 参与建模的自变量之间具有多重共线性 是一种改进的最小二乘估计的方法
主成分分析 参与建模的自变量之间具有多重共线性 主成分回归是根据主成分分析的思想提出来的,是对最小二乘法的一种改进,它是参数估计的一种有偏估计。可以消除自变量之间的多重共线性

​    线性回归模型是相对简单的回归模型,但是通常因变量和自变量之间呈现某种曲线关系,就需要建立非线性回归模型。

​    Logistic回归属于概率型非线性回归,分为二分类和多分类的回归模型。对于二分类的Logistic回归,因变量y只有“是、否”两个取值,记为1和0。假设在自变量x1,x2… ,xp作用下,y取“是”的概率是p,则取“否”的概率是1-p, 研究的是当y取“是”发生的概率p与自变量x1, x2… ,xp的关系。

​    当自变量之间出现多重共线性时,用最小二乘估计的回归系数将会不准确,消除多重共线性的参数改进的估计方法主要有岭回归和主成分回归。下面就较常用的二分类Logistic回归模型的原理进行介绍。

(1)Logistic回归分析介绍

a、Logistic函数

Logistic回归模型中的因变量只有1和0(发生于不发生)两种。假设在p个独立自变量x1,x2…xp作用下,y取1的概率是p = P(y = 1|X)取0的概率是1-p,取1和取0的概率之比为
p 1 p \frac{p}{1-p}
称为事件的优势比(odds),对odds取自然对数得Logistic变换
L o g i t ( p ) = l n ( p 1 p ) Logit(p) = ln(\frac{p}{1-p}) 称为①
令①=z,则
p = 1 1 + e z p = \frac{1}{1+e^{z}}
称为Logistic函数

如图:

(2)Logistic回归建模步骤

a、根据分析目的设置指标变量(因变量和自变量),然后收集数据,根据收集到的数据,对特征再次进行筛选

b、y取1的概率是p= P(y= 1|X), 取0概率是1-p。用
l n ( p 1 p ) ln(\frac{p}{1-p})
和自变量列出线性回归方程,估计出模型中的回归系数
c、进行模型检验。模型有效性的检验指标有很多,最基本的有正确率,其次有混淆矩阵、ROC曲线、KS值等。

d、模型应用:输入自变量的取值,就可以得到预测变量的值,或者根据预测变量的值去控制自变量的取值。

实例:

年龄 教育 工龄 地址 收入 负债率 信用卡负债 其他负债 违约
41 3 17 12 176.00 9.30 11.36 5.01 1
27 1 10 6 31.00 17.30 1.36 4.00 0

需要数据集请私聊我

​    利用Scikit-Learn对这个数据进行逻辑回归分析。首先进行特征筛选,特征筛选的方法有很多,主要包含在Scikit_Learn 的feature_ selection 库中,比较简单的有通过F检验(f_ regression)来给出各个特征的F值和p值,从而可以筛选变量(选择F值大的或者p值小的特征)。其次有递归特征消除( Recursive Feature Elimination, RFE)稳定性选择(StabilitySelection)等比较新的方法。这里使用了稳定性选择方法中的随机逻辑回归进行特征筛选,然后利用筛选后的特征建立逻辑回归模型,输出平均正确率。

逻辑回归代码

# -*- 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 stability_selection.randomized_lasso 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%

结果:

通过随机逻辑回归模型筛选特征结束。
有效特征为:工龄,地址,负债率,信用卡负债
逻辑回归模型训练结束。
魔性的平均正确率为:0.814285714286

4、决策树

​    决策树是一树状结构,它的每一个叶节点对应着一个分类,非叶节点对应着在某个属性上的划分,根据样本在该属性上的不同取值将其划分成若干个子集。对于非纯的叶节点,多数类的标号给出到达这个节点的样本所属的类。构造决策树的核心问题是在每一步如何选择适当的属性对样本做拆分。对一个分类问题,从已知类标记的训练样本中学习并构造出决策树是一个自上而下,分而治之的过程。

常见的决策树算法表:

决策树算法 算法描述
ID3算法 其核心是在决策树的各级节点上,使用信息增益方法作为属性的选择标准,来帮助确定生成每个节点时所应采用的合适属性
C4.5算法 C4.5决策树生成算法相对于ID3算法的重要改进是使用信息增益率来选择节点属性。C4.5算法可以克服ID3算法存在的不足: ID3算法只适用于离散的描述属性,而C4.5算法既能够处理离散的描述属性,也可以处理连续的描述属性
CART算法 CART决策树是-一种十分有效的非参数分类和回归方法,通过构建树、修剪树、评估树来构建一个二叉树。当终结点是连续变量时,该树为回归树;当终结点是分类变量,该树为分类树

5、人工神经网络

算法名称 算法描述
BP神经网络 是一种按误差逆传播算法训练的多层前馈网络,学习算法是δ学习规则,是目前应用最广泛的神经网络模型之一
LM神经网络 是基于梯度下降法和牛顿法结合的多层前馈网络,特点:迭代次数少,收敛速度快,精确度高
RBF径向基神经网络 RBF网络能够以任意精度逼近任意连续函数,从输人层到隐含层的变换是非线性的,而从含层到输出层的变换是线性的,特别适合于解决分类问题
FNN模糊神经网络 FNN模糊神经网络是具有模糊权系数或者输人信号是模糊量的神经网络,是模糊系统与神经网络相结合的产物,它汇聚了神经网络与模糊系统的优点,集联想、识别、自适应及模糊信息处理于一体
GMDH神经网络 GMDH网络也称为多项式网络,它是前馈神经网络中常用的一-种用于预测的神经网络。它的特点是网络结构不固定,而且在训练过程中不断改变
ANFIS自适应神经网络 神经网络镶嵌在一- 个全部模糊的结构之中,在不知不觉中向训练数据学习,自动产生、修正并高度概括出最佳的输人与输出变量的隶属函数以及模糊规则;另外,神经网络的各层结构与参数也都具有了明确的、易于理解的物理意义

反向传播( Back Propagation, BP) 算法的特征是利用输出后的误差来估计输出层的直接前导层的误差,再用这个误差估计更前一层的误差,如此一层一层的反向传播下去,就获得了所有其他各层的误差估计。这样就形成了将输出层表现出的误差沿着与输入传送相反的方向逐级向网络的输入层传递的过程。这里我们以典型的三层BP网络为例,描述标准的BP算法。

下图是一个有3个输入节点,4个隐层节点,1个输出节点的一个三层BP神经网络。

BP算法学习过程流程图:

​    BP算法只用到均方误差函数对权值和國值的一.阶导数 (梯度)的信息,使得算法存在收敛速度缓慢、易陷入局部极小等缺陷。为了解决这一问题,Hinton 等人于2006年提出了非监督贪心逐层训练算法,为解决深层结构相关的优化难题带来希望,并以此为基础发展成了如今脍炙人口的“深度学习”算法。本文中所建立的神经网络,结构跟传统的BP神经网络是类似的,但是求解算法已经用了新的逐层训练算法。限于篇幅,本文不对深度学习做进一步的讲解。有兴趣的读者,请自行搜索并阅读相关资料。

6、Python分类预测模型特点

模型 模型特点 位于
比较基础的线性分类模型,很多时候是简单有效的的选择 sklearn.linner_model
SVM 强大的模型,可以用来回归、预测、分类等,而根据选取不同的核函数。模型可以是线性的/非线性的 sklearn.svm
决策树 基于“分类讨论、逐步细化"思想的分类模型,模型直观,易解释,如前面5.1.4节中可以直接给出决策图 sklearn.tree
随机森林 思想跟决策树类似,精度通常比决策树要高,缺点是由于其随机性,丧失了决策树的可解释性 sklearn.ensemble
朴素贝叶斯 基于概率思想的简单有效的分类模型,能够给出容易理解的概率解释 sklearn.naive_bayes
神经网络 具有强大的拟合能力,可以用于拟合、分类等,它有很多个增强版本,如递神经网络、卷积神经网络、自编码器等,这些是深度学习的模型基础 Keras

​    Scikit-Learn和Keras的功能都非常强大,我们能够做的仅仅是通过一些简单的例子介绍它们的基本功能,这仅仅是它们本身功能的冰山一角。因此,再次强调,如果遇到没有讲解过的问题,应当尽可能地查阅官方的帮助文档。只有官方的帮助文章,才有可能全面地提供解决问题的答案。


★学习Python数据挖掘纯属个人爱好,如有不足或错误请指出谢谢。

发布了25 篇原创文章 · 获赞 5 · 访问量 1502

猜你喜欢

转载自blog.csdn.net/weixin_43656359/article/details/103345694