KNN算法实战拆解:从约会数据分类到模型评估的完整流程
提起KNN很多人第一反应就是“机器学习最简单的算法”没有之一。这次我要拆的案例是经典的约会数据分类根据一个人每年飞行的里程、玩游戏时间占总时间的百分比、每周吃掉的冰淇淋公升数去判断对方在约会对象眼中属于“完全不感兴趣”、“魅力一般”还是“极具魅力”。听起来有点无厘头但它特别适合拿来验证KNN算法的完整落地流程——从原始文本数据到特征可视化、归一化、K值选参、模型评估每一步都有实打实的细节。这篇文章我按自己实战的思路来写如果你也想把KNN吃透建议跟着代码跑一遍。1. 项目概览约会数据分类的核心难题与KNN选型1.1 数据集到底长什么样这个数据集是公开机器学习教程中非常经典的实验对象总共1000条记录。每条记录包含4个字段前三个是特征最后一个是标签。具体见表格字段含义数值范围每年飞行常客里程数反映出差/旅行频率0 ~ 20,000玩游戏时间占比每天玩游戏时间占总时间的百分比0~1每周冰淇淋消耗量每周吃的冰淇淋公升数0~0.6左右好感度标签分类目标不喜欢/魅力一般/极具魅力这类数据通常存在txt文件里没有表头列之间用Tab分隔。读进来之后要自己命名。为什么要选这个案例因为数据规模小、维度低KNN不需要太多调参很快能看到效果也可以直观理解特征、距离和分类边界的关系。第一次看到这个数据集时我其实有一点惊讶飞行里程和冰淇淋消耗量放在一起怎么看都很奇怪。但恰恰是这种“不像严肃业务数据”的案例更适合用来学算法——它不涉及太复杂的业务背景能把注意力全部集中在机器学习流程本身。1.2 为什么选KNN而不是别的算法KNN的原理可以概括成一句话一个样本的类别由距离它最近的K个已知样本投票决定。这正好符合“近朱者赤近墨者黑”的经验直觉。代码实现也不复杂算距离、排序、取前K个、投票。但背后有个很关键的点KNN是“惰性学习”它没有传统意义上的训练过程只是把样本存起来所有计算都发生在预测那一刻。所以它特别适合解释和快速验证对新数据进行分类时效果也不错假如数据本身有清晰的局部聚集结构。相比逻辑回归、决策树这些方案KNN不需要假设数据服从特定分布也没有线性边界限制可以处理非常不规则的决策边界。当然它也有短板维度高了会失效、预测速度慢、对量纲和噪声敏感。所以我更倾向于把它当作机器学习入门的第一站而不是万物皆可KNN。选择这个约会数据案例恰好可以把优点和缺点都充分暴露出来。我还想多说一句很多人一上来就直接用逻辑回归或者随机森林觉得KNN太“简单”。但真实业务场景里如果数据量不大、维度不高KNN作为基线模型反而很合适。它能快速告诉你在当前特征下能不能用局部相似性把类别分开。如果KNN都分不开换复杂模型大概率也提升有限。1.3 项目路线拆解我建议按下面这条线来做每一步都会有自己的产出读取数据并检查完整性确认没有缺失值、类型符号正常。描述统计分析看每个特征的均值、范围、分布情况。可视化分析用散点图观察类别之间的分离程度。数据预处理把字符串标签转成数值并对连续特征做归一化。划分训练测试集固定随机种子保持可复现。训练KNN分类器先自己手写再用框架验证。评估与调优用交叉验证选择K值比较准确率。这段路线可以避免一上来就陷入调参。很多人拿到数据直接扔进sklearn发现结果还行但完全不理解发生了什么。我更喜欢先搞清楚“边界长什么样”再决定用多复杂的模型。哪怕最后发现K3最好你也知道这个3到底是怎么试出来的。2. 数据准备与探索把原始数据变成可用的特征矩阵2.1 读取与基础检查假设原始文件名是dating.txt读取代码如下import pandas as pd import numpy as np cols [miles_per_year, game_percent, ice_cream, label] df pd.read_csv(dating.txt, sep\t, headerNone, namescols) print(df.shape) print(df.info()) print(df.head()) print(df[label].value_counts())读取的时候注意三点sep必须是\t不是逗号headerNone表示原文件没有表头namescols手动指定列名否则后面很容易分不清特征。跑完代码你会得到一个(1000,4)的数据框标签列是字符串。检查value_counts假如某一类数量特别少后面要小心评估结果。特征数值范围差异非常大miles_per_year可能是几千甚至几万game_percent却是0到1的小数ice_cream通常也不到1。这种量纲差异会让接下来的距离计算失真所以归一化是必做动作。读取这一步往往被当成“理所当然”但我见过不少人因为sep写错导致整列都是NaN或者因为没设置header把第一行当成了数据。花两分钟检查shape、info、head至少能省下后面两小时的排错时间。尤其是info()里的non-null count如果发现不是1000就要立刻回头查原始文件而不是硬着头皮往下走。2.2 可视化探索哪几个特征真正有用我习惯先用散点图看不同标签在特征空间里的位置。比如绘制“飞行里程-游戏占比”这张图按标签着色。你会发现大多数“不喜欢”的样本集中在游戏占比高、飞行里程低的区域“极具魅力”的样本则更偏向右上区域但会有不少重叠。这就是KNN能够work的基础同类样本在特征空间里聚集。import matplotlib.pyplot as plt colors {不喜欢:red, 魅力一般:orange, 极具魅力:green} for lab, group in df.groupby(label): plt.scatter(group[miles_per_year], group[game_percent], labellab, colorcolors[lab], alpha0.6) plt.xlabel(miles_per_year) plt.ylabel(game_percent) plt.legend() plt.show()在这个阶段不要只顾着看着“好看”。我非常推荐做一次两两特征组合遍历找到分离度最高的特征对。经验是可视化阶段发现的规律后面建模时往往会复现。如果某些特征在图上完全和类别无关后期可以考虑删除。约会数据里每个特征都有一定讨论空间但“ice_cream”的区分度通常较弱这也是正常的。可视化里还有一个容易忽略的点样本重叠严重的地方往往是KNN最难判断的区域。如果你在图上看到某两类边界很模糊那就别指望换一个K值就能完全解决你需要接受“误分类一定存在”的现实。后续评估准确率时心里也会更有数。2.3 归一化为什么非做不可先看一个细节假设两个样本在game_percent上只相差0.01但miles_per_year可能相差2000。计算欧氏距离时(2000)^2会直接把(0.01)^2淹没等于游戏占比这个特征完全没参与分类。这不是算法的问题是量纲的问题。归一化的目的就是让每个特征在距离计算里有公平的发言权。我这里用最常用的MinMax归一化公式x_norm (x - x_min) / (x_max - x_min)结果全部落在0~1。实现很简单def minmax_normalize(df): return (df - df.min()) / (df.max() - df.min())注意这个公式是直接对DataFrame做会忽略字符串列。更好的做法是先把特征和标签分开只对特征矩阵做归一化。后面放到流水线里用sklearn的MinMaxScaler会更加稳妥因为它可以fit/transform分离避免数据泄漏。量纲问题处理完之后所有特征的数值范围一致再做KNN才是有意义的。如果跳过归一化你只会得到一版被“大头兵”带偏的结果。我在给朋友讲这个案例时经常打个比方三把尺子量同一个人一把用毫米一把用米一把用公里算出来的“差距”当然被最大刻度那把尺子控制。归一化就是先把三把尺子换算成同一刻度。3. KNN分类器搭建从零手写到框架调用3.1 KNN的核心机制KNN整个算法只有三步计算待预测样本与所有训练样本之间的距离按照距离从小到大排序取前K个样本统计类别出现次数把次数最多的类作为预测结果。距离计算最常用欧氏距离也就是多维空间里的直线距离。假设待测样本x(x1,x2,x3)训练样本y(y1,y2,y3)欧氏距离为sqrt((x1-y1)^2 (x2-y2)^2 (x3-y3)^2)当特征连续、量纲一致时欧氏距离基本够用。如果数据集维度很高欧氏距离的区分能力会下降这时候才需要考虑其他度量或者先降维。这个算法的名字其实暴露了它的特性决定分类的是最近的k个“邻居”。K是一个需要你人为设定的超参数不像斜率、截距那样能自动学出来。因此K值选择必须通过实验验证这也正是后面调优的重点。3.2 从零手写一个可用的KNN虽然sklearn一行就能调用我还是建议动手写一遍否则很难真正理解距离和投票。代码很短import numpy as np from collections import Counter def knn_classify(in_x, data_matrix, labels, k): diff data_matrix - in_x # 广播机制每一行减预测样本 sq_diff diff ** 2 distances sq_diff.sum(axis1) ** 0.5 sorted_idx np.argsort(distances) # 从小到大排序取索引 k_labels labels[sorted_idx[:k]] vote Counter(k_labels) return vote.most_common(1)[0][0]解释几点data_matrix是训练特征矩阵每一行一个样例in_x必须是一维数组且列数一致np.argsort返回的是索引而不是值这样可以直接拿索引去labels里取标签Counter统计票数most_common(1)取最高票数那个键。我测试时习惯先手动挑两个样本来试比如拿已知标签是“极具魅力”的样本丢进去看K3时能不能预测对。这一步能很快暴露代码bug。需要注意的是如果两类票数一样K会直接影响结果你可以设成奇数或者用一个特殊逻辑打破平局否则模型有随机性。手写版本的最大意义不是让你重复造轮子而是让你出了问题知道去查哪里。比如分类不准时你至少能判断是距离计算、排序、还是投票环节出了问题而不是把锅全甩给“算法不行”。3.3 用scikit-learn快速实现手写是用来理解原理的真正做项目我建议大家切换到工具。scikit-learn里的KNeighborsClassifier支持KD树或者球树在数据量大时能少做很多冗余计算。基础用法from sklearn.model_selection import train_test_split from sklearn.preprocessing import MinMaxScaler from sklearn.neighbors import KNeighborsClassifier features df[[miles_per_year, game_percent, ice_cream]].values labels df[label].values # 这里先划分再归一化防止信息泄漏 X_train, X_test, y_train, y_test train_test_split( features, labels, test_size0.2, random_state42, stratifylabels) scaler MinMaxScaler() X_train scaler.fit_transform(X_train) X_test scaler.transform(X_test) model KNeighborsClassifier(n_neighbors3) model.fit(X_train, y_train) accuracy model.score(X_test, y_test) print(f准确率: {accuracy:.3f})这段代码里最容易被坑的就是归一化位置。正确的顺序是先分训练集和测试集再用训练集去fit scaler最后transform测试集。测试集就像一个“从未见过的新数据”你不能让它参与计算min和max否则等于提前偷看到了未来数据导致评估结果虚高。这个问题在真实项目里非常常见后面我会专门讲。如果你的标签是字符串KNeighborsClassifier本身能自动处理吗实际上sklearn的分类器一般支持字符串目标底层会自动编码但如果我们后面要做交叉验证或者查看混淆矩阵还是建议手动把标签转成整数这样更可控。4. 模型评估与优化准确率、K值与交叉验证4.1 怎么评估模型更可靠单次训练测试划分的准确率有很强的随机性尤其样本量只有1000条时测试集里多几个难样本结果就波动几个百分点。所以我通常会用两种方式互相印证固定随机种子每次跑同一份划分测试集观察单次准确率再做K折交叉验证得到多个fold的平均值和标准差。sklearn里可以直接调用cross_val_scorefrom sklearn.model_selection import cross_val_score model_k3 KNeighborsClassifier(n_neighbors3) scores cross_val_score(model_k3, X_train, y_train, cv5) print(f交叉验证准确率: {scores.mean():.3f} ± {scores.std():.3f})如果均值比单次准确率低很多说明当前划分可能有点“偏心”如果标准差很大说明模型在部分fold上不太稳定。这里有个很实用的判断标准不要只盯着最高分要看分布。交叉验证不是“锦上添花”而是防止你被单次随机种子骗了。我自己就经历过random_state42跑出92%准确率换个种子立刻跌到80%的情况。对这类小数据集一次实验的结论完全没有说服力。只有多组实验的平均值才值得写进报告里。4.2 K值取舍K过小容易过拟合K过大则欠拟合K1时模型只根据最近的一个样本做判断训练集上几乎零误差但遇到测试集里的边界样本会非常脆弱这就是过拟合。K设置成整个训练集大小模型会把多数类当作所有人测试集上准确率被类先验牵着走这就是欠拟合。所以K要取一个折中值。一个最简单的方法是自己画出K-准确率曲线k_values range(1, 21) cv_scores [] for k in k_values: model KNeighborsClassifier(n_neighborsk) score cross_val_score(model, X_train, y_train, cv5).mean() cv_scores.append(score) import matplotlib.pyplot as plt plt.plot(k_values, cv_scores, markero) plt.xlabel(K) plt.ylabel(CV accuracy) plt.show()最佳K不一定是曲线最高点还要考虑曲线平滑性。比如我实测这个案例时K在3~7之间准确率都不错K3最常见但K5有时候更稳定。你可以结合业务需要选择如果误分类代价大就选稍微大一点的K来平滑噪声如果希望抓住局部模式可以用小K。这里要特别提醒不要因为K3在这一轮交叉验证里分数最高就固执地认为K3一定是全局最优。换个测试集K5可能反而更好。选K的原则是“在较高准确率区间里选更稳定的”而不是追求小数点后一位的领先。4.3 加权投票与更细致的优化KNN还有一个很容易被忽略的升级版当K变大以后远处的邻居可能和近处的一样权重这就稀释了局部信息。可以用距离倒数作为权重让近处的样本意见更重要。scikit-learn一行参数搞定model KNeighborsClassifier(n_neighbors7, weightsdistance)weightsdistance表示在每个邻居投票时权重是距离的倒数距离越远权重越小。这个技巧在某些数据集上能把准确率提升一两个点而且几乎不需要额外成本。除了K值和权重还可以考虑特征选择把区分度较低的ice_cream特征去掉仅用更强特征降维把三维降到二维可视化但注意降维会影响KNN的距离含义距离度量尝试曼哈顿距离或余弦相似度。我的经验是对这类低维小数据特征工程和归一化带来的提升远比换一个复杂算法更大。先把基础做扎实再调超参。5. 实操避坑那些文档不会写的细节与经验5.1 测试集不能用训练集的归一化参数这是最典型的数据泄漏。我见过很多人直接对整个特征矩阵做MinMaxScaler再切分训练测试集这样看起来没问题实际上测试集的min和max已经被模型“看到”了。正确做法前面已经提到先切分再用训练集的scaler去转换测试集。代码上就是先fit(X_train)再transform(X_test)。一定要养成“先切分、后转换”的习惯。注意千万不要对全量数据一次性归一化之后再切分否则测试集信息已经泄漏到训练过程中评估结果会虚高。这个习惯不仅对KNN有效对SVM、逻辑回归、神经网络全都适用。只要是基于距离或者梯度的算法数据泄漏都会让你对模型的判断乐观过头。我甚至见过某人把归一化做在切分之前然后自信地跟同事说“准确率95%”模型上线后直接被打脸。问题不在算法在流程。5.2 标签编码的顺序要一致如果手动用LabelEncoder或factorize把“不喜欢/魅力一般/极具魅力”转成0/1/2要注意类别编码在整个流程里保持一致。比如你用在训练集上编码测试集也要用同一个编码器去转换不能重新fit。如果直接使用sklearn的KNeighborsClassifier模型内部会自动处理字符串但你在打印混淆矩阵时还是需要编号映射关系。建议的做法from sklearn.preprocessing import LabelEncoder encoder LabelEncoder() y_all encoder.fit_transform(df[label]) # 再切分... # 预测后如果要回看原始标签用 encoder.inverse_transform(y_pred)很多人会忽略inverse_transform这一步直接打印预测值0、1、2完全不知道对应哪个类别。真拿模型去真实场景里用的时候会发现解释能力非常差。建议在项目一开始就保留好“编码器”和“原始标签的映射表”后续所有结果展示都映射回中文标签。5.3 对小数据集多说两句约会数据只有1000条在机器学习领域算很小的规模。这种数据训练KNN时随机种子对结果影响很大比如random_state42得到85%准确率random_state2024可能是80%。所以报告结果时不要只报一次要报多组实验的平均和标准差。另外如果标签分布不均衡使用stratify参数切分让训练集和测试集保持同样的类别比例。我在实操中还发现KNN预测时每次都要遍历全部训练样本。数据量小的例子感知不到但一旦特征维度和样本规模上去查询会明显变慢。如果后续遇到十万级数据可以打开algorithmkd_tree或ball_tree预测前先建索引会快很多。这个案例还有一层更深的意义它让我意识到模型评估里最稀缺的不是代码而是对不确定性保持敏感。样本量越小偶然因素越多。KNN是一个“懒惰”算法但它对数据的依赖反而是最重的——模型本身没有从训练中提炼出压缩规律所有判断都要靠原始样本撑住。所以数据质量、特征范围、类别分布每一样都会直接改变结果。5.4 最后再分享一个小技巧把上面所有步骤封装成一个pipeline用GridSearchCV一次性搜索K值和权重策略。虽然约会数据比较小但这个过程能锻炼你对模型流程的整体把控from sklearn.pipeline import Pipeline from sklearn.model_selection import GridSearchCV pipe Pipeline([ (scaler, MinMaxScaler()), (knn, KNeighborsClassifier()) ]) params {knn__n_neighbors: range(1, 21), knn__weights: [uniform, distance]} grid GridSearchCV(pipe, params, cv5) grid.fit(X_train, y_train) print(grid.best_params_) print(grid.best_score_)这样归一化、训练、搜索都放在同一个流程里不会出现“训练集和测试集用不同scaler”这种低级事故。以后换数据集这段代码也可以直接复用。我自己在跑KNN时有个习惯不管数据多简单都先把可视化、归一化、交叉验证这套流水线完整过一遍。它不复杂但每一步都在帮助我理解数据边界理解数据边界之后再看模型结果心里才有底。KNN只是一个起点可它把这些基础环节暴露得很彻底值得花时间认真啃一啃。

