线性回归实战指南:从最小二乘法到Python实现
1. 动手之前先搞清楚线性回归在解决什么问题说个真实场景。我朋友圈里有个做电商运营的姑娘每个月都要统计店铺的推广花费和销售额老板总让她预测下个月投多少钱能出多少量。她每次都是拉个Excel折线图用眼睛瞄一眼增长率大致估个数交差。这种估法偶尔准一次但大部分时候偏差大到离谱。后来我帮她把过去12个月的数据丢给Python跑了个线性回归花了不到5分钟预测结果出来直接让老板点头——这就是线性回归最典型、也最值钱的用途用一条直线去逼近一堆散点然后用这条直线做预测。线性回归模型说起来就一句话找一条直线让所有样本点到这条直线的垂直距离的平方和最小。这句话里面的“距离的平方和最小”就是数学上说的最小二乘法Ordinary Least SquaresOLS。你可能在统计学课、机器学习课或者某个教学视频里见过这个词但真正把公式写出来、把代码跑起来、把结果解释明白的人实操中其实寥寥无几。这个内容适合谁来参考我觉得三类人最对口第一类是刚学Python、想找一个小项目练手的新手线性回归的代码量不大刚好能把numpy、matplotlib、sklearn这些库都过一遍第二类是工作中需要做数据分析但没系统学过统计的从业者比如运营、产品、财务看完就能用自己的真实数据跑结果第三类是准备面试数据岗的求职者线性回归是面试被问概率最高的话题之一从原理到代码最好都能手写出来。放心你不需要高深的数学底子高中数学里“斜截式直线 y kx b”的水平就够了。在进入代码之前我先用最直白的方式讲清楚背后的原理。这部分理解了后面写代码就是顺手的事。1.1 线性回归到底“回归”的是什么回归这个词听着玄乎其实就是“预测一个连续数值”。比如预测房价、预测销量、预测温度这些都是回归问题。与之相对的是分类问题预测的是离散的类别比如判断一封邮件是垃圾邮件还是正常邮件。线性回归的前提假设很简单自变量和因变量之间存在线性关系。如果你拿x轴画自变量、y轴画因变量点出来大致是一条带状分布那就适合用线性回归。比如投入的广告费和销售额之间的关系通常就是一条向上走的直线带。单变量的线性回归公式长这样y w * x b这里的w叫权重或者斜率决定了直线的倾斜程度b叫偏置或者截距决定了直线在y轴上的位置。机器学习的训练过程本质上就是不断调整w和b让直线“贴合”数据的过程。如果是多变量公式就变成y w1x1 w2x2 ... wn*xn b这就是多元线性回归。比如预测房价输入变量可以是面积、卧室数量、房龄、地段评分等等输出是房价。每个wi代表这个特征对结果的影响方向和大小——wi是正数说明这个特征和结果正相关wi的绝对值越大说明影响越强。1.2 最小二乘法是什么为什么大家都用它最小二乘法的核心想法特别朴素真实数据点和预测直线之间的差距叫误差把所有样本点的误差的平方加起来叫损失找到一组参数让这个损失最小就是最优直线。为什么用平方而不是用绝对值因为平方误差是连续可导的凸函数能通过求导直接找到全局最小值点。绝对值误差在零点不可导求最小值的计算不好做。这是数学上的一个巧劲理解到这里就够了。损失函数写成公式是这个样子J(w, b) (1/n) * Σ(yi - (w*xi b))²右边的 yi - (w*xi b)就是第i个样本的真实值减预测值也就是误差。平方之后求和再除以样本数n得到一个平均误差。我们训练模型的目标就是让J(w, b)尽可能小。最小二乘法的求解方式有两种。一种叫正规方程直接对损失函数求导并令导数为零解关于w和b的方程组一次性得到最优解。另一种叫梯度下降初始随机选一组w和b然后沿着损失下降最快的方向一点点迭代直到损失不再明显变化。我用一个生活类比帮大家记忆正规方程就像是站在山顶直接拿出地图算出下山的最短路径一步到位梯度下降则是蒙着眼睛靠脚底感觉哪边坡度更陡就往哪边走一小步虽然慢但是什么山形都能走灵活得多。理解到这里下面就开始真正动手了。2. 环境准备装好Python和三个必需的库巧妇难为无米之炊。写Python代码之前先把Python环境装好。很多新手卡在第一步就放弃了其实装Python比你想象中简单核心就两步去官网下载安装包一路点“下一步”然后验证一下。2.1 装哪个版本去哪里下载怎么确认装好了我的建议是装Python 3.8以上的稳定版本比如Python 3.9、3.10都可以。不要装最新的开发和测试版本那些版本偶尔会跟第三方库的兼容性出问题。也不必纠结“我该装64位还是32位”现在的电脑基本都是64位系统直接选64位安装包就行。下载的话直接去Python官网的下载页面python.org/downloads找到“Download for Windows”或者对应系统的大按钮点击下载就可以了。macOS用户注意Mac自带的Python版本通常比较旧建议也在官网装一个新的不要去动系统自带的那一套免得把系统环境搞坏。安装过程中的一个关键点Windows用户到了安装向导页面一定记得勾选底部的“Add Python to PATH”复选框。这一步如果漏了后面在命令行里输入python会提示“不是内部或外部命令”那就麻烦了。PATH是Windows用来查找可执行文件的路径列表勾选之后安装程序会把Python的安装路径自动加进去你才能在任意目录下直接启动Python。安装完之后打开终端Windows上叫命令提示符cmd或者PowerShellmacOS和Linux上直接用终端输入python --version看到类似Python 3.10.11这样的输出就说明装好了。顺便说一句网上经常有人说“用where python看看自己装了哪些Python”那是在排查多版本共存冲突的时候用的。单版本安装的话python --version验证就够了。2.2 三个核心库numpy、matplotlib、scikit-learnPython的强大很大程度来自它的第三方库生态。做线性回归最常用的三个库需要提前装好numpy提供多维数组对象和一堆数学运算函数。线性回归里所有向量、矩阵运算都基于它。matplotlib画图工具。数据可视化靠它后面我会用它画出回归直线和散点的对比图。scikit-learn简称sklearn做机器学习最方便的库里面直接封装了LinearRegression类几行代码就能完成建模和预测。安装方式很简单在终端里依次执行下面的命令pip install numpy pip install matplotlib pip install scikit-learn如果下载速度慢可以用国内的镜像源加速例如pip install numpy -i https://pypi.tuna.tsinghua.edu.cn/simple提示如果遇到SyntaxError: invalid syntax说明你把pip命令输到了Python解释器里面。pip命令是在终端命令行里执行的不是Python交互环境里执行的。这个坑我见过几百次了。安装完成后可以在Python环境里快速验证import numpy import matplotlib import sklearn print(numpy.__version__)正常输出版本号就说明环境OK了。一般报错无非两种ModuleNotFoundError库没装上或ImportError库装坏了。ModuleNotFoundError重新用pip安装一次基本都能解决。3. 从零手写线性回归最小二乘法的两种落地姿势环境就绪接下来是最核心的部分。我强烈建议新手先不要急着用sklearn而是用numpy手写一遍线性回归。原因很简单只有当你自己写出来了你才真正知道模型内部在算什么。面试时候被问“线性回归的原理是什么”能现场把公式和代码写出来的人通过率远高于只会调库的人。3.1 用正规方程一步求解代码只有几行正规方程的数学结论很漂亮对于线性回归的最小二乘损失最优解可以直接算出来不用迭代。公式长这样w (X^T * X)^(-1) * X^T * y这里的X是特征矩阵注意需要在原始特征左边加一列全1用来对应偏置b。X^T表示X的转置^(-1)表示矩阵求逆。这个公式的本质是把整个线性回归问题变成了一个纯矩阵运算问题。下面给出一段完整的numpy实现import numpy as np import matplotlib.pyplot as plt # 造一组带噪声的线性数据 np.random.seed(42) x np.random.uniform(0, 10, size50) true_w, true_b 2.0, 1.0 y true_w * x true_b np.random.normal(0, 1.0, size50) # 特征矩阵在x左边拼一列全1 X np.vstack([x, np.ones_like(x)]).T print(特征矩阵X的shape:, X.shape) # 正规方程求解 theta np.linalg.inv(X.T X) X.T y w, b theta[0], theta[1] print(f拟合结果w {w:.4f}, b {b:.4f}) print(f真实参数w {true_w}, b {true_b})这段代码做了几件事先用np.random.uniform生成50个在0到10之间均匀分布的x再用真实直线y 2x 1加上高斯噪声生成y模拟现实中的带干扰数据。然后用np.vstack把x和全1列拼成特征矩阵X最后用矩阵运算一把求出w和b。np.linalg.inv(X.T X) X.T y这行就是正规方程的矩阵实现。Python 3.5之后支持符号直接做矩阵乘法比写np.dot(X.T, X)简洁不少。实测结果w约等于2、b约等于1和生成数据的真实参数非常接近说明拟合成功。再补一段可视化代码把散点和拟合直线画出来plt.figure(figsize(8, 5)) plt.scatter(x, y, alpha0.6, label样本数据) plt.plot(x, w * x b, colorred, linewidth2, label拟合直线) plt.xlabel(x) plt.ylabel(y) plt.title(正规方程求解的线性回归) plt.legend() plt.grid(True, linestyle--, alpha0.5) plt.show()画图在实操中是必不可少的。光看数字你很难直观判断拟合得好不好把图画出来一眼就能看到直线是否大体穿过数据点带。注意正规方程里涉及矩阵求逆。如果X^T * X这个矩阵是奇异矩阵不可逆代码会直接报错。在实际数据中最可能造成这种情况的原因是特征之间存在高度共线性比如两个特征完全成比例。数据量小、特征少的时候不太会遇到但特征一多就需要留个心眼。3.2 梯度下降一步步“走下坡”的迭代方法正规方程一步求解虽然优雅但有一个致命局限当特征维度非常大时比如有几万个特征X^T * X的矩阵运算是极其昂贵的内存和耗时都吃不消。这时候梯度下降法就成了主流选择。梯度下降的核心思路我在前面类比过假装我们蒙着眼睛站在一座山的某个位置目标是走到山谷。每一步我们先感受一下哪个方向坡度最陡算梯度然后沿着那个方向迈出一小步更新参数。重复这个动作就越来越接近谷底。参数更新公式如下w w - learning_rate * ∂J/∂wb b - learning_rate * ∂J/∂b其中learning_rate叫学习率控制每次迈出的步子大小。步子太大容易跳过山谷甚至直接飞出去步子太小则收敛极慢。对线性回归的损失函数做偏导经过推导梯度的表达式非常简洁∂J/∂w (2/n) * Σ xi * (wxi b - yi)∂J/∂b (2/n) * Σ (wxi b - yi)上式的意思是把所有样本的预测误差分别乘以xi或乘以1之后求平均就得到当前梯度。用numpy实现完全可以写成向量化的形式一次性算完所有样本的梯度。下面是一段完整的numpy梯度下降实现import numpy as np import matplotlib.pyplot as plt np.random.seed(42) x np.random.uniform(0, 10, size50) true_w, true_b 2.0, 1.0 y true_w * x true_b np.random.normal(0, 1.0, size50) # 初始化参数 w 0.0 b 0.0 learning_rate 0.05 epochs 500 n len(x) loss_history [] for epoch in range(epochs): y_pred w * x b error y_pred - y grad_w (2 / n) * np.sum(x * error) grad_b (2 / n) * np.sum(error) w - learning_rate * grad_w b - learning_rate * grad_b loss np.mean(error ** 2) loss_history.append(loss) if epoch % 100 0: print(fepoch {epoch:3d} | w {w:.4f} | b {b:.4f} | loss {loss:.4f}) print(f最终w {w:.4f}, b {b:.4f})跑完之后你会发现损失在几百步之内从十几一路降到了接近1w和b逐步逼近2和1。这个过程就是“训练”。训练过程中把loss_history画出来是一个单调下降的曲线这就是传说中的收敛曲线。如果曲线震荡不下降或者干脆往上飙那基本就是学习率太大了。梯度下降相比正规方程的优点之一是它对数据规模不敏感可以处理超大数据集因为每一次迭代只依赖于一个批量甚至一个样本的梯度。缺点也很明显需要调学习率需要确定迭代次数。这就引出了非常关键的实操话题——避坑。提示有个小细节值得注意。在我上面的梯度下降实现里学习率0.05对这个数据集是合适的。如果数据范围变化比如x的取值变成0到1000那这个学习率可能就完全不合适了。原因后面专门讲特征缩放时再展开。4. 用scikit-learn快速实现从数据拆分到评估手写版本是为了搞懂原理实际工作中用scikit-learn就够了。sklearn把LinearRegression封装得非常简洁但正因为简洁很多人反而忽略了一些必须处理的数据细节。这个环节我严格按照实际建模的流程来走一遍。4.1 第一步永远是数据准备和可视化检查好模型的前提是好数据。拿到数据第一件事不是跑模型而是看数据长什么样。构造一个示例场景某便利店想研究“门店附近的人流量”和“日销售额”的关系。人工造出40条带有趋势和噪声的数据import numpy as np import matplotlib.pyplot as plt np.random.seed(0) traffic np.random.uniform(100, 500, size40) sales 300 2.5 * traffic np.random.normal(0, 50, size40) plt.scatter(traffic, sales, alpha0.7) plt.xlabel(人流量百人) plt.ylabel(日销售额元) plt.title(人流量与日销售额散点图) plt.grid(True, linestyle--, alpha0.5) plt.show()画完之后理想情况是看到点大致分布在一条上升的带子内。如果看到明显的曲线形态比如点排布成U形或者反U形那说明线性假设可能不合适需要考虑多项式回归或其它方法直接套线性回归效果会很差。4.2 用train_test_split划分训练集和测试集建模的铁律是不能用全部数据做训练也不能用全部数据做评估。原因很简单——模型如果只是在“背书”而不具备泛化能力那么用训练过的数据去评估当然好看可一到面对没见过的数据就露馅了。正确做法是把数据分成训练集和测试集训练集用来学出w和b测试集用来检验模型的拟合效果。sklearn提供了一句命令from sklearn.model_selection import train_test_split X traffic.reshape(-1, 1) y sales X_train, X_test, y_train, y_test train_test_split( X, y, test_size0.25, random_state42 )这里的reshape(-1, 1)很重要。sklearn的LinearRegression期望特征矩阵是二维的形状为(样本数, 特征数)。如果你直接传一个一维数组进去很多版本会报ValueError: Expected 2D array。reshape(-1, 1)的意思是把一维数组变成“每行一个样本、每列一个特征”的格式。test_size0.25表示把25%的数据分给测试集也就是40条里30条训练10条测试。random_state42用于固定随机划分结果方便复现。不设也行但每次跑的结果会不一样不利于调试。4.3 训练、预测、评估三步走sklearn建模就三步创建模型对象、fit训练、predict预测。from sklearn.linear_model import LinearRegression model LinearRegression() model.fit(X_train, y_train) print(拟合的斜率w, model.coef_) print(拟合的截距b, model.intercept_)预测和评估y_pred model.predict(X_test) from sklearn.metrics import mean_squared_error, r2_score mse mean_squared_error(y_test, y_pred) r2 r2_score(y_test, y_pred) print(f测试集MSE{mse:.2f}) print(f测试集R²{r2:.4f})MSE是均方误差衡量预测值与真实值的平均偏差平方。它的量纲是原数据量纲的平方比如这里的销售额单位是元那MSE单位就是“元的平方”单独看比较抽象。R²则友好得多它是一个0到1之间的数代表模型解释了数据中多大比例的方差。R²等于0.9就可以说“模型解释了90%的波动”。把测试集的真实值和预测值画在一张图上plt.figure(figsize(6, 6)) plt.scatter(y_test, y_pred, alpha0.7) plt.plot([y_test.min(), y_test.max()], [y_test.min(), y_test.max()], r--, linewidth2) plt.xlabel(真实值) plt.ylabel(预测值) plt.title(真实值 vs 预测值) plt.grid(True, linestyle--, alpha0.5) plt.show()如果这些点均匀分布在红色对角线附近说明预测表现良好。如果出现系统性偏移比如所有点都偏在对角线上方那说明模型有偏差可能是特征选择有问题或者模型形式不对。5. 常见问题与排查技巧实录线性回归看着简单实际操作中容易踩的坑一点都不少。我把自己这几年实战中遇到过的典型问题列个速查表大家对照着排查能省下大量时间。5.1 梯度不收敛、损失震荡先查学习率和数据量纲使用梯度下降的时候loss曲线不降反升或者剧烈震荡几乎都是两个原因之一学习率太大或者特征没有标准化。学习率太大参数每次更新迈的步子太大直接“跳过”了山谷甚至在山谷两边来回横跳。解决方法是把learning_rate调小从0.1改成0.01、0.001试一遍。一个小技巧是打印前100轮的loss如果前几轮loss数值从几十飙升到几百甚至上千那基本可以断定是学习率过大的原因。另一个被很多人忽视的原因特征数值范围差别巨大。比如一个特征取值范围是0到1另一个特征是0到100000那么梯度的量级完全被大数值特征主导模型会处于一种“偏科”状态不仅收敛慢还可能震荡。解决办法是对特征做标准化StandardScaler让每个特征均值为0、方差为1。5.2 预测结果出现负数或者异常值先检查数据本身有次我给一个零售项目做预测训练完成后拿了新一期数据一预测居然跑出一个负数价格。第一个怀疑是模型错了但测试集表现明明正常。后来排查才发现新数据的某些特征值远超训练集的范围。这种情况叫“外推危机”。线性回归本质上是一个线性函数它对于训练集范围内的特征值做插值预测是可靠的但超出训练范围后直线只是机械地按照斜率继续外推并没有任何数据支撑。所以特征值一旦到了那些“没见过的远处”预测值就很容易脱离常识。解决思路有两个一是保证预测时的数据和训练集分布尽量接近二是如果业务上本来就有大量高取值样本应该在采集训练数据时把它们包含进去。5.3 评估结果很好但上线效果差检查数据泄露有个非常隐蔽的坑叫数据泄露。举个例子你做销量预测特征里不小心包含了“当天是否下雨”。如果训练时确实有当天的数据那没问题但如果你想在月初预测月末销量你根本没有“当天”的信息这个特征在现实中拿不到可模型训练时却用了它。部署上线后模型自然会“失灵”。再比如对数据做归一化时如果用全量数据的均值和标准差去缩放训练集和测试集也属于一种温和的数据泄露。正确的做法是只使用训练集的统计量来缩放训练集然后把同样两个数字应用到测试集。sklearn的StandardScaler.fit_transform在训练集上调用测试集上只用transform就是为了解决这个问题。注意排查数据泄露的一个笨办法就是问自己一个问题“建模时用到的每一个特征在真正做预测的那一刻我是否已经拿到了它的值”只要有一个特征的答案是“还没拿到”那就是泄露了。5.4 多元线性回归之前先做共线性检查和可视化推广到多变量的场景也就是特征超过一个的时候还有个需要特别警惕的问题叫多重共线性。如果两个变量本身就高度相关比如“房间面积”和“房间数量”那么模型会把影响分散在它们之间单个变量的系数含义就会被扭曲甚至出现正负号反了这类反直觉现象。常用的检查方式是看特征之间的相关系数矩阵用pandas的df.corr()就能算出来。如果发现某个特征和另一个特征相关系数超过0.8就要考虑删掉其一或者用一些降维手段提前处理。实操中还遇到过一种情况两个特征单独看和因变量相关性都很弱但合在一起模型效果很好。这说明它们之间存在交互作用。线性回归默认只考虑“加法效应”也就是每个特征独立贡献一个加数无法自动捕捉“乘法效应”。如果业务上觉得交互有可能存在就需要手动添加交互特征列比如x1*x2。这也是线性模型的天花板之一理解这一点你就不至于在模型效果不好时一头雾水。6. 最后分享一点我的实际体会写了这么多最后说几句掏心窝的话。线性回归是机器学习里最适合作为“第一个模型”的算法没有之一。它能帮助你建立一套完整的建模心态先看数据、再选模型、然后训练评估、最后上线下验证。这套流程在后续学决策树、神经网络时完全通用。我见过不少人一上来就学深度学习结果连训练集和测试集都分不清调了一周参也不知道调的是什么。先把线性回归吃透这些基本概念会扎实很多。我个人在实际操作中还有一个习惯凡是线性回归项目一定先把结果可视化再讲指标。散点图加回归直线是给非技术同事解释结果的最强工具胜过念R²和一长串误差数字。另外就是保留一份模型训练时的“流水账”包括随机种子、特征列表、数据切分比例方便几个月后复盘也能让你在团队协作时被夸专业。最后再送给大家一个小技巧如果你刚拿到一份真实业务数据不知道从哪下手先不要管模型先算一次相关系数矩阵挑选跟目标变量最相关的单变量做第一次线性回归。很多时候简单模型加上正确特征已经能解决工作中80%的问题。把基础打牢比追新工具重要得多。

