kmodes实战:用Python搞定分类数据聚类

简介:kmodes开源库的完整Python实现,提供k-Modes与k-Prototypes两种聚类算法,专用于处理纯分类变量及数值/分类混合数据。面向数据分析、机器学习开发者,解决传统k-means对非数值特征无法直接聚类的痛点。压缩包共30个文件,包含20个Python源码、2个Markdown说明、2个CSV示例数据及测试、配置等文件,整体仅36KB,轻量易部署。源码中不仅封装了KModes类和fit_predict/fit接口,还附带iris、soybean、stocks等多个示例脚本,并内置单元测试目录,便于读者理解算法细节并验证效果;同时提供README、持续集成等元文件,方便二次开发与学习。已有2008人学习下载,适合希望掌握分类数据聚类原理并在实际项目中快速调用的中高级Python工程师;无论是学术研究还是业务分群,都能直接参考实现细节。

1. 入门先搞懂一件事:聚类分类数据到底难在哪

提到聚类,很多人的第一反应是 k-means——给一堆数字找中心、算距离、分堆。可一旦遇到只有“颜色”“产地”“口感”这种分类数据的数据集,k-means 就彻底没了用武之地。kmodes 就是专门为这类场景设计的 Python 库,里面实现了两个算法:k 模式和 k 原型,前者只处理分类数据,后者能同时处理数值和分类混合的数据。对于刚接触聚类的你来说,这个库最大的价值是:不用自己写算法,只要把数据整理好,几行代码就能把样本分成有意义的几堆。这篇文章会带你搞懂它到底是什么、为什么值得学,并跑通第一个能运行的例子。

2. 先理解两个核心概念:众数和汉明距离怎么撑起 k 模式

2.1 k-means 的困局:为什么“距离”和“均值”会失效

k-means 做数值聚类的基础是“距离”。欧式距离需要两两坐标相减、平方、再开方,所以它要求变量必须有大小。年龄 25 和 30 能比大小,收入 8000 和 9000 能相减,但“红”和“黄”谁大?没法比;“脆”和“软”差多少?也没法算。于是 k-means 的整套逻辑放到分类数据上,第一步就算不出距离。

你可能会说:那把颜色编码成 1、2、3 不就行了?我第一次学的时候也这么想。问题在于,一旦红=1、黄=2、绿=3,算法就会默认“黄”是“红”和“绿”的中间值,仿佛颜色之间存在等差关系。这个“仿佛”是你人为造出来的,数据本身没有这个性质。更麻烦的是,换一种编码顺序(比如红=3、黄=1、绿=2),聚类结果就会跟着变,说明这个编码方式引入了假信息。

分类数据的特征就是:没有大小、没有差值、不能求平均。你不能说“三种颜色一平均得到黄”。所以处理分类数据需要另一套逻辑:先定义什么是“相似”,再定义什么是“中心”。这两件事正是 k-modes 的核心工作。

2.2 k-modes 的思路:用众数代替均值,用汉明距离代替欧式距离

k-modes 名字里的“modes”就是统计学里的“众数”——一组数据里出现次数最多的那个值。既然分类数据不能算平均,那每个簇的“中心”不叫均值,而叫“众数中心”。比如某个簇里有 5 个水果,颜色分别是红、红、红、黄、绿,那这个簇中心的颜色就是红,因为红的票数最多。

那么“距离”怎么算?k-modes 用的是汉明距离:比较两个对象在每一个属性上是否相同,相同记 0,不同记 1,把所有属性上的结果相加。举个具体例子,样本 A 是(红,北区,脆),样本 B 是(红,南区,软),两者颜色相同、产地不同、口感不同,汉明距离就是 2。汉明距离天然适合分类数据,因为它不需要比大小,只需要判断“等不等于”。

