机器学习入坑指南(五):逻辑回归

1、逻辑回归简介

逻辑回归用于解决“二分类”问题,好比判断明天是晴是雨,判断一封邮件是不是垃圾邮件,判断肿瘤是不是恶性的等等。python

让咱们举个例子来讲明为何这类问题适合用逻辑回归而不是线性回归来解决。git

假如咱们想用肿瘤的大小判断它是否为恶性,根据样本,获得以下的线性回归模型:github

看起来这条线拟合地并非很使人满意,但彷佛仍是可以解决问题的,咱们把输出的中值做为阈值,就能够获得正确的分类结果。算法

但若是在右侧再加入一个样本,直线会发生如下改变:dom

很明显出现了矛盾。这个时候,假如咱们用于预测的模型长下面这样:函数

好像问题就迎刃而解了呢!那么什么函数长这样呢?通过一些科学的设想与推导(参考「阿拉丁吃米粉的文章 - 逻辑回归的简单解释」),咱们发现 Sigmoid 函数,即测试

$$S(x) = \frac{1}{1 + e^{-\theta x}}$$.net

很是符合这个特性,并且与咱们须要解决的问题的思路——经过几率来判断分类的状况相统一。code

接下来,问题变成了求 $\theta$ 的值,与线性回归同样,咱们能够找出损失函数,再使用梯度降低法(参考「逻辑回归详解」「如何理解梯度降低法」)来求得 $\theta$。orm

对有多元输入的状况,则须要求出 $\theta^T$。

2、Python 代码实现

示例数据地址:GitHub - Avik-Jain/100-Days-Of-ML-Code/datasets

1 数据预处理

# 导入库
import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
# 导入数据
dataset = pd.read_csv('Social_Network_Ads.csv')
X = dataset.iloc[:, [2, 3]].values
y = dataset.iloc[:, 4].values
# 分割
from sklearn.cross_validation import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.25, random_state = 0)
# 特征缩放
from sklearn.preprocessing import StandardScaler
sc = StandardScaler()
X_train = sc.fit_transform(X_train)
X_test = sc.transform(X_test)

2 逻辑回归模型

# 拟合逻辑回归模型
from sklearn.linear_model import LogisticRegression
classifier = LogisticRegression()
classifier.fit(X_train, y_train)

3 预测与评价

这里咱们使用“混淆矩阵”来评估预测的结果。混淆矩阵就是将预测的结果与测试集中实际的结果进行对比,好比矩阵

$$\begin{bmatrix}12
& 1\ 2
& 14
\end{bmatrix}$$

是指预测为第 1 类,实际也为第 1 类的结果有 12 个,预测为第 2 类,实际为第 1 类的结果有 1个;

预测为第 1 类,实际为第 2 类的有 2 个,预测为第 2 类,实际也为第 2 类的有14 个。

# 使用测试集预测
y_pred = classifier.predict(X_test)
# 构建混淆矩阵
from sklearn.metrics import confusion_matrix
cm = confusion_matrix(y_test, y_pred)

能够看出,实际应用时使用的代码很是简单。可是咱们只有理解了算法自己,才能更好地利用它。

欢迎关注 Evan 的博客

相关文章
相关标签/搜索