逻辑回归

逻辑回归说的是数据的分类,估计的是一个离散值

线性回归用来估计某个连续值,如果用线性回归来归类,预测值是0.1 0.2 而不是1 和 0。

根据:

如果我们可以计算属于每个类的观察概率,我们可以将它分配给具有最高概率的类。

我们需要一个函数可以将 feature 的 Series 作为输入​,返回概率值域为[0,1]

Logit函数

比值比(odds ratio) ,它可以被写成 ​ ,其中的 ​ 代表正事件(positive event)的概率.

正事件代表我们想要预测的事件。比如:病人患有某种疾病的概率。

我们把正事件的类标签设置为1。比值比的对数称为Logit函数,它可以写成如下形式:

可以证明 ​ 的定义域为 [0,1],值域为​

image

logit函数输入0到1的值并把它们转换为整个实数范围内的值,则

输入的是 特征向量x的条件下,类别y=1的概率, 输出的是输出范围是整个实数。

模型的线性分量包含设计矩阵和要估计的参数矢量。 自变量X的设计矩阵由N行和K + 1列组成,其中K是模型中指定的独立变量的数量。 对于设计矩阵的每一行,第一个元素xi0 = 1.这是截距或“alpha”。参数矢量β是长度为K + 1的列向量。有一个参数对应于每个 X列中的K列自变量设置加上一个β0,用于截距。

因此如果我们想得到特征向量x的条件下,类别y=1的概率的话,就是取 Logit() 的反函数

Sigmoid 函数

Sigmoid 图像:

定义域​ ,值域[ 0 , 1]

image

(1)式对应的反函数如果我们只取截距 ​ 和1 列数据,得到

这就是简单Logistic回归模型

numpy.ndarray.astype( dtype )

将 array 里的数据强制转换类型

  • dtype = int 转换成整形,True -> 1 False -> 0

numpy.reshape(a, newshape, order='C')

