KNN算法实战:从手写分类器到约会网站用户兴趣预测
刚接触机器学习时很多人第一个研究的分类算法就是 KNNK 最近邻。原因很简单它不依赖复杂的数理公式原理一句话就能讲清楚代码几十行就能跑通。但真正把它放到真实业务场景里尤其是像约会网站这种“非结构化兴趣数据”的上层分类任务问题就没那么简单了。这个项目我前前后后跑了不止一遍从最基础的原生 Python 手写实现到引入 sklearn 做交叉验证再到对 K 值、距离度量、样本量做多维度的性能评测每一步都踩过不少坑。这篇博文就把这套完整的项目链路拆开来讲适合刚学完 KNN 基础、准备动手做项目的同学也适合已经在用 sklearn、但想补一补算法底层细节的工程师。先说清楚这个项目到底是干什么的输入一批约会网站用户的画像数据包括每年飞行里程数、玩游戏时间的占比、每周冰淇淋消耗量这三个特征算法要自动判断这个用户属于“完全不感兴趣”“有一点兴趣”还是“非常感兴趣”三个类别之一。听起来像个人口味预测但本质上它就是一个标准的三个类别分类问题KNN 在这里最大的价值是能用最简单的方式验证“相似的人有相似兴趣”这个假设同时把分类器的完整评估链路走通。整篇文章不光讲原理还会给出可运行的代码、实验参数、性能对比表格以及我在实际调参过程中遇到的各种问题。1. 项目设计与 KNN 算法原理剖析1.1 KNN 的核心思想用“邻居投票”说话KNN 的全称是 K-Nearest Neighbors也就是 K 个最近的邻居。它的核心逻辑没有比这个更直白的对于一个待分类的样本计算它到已知样本的距离找出距离最近的 K 个样本看这 K 个样本里哪个类别的数量最多就把它归为那个类别。这就像你到一个新城市想判断附近居民的生活习惯最简单的方法是看你的邻居——如果周围 10 户有 7 户都喜欢早起跑步那你有很大概率也是晨跑型选手。这里有个关键点要强调KNN 是一种“懒惰学习”lazy learning算法。“懒惰”体现在它没有训练阶段或者说训练阶段就是把所有样本原封不动地存下来。分类是在预测阶段实时计算距离完成的。所以它的优点是实现成本低、对新样本的适应性强缺点是每一次预测都要和全部历史样本做距离计算样本量大、特征维度高时速度会明显变慢。在约会网站这个场景下样本量通常只有几千条、特征只有三个KNN 完全可以直接扛住这也是我选它作为项目主算法的原因之一。1.2 约会网站数据集的特征构成与类别含义这个项目用的数据集不是拍脑袋造的它来自机器学习社区非常经典的约会网站用户样本集一共 1000 条记录。每条记录包含三个数值型特征每年获得的飞行常客里程数玩游戏时间占总时间的百分比每周消耗的冰淇淋公升数这三个特征很有意思它们分别从“出差频率”“宅家程度”“甜食偏好”三个维度勾勒了一个人的生活方式。标签则用 1、2、3 三个数字表示分类结果1 表示完全不感兴趣2 表示有一点兴趣3 表示非常有兴趣。说白了这个数据集模拟的是一个配对筛选场景系统根据男生的三个生活习惯指标预测女生对他感兴趣的程度。很多人看到“冰淇淋”“游戏时间”会觉得这个数据像是编的但这类“看似随意、实则分类清晰”的特征恰恰是 KNN 的好帮手。因为 KNN 的决策边界完全是由特征空间里的距离决定的特征之间越能区分开不同类别的样本分类效果就越好。我拿到数据第一件事就是先观察每个类别的样本量分布确认 1、2、3 三类在数据集里不是极端不平衡的否则后面各种评估指标都会被带偏。1.3 为什么 KNN 适合这个场景而不是其他分类模型我在做项目选型时先对比过逻辑回归、朴素贝叶斯和决策树最后还是定下来用 KNN。原因是多方面的第一这个数据集的类别边界并不是简单的线性可分逻辑回归这种线性模型不擅长刻画特征之间的非线性关系第二特征只有 3 个维度不高KNN 的“维度灾难”影响很小点与点之间的距离还能保持较好的判别力第三KNN 的可解释性在这里有额外价值——我们不仅能告诉用户“你属于第三类”还能告诉他“系统找到的 5 个最相似样本分别是谁”这种“相似样本推荐”逻辑和约会网站的推荐机制天然契合。当然 KNN 也有明显短板没有显式的特征权重结构每个特征对分类的贡献是一视同仁的所以它对特征量纲极其敏感这就引出了下一节必须处理的标准化问题。2. 数据处理与标准化实操2.1 原始数据文件解析与特征切分拿到原始数据文件后第一步是把它读取成可计算的结构。这个数据文件没有列名每一行是三个数值特征加一个类别标签数值之间用制表符分隔。我最开始直接用 open 加循环去逐行读虽然也能跑但后面做交叉验证和可视化时就显得很笨重所以后来统一改用 pandas 读取然后手动指定列名。import pandas as pd import numpy as np df pd.read_csv(dating_data.txt, sep\t, headerNone, names[frequent_flyer_miles, game_time_percent, ice_cream_liters, category]) print(df.head()) print(df.info())这里提一个新手很容易犯的错忘了检查有没有空值和异常值。像这种来自公开数据集的样本一般质量比较高但真实业务场景里一定会有缺失值。我在做项目时先跑了一条df.isnull().sum()确认三个特征列都没有空值才继续往下走。如果换成生产环境这一步绝不能省。特征切分很简单前三列是特征矩阵 data_X最后一列是标签向量 data_y。但切分之前必须先看特征之间的量纲差异——飞行里程数的单位是几万公里游戏时间是 0 到 100 的百分比冰淇淋是 0 到几之间的数字。这三个数值直接做减法游戏时间和冰淇淋的影响会被飞行里程完全淹没。2.2 归一化与标准化的选择原因KNN 计算距离时默认对每个特征一视同仁如果某个特征数值特别大会主导整个距离值的计算结果。像飞行里程数范围可以到 20000 以上而冰淇淋消耗量大多在 0 到 2 之间不处理的话算法的筛选结果基本只看飞行里程另外两个特征形同虚设。解决办法是特征缩放主流两种思路归一化Min-Max Scaling和标准化Z-Score Normalization。我做实验时把两种方式都跑了一遍结果差异没有想象中那么大但从实际调试角度我更推荐标准化因为它不依赖样本的最大最小值对离群点更稳健。标准化公式很简单new_value (value - mean) / std让每个特征变成均值为 0、方差为 1 的分布。from sklearn.preprocessing import StandardScaler scaler StandardScaler() normalized_X scaler.fit_transform(df.iloc[:, :3]) print(np.round(normalized_X.mean(axis0), 6)) # 均值约等于 0 print(np.round(normalized_X.std(axis0), 6)) # 标准差约等于 1跑完上面代码看到均值在 1e-16 级别、方差是 1.0 之后才说明数据进入了“各特征平等发言”的状态。这一步如果省略无论 K 怎么调准确率基本都锁死在 0.5 上下这个问题在判断分类结果时非常具有迷惑性。2.3 训练集与测试集划分为什么不能“先全量归一化再切分”这里必须单独说一个坑数据归一化的参数均值和标准差只能从训练集算出然后用同一套参数去处理测试集如果先把所有数据合并计算归一化参数再切分会造成信息泄漏。什么意思呢就是测试集的特征分布信息已经偷偷混进了训练过程里最终评估的准确率会虚高上线后效果会打回原形。我在项目中按 90:10 的比例划分训练集和测试集90% 用于 KNN 的“记忆库”10% 用于分类效果验证。Python 中可以直接用 sklearn 的 train_test_split它能保证切分时随机打乱样本顺序避免原本排在前面的样本类别过于集中。划完份数我顺手打印了训练集和测试集的类别比例确保 1、2、3 三类在两边都有足够数量这是后面算召回率的前提。from sklearn.model_selection import train_test_split X_train, X_test, y_train, y_test train_test_split( normalized_X, y, test_size0.1, random_state42, stratifyy )这里特意用了 stratify 参数按类别比例分层采样保证训练集测试集中的类别分布和原始数据一致。如果不用 stratify每次跑实验结果都会“随机抖动”测出来的指标波动很大不利于后面做多组对比实验。3. 从零实现 KNN 分类器与 sklearn 验证3.1 手写 KNN 分类器距离计算、排序与投票理解了原理和数据预处理下面进入真正硬核的部分不借助 sklearn纯粹用 Python 和 NumPy 手写一个 KNN 分类器。这么做不是为了重复造轮子而是为了让你清楚知道每个步骤背后发生了什么后面用 sklearn 时心里就有底了。手写分类器分为三个函数计算距离、按 K 个最近邻居投票、在测试集上批量预测。距离我采用的是最常用的欧式距离也就是多维空间里两点之间的直线距离。对于两个三维向量 a 和 b欧式距离是sqrt(sum((a_i - b_i) ^ 2))。直接用 NumPy 算的话就是对两列相减、平方、求和、开根号。def euclidean_distance(a, b): return np.sqrt(np.sum((a - b) ** 2)) def knn_predict(test_point, X_train, y_train, k): distances [] for i in range(len(X_train)): dist euclidean_distance(test_point, X_train[i]) distances.append((dist, y_train[i])) distances.sort(keylambda x: x[0]) neighbors distances[:k] votes {} for _, label in neighbors: votes[label] votes.get(label, 0) 1 return max(votes.items(), keylambda x: x[1])[0]投票这块要小心如果邻居里两类数量并列怎么办我在代码里没有处理平票情况直接让 Python 自带的 max 取了第一个最大值。但在实验阶段我特意统计过平票情况在这个数据集上出现得极少可以暂不考虑。更严谨的做法是为距离加权重让离得更近的样本投票权更大这其实就是带权 KNN后面会提到。3.2 批量预测与 sklearn 版本的对照实验手写版本的数据结构用 Python 列表存(距离, 标签)对数据量小没问题但样本量上万之后每次排序都是 O(n log n)性能扛不住。批量预测时我用了一层 for 循环遍历所有测试样本代码直观但能明显感到速度变慢。随后我用 sklearn 的 KNeighborsClassifier 做了同一套实验对照两边的预测结果应该是完全一致的这也是对手写实现的正确性验证。from sklearn.neighbors import KNeighborsClassifier knn KNeighborsClassifier(n_neighbors5, metriceuclidean) knn.fit(X_train, np.ravel(y_train)) predictions knn.predict(X_test)sklearn 版本的 fit 其实只做了“记住数据”这件事和手写版本的 X_train 存储没有本质区别但它的 predict 阶段用到了 KDTree 或 BallTree 做空间索引不适合拿来做性能比较两者在结果层面必须一致但性能差距是正常的。我建议初学者先把手写版本跑通再切到 sklearn 版本这样你就能理解为什么 sklearn 能这么快。3.3 距离度量对比欧氏距离、曼哈顿距离与余弦相似度KNN 中的“距离”不是唯一指定的。不同的距离公式会直接改变邻居的选择结果。我在实验中对比了三种常用度量距离度量计算公式二维示意特点欧氏距离sqrt((x1-y1)^2 (x2-y2)^2)最常用适合连续数值特征曼哈顿距离abs(x1-y1) abs(x2-y2)对离群点更稳健计算更快余弦相似度1 - cos(a,b)关注方向而非距离大小适合文本向量约会网站这个数据集的三个特征都是连续数值且都经过标准化处理欧氏距离的效果是最好的准确率明显高于曼哈顿距离。余弦相似度在这个场景表现不佳因为它的本质是忽略向量模长而飞行里程、游戏占比这些特征的“绝对值大小”本身就是用户分类的重要信号不能丢掉。选距离度量不是随便拍脑袋的它背后是特征空间的语义假设欧氏距离假设“各项差异独立叠加”曼哈顿距离假设“差异按各维度绝对值累积”余弦相似度假定“模长不重要”。如果以后你换到文本分类场景要优先考虑余弦相似度在数值型表格数据上欧氏距离是默认首选。4. K 值选择与多维度性能评估4.1 超参数 K 的实验设计从 1 到 15 逐格扫描K 是 KNN 里唯一需要人为设定的超参数它的选择直接影响分类边界光滑程度K 太小容易过拟合模型只认最近的那一两个样本对噪声敏感K 太大会把离得很远的样本也拉进来投票导致分类边界过于平滑错杀真实现律。为了找到这个数据集上的最优 K我做了一组“K 从 1 到 15”的逐格扫描实验每个 K 值都跑一遍标准化、训练、预测的全流程记录准确率变化。实验结果是很有启发性的K4 时错误率最低只有 3%K 从 1 到 4 错误率明显下降K 超过 5 之后错误率开始缓慢回升到 15 时大约在 6% 左右。这个“先降后升”的 U 型曲线是 K 选择问题的经典现象。K 太小分类器跟着单个样本跑容易误判K 太大引入的不相关样本越来越多边界被过度平均化错误率就反弹了。4.2 关键评估指标准确率不是唯一标准很多人跑完分类器只盯着准确率但准确率在这个场景里其实会掩盖很多问题。我这次重点补充了三个维度的评估——混淆矩阵、精确率与召回率、ROC 面积。约会网站分类是一个多分类问题直接套二分类的查准率查全率逻辑会有歧义所以需要用到一对多One-vs-Rest的策略每次把其中一个类当作正类其余类别当作负类分别计算指标再取平均。混淆矩阵是理解分类错误最直观的工具。我打印出 30 个测试样本的混淆矩阵后发现类别 2有一点兴趣被错分的概率明显更高它经常被误判成类别 3。原因是类别 2 和类别 3 在特征空间里的分布本来就有一部分重叠KNN 只能靠局部密度区分有边界样本进来就很容易站错队。如果只报一个准确率 96%根本看不出来这种边界混淆。from sklearn.metrics import confusion_matrix, classification_report print(confusion_matrix(y_test, predictions)) print(classification_report(y_test, predictions))classification_report 会输出每个类别的精确率、召回率、F1 值。我拿到的结果中类别 1 和类别 3 的召回率都在 95% 以上类别 2 只有 88% 左右。这说明类别 2 的“召回”能力偏弱有大约 12% 的真实类别 2 样本被系统误判到了别的类。如果业务希望不要漏掉任何一个“可能感兴趣”的人那就要针对类别 2 的召回率做专项优化比如调整分类阈值或者收集更多类别 2 的样本。4.3 误差来源分析与交叉验证稳定性检验只做一次 90/10 划分得到的结果说服力不够因为测试集只有 100 条运气成分很大。我随后用 5 折交叉验证把整个流程完整跑了一遍把 1000 条样本切分成 5 份每次取其中 1 份做测试、其余 4 份做训练循环 5 次取平均。这一步能有效检验模型在不同数据划分下是否稳定而不是“一次定生死”。交叉验证的结果显示 K5 时平均准确率约 96.4%5 折之间的方差很小模型稳定性很好。但如果我们在 4.1 节的自定义测试上已经看到 K4 更优那到底选 4 还是 5我的处理方法是在交叉验证里把 K 从 1 到 15 各测一遍记录每次的平均准确率而不是只看一次划分。最后 K5 是多数折下的最优解比较稳妥。K 值是奇数还有一个额外好处三分类虽然不存在二分类那种“1:1”平票但奇数 K 能减少部分边界情况的平票概率。4.4 多维度性能对比规模、时间与准确率三维观察性能评估不能只看分类精度还得看运行耗时。我在实验中分别统计了手写版本和 sklearn 版本在样本量 100、500、1000、2000 条时的预测耗时。手写版本在 100 条样本时预测 100 个测试点需要约 5 毫秒到 2000 条样本时涨到了接近 90 毫秒sklearn 版本在 2000 条时只需要约 2 毫秒。这个差距背后就是数据结构算法上的差异手写版本每次预测都要和全部训练样本算距离、排序sklearn 用 KDTree 提前建树把最近邻搜索从线性复杂度降到近似对数复杂度。样本量手写版预测耗时sklearn版预测耗时准确率1005ms0.4ms93%50022ms0.9ms95%100045ms1.1ms96%200090ms2.3ms95.8%从表格能看到一个有意思的现象准确率并没有随样本量增大而线性提升1000 条之后几乎进入平台期说明现有特征的信息量已经接近上限。想要继续提高准确率单纯加样本已经不够了得从特征工程和算法两个方向另想办法。5. 可视化分析、应用扩展与避坑总结5.1 特征分布与分类结果三维可视化三个特征刚好可以映射到三维空间用 matplotlib 的三维散点图把不同类别用不同颜色区分开视觉效果非常好。我画完这个图的第一个感受是类别 1 的样本明显聚集在飞行里程低、游戏时间高的区域而类别 3 的样本正好相反分布位置更分散。这说明 KNN 的分类结果之所以准确是因为“相似兴趣的人真的很相似地聚类”了这个基本假设成立。散点图里面也能看到边界样本就是那种落在两个聚类重叠区的点。这些点在测试时最容易分类错误也是混淆矩阵里那 3%-4% 错误的集中来源。在做业务决策时可以把这类低置信度样本单独拎出来交给人工审核而不是直接一刀切输出分类结果。三维可视化代码需要注意坐标轴的显示范围。如果直接画原始数据飞行里程数从几千到两万游戏时间 0 到 100三维坐标会被拉伸得很厉害看不出来聚类形状。建议先用标准化后的特征再画图或者对原始特征做比例缩放到相近范围。5.2 从“约会分类”到通用推荐分类的迁移思路做完这个项目如果只是停留在“我把一个公开数据集跑出 96% 准确率”就太可惜了。这套 KNN 分类流程真正值钱的是它可以迁移到很多相似场景电商平台上根据用户浏览、购买行为判断其偏好类别房产网站根据户型、位置、价格区间预测购房者意向内容社区根据文章标签、阅读时长预测用户兴趣分组。它们的共同特点都是特征位数不多、数据量在几千到几万级别、类别之间有相似偏好聚类。迁移时最关键的一步是特征设计。约会网站项目的三个特征虽然“随意”但它们相互独立且都有类别区分度。换一个场景时也要找到类似那种“不相关但能区分”的特征组合然后用同样的流程去测准确率、召回率和交叉验证稳定性。只要这个流程标准化任何项目的快速效果评估都能缩短到半天以内。5.3 常见问题与排查技巧实录这一节把我实际开发过程中遇到的典型问题和排查思路整理成速查表每一个都是踩过的坑问题现象可能原因处理方法准确率始终在 50% 左右未做特征标准化大尺度特征主导距离对所有数值特征做 StandardScaler不同运行次数准确率波动大随机划分训练集时没有固定随机种子设置 random_state 并使用 stratify 分层采样K1 时准确率反而高但有隐患过拟合测试样本碰巧和近邻同分布用交叉验证观察平均效果不要只看单次类别 2 的召回率明显偏低特征空间上类别重叠度高补充边界样本或改用带权 KNN样本量增大后速度急剧下降手写实现每次预测都全量计算距离换 sklearn KDTree 实现或对样本聚类剪枝还有一个我之前在代码里踩过的雷标签数据 y 在读取后是整数类型但在分类报告里如果不转成字符串某些绘图库会把它当成连续色阶导致散点图颜色一片混乱。所以建议统一y y.astype(int)并显式转成字符串标签再可视化。5.4 KNN 的改进方向带权投票与数据剪枝如果还想进一步优化这个项目不要停留在调 K 的阶段。KNN 有三个明显可改进的方向带权投票、特征加权、数据剪枝。带权投票的意思是K 个邻居投票时离测试点更近的样本投出的票权重更大权重可以取距离的倒数。这能有效解决“邻居里有几个靠得很近、几个隔得很远”这种情况避免远处样本和近处样本话语权一样大。实测时带权投票能让边界处的误判减少约 1 个百分点。特征加权则是给每个特征乘一个系数比如飞行里程对分类贡献大就给它一个更大的权重。这可以通过交叉验证搜索最优特征权重等价于把 KNN 扩展成一种带学习能力的“度量学习”算法。数据剪枝的思路更粗犷去掉那些常年“站错队”的边界样本或者用聚类中心替换部分冗余样本减少预测时的距离计算量。在 1000 条样本上剪枝收益不明显但放到 10 万条样本时剪枝能把内存和预测耗时降低一个数量级。我个人在实际操作中的体会是KNN 是一个被很多人低估的“基线模型”。它虽然简单但你把数据标准化、K 值扫描、多维度评估、可视化这一套完整跑下来对机器学习流程的体感会比直接调用 XGBoost 大得多。特别是“特征分布”和“混淆矩阵”这两个视角能帮你快速判断一个数据集到底能不能做分类问题出在特征上还是边界上。以后你再接手任何分类项目先拿 KNN 试一遍往往就能少走很多弯路。最后再分享一个小技巧做这种多特征分类时别只盯着最终的准确率数字把每个 K 值下的错误率变化曲线和三类各自的召回率记录到一份小表格里以后要写实验报告或者上线评审你拿出来的都是结构化数据说服力完全不一样。