相关新闻

UE5 Nanite渲染全解读:从虚拟化几何到高模生产落地的完整指南

UE5 Nanite渲染全解读:从虚拟化几何到高模生产落地的完整指南

把一台2000万三角面的扫描车模型拖进UE5关卡视口的瞬间,我其实做好了编辑器卡死的心理准备。结果它没有崩,视口转动顺滑,帧时间也没有出现离谱的尖刺。这个反差让我后来花了很长时间去研究UE5 Nanite渲染流程,不是把它当成一个“自…

2026/10/18 2:57:05 阅读更多 →
Unity移动端Mod系统实战:JSON、AssetBundle与反射注入

Unity移动端Mod系统实战:JSON、AssetBundle与反射注入

1. 为什么要在Unity里自己造一个Mod轮子移动端游戏做Mod系统,很多人第一反应是"这玩意儿不是PC端才玩得转吗"。我一开始也这么想,直到有个项目需要在安卓和iOS上让玩家替换角色皮肤、加载自定义关卡数据,才发现市面上现成的方案要么…

2026/10/18 2:57:05 阅读更多 →
HTML程序员表白网页源码:纯前端交互式页面开发与部署指南

HTML程序员表白网页源码:纯前端交互式页面开发与部署指南

1. 一个前端人的浪漫:从标题拆解这个项目的真实需求“html程序员表白前端网页源码”这个标题,第一次看到的时候我笑了——又是一个被技术耽误的浪漫选手。但笑完之后仔细想想,这个标题其实精准地戳中了一个非常具体的需求场景:一个…

