
逻辑回归(Logistic Regression)是一种经典的分类算法,尽管名字中带有“回归”,但其核心目标是通过概率建模解决二分类问题。其核心思想可概括为:
类比:想象一位裁判通过综合选手的多个得分(特征)计算总分,再通过“概率转换器”判断是否晋级,逻辑回归正是这种“综合评分+概率决策”的数学实现。
import java.util.Arrays;
public class LogisticRegression {
private double[] weights;
private double bias;
private double learningRate;
private int epochs;
public LogisticRegression(int featureSize, double learningRate, int epochs) {
this.weights = new double[featureSize];
this.bias = 0.0;
this.learningRate = learningRate;
this.epochs = epochs;
}
// Sigmoid函数
private double sigmoid(double z) {
return 1.0 / (1.0 + Math.exp(-z));
}
// 训练模型(梯度下降)
public void train(double[][] X, int[] y) {
for (int epoch = 0; epoch < epochs; epoch++) {
double[] gradients = new double[weights.length];
double biasGradient = 0.0;
for (int i = 0; i < X.length; i++) {
double z = bias;
for (int j = 0; j < weights.length; j++) {
z += weights[j] * X[i][j];
}
double prediction = sigmoid(z);
double error = prediction - y[i];
// 计算梯度
biasGradient += error;
for (int j = 0; j < weights.length; j++) {
gradients[j] += error * X[i][j];
}
}
// 更新参数
bias -= (learningRate / X.length) * biasGradient;
for (int j = 0; j < weights.length; j++) {
weights[j] -= (learningRate / X.length) * gradients[j];
}
}
}
// 预测
public int predict(double[] x) {
double z = bias;
for (int i = 0; i < weights.length; i++) {
z += weights[i] * x[i];
}
return sigmoid(z) >= 0.5 ? 1 : 0;
}
public static void main(String[] args) {
// 示例数据:特征(学习时间, 做题数量),标签(是否通过考试)
double[][] X = {{2, 5}, {3, 7}, {1, 3}, {4, 8}};
int[] y = {0, 1, 0, 1};
LogisticRegression model = new LogisticRegression(2, 0.01, 1000);
model.train(X, y);
// 预测新样本
double[] newSample = {3.5, 6};
System.out.println("预测结果: " + model.predict(newSample)); // 输出1(通过)
}
}代码解析:
指标 | 数值 | 说明 |
|---|---|---|
时间复杂度 | O(n⋅m⋅e)O(n⋅m⋅e) | nn样本数,mm特征数,ee迭代次数 |
空间复杂度 | O(m)O(m) | 存储权重和偏置项 |
优化方向 | 使用随机梯度下降(SGD)或并行计算可提升效率39 |
逻辑回归因其高效性和可解释性,广泛应用于以下领域:
新手入门:
scikit-learn库(Python)或Weka(Java)对比效果。
成手进阶:
逻辑回归的优雅在于用简单的数学工具解决复杂的分类问题。从信用卡反欺诈到疾病预测,其广泛的应用验证了“简单即有效”的哲学。正如Richard Hamming所言:“计算的目的是洞察,而非数字。”掌握逻辑回归,正是打开分类世界的第一把钥匙。