逻辑回归在TensorFlow中本质是单层全连接网络:二分类用Dense(1, sigmoid)配binary_crossentropy,多分类用Dense(n, softmax)配sparse/categorical_crossentropy;必须compile指定optimizer、loss、metrics;输入需归一化,标签格式要与loss匹配,predict输出概率需阈值转换为类别。

用 tf.keras.Sequential 搭逻辑回归就是加一层 Dense 输出 sigmoid
逻辑回归在 TensorFlow 里本质是单层全连接网络 + sigmoid(二分类)或 softmax(多分类),不是独立模型类型。直接用 tf.keras.Sequential 最省事,不用手写梯度、loss 或训练循环。
关键点:输出层的 units=1 + activation='sigmoid'(二分类),或 units=n_classes + activation='softmax'(多分类);损失函数必须匹配——二分类用 'binary_crossentropy',多分类用 'sparse_categorical_crossentropy' 或 'categorical_crossentropy',别混用。
model = tf.keras.Sequential([tf.keras.layers.Dense(1, activation='sigmoid', input_shape=(n_features,))])- 输入
input_shape是特征维度,不是样本数;例如 10 个特征就写(10,),别写(10, 1)或漏掉逗号 - 如果标签是整数(如
[0, 1, 1, 0]),用sparse_categorical_crossentropy;如果是 one-hot(如[[1,0], [0,1]]),用categorical_crossentropy
训练前必须调用 model.compile(),否则 fit() 会报 AttributeError: 'Sequential' object has no attribute 'optimizer'
这个错很常见,尤其从 PyTorch 转过来的人容易忽略。Keras 模型不编译就不能训练——它不像 scikit-learn 那样 fit 时隐式初始化优化器。
- 必填三项:
optimizer(如'adam')、loss(如'binary_crossentropy')、metrics(如['accuracy']) - 别把
loss写成字符串但传了自定义函数名,比如loss=my_custom_loss却没定义my_custom_loss,会报NameError - 如果用
tf.data.Dataset喂数据,fit()里不能传y,否则报ValueError: Target data is not supported when using dataset as input
输入数据要归一化,否则 sigmoid 容易饱和导致梯度消失
逻辑回归对特征尺度敏感。原始特征值很大(比如收入 50000、年龄 80)会让 sigmoid 输入落在平缓区(导数 ≈ 0),权重几乎不更新,loss 下降极慢甚至卡住。
立即学习“Python免费学习笔记(深入)”;
- 用
sklearn.preprocessing.StandardScaler或MinMaxScaler预处理X_train和X_test(注意:fit_transform只在训练集上做,测试集用transform) - 别在
fit()里用validation_split=0.2同时切分和归一化——验证集会“偷看”训练集统计量,造成数据泄露 - 如果特征含类别变量,先做 one-hot 编码再归一化;别对 one-hot 列做标准化,会破坏 0/1 含义
预测时用 model.predict() 得到概率,np.round() 或阈值判断才得类别标签
predict() 返回的是概率(二分类是 shape=(N, 1) 的数组),不是 0/1 标签。直接拿它算 accuracy 会出错——比如 accuracy_score(y_true, y_pred) 里 y_pred 是 [0.92, 0.33, 0.77],不是 [1, 0, 1]。
- 二分类转标签:用
(y_proba > 0.5).astype(int),或更稳妥地np.where(y_proba > 0.5, 1, 0) - 阈值不一定是 0.5;若正负样本极度不均衡,得看
classification_report或 ROC 曲线选最优阈值 - 多分类不用手动 argmax——
model.predict()输出 softmax 概率,用np.argmax(y_proba, axis=1)提取预测类别
真正麻烦的不是搭结构,而是数据预处理和评估环节的细节对齐:归一化范围、标签编码方式、loss 与标签格式的匹配、预测后阈值选择——这些地方错一个,模型看起来“训出来了”,实际根本没学到位。


