2026/10/18 2:57:05 阅读更多 →

最新新闻

YOLOv5+PyQt行人车辆检测计数系统:从COCO训练到桌面部署全解析

YOLOv5+PyQt行人车辆检测计数系统:从COCO训练到桌面部署全解析

做目标检测的人应该都有一个同感:把YOLOv5跑通不难,训练一个能识别行人和车辆的自定义模型也不难,难的是把这两件事和一套像样的桌面端界面打包成一个能给别人演示、能实际点按钮操作的产物。这个项目标题包含的要素很明确——YOLOv5检测系统…

2026/10/18 3:40:20 阅读更多 →
用PHP GD库打造电子签章生成类:圆环、星型与弧线文字的实现

用PHP GD库打造电子签章生成类:圆环、星型与弧线文字的实现

简介:这是一份面向 PHP 开发者的电子印章生成类资源,专注解决 Web 应用中的圆形印章绘制、五角星摆放、文字旋转等常见需求。基于 GD 库实现,适合需要自动生成企业公章、合同签章或个性印章的中级 PHP 工程师参考,示例完整可直接套…

2026/10/18 3:40:20 阅读更多 →
Win32 GDI绘制实战:从设备上下文到双缓冲,彻底告别界面闪烁

Win32 GDI绘制实战:从设备上下文到双缓冲,彻底告别界面闪烁

