一. 理论基础
我们使用一个回归函数来预测一个结果
w和b是我们要求的参数
w应该是一个向量,因为预测输入的参考值不止一个
- z表示我们的回归方程
- y帽表示优化这个回归方程,y也是预测的概率,使用y帽这个函数是为了使最后的值范围在0~1之间
- L是损失函数,他表示我们的预测值与真实值的接近程度,作用类似于方差
我们就是利用反向推到求出w,b
而损失函数L(成本函数),我们的目的是找到一个w,b来使这个损失函数的值最小,也就是说让预测值和真实值最接近
注:损失函数一般指的是针对单个样本 i 做的损失,公式可以表示为:
成本函数一般是数据集上总的成本函数,一般针对整体,根据上面的例子,这里的成本函数可以表示为
然后使用链式法则来求w,b
二. 代码实现
from sklearn import datasets
from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import train_test_split
# 加载数据
# 其中前四列为花萼长度,花萼宽度,花瓣长度,花瓣宽度等4个用于识别鸢尾花的属性,第5列为鸢尾花的类别(包括Setosa,Versicolour,Virginica三类, 0 1 2区别)
# y是类别(特征标签,也就是结果), x是数据
# 这个数据预测的就是是哪种花
X, y = datasets.load_iris(True)
# logistic回归解决的是二分类问题,所以先剔除一个种类,要么是0,要么是1
cond = y != 2
# 剔除一个分类的数据
X = X[cond]
y = y[cond]
# 划分训练数据和测试数据
result = train_test_split(X, y, test_size=0.2) # 训练测试比例0.2, train_X, test_X, train_Y, test_Y
lr = LogisticRegression() # 逻辑回归
# 训练数据
lr.fit(result[0], result[2])
# 求出w斜率和b截距的值
w = lr.coef_ # 应该是有四个 w1 w2 w3 w4
b = lr.intercept_ # 就只有一个
print(w, b)
# 预测一下概率
proba_ = lr.predict_proba(result[1]) # 第 i 行 第 j 列上的数值是模型预测 第 i 个预测样本为某个标签的概率,并且每一行的概率和为1。
print(proba_)
先是w和b取值
再是预测值,就是说在这个数据下
是0和1的概率分别是