一、Logistic回归概述
1、基本原理:
Logistic回归模型通过一个逻辑函数(通常是Sigmoid函数)将自变量的线性组合映射到(0,1)区间内,这个映射值被解释为属于某类的概率。对于二分类问题,模型预测的是样本属于正类(通常标记为1)的概率。
2、模型训练:
Logistic回归模型的训练过程涉及最大化似然函数,即找到一组参数( \beta ),使得观测数据的概率最大。这通常通过迭代算法如梯度下降或牛顿-拉夫森法来完成。
3、优缺点
优点:
模型简单:Logistic回归模型形式简单,易于理解和实现。
输出解释性强:模型输出的是概率值,可以直观地理解为事件发生的可能性。
低方差:相比于复杂的模型,Logistic回归通常具有较低的方差,不容易过拟合。
缺点:
容易欠拟合:由于模型简单,可能无法捕捉数据中复杂的关系。
假设线性决策边界:Logistic回归假设数据是线性可分的,当实际情况更为复杂时,模型的表现可能不佳。
高偏差:如果实际数据与模型假设相差较大,模型可能会有较高的偏差。
二、Logistic回归
Logistic回归:
Logistic回归,相对于线性回归,主要用于处理分类问题,尤其是二分类问题。Logistic回归通过逻辑函数将线性回归模型的输出映射到(0,1)区间内,从而表示为某个类别发生的概率。
Sigmoid函数是一个在机器学习和统计学中常用的激活函数,特别是在Logistic回归和神经网络中。它的数学形式是一个S型曲线(即它的名称来源),能够将任意实数值映射到(0, 1)区间内,这使得它非常适合用来表示概率。
Sigmoid函数的数学公式如下:
其中,( x )是输入值,( e )是自然对数的底数。
三、代码实现
import numpy as np
# Sigmoid 函数
def sigmoid(z):
return 1 / (1 + np.exp(-z))
# 损失函数
def compute_cost(X, y, theta):
m = len(y)
h = sigmoid(X.dot(theta))
epsilon = 1e-5 # 防止对数里有0
cost = (-1/m) * ((y.T.dot(np.log(h + epsilon))) + ((1 - y).T.dot(np.log(1 - h + epsilon))))
return cost
# 梯度下降
def gradient_descent(X, y, theta, alpha, iterations):
m = len(y)
cost_history = np.zeros(iterations)
for i in range(iterations):
theta = theta - (alpha/m) * X.T.dot(sigmoid(X.dot(theta)) - y)
cost_history[i] = compute_cost(X, y, theta)
return theta, cost_history
# 预测函数
def predict(X, theta):
predictions = sigmoid(X.dot(theta))
return [1 if x >= 0.5 else 0 for x in predictions]
# 示例数据
X = np.array([[1, 2], [1, 3], [1, 4], [1, 5]]) # 特征数据集
y = np.array([0, 0, 1, 1]) # 标签数据集
theta = np.zeros(X.shape[1]) # 初始化参数为0
alpha = 0.01 # 学习率
iterations = 1000 # 迭代次数
# 添加截距项
X = np.concatenate([np.ones((X.shape[0], 1)), X], axis=1)
# 训练模型
theta, cost_history = gradient_descent(X, y, theta, alpha, iterations)
# 打印最终的参数值
print(f"Theta: {theta}")
# 预测新数据
X_new = np.array([[1, 3], [1, 4]])
X_new = np.concatenate([np.ones((X_new.shape[0], 1)), X_new], axis=1)
predictions = predict(X_new, theta)
print(f"Predictions: {predictions}")