把这两件事合起来,k-modes 的迭代过程就很清楚了:先按一定规则挑 k 个初始中心,然后把每个样本分到距离最近的中心那一簇,再重新计算每一簇里的众数作为新的中心,重复,直到中心不再变化。整个过程和 k-means 很像,只是把“求均值”换成了“求众数”,把“欧式距离”换成了“汉明距离”。

2.3 k-prototypes:当数据里既有数字又有标签怎么办

现实里的数据很少是纯数值或纯分类。用户表可能长这样:年龄(数值)、城市(分类)、会员等级(分类)。这时候只用 k-means,城市和等级的信息被丢掉;只用 k-modes,年龄会被拆成一堆离散的“年龄段”,白白浪费它的大小关系。k-prototypes 就是来解决这个组合问题的。

它的做法是“两条腿走路”:数值列继续用 k-means 那套均值加欧式距离,分类列用 k-modes 那套众数加汉明距离,然后把两部分代价加起来。两类距离的量纲不同,所以算法会给分类部分乘以一个权重 gamma,让两边的数值大致可比。新手阶段你不用纠结这个权重怎么精调,库会先给你一个自动估计值。

一句话记住三者的关系:k-means 管纯数值,k-modes 管纯分类,k-prototypes 管混合。数据里只要有分类列,k-means 基本就不适用;数据里只要有数值列,k-modes 也要谨慎;两边都有,直接上 k-prototypes。

2.4 新手可以先记住的结论:什么时候用哪个算法

数据类型推荐算法原因
全是分类列(颜色、城市、血型)KModes汉明距离衡量相异,众数计算中心
全是数值列不推荐 kmodes,考虑 k-meanskmodes 专为分类设计,数值会被离散化
数值列 + 分类列混合KPrototypes同时保留两类信息,各自用合适的距离

所以入门的时候,先想清楚数据集里有没有数值列,再决定 import 哪一行。这个判断比调参数更重要,因为算法选错了,后面再怎么调参都救不回来。

3. 跑第一个例子:用 k 模式给分类数据分堆

3.1 安装 kmodes:一条命令搞定

先用终端执行这一条命令:

pip install kmodes

kmodes 会自动带上 numpy、scipy、scikit-learn 这些依赖,一般不需要你手动装。Windows 用户如果提示 pip 不是内部命令,说明 Python 安装时没有勾选“Add Python to PATH”,重新安装 Python 时勾上就行。

装好后在 Python 里验证一下:

import kmodes print(kmodes.__version__)

能打印出版本号,就说明环境没问题。后面所有代码都建议写在同一个 Jupyter Notebook 或 .py 文件里,方便边跑边看结果。

3.2 构造一份能看懂的小数据

第一个例子我故意做得小一点,让每一步都能看懂。我们用 15 个水果样本,每个样本有 3 个属性:颜色、产地、口感。注意这三列全是字符串,不是数字。

import pandas as pd colors = ['红'] * 5 + ['黄'] * 5 + ['绿'] * 5 origins = ['北区', '南区', '北区', '南区', '北区', '南区', '西区', '南区', '西区', '南区', '西区', '北区', '西区', '南区', '西区'] tastes = ['脆', '脆', '软', '脆', '软', '软', '绵', '软', '绵', '绵', '脆', '绵', '脆', '绵', '绵'] fruits = pd.DataFrame({'color': colors, 'origin': origins, 'taste': tastes}) print(fruits)

这份数据里,颜色是最干净的区分维度:前 5 行全是红,中间 5 行全是黄,后面 5 行全是绿。产区和口感是“干扰项”,有点乱。这样设计的目的是让你看到聚类结果时,能直观判断算法是不是抓住了“颜色”这个主要规律。

这里有个新手容易忽略的点:分类列不要用数字编码。如果产地写成 1、2、3,聚类中心输出“产地=2”,你根本不知道 2 代表哪里。字符串直接显示成“北区”“南区”,结果一眼可读。

3.3 训练并解读聚类结果

现在用 KModes 把 15 个水果分成 3 簇:

