【数据挖掘】挖掘建模-回归分析(1)

参考文献:《Python数据分析与挖掘实战》

分类与预测

一、实现过程

  1. 分类:构造分类模型,输入样本的属性值,输出对应的类别,将每个样本映射到预先定义好的类别。属于有监督的学习。
  2. 预测:建立两种或两种以上变量间相互依赖的函数模型,然后进行预测或控制。
  3. 分类实现过程:
    学习:通过归纳分析训练样本集来建立分类模型得到分类规则。
    分类:用已知的测试样本集评估分类规则的准确率,若结果可接受则用样本集进行预测。
  4. 预测实现过程:
    通过训练集建立预测数值型属性的函数模型。
    在模型通过检验后进行预测或控制。

二、常用的分类和预测算法

算法 描述
回归分析 预测数值型属性(线性回归、非线性回归、逻辑回归、岭回归、主成分回归、偏最小二乘回归)
决策树 自顶向下的递归方式,内部节点进行属性值比较,根据不同属性值从节点向下分支,最终得到的叶节点为学习划分的类
人工神经网络 反映神经网络的输入和输出变量之间关系的模型
贝叶斯网络 不确定知识表达和推理领域最有效的理论模型
支持向量机 通过某种非线性映射,把低维的非线性可分转化为高维的线性可分,在高维空间进行线性分析的算法

回归分析

一、常用回归模型

模型 适用条件
线性回归 因变量和自变量是线性关系
非线性回归 因变量和自变量不都是线性关系
逻辑回归 因变量有0/1两种取值
岭回归 参与建模的自变量之间有多重共线性
主成分回归 参与建模的自变量之间有多重共线性

二、逻辑回归模型

  1. 逻辑函数
    假设有n个独立的自变量, x 1 , x 2 , . . . , x n x_1,x_2,...,x_n x1,x2,...,xn
    假设y=1的概率 p ( y = 1 ) = p = P ( y = 1 ∣ X ) p(y=1)=p=P(y=1|X) p(y=1)=p=P(y=1X),y=0的概率是p(y=0)=1-p
    则概率之比为 p 1 − p \frac{p}{1-p} 1pp,取自然对数得到逻辑变换 L o g i t ( p ) = l n ( p 1 − p ) Logit(p) = ln(\frac{p}{1-p}) Logit(p)=ln(1pp)
    令Logit§=z,则 p = 1 1 + e − z p=\frac{1}{1+e^{-z}} p=1+ez1即为逻辑函数

  2. 逻辑回归模型
    定义:建立 l n ( p 1 − p ) ln(\frac{p}{1-p}) ln(1pp)与自变量的线性回归模型,即:
    l n ( p 1 − p ) = β 0 + β 1 x i + . . . . . . + β n x n + ϵ ln(\frac{p}{1-p})=\beta_0+\beta_1x_i+......+\beta_nx_n+\epsilon ln(1pp)=β0+β1xi+......+βnxn+ϵ
    g ( x ) = β 0 + β 1 x i + . . . . . . + β n x n g(x)=\beta_0+\beta_1x_i+......+\beta_nx_n g(x)=β0+β1xi+......+βnxn,则有:
    p = P ( y = 1 ∣ X ) = 1 1 + e − g ( x ) p=P(y=1|X)=\frac{1}{1+e^{-g(x)}} p=P(y=1X)=1+eg(x)1
    1 − p = P ( y = 0 ∣ X ) = 1 − 1 1 + e − g ( x ) = 1 1 + e g ( x ) 1-p=P(y=0|X)=1-\frac{1}{1+e^{-g(x)}}=\frac{1}{1+e^{g(x)}} 1p=P(y=0X)=11+eg(x)1=1+eg(x)1

3.逻辑回归建模步骤
(1) 设置自变量和因变量,收集数据,筛选特征。
(2) 用 p 1 − p \frac{p}{1-p} 1pp和自变量列出线性回归方程,估计出模型中的回归系数。
(3) 进行模型检验(正确率、混淆矩阵、ROC、KS)
(4) 模型应用:输入自变量的取值得到预测变量的值。

filename = "../data/bankloan.xls"
data = pd.read_excel(filename)
x = data.iloc[:, :8].as_matrix()
y = data.iloc[:, 8].as_matrix()
rlr = RLR()
rlr.fit(x, y)
rlr_support = rlr.get_support()
support_col = data.drop('违约', axis=1).columns[rlr_support]
print("rlr_support_columns: {columns}".format(columns=','.join(support_col)))
x = data[support_col].as_matrix()
lr = LR()
lr.fit(x, y)
print("lr: {score}".format(score=lr.score(x, y)))

【这里存在一个问题没有解决:from sklearn.linear_model import RandomizedLogisticRegression as RLR找不到RandomizedLogisticRegression,后按照网上教程import stability_selection.randomized_lasso import RandomizedLogisticRegression as RLR,这时RLR可以成功导入,但是这个类没有get_support()方法,暂时还不知道怎么解决这个问题。】

你可能感兴趣的:(数据挖掘)