机器学习:逻辑回归与K折交叉验证

文章目录

  • 逻辑回归的引入
  • 决策边界
  • 逻辑回归的损失函数
    • 熵的引入
      • 交叉熵(逻辑回归的损失函数)![在这里插入图片描述](https://img-blog.csdnimg.cn/20190805113330226.png)
    • 梯度下降
    • 评估指标:K折交叉验证
  • 代码实现

线性回归:预测一个连续的值

逻辑回归:预测一个离散的值

逻辑回归的引入

机器学习:逻辑回归与K折交叉验证_第1张图片
机器学习:逻辑回归与K折交叉验证_第2张图片
当我们要做二分类的时候,我们一般只希望得到两个值 y = 0 或 1
但是, 线性回归得到的值是在一个范围内的连续值,而且可能远 > 1 或远 < 0
这样会给分类带来困难,我们希望的值域:
在这里插入图片描述
机器学习:逻辑回归与K折交叉验证_第3张图片
机器学习:逻辑回归与K折交叉验证_第4张图片
机器学习:逻辑回归与K折交叉验证_第5张图片
机器学习:逻辑回归与K折交叉验证_第6张图片
机器学习:逻辑回归与K折交叉验证_第7张图片
机器学习:逻辑回归与K折交叉验证_第8张图片

决策边界

机器学习:逻辑回归与K折交叉验证_第9张图片
机器学习:逻辑回归与K折交叉验证_第10张图片

逻辑回归的损失函数

线性回归的做法是:损失函数
在这里插入图片描述
那么逻辑回归的损失函数怎么确定呢?

熵的引入

熵的意义:

热力学上: 熵是一种测量分子不稳定的指标,分子运动越不稳定,熵就越大
信息论(香农): 熵是一种测量信息量的单位,信息熵,包含的信息越多,熵就越大。
机器学习: 熵是一种测量不确定性的单位,不确定性越大,概率越小,熵就越大!

信息量:
事件A:德国队进入了2018世界杯决赛圈
事件B:中国队进入了2018世界杯决赛圈

越不可能的事件发生了,我们获取到的信息量就越大

熵:表示所有信息量的期望

机器学习:逻辑回归与K折交叉验证_第11张图片

交叉熵(逻辑回归的损失函数)在这里插入图片描述

在这里插入图片描述
其中的p(Xi)为真实分布,q(Xi)为预测分布
机器学习:逻辑回归与K折交叉验证_第12张图片
机器学习:逻辑回归与K折交叉验证_第13张图片
机器学习:逻辑回归与K折交叉验证_第14张图片
机器学习:逻辑回归与K折交叉验证_第15张图片

梯度下降

机器学习:逻辑回归与K折交叉验证_第16张图片

评估指标:K折交叉验证

机器学习:逻辑回归与K折交叉验证_第17张图片

代码实现

# encoding=utf-8
"""
Date:2019-08-04 10:54
User:LiYu
Email:[email protected]

"""
import numpy as np
from sklearn import datasets
from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import GridSearchCV, train_test_split

iris = datasets.load_iris()
# print(iris)
# print(iris.keys())
# print(iris['DESCR'])  # iris介绍

X = iris['data'][:]
# print(X)
Y = iris['target']

# X_log = X[0:120]
# Y_log = Y[0:120]
# X_test = X[100:120]
# Y_test = Y[100:120]
# 逻辑回归,sag--->随即梯度下降
log_reg = LogisticRegression(multi_class='ovr', solver='sag')
# 学习过程
# log_reg.fit(X_log, Y_log)
# print(log_reg.score(X_log, Y_log))
#
# # 预测
# print(log_reg.score(X_test, Y_test))

# 划分训练集和测试集
X_train, X_test, Y_train, Y_test = train_test_split(X, Y, test_size=0.2)

# 需要验证的超参数,tol收敛的阈值,C正则化惩罚因子的倒数, C越大,惩罚项越弱
param_grid = {
    'tol': [1e-4, 1e-3, 1e-2],
    'C': [0.4, 0.6, 0.8]
}

# 网格搜索(计算每种可能的参数组合后的分数),采用3折交叉验证(数据分为三份,分别作为验证集,得出分数)
grid_search = GridSearchCV(log_reg, param_grid, cv=3)
grid_search.fit(X_train, Y_train)

print(grid_search.score(X_test, Y_test))  # 分数
print(grid_search.best_params_)  # 最好的超参数
print(grid_search.best_estimator_)  # 逻辑回归的参数设置(交叉验证后最好的参数)

机器学习:逻辑回归与K折交叉验证_第18张图片

你可能感兴趣的:(机器学习笔记)