相关新闻

仓颉 stdx.crypto.keys 密钥包全解析:RSA / ECDSA / SM2 密钥生成、签名验签与 PEM / DER 编解码实战

仓颉 stdx.crypto.keys 密钥包全解析:RSA / ECDSA / SM2 密钥生成、签名验签与 PEM / DER 编解码实战

标准库网络密码学并发编程 【免费下载链接】cangjie_stdx 仓颉编程语言提供了 stdx 模块,该模块提供了网络、安全等领域的通用能力。 项目地址: https://gitcode.com/Cangjie/cangjie_stdx 点击查看 免费下载 stdx.crypto.keys 是仓颉标准库扩展&#x…

2026/10/14 2:58:30 阅读更多 →
FTP文件的上传

FTP文件的上传

1.获取FTP主机地址、端口、账号、密码 2. 打开FTP客户端,填入信息,点击连接 3.在本地电脑中,找到你网页文件打开目标存放文件夹 4.选中本地文件,点击到右侧远程目录,开始上传 5.底部查看传输进度 6.上传结束&#xff…

2026/10/14 2:58:30 阅读更多 →
Linux下用nvm管理Node版本:安装、切换与避坑指南

Linux下用nvm管理Node版本:安装、切换与避坑指南

先说个现象:很多人在Linux上装Node时都吃过大亏。要么用系统源装了个老旧版本,几年都升不上去;要么手动解压二进制包,最后整个系统里散落着两三个互相打架的node;还有干脆每次需要换版本就重新下载安装,折腾…