Win32 GDI绘制这话题,放现在看好像有点老古董,但实际做桌面工具、工业上位机界面、自绘控件的时候,你绕不开它。很多时候产品经理甩过来一个需求:要一个实时曲线图、要一个不闪烁的自定义列表、要一个能局部刷新的仪表盘。你用框架…

2026/10/18 3:40:20 阅读更多 →
IO密集型接口的CompletableFuture线程池优化实战

IO密集型接口的CompletableFuture线程池优化实战

1. 项目概述:为什么一个IO密集型接口值得为它重写线程模型CompletableFuture不是新东西,但真正把它用对、用稳、用出吞吐量的人,远比你想象中少。我见过太多团队把“用了异步”当成性能优化的终点——接口加了supplyAsync,返回值套…

2026/10/18 3:40:19 阅读更多 →
C++代码重构实战指南:从可维护性到性能优化

C++代码重构实战指南:从可维护性到性能优化

1. 先弄清楚:什么样的C代码真正需要重构先说个大概率能引起共鸣的场景。你刚接手一个“历史悠久”的C服务端模块,编译能过,测试也能跑,可一旦动需求,就像拆一个老房子:不敢敲承重墙,不知道哪根线…

2026/10/18 3:40:19 阅读更多 →
从DHCP到网卡丢包:一文讲透网络通信全链路排查