from kmodes.kmodes import KModes km = KModes(n_clusters=3, init='Cao', random_state=42) labels = km.fit_predict(fruits) fruits['cluster'] = labels print(fruits.sort_values('cluster'))

n_clusters=3表示分成 3 簇;init='Cao'是一种初始化方式,比随机初始化更稳定,新手可以直接照抄;random_state=42是随机种子,固定它才能让结果可复现。fit_predict做两件事:训练模型,同时返回每个样本分到的簇标签。

运行后你会看到,15 个样本基本按颜色分成三组:红色水果在一簇,黄色在一簇,绿色在一簇。虽然产区和口感有噪声,但算法还是优先用了“颜色”这个区分度最高的属性,这正是聚类的意义:把相似的样本聚到一起。

接下来看每个簇的“中心”长什么样:

print(km.cluster_centroids_)

cluster_centroids_返回一个 DataFrame,每一行代表一个簇的中心。中心里的值不是平均值,而是这个簇里出现次数最多的属性,也就是众数。比如某个簇中心是(红,北区,脆),意思就是这簇里最典型的样本是红、来自北区、口感脆。

还可以看一眼km.cost_,它表示所有样本到各自簇中心的总距离。距离越小,说明簇内越一致。后面选 k 值时,这个数值会派上大用场。

3.4 如果你把参数换一换,会发生什么

把n_clusters改成 2,结果会明显变粗:红色和某个颜色可能会被合并成一簇,因为簇数不够了。把init改成'random',再跑几次,你会发现结果可能轻微变化,因为初始中心是随机选的,不同起点可能落到不同的“局部最优”。

第一次学的时候,你不需要理解这些参数背后的数学细节,只需要记住一个动作:复现结果时,一定固定random_state。我在初学阶段就吃过这个亏,同一份代码跑两次,标签顺序完全不同,还以为是自己写错了。

还有一个参数叫n_init,表示重复运行多少次、最后取代价最小的结果。默认是 1,想更稳可以设成 5。数据量小的时候几乎不增加耗时,但对结果稳定性帮助明显。

4. 升级到 k 原型:混合数据聚类怎么跑

4.1 为什么需要 k-prototypes

纯分类数据的场景其实不多,更常见的是“一半数字、一半标签”。比如你做用户分层,手里可能有年龄、月消费金额这样的数值列,也有城市、会员等级这样的分类列。如果你只用 k-means,分类列的信息会被丢掉;只用 k-modes,年龄这种连续数值会被拆成一个个离散值,等于放弃了“年龄越大消费越高”这种大小关系。

k-prototypes 就是为这个场景设计的。它内部像是一个“双引擎”模型:数值列走 k-means 的逻辑,分类列走 k-modes 的逻辑,最后把两部分代价合并成一个总代价,再迭代优化。你只需要告诉它“哪些列是分类列”,剩下的交给库去处理。

4.2 完整例子:年龄、城市和会员等级一起聚类

我构造一份 10 行的客户数据,包含 1 个数值列(年龄)和 2 个分类列(城市、会员等级):

import pandas as pd from kmodes.kprototypes import KPrototypes customers = pd.DataFrame({ 'age': [23, 45, 31, 52, 28, 47, 36, 41, 38, 29], 'city': ['北区', '南区', '北区', '西区', '南区', '西区', '北区', '南区', '西区', '北区'], 'member_level': ['普通', '黄金', '普通', '钻石', '黄金', '普通', '钻石', '普通', '黄金', '普通'], }) kp = KPrototypes(n_clusters=2, init='Cao', random_state=42) labels = kp.fit_predict(customers, categorical=[1, 2]) customers['cluster'] = labels print(customers.sort_values('cluster'))

注意第 3 行代码:categorical=[1, 2]表示“第 1 列和第 2 列是分类列”。这里的索引从 0 开始数:第 0 列是 age,第 1 列是 city,第 2 列是 member_level。所以categorical=[1, 2]就告诉算法:city 和 member_level 走 k-modes 的逻辑,age 走 k-means 的逻辑。

