前面已经完成了数据清洗、特征工程、类别编码和数值缩放。现在可以训练第一个经典模型线性回归。它适合回答一类很具体的问题给定一些输入信息结果大概是一个什么连续数值比如房屋价格、订单金额、明天温度、配送时长或设备寿命。本课要解决什么问题假设只有一个特征房屋面积。历史数据告诉我们不同面积对应的成交价格。现在来了一套 92 平米的房子我们想估计它的价格。面积 (m²)成交价 (万元)451205814566168721808621598248110275这不是价格高、中、低的类别选择而是一个可能取 203.5 万、217.8 万等任意值的连续数值因此它是回归任务。从数学角度看模型在算什么一个特征时线性回归学的是一条直线y w x b y wx bywxbx xx是输入特征例如房屋面积y yy是要预测的目标例如房价w ww是权重表示面积每增加 1 个单位价格大约变多少b bb是偏置负责把整条线上下平移。实际项目通常有多个特征例如面积、房间数、楼层和到地铁站距离公式会扩展成多个特征的加权求和y w 1 x 1 w 2 x 2 w 3 x 3 b y w_1 x_1 w_2 x_2 w_3 x_3 byw1x1w2x2w3x3b写成矩阵形式就是y ^ X w b \hat{y} \mathbf{X}\mathbf{w} by^Xwb其中X \mathbf{X}X是样本矩阵、w \mathbf{w}w是权重向量。核心还是加权求和只是从一条线变成了多维空间里的一个超平面。训练目标MSE 怎么度量错了多少模型一开始并不知道w ww和b bb应该取什么值所以先随便给一个。把每个样本的预测值y ^ i \hat{y}_iy^i和真实值y i y_iyi比较MSE 1 n ∑ i 1 n ( y i − y ^ i ) 2 \text{MSE} \frac{1}{n}\sum_{i1}^{n}(y_i - \hat{y}_i)^2MSEn1i1∑n(yi−y^i)2两个关键细节误差先平方保证正负误差不互相抵消同时放大惩罚大误差再取平均让不同样本数之间可比。模型训练的过程就是不断调整w ww和b bb让 MSE 越来越小。用 scikit-learn 跑通第一个例子下面是一个可以直接运行的最小示例数据手工构造便于把注意力放在模型上importnumpyasnpfromsklearn.linear_modelimportLinearRegressionfromsklearn.model_selectionimporttrain_test_splitfromsklearn.metricsimportmean_squared_error,r2_score# X 必须是二维每一行一个样本每一列一个特征Xnp.array([[45],[58],[66],[72],[86],[98],[110]])ynp.array([120,145,168,180,215,248,275])X_train,X_test,y_train,y_testtrain_test_split(X,y,test_size0.3,random_state42)modelLinearRegression()model.fit(X_train,y_train)# 用测试集评估y_predmodel.predict(X_test)print(f权重 (w):{model.coef_[0]:.2f})# 斜率print(f偏置 (b):{model.intercept_:.2f})# 截距print(fMSE:{mean_squared_error(y_test,y_pred):.2f})print(fR²:{r2_score(y_test,y_pred):.2f})# 对新样本预测pricemodel.predict(np.array([[92]]))print(f92 平米预测价:{price[0]:.1f}万元)新手最容易漏掉的三个细节X必须是二维的。即使只有一个特征面积也要写成[[45], [58], ...]每个内层列表是一个样本。y是一维目标数组。fit()是学习predict()是使用。调用predict()不会继续学习这正是测试集可以公平评估的原因。训练和预测的数据形状必须一致。训练用了 4 个特征预测时也必须传 4 个特征列数不匹配直接报错。为什么先划分训练集和测试集训练集用来拟合模型测试集要像未来新数据一样直到最后才交给模型预测。若模型已经见过测试集的真实答案再去算误差就没有意义了。划分要在训练前就完成X_train,X_test,y_train,y_testtrain_test_split(X,y,test_size0.3,random_state42)下一课会专门讲如何用 MAE、MSE、RMSE 和 R² 判断模型在测试集上表现如何。线性回归的边界在哪里线性回归很适合做第一个基线模型训练快、可解释也能帮助发现数据流程问题。但它假设输入和输出之间是线性关系真实世界不一定如此。场景回归能行吗面积 → 房价基本线性可用广告投入 → 销量边际递减可能非线性用户年龄 → 消费力先升后降倒 U 型折扣力度 → 转化率阶跃式变化遇到明显弯曲、分段或复杂交互的关系不要急着换复杂模型先尝试三步特征变换取对数log x \log xlogx、开方x \sqrt{x}x、分桶后再 One-Hot特征交叉构造面积 × 房间数这样的新特征多项式特征加上x 2 x^2x2、x 3 x^3x3等非线性项。三步都不灵了再考虑决策树、随机森林等非线性模型。先用线性回归跑通流程得到一个可靠基线后续的改进才有比较对象。常见错误把分类问题拿来做回归用户会不会流失只有两个类别应该用分类模型“用户未来消费金额是多少才是回归。如果硬用线性回归去拟合 0/1 标签模型可能输出 0.37、-0.16 这种没有分类意义的概率”。任务目标决定模型和指标不能只看数据长得像不像数字。忘记处理缺失、类别和尺度线性回归不能直接读取字符串类别也不喜欢包含缺失值的输入数量级相差巨大的特征会让w i w_iwi无法公平比较。前面几课的清洗、编码和缩放是训练流程的一部分不是可选装饰。只看训练集效果模型在训练数据上误差很小并不奇怪它本来就从这些样本中学习。测试集的表现才说明模型是否真正学会了规律。课后练习把示例里的单个特征扩展为两个特征面积和房间数。然后尝试预测一套 92 平米、3 室的房子价格。运行前先回答此时X的形状是(?, ?)小结回归任务预测连续数值线性回归学习特征与目标之间的线性关系y w 1 x 1 ⋯ b y w_1x_1 \dots byw1x1⋯bfit()学参数predict()预测新样本两者不互相影响先建立简单、可靠的基线再谈更复杂的模型永远在测试集上评估。下一课评估线性回归的预测模型到底平均错了多少发生大错时又该怎么看。在线阅读点击这里阅读博客原文原文地址https://bestsdz.xyz/posts/linear-regression-basics/