从DHCP到网卡丢包:一文讲透网络通信全链路排查

为什么你连网卡丢包都要查?先把这条链路彻底讲透有一次我在机房排查一个“间歇性卡顿”的问题,ping网关延迟一会儿正常一会儿飙到几百毫秒,最后发现根因居然出在网卡的环形缓冲区被流量打满、内核来不及收包。当时我就在想:很多人…

2026/10/18 3:39:19 阅读更多 →

日新闻

基于GMM的语音识别系统原理与MATLAB实现详解

基于GMM的语音识别系统原理与MATLAB实现详解

说到基于高斯混合模型(GMM)的语音识别系统,很多人第一反应就是一堆数学公式,觉得门槛很高。但如果你真的在MATLAB里把它落地跑通,会发现核心其实就是三件事:把声音变成特征向量,用GMM给每个类别…

2026/10/18 0:00:55 阅读更多 →
数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理这四个字听起来挺唬人,但落到具体操作上,无非就是让计算机按你的想法“摆弄”像素。我在一个模拟项目X里用了一套特别经典的基础处理流程:对图像做反白、改调色板、彩色转灰度,最后把像素数据导出成txt文件。单看每一…

2026/10/18 0:00:55 阅读更多 →
机器人大脑技术盘点:具身智能的感知、决策与数据闭环