运行后,你会看到客户大致分成两组:一组偏年轻、会员等级以普通为主,另一组偏年长、会员等级以黄金和钻石为主。这就是混合数据聚类最常见的产出——把客户分成几个有业务含义的群体。

再看一眼簇中心,注意它的数据类型是混合的:

print(kp.cluster_centroids_)

数值列的位置显示的是这一簇的均值,比如“平均年龄 30.8”;分类列的位置显示的是这一簇的众数,比如“最常见的城市是北区”。一个对象里同时出现均值与众数,这正是 k-prototypes 的特点。

4.3 核心参数一览:新手常用这几个就够

参数所属类作用新手建议
n_clustersKModes / KPrototypes最终分成几簇先用肘部法则试探
initKModes / KPrototypes初始化方式:'Cao'、'Huang'、'random'先用 'Cao'
n_initKModes / KPrototypes随机初始化运行次数,取代价最小的结果默认 1,对比效果时设 5
random_stateKModes / KPrototypes随机种子固定一个整数,如 42
categoricalKPrototypes 的 fit/fit_predict指定哪些列是分类列传列索引列表
gammaKPrototypes分类部分的权重新手先不传,用自动估计

注意categorical是传给fit_predict或fit的,不是在KPrototypes()构造函数里传。这个细节我见过不少人踩坑,如果你传错位置,算法会把所有列都当数值列处理,聚类结果会变得很奇怪。

gamma这个参数你可能在文档里看到过,它控制分类部分在总代价里的权重。默认会自动估计,新手阶段不用动它。等你理解了每个参数的意义,再回头调整 gamma 也不迟。

5. 新手避坑指南:五个最容易翻车的雷区

5.1 分类列没有转成字符串,聚类中心变得没法看

现象:聚类结果能跑出来,但打印簇中心时,看到的是“城市=12”“等级=3”这种数字,完全不知道代表什么。原因:分类列用了数字编码,算法只认数字,不会自动帮你还原成标签。解决:在建模前统一把分类列转成字符串,用astype(str)处理:

customers['city'] = customers['city'].astype(str) customers['member_level'] = customers['member_level'].astype(str)

这样聚类中心直接输出“北区”“钻石”,人一眼就能看懂。这个习惯我从第一次跑 kmodes 后一直保持到现在。

5.2 用 KPrototypes 时忘了传 categorical 索引

现象:KPrototypes 跑出来,所有样本几乎都被分到同一个簇,其他簇只有零星几个样本。原因:你没有传categorical参数,算法把城市、会员等级这些分类列当成了数值列,用欧式距离去算“北区和西区的距离”,整个距离计算失去了意义。解决:调fit_predict时,明确传入分类列的索引列表:

labels = kp.fit_predict(customers, categorical=[1, 2])

如果数据里有列名,想确认索引对应关系,先打印customers.columns数一遍位置。这是 KPrototypes 最高频的翻车点,我见过太多人在这一步卡住。

5.3 没固定 random_state,结果每次都不一样

现象:同一份代码连续跑两次,得到两组完全不同的标签顺序。原因:聚类算法有随机初始化步骤,初始中心不同,最终结果就可能不同。解决:在创建模型时固定随机种子:

km = KModes(n_clusters=3, init='Cao', random_state=42)

如果你要对比不同 k 值的效果,务必保证只有 k 在变,其他条件都相同。否则你很难判断结果差异到底是 k 引起的,还是随机性引起的。

5.4 先把分类数据做独热编码,再交给 k-means

现象:分类列被拆成几十个 0/1 列,维度瞬间爆炸,k-means 跑出来的结果看不出任何业务含义。原因:独热编码只是把分类标签变成稀疏的 0/1 向量,并没有真正解决“分类数据没有距离”的问题;而且类别越多,维度越高,距离计算被稀释得越厉害。解决:分类数据聚类直接用 k-modes 或 k-prototypes,不要绕路做独热编码再喂给 k-means。除非你用的是那种只能吃数值矩阵的算法,才考虑编码,但那是另一个话题。

