一、逻辑回归是什么?
逻辑回归是一个分类的算法,是线性的分类器。因为逻辑回归算法是基于多元线性回归的算法。是对已有的数据进行分类,
二、Sigmoid函数的作用
逻辑回归就是在多元线性回归基础上把结果缩放到 0 到 1 之间。 越接近+1 越是
正例,越接近 0 越是负例,根据中间 0.5 分为二类。其中是预期值
三、Sigmoid函数用python代码实现
"""
python 实现sigmoid函数(逻辑回归函数) sigmoid = 1/(1+e**(-x))
"""
import numpy as np
import matplotlib.pyplot as plt
import math
def sigmoid(x):
a = []
for item in x:
a.append(1.0/(1.0 + math.exp(-item)))
return a
x = np.arange(-10,10,0.1)
y =sigmoid(x)
plt.plot(x,y)
plt.show()
四、逻辑回归为什么要用 sigmoid 函数?
1)sigmoid函数是一个阀值函数,不管x取什么值,对应的sigmoid函数值总是0<sigmoid(x)<1。
2)sigmoid函数严格单调递增,而且其反函数也单调递增
3)sigmoid函数连续
4)sigmoid函数光滑
5)sigmoid函数关于点(0, 0.5)对称
6)sigmoid函数的导数是以它本身为因变量的函数,即f(x)' = F(f(x))
所以sigmoid函数其实起源于生物学的现象中,其曲线也称为S型生长曲线。在信息科学中,由于sigmoid函数和其反函数都是严格单调递增的,所以sigmoid函数常被用作神经网络的阈值函数,将变量映射到(0,1)内。
五、sigmoid函数推导
广义线性回归推导出逻辑回归(Sigmoid)和多元线性回归_宠乖仪的博客-CSDN博客
六、推导逻辑回归的损失函数
1、逻辑回归的公式:
2、推导过程
2.1 伯努利分布的概率密度函数:
2.2 假设逻辑回归的样本服从伯努利分布:
其中:
是样本的预期值;是样本的真实值;是每条样本的特征值;是样本特征的权重
2.3 通过最大似然函数
假设每条样本互相独立,于是最大似然函数的表达式为:
通过对数似然函数取log,转换为:
由于损失函数通过梯度下降求最小值,于是在 上式中加上负号 就是求最小
注意: 上式是逻辑回归的损失函数
六、逻辑回归如何求解得到最优解模型
1、方法: 梯度下降法
2、梯度下降法公式原理可参考:
3、逻辑回归使用梯度下降法的求导过程
3.1 需要求导的函数
3.2 过程
=========================================================================
其中是对逻辑回归公式
求导
=========================================================================
接下来的求导过程
七、鸢尾花分类(取其中两个维度)
"""
逻辑回归对鸢尾花数据集进行二分类
"""
"""
# 逻辑回归 里面的超参数
LogisticRegression(
penalty :惩罚项 L1、L2正则项 默认L2 本质 改机器学习算法的损失 loss 目的:提高模型的泛化能力
C : 与penalty 属性连用 C越大 penalty(正则化)越没作用 ;反之
tol : 类型 浮点数 默认为 1e-4 ;容忍度 作用:连续多次的loss值 小于该值,就停止迭代
fit_intercept : 类型 bool 是否计算截距项,
solver : 损失函数求参优化算法
max_iter : 最大迭代次数
multi_class : 默认是auto , 多分类情况下用:ovr
l1_ratio : 值在(0,1), 值越大,正则项L1越重要,反之
)
"""
import numpy as np
from sklearn import datasets # 这个模块里面有我们所需要的数据集
from sklearn.linear_model import LogisticRegression
# 下载数据
iris = datasets.load_iris() # 返回一个对象
# print(list(iris.keys())) # 获取 对象参数里面的keys
# print(iris['DESCR'])
# print(iris['feature_names'])
X = iris['data'][:, 3:]
# iris['target] 为三分类
# y =(iris['target'] ==2).astype(np.int) # astype() 转类型
y = iris['target']
# 用随机梯度下降求解 max_iter 迭代次数
multi_classifier = LogisticRegression(solver='sag',max_iter=1000)
multi_classifier.fit(X,y)
# 预测模型
# 创建 新数据 np.linspace() 创建的是等差数列
X_new = np.linspace(0,3,1000).reshape(-1,1)
print(X_new)
# 预测
y_proba = multi_classifier.predict_proba(X_new)
print(y_proba)
y_predict = multi_classifier.predict(X_new)
print(y_predict)
八、逻辑回归实现多分类
方式:使用多个二分类,看哪个预期值大,就认为属于哪个类
"""
# 逻辑回归 里面的超参数
LogisticRegression(
penalty :惩罚项 L1、L2正则项 默认L2 本质 改机器学习算法的损失 loss 目的:提高模型的泛化能力
C : 与penalty 属性连用 C越大 penalty(正则化)越没作用 ;反之
tol : 类型 浮点数 默认为 1e-4 ;容忍度 作用:连续多次的loss值 小于该值,就停止迭代
fit_intercept : 类型 bool 是否计算截距项,
solver : 损失函数求参优化算法
max_iter : 最大迭代次数
multi_class : 默认是auto , 多分类情况下用:ovr
l1_ratio : 值在(0,1), 值越大,正则项L1越重要,反之
)
"""
import numpy as np
from sklearn import datasets # 这个模块里面有我们所需要的数据集
from sklearn.linear_model import LogisticRegression
# 下载数据
iris = datasets.load_iris() # 返回一个对象
print(iris)
# print(list(iris.keys())) # 获取 对象参数里面的keys
# print(iris['DESCR'])
# print(iris['feature_names'])
X = iris['data'][:, 3:]
y = iris['target']
print(y)
# 用随机梯度下降求解 max_iter 迭代次数
multi_classifier = LogisticRegression(solver='sag',max_iter=1000,multi_class='ovr')
multi_classifier.fit(X,y)
# 预测模型
# 创建 新数据 np.linspace() 创建的是等差数列
X_new = np.linspace(0,3,1000).reshape(-1,1)
print(X_new)
# 预测
y_proba = multi_classifier.predict_proba(X_new)
print(y_proba)
#
y_predict = multi_classifier.predict(X_new)
print(y_predict)