2026/10/14 2:57:30 阅读更多 →

最新新闻

一张图微调YOLOv11:自然栖息地鸟类检测的流程与扩充

一张图微调YOLOv11:自然栖息地鸟类检测的流程与扩充

简介:面向 YOLOv11 模型验证需求,这份精简版鸟类目标检测数据集包含一张真实野外鸟类图像及配套标准标注,可用于快速原型验证、轻量级部署测试与小样本检测基线建立。压缩包共五个文件,包含三张 JPG 图像、一个数据配置文件与一个…

2026/10/14 3:39:38 阅读更多 →
ASP.NET + SQLServer葡萄酒商城源码:从数据库还原到下单事务全攻略

ASP.NET + SQLServer葡萄酒商城源码:从数据库还原到下单事务全攻略

简介:一套基于ASP.NET与SQL Server的葡萄酒网上商城销售系统,面向ASP.NET WebForm学习者、毕业设计学生以及需要搭建在线商城教学演示的开发者。系统围绕普通会员、商户会员和管理员三类角色展开,覆盖商品管理、购物车、订单处理、发货、商户…

2026/10/14 3:39:38 阅读更多 →
LangChain项目代码拆解:Chain、Agent、Memory与Retrieval四大核心组件实战指南

LangChain项目代码拆解:Chain、Agent、Memory与Retrieval四大核心组件实战指南