5.5 不知道 k 值取多少,用代价函数画拐点

现象:数据没有真实标签,不知道分成几类合适。原因:聚类本身就是无监督问题,没有标准答案。解决:用肘部法则,画出不同 k 值对应的代价曲线,找“拐点”。代价存模型的cost_属性里:

import matplotlib.pyplot as plt costs = [] for k in range(2, 7): km = KModes(n_clusters=k, init='Cao', random_state=42) km.fit_predict(fruits) costs.append(km.cost_) plt.plot(range(2, 7), costs, marker='o') plt.xlabel('k') plt.ylabel('cost') plt.show()

曲线由陡变缓的位置,就是相对合理的 k 值。注意 k 越大代价越小是必然的,所以不要找最小值,要找“拐点”。画图需要 matplotlib,没装的话先执行pip install matplotlib。

6. 下一步学什么:三条从 kmodes 出发的进阶路径

第一个例子跑通之后,你其实已经掌握了 kmodes 最核心的用法:准备数据、创建模型、传入分类列索引、读取标签和簇中心。接下来可以从三条路径里挑一条继续走。

进阶方向建议做的事完成后你能得到什么
吃透参数组合对同一份数据,依次改变 init、n_init、gamma,记录每次的 cost_知道不同参数如何影响结果,不再靠猜
接入 scikit-learn 生态把 kmodes 放进 sklearn 的 Pipeline,用聚类评估指标量化结果能对外说明“这个聚类效果到底好不好”
拿真实数据练手找一份问卷数据或订单数据,做完整的分类数据聚类流程形成自己的聚类分析基线,遇到新数据不慌

我的建议是优先走第三条:把前面第 4 章的客户数据换成本地一份稍微大一点的数据集,比如几百行的销售记录,属性里既有金额也有商品类别,直接跑一遍 KPrototypes,再看每个簇的画像。

我第一次跑 kmodes 时,就卡在categorical参数上,明明数据没问题,结果却完全不对。后来我把每次建模前要做的事固定成一套动作:确认哪些列是分类列、统一转成字符串、固定random_state、最后打印cost_。从那以后,每次跑分类数据聚类我都强制走一遍这个流程,翻车率直线下降。希望帮到你。

本文还有配套的精品资源,点击获取

相关新闻

SQLMap绕过WAF实战指南:从原理到参数调优

SQLMap绕过WAF实战指南:从原理到参数调优

那年我跟一期安全培训,第19天正好落在Web漏洞的SQL注入专题上。老师没有按课本讲怎么手工注入,而是花了大半节课专门演示SQLMap怎么绕过WAF。当时我还不理解为什么单独挑这个点讲,后来自己在授权测试里被WAF扇了无数次巴掌,才明白…

2026/10/20 2:04:15 阅读更多 →
数据搜索:跨文件搜索,清单数据一搜即得

数据搜索:跨文件搜索,清单数据一搜即得

干工程的,谁没被找数据卡过脖子。下午要交标,甲方临时要一份历史项目的报价明细;结算对数对不上,得翻当时的清单查原始数据——文件在哪个电脑、哪个文件夹,都得先想半天。端点星工程助手的数据搜索,CtrlF …

2026/10/20 2:03:15 阅读更多 →
MES 生产管理系统如何进行全面的质量管理?

MES 生产管理系统如何进行全面的质量管理?

1. 引言:为什么全面质量管理离不开 MES在制造企业里,质量管理早已不只是质检部门在最后一道工序“挑出不良品”。全面质量管理(TQM)强调的是全员参与、全过程控制、全数据驱动,把质量理念贯穿从来料、加工、装配到出货…

2026/10/20 2:03:15 阅读更多 →

最新新闻

DLL文件丢失别去“免费下载”了,用系统自带修复工具更安全

