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

一、逻辑回归简介

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

让我们举个例子来说明为什么这类问题适合用逻辑回归而不是线性回归来解决。

假如我们想用肿瘤的大小判断它是否为恶性,根据样本,得到如下的线性回归模型:
在这里插入图片描述
看起来这条线拟合地并不是很令人满意,但似乎还是能够解决问题的,我们把输出的中值作为阈值,就可以得到正确的分类结果。

但如果在右侧再加入一个样本,直线会发生以下改变:
在这里插入图片描述
很明显出现了矛盾。这个时候,假如我们用于预测的模型长下面这样:
在这里插入图片描述
问题就迎刃而解了!那么什么函数长这样呢?经过一些科学的设想与推导(参考「阿拉丁吃米粉的文章 - 逻辑回归的简单解释」),我们发现 Sigmoid 函数(S 型函数、挤压函数),即

S ( x ) = 1 1 + e − θ x S(x) = \frac{1}{1 + e^{-\theta x}} S(x)=1+eθx1

非常符合这个特性,而且与我们需要解决的问题的思路——通过概率来判断分类的情况相统一。

接下来,问题变成了求 θ \theta θ 的值,与线性回归一样,我们可以找出损失函数,再使用梯度下降法(参考「逻辑回归详解」「如何理解梯度下降法」)来求得 θ \theta θ

对有多元输入的情况,则需要求出 θ T \theta^T θT

二、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 预测与评价

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

[ 12 1 2 14 ] \begin{bmatrix}12 & 1\\ 2 & 14 \end{bmatrix} [122114]

是指预测为第 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)

可以看出,实际应用时使用的代码非常简单。但是我们只有理解了算法本身,才能更好地利用它。

  • 5
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Evan-Nightly

劝君上当,上当一回

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值