机器人大脑技术盘点:具身智能的感知、决策与数据闭环

如果你的信息流最近也天天刷到“机器人大脑”这个词,你会发现一个很有意思的现象:每个人说的“大脑”根本不是同一个东西。有人指的是大语言模型,有人指的是运动控制系统,还有人指的是能理解物理世界的端到端模型。在2026年这个时…

2026/10/18 0:00:55 阅读更多 →

周新闻

基于GMM的语音识别系统原理与MATLAB实现详解

基于GMM的语音识别系统原理与MATLAB实现详解

说到基于高斯混合模型(GMM)的语音识别系统,很多人第一反应就是一堆数学公式,觉得门槛很高。但如果你真的在MATLAB里把它落地跑通,会发现核心其实就是三件事:把声音变成特征向量,用GMM给每个类别…

2026/10/18 0:00:55 阅读更多 →
数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理这四个字听起来挺唬人,但落到具体操作上,无非就是让计算机按你的想法“摆弄”像素。我在一个模拟项目X里用了一套特别经典的基础处理流程:对图像做反白、改调色板、彩色转灰度,最后把像素数据导出成txt文件。单看每一…

2026/10/18 0:00:55 阅读更多 →
机器人大脑技术盘点:具身智能的感知、决策与数据闭环

机器人大脑技术盘点:具身智能的感知、决策与数据闭环

如果你的信息流最近也天天刷到“机器人大脑”这个词,你会发现一个很有意思的现象:每个人说的“大脑”根本不是同一个东西。有人指的是大语言模型,有人指的是运动控制系统,还有人指的是能理解物理世界的端到端模型。在2026年这个时…

2026/10/18 0:00:55 阅读更多 →

月新闻

我发现了一个新思路:用 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/18 0:55:02 阅读更多 →
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/17 17:22:31 阅读更多 →
黑夜航拍船只数据集训练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/16 14:23:36 阅读更多 →