DLL文件丢失别去“免费下载”了,用系统自带修复工具更安全

一看到“系统丢失MSJT4JLT.DLL文件”的提示,很多人第一反应就是去搜“免费下载”。这个思路我可以直接告诉你:方向错了。我见过太多人因为急着补DLL文件,结果电脑越修越乱,甚至直接成了全家桶病毒窝。这篇文章不教你怎么去下载站碰…

2026/10/20 2:44:42 阅读更多 →
STM32控制28BYJ-48步进电机:八拍驱动、定时器换相与避坑指南

STM32控制28BYJ-48步进电机:八拍驱动、定时器换相与避坑指南

简介:STM32控制28BYJ-48步进电机的代码包,共120个文件、大小2.39MB,面向需要快速实现步进电机角度与正反转控制的开发者。文件构成以31个c源文件与32个h头文件为主,覆盖stm32f10x_tim、stm32f10x_flash、stm32f10x_rcc等常用标准外…

2026/10/20 2:44:42 阅读更多 →
DCU软件虚拟化从入门到落地:HAMi架构原理与K8s实践指南

DCU软件虚拟化从入门到落地:HAMi架构原理与K8s实践指南

上个月我跑去参加了一场关于AI基础设施的线下Meetup,分享嘉宾是海光信息的工程师,主题是“DCU软件虚拟化从基础到实践”。说实话,这两年GPU虚拟化的分享我听了不少,但真正把国产DCU的虚拟化讲清楚、还带着现场demo跑通的&#xff…

2026/10/20 2:44:42 阅读更多 →
职业心理测评系统源码拆解:架构、表结构与部署避坑指南

职业心理测评系统源码拆解:架构、表结构与部署避坑指南

简介:一份完整的职业心理测评系统源码包,面向需要构建或优化心理测评平台的开发者、企业人事部门及教育机构。系统涵盖职业倾向、性格特征、工作适应能力等标准化量表,支持浏览器与移动应用多端访问,并集成用户管理、测评结果统计…

2026/10/20 2:44:41 阅读更多 →
AI辅助毕业论文全流程指南:从选题到降重格式的智能工具解析

AI辅助毕业论文全流程指南:从选题到降重格式的智能工具解析

每到毕业季,我的微信就会变成24小时论文急诊室。有人凌晨两三点发来一屏截图,问参考文献格式到底对不对;有人对着空白文档坐了一下午,憋不出开篇三百字;还有人把论文改了八遍,查重率还在红线边缘。这些问题…

2026/10/20 2:44:41 阅读更多 →
网络差错控制深度解析:检错编码、纠错编码与重传机制

网络差错控制深度解析:检错编码、纠错编码与重传机制

1. 差错控制到底在解决什么问题先聊点直观的。做网络开发这些年,我发现很多人一看到“差错控制”这三个字,第一反应就是“不就是CRC吗,算多项式那个”。实际上,差错控制是贯穿整个网络体系的一整套组合拳,从数据链路层…

2026/10/20 2:43:41 阅读更多 →

日新闻

CLRC663芯片Pin-to-Pin替代实战:从评估到量产全记录

CLRC663芯片Pin-to-Pin替代实战:从评估到量产全记录

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

2026/10/20 1:01:30 阅读更多 →
ESP32舵机控制指南:原理、多路驱动与避坑实战

ESP32舵机控制指南:原理、多路驱动与避坑实战

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

2026/10/20 1:01:30 阅读更多 →
位移法实现一阶低通滤波:单片机ADC采样降噪实战

位移法实现一阶低通滤波:单片机ADC采样降噪实战

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

2026/10/20 1:01:30 阅读更多 →

周新闻

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

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

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

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

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

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

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

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

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

2026/10/19 1:30:52 阅读更多 →

月新闻

我发现了一个新思路:用 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/19 2:54:50 阅读更多 →
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/19 9:10:22 阅读更多 →
黑夜航拍船只数据集训练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/18 12:16:16 阅读更多 →