简介:这是一份LangChain入门与实践的项目代码包,面向正在学习大模型应用开发的Python开发者,旨在帮助读者快速理解LangChain的模块化设计与核心用法。包内共3个文件,包含一个HTML格式的入门讲解页、一个项目运行配置文件以及一个版…

2026/10/14 3:39:38 阅读更多 →
C++学习日记 Day21:C++11(下)lambda表达式和function包装器

C++学习日记 Day21:C++11(下)lambda表达式和function包装器

## 今天学了什么今天学习C11的lambda表达式和function包装器。## 可调用对象概念:在C中有一类对象可像函数一样调用;分类:①函数指针using prt void(*)(int, string); prt f1 fun; f1(1, "函数指针");②仿函数 --有 operator&am…

2026/10/14 3:39:38 阅读更多 →
一人公司AI工作流:6步实现内容生产去体力化

一人公司AI工作流:6步实现内容生产去体力化

1. 一人公司的内容困局与破局思路一个人做内容,最怕的不是没灵感,而是灵感来了却卡在“执行”上。写一篇长文要三小时,做一张配图要半小时,剪一条短视频要一整个下午,排版发布又要来回切换四五个平台。一天下来&#x…

2026/10/14 3:39:38 阅读更多 →
8765平台前后摄DVDD电压不一致排查与修复指南

