python 逻辑回归_逻辑回归分类在Python中的简单应用

b0ad8d6c3a19cfc673d5ef82fe5331bf.png

逻辑回归是一种基本的分类技术。它属于线性分类器组,在某种程度上类似于多项式和线性回归。Logistic回归快速且相对简单,您可以方便地解释结果。尽管它本质上是二进制分类的一种方法,但是它也可以应用于多分类问题。

步骤1:导入包、函数和类

首先,我们必须导入Matplotlib进行可视化,并导入NumPy进行数组操作。我们还需要LogisticRegression、classification_report()、confusion_matrix()和scikit-learn。

步骤2:读取或导入数据
实际应用中,通常需要预先处理数据。今天的案例应用,我们仅创建输入(x)和输出(y)值的数组。需要指出的是,输入和输出应为NumPy数组(该类的实例numpy.ndarray)或相似的对象。numpy.arange()在给定范围内创建一个连续的,等间距值的数组。

步骤3:建立模型并训练模型

准备好输入和输出后,就可以创建和定义分类模型。您将使用该类的实例来表示它LogisticRegression。LogisticRegression并将其引用绑定到变量model。LogisticRegression有几个可选参数定义了模型和方法,可以参见相关Python书籍。

步骤4:评估模型

定义模型后,我们可以使用来检查其性能,使用函数predict_proba(),该模型会返回预测输出等于0或1的概率矩阵。

根据上述四个步骤,python代码如下:

import matplotlib.pyplot as plt

import numpy as np

from sklearn.linear_model import LogisticRegression

from sklearn.metrics import classification_report, confusion_matrix

x = np.arange(10).reshape(-1, 1)
y = np.array([0, 0, 0, 0, 1, 1, 1, 1, 1, 1])
model = LogisticRegression(solver='liblinear', random_state=0)
model.fit(x, y)
LogisticRegression(C=1.0, class_weight=None, dual=False, fit_intercept=True,
                   intercept_scaling=1, l1_ratio=None, max_iter=100,
                   multi_class='warn', n_jobs=None, penalty='l2',
                   random_state=0, solver='liblinear', tol=0.0001, verbose=0,
                   warm_start=False)

model = LogisticRegression(solver='liblinear', random_state=0).fit(x,y)

model.classes_

model.intercept_

model.predict_proba(x)

model.predict(x)

model.score(x, y)

print(classification_report(y, model.predict(x)))

步骤5:改善模型

我们可以通过设置不同的参数来改进模型。例如,可以使用C等于正则化强度10.0,而不是默认值1.0。

model = LogisticRegression(solver='liblinear', C=10.0, random_state=0)

model.fit(x, y)

运行上述代码后,我们得到另一个具有不同参数的模型。它还将具有不同的概率矩阵以及不同的系数和预测集。运行结果会发现:截距项和系数项的绝对值较大。之所以如此,是因为较大的值C意味着较弱的正则化,或与较高的系数和相关的惩罚较弱。

补充:

我们可以绘制可视化混淆矩阵,这通常很有用。我们可以使用.imshow()Matplotlib 来做到这一点,代码如下:

cm = confusion_matrix(y, model.predict(x))

fig, ax = plt.subplots(figsize=(8, 8))

ax.imshow(cm)

ax.grid(False)

ax.xaxis.set(ticks=(0, 1), ticklabels=('Predicted 0s', 'Predicted1s'))

ax.yaxis.set(ticks=(0, 1), ticklabels=('Actual 0s', 'Actual1s'))

ax.set_ylim(1.5, -0.5)

for i in range(2):

    for j in range(2):

        ax.text(j, i,cm[i, j], ha='center', va='center', color='red')

plt.show()

81b481eb82328ed03373600fc6ffe61b.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值