相关新闻

虚幻引擎UPROPERTY宏详解:反射、编辑器可见性与蓝图读写

虚幻引擎UPROPERTY宏详解:反射、编辑器可见性与蓝图读写

UPROPERTY 这三个字母,几乎是每个用虚幻引擎(Unreal Engine)写 C 的人第一步就会撞到的东西。最典型的一幕就是:你在类里声明了一个int32 Health;,满心期待它出现在细节面板里、能被蓝图读到,结果编辑器里干…

2026/10/9 8:49:10 阅读更多 →
Win7共享打印机登录失败:解决0x0000012权限拦截

Win7共享打印机登录失败:解决0x0000012权限拦截

简介:本资源是一份针对Windows系统共享打印机连接失败问题的实用排错指南,面向IT运维人员、企业网管及普通办公用户,重点解决“登陆失败:未授予用户在此计算机上的请求登陆类型”这一高频报错。文档以Word(.doc&#x…

2026/10/9 8:49:10 阅读更多 →
PHP中SQLite WAL模式:解决database is locked

PHP中SQLite WAL模式:解决database is locked

做 PHP 这么多年,真正让我愿意花时间去研究 WAL 模式的转折点,是一次报表服务的高频锁冲突。当时服务用 SQLite 存中间结果,请求量一上来,日志里全是 SQLSTATE[HY000]: General error: 5 database is locked 。我一度想直接换 M…

2026/10/9 8:49:10 阅读更多 →

最新新闻

C语言文件读取:EOF与-1的本质区别及避坑指南

C语言文件读取:EOF与-1的本质区别及避坑指南

1. 从一个让人抓狂的Bug说起如果你写过C语言的文件读写代码,大概率见过这样的场景:fgetc返回了一个值,你拿它跟EOF比较,逻辑上完全正确,但程序跑起来就是不对劲。更诡异的是,有时候它工作正常,有…

2026/10/9 9:57:24 阅读更多 →
搜索引擎优化SEO底层逻辑与实操指南:从抓取索引到内容为王

搜索引擎优化SEO底层逻辑与实操指南:从抓取索引到内容为王

1. 搜索引擎到底在干什么:先把底层逻辑说透很多人一上来就问“关键词密度多少合适”“外链要发多少条”,这些问题不是不能问,但顺序错了。你得先搞明白搜索引擎的工作流程,否则后面所有操作都是盲人摸象。搜索引擎干的事其实就三件…

2026/10/9 9:57:23 阅读更多 →
视觉传感器教案指南:从光电原理到选型实战

视觉传感器教案指南:从光电原理到选型实战

简介:这是一份面向机器人、自动化生产、图像处理等领域的视觉传感器教学课件,适合高校学生、初学者及工程技术人员系统学习图像传感器基础知识。资源为单个PPTX演示文稿,大小约639KB,共1个文件,内容完整覆盖从传感器分…

2026/10/9 9:57:23 阅读更多 →
数学建模竞赛低碳建筑研究完整代码复现:热传导、主成分与灰色预测

数学建模竞赛低碳建筑研究完整代码复现:热传导、主成分与灰色预测

简介:这份资源是2023年五一数学建模竞赛C题“双碳”目标下低碳建筑研究的完整参赛文档,面向正在备赛数学建模、尤其是关注环境/能源类题目的同学。文档以Matlab为实现工具,系统呈现热传导模型、主成分分析法与灰色预测模型GM(1,1)的建模过程&…

2026/10/9 9:57:23 阅读更多 →
Taylor级数:从数学公式到工程近似的核心接口

Taylor级数:从数学公式到工程近似的核心接口

1. 为什么Taylor级数不是“背公式大赛”,而是数学建模的底层语言你有没有过这种体验:翻开高等数学教材,看到一长串“常用Taylor展开式”表格——eˣ 1 x x/2! x/3! …,sin x x − x/3! x⁵/5! − …,cos x 1 −…

2026/10/9 9:57:23 阅读更多 →
TensorFlow银行客户流失预测实战:从特征工程到SHAP解释与阈值调优

TensorFlow银行客户流失预测实战:从特征工程到SHAP解释与阈值调优

简介:这份PDF文档面向银行风控、金融数据分析及机器学习入门到进阶的读者,围绕客户流失预测这一典型场景,系统讲解基于TensorFlow的特征工程与模型解释技巧。内容从银行业客户流失问题概述、数据收集与探索性分析讲起,逐步深入到特…

2026/10/9 9:56:20 阅读更多 →

日新闻

Java时间API实战:LocalDate、Date与ZonedDateTime的转换与避坑指南

Java时间API实战:LocalDate、Date与ZonedDateTime的转换与避坑指南

Java时间API这个话题,隔三差五就会在群里被翻出来讨论一次。上周还有个同事线上处理一个订单超时问题,排查到最后发现是ZonedDateTime序列化后时区丢了,用户在下单当天晚上看到的时间整整差了8个小时。这类问题几乎每个做Java开发的人都遇到过…

2026/10/9 0:00:49 阅读更多 →
EasyTier实践:从NAT穿透到子网代理的异地组网部署与排错

EasyTier实践:从NAT穿透到子网代理的异地组网部署与排错

前几个月我手头有好几台机器需要互相访问:办公室台式机、家里 NAS、还有一台云主机。如果只是偶尔传个文件倒还好,问题是工作场景经常要在几处环境之间来回切换,每次都先登录跳板机再层层代理,实在折腾。我先后试过端口映射、自建…

2026/10/9 0:00:49 阅读更多 →
AI Agent工程实战:从七要素到七个决策点的系统设计指南

AI Agent工程实战:从七要素到七个决策点的系统设计指南

AI Agent 这个词在过去一年里被反复提及,但真正动手搭过一套能跑起来的 Agent 系统的人都知道,从"知道它是什么"到"让它稳定干活"之间隔着一整套工程决策。我前后参与过几个 Agent 项目的落地,从最初用现成框架拼装&…

2026/10/9 0:01:50 阅读更多 →

周新闻

KT148A语音芯片外挂8002D功放的工程实践指南

KT148A语音芯片外挂8002D功放的工程实践指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/8 15:26:32 阅读更多 →
LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/8 15:26:40 阅读更多 →
ARM架构深度解析:从RISC设计理念到交叉编译实战

ARM架构深度解析:从RISC设计理念到交叉编译实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/8 10:10:36 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/8 21:13:17 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/8 15:26:17 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/9 6:17:20 阅读更多 →