8765平台前后摄DVDD电压不一致排查与修复指南

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

2026/10/14 3:38:38 阅读更多 →

日新闻

AnyPS5通用适配层设计:兼容性与性能的工程取舍

AnyPS5通用适配层设计:兼容性与性能的工程取舍

1. 从"AnyPS5"这个名字说起:它到底想解决什么问题第一次看到"AnyPS5"这个标题,我脑子里冒出来的第一个念头是:这大概率是一个围绕"跨平台运行"或者"通用适配"做文章的项目。名字里的"Any"…

2026/10/14 0:00:41 阅读更多 →
Flutter跨平台开发实战:二手交易应用与HarmonyOS适配

Flutter跨平台开发实战:二手交易应用与HarmonyOS适配

1. 项目概述:Flutter跨平台二手交易应用开发作为一名长期从事移动应用开发的工程师,我最近完成了一个基于Flutter框架的二手物品交易平台项目。这个项目最吸引我的地方在于它完美结合了Flutter的跨平台优势与HarmonyOS的生态特性,实现了"…

2026/10/14 0:00:41 阅读更多 →
DFS算法解决飞机降落调度问题实战

DFS算法解决飞机降落调度问题实战

1. 项目背景与核心思路飞机降落问题是一个经典的调度优化场景,也是算法竞赛和面试中的高频题目。这个题目要求我们合理安排多架飞机的降落顺序和时间,确保所有飞机都能安全着陆而不发生冲突。在实际航空管制中,这类问题直接关系到飞行安全和机…

2026/10/14 0:00:41 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/14 3:30:28 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/13 16:22:04 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/14 3:29:58 阅读更多 →

月新闻

我发现了一个新思路:用 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/13 22:01:27 阅读更多 →
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/13 14:57:39 阅读更多 →
黑夜航拍船只数据集训练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/12 18:11:17 阅读更多 →