将矩阵换个形状

  • a 要换的矩阵

  • newshape: 可以是 int 类型或者是个 Tuple 类型

    • 如果是 int 类型,返回结果是该长度的1-D 矩阵

    • 如果是 tuple , 就根据原矩阵形成新的矩阵,( 行数,列数 )

    • 如果 一个形状尺寸可以是-1。 在这种情况下,从阵列的长度和剩余尺寸推断出矩阵的形状。

  • y_true 指的是 target 的真实值数据向量

  • y_pred 指的是 target 的预测值数据向量

    • 可以显示各项评估值

      • precision 精确率

        精确率是针对我们预测结果而言的,它表示的是预测为正的样本中有多少是真正的正样本。那么预测为正就有两种可能了,一种就是把正类预测为正类(TP),另一种就是把负类预测为正类(FP),也就是 [图片上传失败...(image-6339d6-1563778534298)]

      • recall 召回率结果是否完整

      • 召回率是针对我们原来的样本而言的,它表示的是样本中的正例有多少被预测正确了。那也有两种可能,一种是把原来的正类预测成正类(TP),另一种就是把原来的正类预测为负类(FN)。

      • [图片上传失败...(image-9a0046-1563778534298)]

      • f1-score F1值是精确度和召回率的调和平均值(是总体各统计变量倒数的算术平均数的倒数)

      • support 每个标签的出现次数

    sklearn.metrics.classification_report(y_true, y_pred

    分类报告

    可以用下面的表格再练习一下

    所有的公式:

    • 准确性

      Accuracy: Overall, how often is the classifier correct?

      • (TP+TN)/total = (100+50)/165 = 0.91
    • 错误率

      Misclassification Rate: Overall, how often is it wrong?

      • (FP+FN)/total = (10+5)/165 = 0.09

      • equivalent to 1 minus Accuracy

      • also known as "Error Rate"

    • True Positive Rate: When it's actually yes, how often does it predict yes?

      • TP/actual yes = 100/105 = 0.95

      • also known as "Sensitivity" or "Recall"

    • fall-out

      False Positive Rate: When it's actually no, how often does it predict yes?

      • FP/actual no = 10/60 = 0.17
    • 特异性

      Specificity: When it's actually no, how often does it predict no?

      • TN/actual no = 50/60 = 0.83

      • equivalent to 1 minus False Positive Rate

    • 精确性

      Precision: When it predicts yes, how often is it correct?

      • TP/predicted yes = 100/110 = 0.91
    • Prevalence: How often does the yes condition actually occur in our sample?

      • actual yes/total = 105/165 = 0.64

    从混淆矩阵中我们可以得到很多关于预测结果的评价数据

    image
    True positive(TP) eqv. with hit
    True negative(TN) eqv. with correct rejection
    False positive(FP) eqv. with false alarm, Type I error
    False negative(FN) eqv. with miss, Type II error
    • true positives (TP): These are cases in which we predicted yes (they have the disease), and they do have the disease.

    • true negatives (TN): We predicted no, and they don't have the disease.

    • false positives (FP): We predicted yes, but they don't actually have the disease. (Also known as a "Type I error.")

    • false negatives (FN): We predicted no, but they actually do have the disease. (Also known as a "Type II error.")

    对于该预测结果我们得到混淆矩阵的几个基础值

    混淆矩阵允许我们做出更多的分析,而不仅仅是局限在正确率。准确率对于分类器的性能分析来说,并不是一个很好地衡量指标,因为如果数据集不平衡(每一类的数据样本数量相差太大),很可能会出现误导性的结果。例如,如果在一个数据集中有95只猫,但是只有5条狗,那么某些分类器很可能偏向于将所有的样本预测成猫。整体准确率为95%,但是实际上该分类器对猫的识别率是100%,而对狗的识别率是0%。

    在这165个案例中,模型预测的结果“是”110次,“否”预测55次。 实际上,样本中的105名患者患有该疾病,而60名患者没有。

    image

    假设有一个用来对是否患病预测结果进行分类的系统,混淆矩阵就是为了进一步分析性能而对该算法测试结果做出的总结。假设结果的混淆矩阵如下图:

    举例说明下混淆矩阵

    • y_true 指的是 target 的真实值数据向量

    • y_pred 指的是 target 的预测值数据向量

    • 返回值是一个混淆矩阵,分别是false positives,falsenegatives,true positives和true negatives 的值

    sklearn.metrics.confusion_matrix( y_true , y_pred)

    混淆矩阵

    分类结果评估

    • statsmodels.api.Logit( Y, x_with_intercept)

      • 这里的x_with_intercept 是训练集 中 feature 向量加上一列1的结果:

    也可以用 Statsmodels.api 里的逻辑回归

    指的是 回归拟合 的 特征系数

    coef_LogisticRegression 类型的属性值之一

    LogisticRegression.coef_

    指的是 回归拟合 的截距, 即​

    intercept_LogisticRegression 类型的属性值之一

    LogisticRegression.intercept_

    返回给定测试集合的平均准确率(mean accuracy),浮点型数值

    y_predict 是要预测的 target 的 i行数据向量,y_true 是X 对应的真实 target 数据向量

    LogisticRegression.score( y_predict,y_true)

    返回的结果是一个 i 行的数据,代表每一条 feature 对应的预测结果。

    输入值是要预测的 feature 的 i行数据向量

    根据拟合结果预测可能性

    LogisticRegression.predict( X )

    如果参数是默认情况下,返回的第0列是 分类为 0 的概率,第1列是分类为1 的概率

    返回的结果是一个 i 行 j 列的数据,其中第i行第j列上的数值是模型预测第i个预测样本的标签为j的概率。所以每一行的和应该等于1.

    输入值是要预测的 feature 的 i行数据向量

    根据拟合结果预测可能性

    LogisticRegression.predict_proba( X )

    • X 指的是训练集的 feature 数据向量

    • Y 训练集中的 target 值的向量

    • 返回的是模型训练的结果

    模型训练

    LogisticRegression.fit(X, y)

    • C = 1e16

      • C 是正则化强度 Regularization strength 的倒数。

      • 正则化就是为了防止模型记忆训练集的数据,而导致预测结果的偏差。尤其是在训练集有很多变量但是数据个数少的的时候,模型训练的时候会根据训练集的数修改参数来尽可能拟合数据,然而我们想要预测的数据往往并没有训练集数据的特点(比如一个特别大的数),这样我们得到的模型的预测能力就会受损。

      • 更具体地说,如果我们的模型遭受(高)方差(即,它过度拟合训练数据),我们可以将正则化视为增加偏差。

      • 过多的偏差会导致欠拟合,我们在非正规化模型中的目标是最小化 cost 函数,即,我们希望找到与全局成本最小值相对应的特征权重(w)

      • 如果我们规范成本函数(例如,通过L2正则化),我们在我们的成本函数(J)中增加一个附加值,随着参数权重(w)的值增加而增加; 添加了一个新的超参数 ​ 来控制正则化强度。

      • Regularization strength ​ 越大参数在幅度上增加的可能性较小,仅仅是为了调整数据中的小扰动。

    sklearn.linear_model.LogisticRegression()

    逻辑回归 调用库实现

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,362评论 5 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,330评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,247评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,560评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,580评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,569评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,929评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,587评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,840评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,596评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,678评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,366评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,945评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,929评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,165评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,271评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,403评论 2 342

推荐阅读更多精彩内容