参考文献:《Python数据分析与挖掘实战》
分类与预测
一、实现过程
- 分类:构造分类模型,输入样本的属性值,输出对应的类别,将每个样本映射到预先定义好的类别。属于有监督的学习。
- 预测:建立两种或两种以上变量间相互依赖的函数模型,然后进行预测或控制。
- 分类实现过程:
学习:通过归纳分析训练样本集来建立分类模型得到分类规则。
分类:用已知的测试样本集评估分类规则的准确率,若结果可接受则用样本集进行预测。 - 预测实现过程:
通过训练集建立预测数值型属性的函数模型。
在模型通过检验后进行预测或控制。
二、常用的分类和预测算法
算法 | 描述 |
---|---|
回归分析 | 预测数值型属性(线性回归、非线性回归、逻辑回归、岭回归、主成分回归、偏最小二乘回归) |
决策树 | 自顶向下的递归方式,内部节点进行属性值比较,根据不同属性值从节点向下分支,最终得到的叶节点为学习划分的类 |
人工神经网络 | 反映神经网络的输入和输出变量之间关系的模型 |
贝叶斯网络 | 不确定知识表达和推理领域最有效的理论模型 |
支持向量机 | 通过某种非线性映射,把低维的非线性可分转化为高维的线性可分,在高维空间进行线性分析的算法 |
回归分析
一、常用回归模型
模型 | 适用条件 |
---|---|
线性回归 | 因变量和自变量是线性关系 |
非线性回归 | 因变量和自变量不都是线性关系 |
逻辑回归 | 因变量有0/1两种取值 |
岭回归 | 参与建模的自变量之间有多重共线性 |
主成分回归 | 参与建模的自变量之间有多重共线性 |
二、逻辑回归模型
-
逻辑函数
假设有n个独立的自变量,x1,x2,...,xnx_1,x_2,...,x_nx1,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=1∣X),y=0的概率是p(y=0)=1-p
则概率之比为p1−p\frac{p}{1-p}1−pp,取自然对数得到逻辑变换Logit(p)=ln(p1−p)Logit(p) = ln(\frac{p}{1-p})Logit(p)=ln(1−pp)。
令Logit§=z,则p=11+e−zp=\frac{1}{1+e^{-z}}p=1+e−z1即为逻辑函数 -
逻辑回归模型
定义:建立ln(p1−p)ln(\frac{p}{1-p})ln(1−pp)与自变量的线性回归模型,即:
ln(p1−p)=β0+β1xi+......+βnxn+ϵln(\frac{p}{1-p})=\beta_0+\beta_1x_i+......+\beta_nx_n+\epsilonln(1−pp)=β0+β1xi+......+βnxn+ϵ
记g(x)=β0+β1xi+......+βnxng(x)=\beta_0+\beta_1x_i+......+\beta_nx_ng(x)=β0+β1xi+......+βnxn,则有:
p=P(y=1∣X)=11+e−g(x)p=P(y=1|X)=\frac{1}{1+e^{-g(x)}}p=P(y=1∣X)=1+e−g(x)1
1−p=P(y=0∣X)=1−11+e−g(x)=11+eg(x)1-p=P(y=0|X)=1-\frac{1}{1+e^{-g(x)}}=\frac{1}{1+e^{g(x)}}1−p=P(y=0∣X)=1−1+e−g(x)1=1+eg(x)1
3.逻辑回归建模步骤
(1) 设置自变量和因变量,收集数据,筛选特征。
(2) 用p1−p\frac{p}{1-p}1−pp和自变量列出线性回归方程,估计出模型中的回归系数。
(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()方法,暂时还不知道怎么解决这个问题。】