美文网首页
第四章 分类模型

第四章 分类模型

作者: 流纱静溪 | 来源:发表于2019-10-26 12:41 被阅读0次

    分类的概述

    分类是有监督学习问题。

    具体应用例子有——信用风险评估,预测用户未来是否违约;医学诊断,根据肿瘤细胞的特征,进行良性和恶性的分类;市场营销,预测对用户对新产品的喜好;电子邮箱,划分正常邮件和垃圾邮件。

    分类的过程:分类器训练和预测,训练集被用来训练分类器,测试集用来评估分类器的效果。

    常见的分类有逻辑回归、K近邻、决策树、朴素贝叶斯、支持向量机

    评估分类的指标:正确率、F值、精度、召回率

    逻辑回归

    从线性回归到逻辑回归

    线性回归

    y=w^Tx

    y的取值范围为{1,-1},不能直接解决问题,因此引入一个逻辑斯特函数

    Logistic    \sigma (x)=\frac{1}{1+e^-x  }

    则样本x_{i} 为正类的概率:p(y_{i}=1|x_{i}  )=\sigma (f(x_{i} ))=\frac{1}{1+e^-w^Tx_{i}  }

    为负类的概率p(y_{i}=-1|x_{i}  )=1-\sigma (f(x_{i} ))=\frac{1}{1+ w^Tx_{i}  }

    整合成公式p(y_{i} |x_{i}  )=\frac{1}{1+ e^-y_{i}  w^Tx_{i}    }

    参数估计:极大似然法

    训练集的似然函数:

    L(w)=\prod_{i=1}^n p(y_{i} |x_{i} )

    取对数:

    NLL(w)=-\ln \prod_{i=1}^n p(y_{i} |x_{i} )=-\sum_{i=1}^n\ln p((y_{i} |x_{i})

    求目标函数最小值的方法:梯度下降法

    代码实现:

    from sklearn linear_model import LogisticRegression

    clf = LogisticRegression(random_state=10)#模型构建

    clf.fit(train_x,train_y)#模型训练



    决策树模型

    如何选择节点特征和节点分裂点?

    不纯度:表示落在当前节点的样本的类别分布的均衡程度。决策树分裂节点的目标是使得节点分裂前后,样本的类别分布更加不均衡,即不纯度需要降低。

    度量不纯度的方法:Gini指数(Gini index)、信息熵(entropy)、误分率(misclassification error)

    Gini指数(Gini index)

    以信息增益作为划分训练数据集的特征,存在偏向于选择取值较多的特征的问题。使用信息增益比可以对这一问题进行校正。这是特征选择的另一准则。

    Cini(D)=\sum_{i=1}^n P(Y=y_{i} )(1- P(Y=y_{i}))=1-\sum_{i=1}^np_{i} ^2

    Gini(D,X)=\sum_{i=1}^nP(X=x_{i} )*Gini(D|X=x_{i} )

    信息熵(entropy)

    Entropy(t)=-\sum_{c=1}^Cp(c|t)\log_2 p(c|t)

    信息增益

    InfoGain=Entropy(t_{0} )-\sum_{k=1}^K\frac{nk}{n} Entropy(t_{k} )

    分裂信息( 惩罚项 )

    SpiltInfo=-\sum_{k=1}^K\frac{nk}{n}  \log_2  \frac{nk}{n}

    信息增益率

    InfoGainRatio=\frac{InfoGain}{SpiltInfo} =\frac{Entropy(t_{0} )-\sum_{k=1}^K\frac{nk}{n} Entropy(t_{k} )}{-\sum_{k=1}^K\frac{nk}{n}  \log_2  \frac{nk}{n} }

    信息增益率通过分裂信息对信息增益进行调整,可以避免过度拟合。

    决策树算法

    输入:训练数据集D,目标特征Y,特征集F

    输出:决策树T 

    代码

    from sklearn import tree

    from sklearn.treeimport DecisionTreeClassifier

    credit_model = DecisionTreeClassifier(min_samples_leaf =6)

    credit_model.fit(X_train, y_train)

    from sklearn.externals.siximport StringIO

    from IPython.displayimport Image

    import pydot

    dot_data = StringIO()

    tree.export_graphviz(credit_model,out_file = dot_data,

    feature_names = X_train.columns,

    class_names=['no default','default'],

    filled =True,rounded =True,

    special_characters =True)

    graph = pydot.graph_from_dot_data(dot_data.getvalue())

    #Image(graph.create_png())#在实现时这里报错,原因是因为sklearn升级后已没有该功能

    #graph.write_jpg("myfile.jpg")#这是在网上找的解决方法,但是仍然报错了,还未解决

    相关文章

      网友评论

          本文标题:第四章 分类模型

          本文链接:https://www.haomeiwen.com/subject/ladyvctx.html