[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"similar-TalkingData--Fregata":3,"tool-TalkingData--Fregata":61},[4,18,26,36,44,53],{"id":5,"name":6,"github_repo":7,"description_zh":8,"stars":9,"difficulty_score":10,"last_commit_at":11,"category_tags":12,"status":17},4358,"openclaw","openclaw\u002Fopenclaw","OpenClaw 是一款专为个人打造的本地化 AI 助手，旨在让你在自己的设备上拥有完全可控的智能伙伴。它打破了传统 AI 助手局限于特定网页或应用的束缚，能够直接接入你日常使用的各类通讯渠道，包括微信、WhatsApp、Telegram、Discord、iMessage 等数十种平台。无论你在哪个聊天软件中发送消息，OpenClaw 都能即时响应，甚至支持在 macOS、iOS 和 Android 设备上进行语音交互，并提供实时的画布渲染功能供你操控。\n\n这款工具主要解决了用户对数据隐私、响应速度以及“始终在线”体验的需求。通过将 AI 部署在本地，用户无需依赖云端服务即可享受快速、私密的智能辅助，真正实现了“你的数据，你做主”。其独特的技术亮点在于强大的网关架构，将控制平面与核心助手分离，确保跨平台通信的流畅性与扩展性。\n\nOpenClaw 非常适合希望构建个性化工作流的技术爱好者、开发者，以及注重隐私保护且不愿被单一生态绑定的普通用户。只要具备基础的终端操作能力（支持 macOS、Linux 及 Windows WSL2），即可通过简单的命令行引导完成部署。如果你渴望拥有一个懂你",349277,3,"2026-04-06T06:32:30",[13,14,15,16],"Agent","开发框架","图像","数据工具","ready",{"id":19,"name":20,"github_repo":21,"description_zh":22,"stars":23,"difficulty_score":10,"last_commit_at":24,"category_tags":25,"status":17},3808,"stable-diffusion-webui","AUTOMATIC1111\u002Fstable-diffusion-webui","stable-diffusion-webui 是一个基于 Gradio 构建的网页版操作界面，旨在让用户能够轻松地在本地运行和使用强大的 Stable Diffusion 图像生成模型。它解决了原始模型依赖命令行、操作门槛高且功能分散的痛点，将复杂的 AI 绘图流程整合进一个直观易用的图形化平台。\n\n无论是希望快速上手的普通创作者、需要精细控制画面细节的设计师，还是想要深入探索模型潜力的开发者与研究人员，都能从中获益。其核心亮点在于极高的功能丰富度：不仅支持文生图、图生图、局部重绘（Inpainting）和外绘（Outpainting）等基础模式，还独创了注意力机制调整、提示词矩阵、负向提示词以及“高清修复”等高级功能。此外，它内置了 GFPGAN 和 CodeFormer 等人脸修复工具，支持多种神经网络放大算法，并允许用户通过插件系统无限扩展能力。即使是显存有限的设备，stable-diffusion-webui 也提供了相应的优化选项，让高质量的 AI 艺术创作变得触手可及。",162132,"2026-04-05T11:01:52",[14,15,13],{"id":27,"name":28,"github_repo":29,"description_zh":30,"stars":31,"difficulty_score":32,"last_commit_at":33,"category_tags":34,"status":17},1381,"everything-claude-code","affaan-m\u002Feverything-claude-code","everything-claude-code 是一套专为 AI 编程助手（如 Claude Code、Codex、Cursor 等）打造的高性能优化系统。它不仅仅是一组配置文件，而是一个经过长期实战打磨的完整框架，旨在解决 AI 代理在实际开发中面临的效率低下、记忆丢失、安全隐患及缺乏持续学习能力等核心痛点。\n\n通过引入技能模块化、直觉增强、记忆持久化机制以及内置的安全扫描功能，everything-claude-code 能显著提升 AI 在复杂任务中的表现，帮助开发者构建更稳定、更智能的生产级 AI 代理。其独特的“研究优先”开发理念和针对 Token 消耗的优化策略，使得模型响应更快、成本更低，同时有效防御潜在的攻击向量。\n\n这套工具特别适合软件开发者、AI 研究人员以及希望深度定制 AI 工作流的技术团队使用。无论您是在构建大型代码库，还是需要 AI 协助进行安全审计与自动化测试，everything-claude-code 都能提供强大的底层支持。作为一个曾荣获 Anthropic 黑客大奖的开源项目，它融合了多语言支持与丰富的实战钩子（hooks），让 AI 真正成长为懂上",150037,2,"2026-04-10T23:33:47",[14,13,35],"语言模型",{"id":37,"name":38,"github_repo":39,"description_zh":40,"stars":41,"difficulty_score":32,"last_commit_at":42,"category_tags":43,"status":17},2271,"ComfyUI","Comfy-Org\u002FComfyUI","ComfyUI 是一款功能强大且高度模块化的视觉 AI 引擎，专为设计和执行复杂的 Stable Diffusion 图像生成流程而打造。它摒弃了传统的代码编写模式，采用直观的节点式流程图界面，让用户通过连接不同的功能模块即可构建个性化的生成管线。\n\n这一设计巧妙解决了高级 AI 绘图工作流配置复杂、灵活性不足的痛点。用户无需具备编程背景，也能自由组合模型、调整参数并实时预览效果，轻松实现从基础文生图到多步骤高清修复等各类复杂任务。ComfyUI 拥有极佳的兼容性，不仅支持 Windows、macOS 和 Linux 全平台，还广泛适配 NVIDIA、AMD、Intel 及苹果 Silicon 等多种硬件架构，并率先支持 SDXL、Flux、SD3 等前沿模型。\n\n无论是希望深入探索算法潜力的研究人员和开发者，还是追求极致创作自由度的设计师与资深 AI 绘画爱好者，ComfyUI 都能提供强大的支持。其独特的模块化架构允许社区不断扩展新功能，使其成为当前最灵活、生态最丰富的开源扩散模型工具之一，帮助用户将创意高效转化为现实。",108322,"2026-04-10T11:39:34",[14,15,13],{"id":45,"name":46,"github_repo":47,"description_zh":48,"stars":49,"difficulty_score":32,"last_commit_at":50,"category_tags":51,"status":17},6121,"gemini-cli","google-gemini\u002Fgemini-cli","gemini-cli 是一款由谷歌推出的开源 AI 命令行工具，它将强大的 Gemini 大模型能力直接集成到用户的终端环境中。对于习惯在命令行工作的开发者而言，它提供了一条从输入提示词到获取模型响应的最短路径，无需切换窗口即可享受智能辅助。\n\n这款工具主要解决了开发过程中频繁上下文切换的痛点，让用户能在熟悉的终端界面内直接完成代码理解、生成、调试以及自动化运维任务。无论是查询大型代码库、根据草图生成应用，还是执行复杂的 Git 操作，gemini-cli 都能通过自然语言指令高效处理。\n\n它特别适合广大软件工程师、DevOps 人员及技术研究人员使用。其核心亮点包括支持高达 100 万 token 的超长上下文窗口，具备出色的逻辑推理能力；内置 Google 搜索、文件操作及 Shell 命令执行等实用工具；更独特的是，它支持 MCP（模型上下文协议），允许用户灵活扩展自定义集成，连接如图像生成等外部能力。此外，个人谷歌账号即可享受免费的额度支持，且项目基于 Apache 2.0 协议完全开源，是提升终端工作效率的理想助手。",100752,"2026-04-10T01:20:03",[52,13,15,14],"插件",{"id":54,"name":55,"github_repo":56,"description_zh":57,"stars":58,"difficulty_score":32,"last_commit_at":59,"category_tags":60,"status":17},4721,"markitdown","microsoft\u002Fmarkitdown","MarkItDown 是一款由微软 AutoGen 团队打造的轻量级 Python 工具，专为将各类文件高效转换为 Markdown 格式而设计。它支持 PDF、Word、Excel、PPT、图片（含 OCR）、音频（含语音转录）、HTML 乃至 YouTube 链接等多种格式的解析，能够精准提取文档中的标题、列表、表格和链接等关键结构信息。\n\n在人工智能应用日益普及的今天，大语言模型（LLM）虽擅长处理文本，却难以直接读取复杂的二进制办公文档。MarkItDown 恰好解决了这一痛点，它将非结构化或半结构化的文件转化为模型“原生理解”且 Token 效率极高的 Markdown 格式，成为连接本地文件与 AI 分析 pipeline 的理想桥梁。此外，它还提供了 MCP（模型上下文协议）服务器，可无缝集成到 Claude Desktop 等 LLM 应用中。\n\n这款工具特别适合开发者、数据科学家及 AI 研究人员使用，尤其是那些需要构建文档检索增强生成（RAG）系统、进行批量文本分析或希望让 AI 助手直接“阅读”本地文件的用户。虽然生成的内容也具备一定可读性，但其核心优势在于为机器",93400,"2026-04-06T19:52:38",[52,14],{"id":62,"github_repo":63,"name":64,"description_en":65,"description_zh":66,"ai_summary_zh":66,"readme_en":67,"readme_zh":68,"quickstart_zh":69,"use_case_zh":70,"hero_image_url":71,"owner_login":72,"owner_name":72,"owner_avatar_url":73,"owner_bio":74,"owner_company":75,"owner_location":75,"owner_email":75,"owner_twitter":75,"owner_website":76,"owner_url":77,"languages":78,"stars":87,"forks":88,"last_commit_at":89,"license":90,"difficulty_score":91,"env_os":74,"env_gpu":92,"env_ram":93,"env_deps":94,"category_tags":101,"github_topics":75,"view_count":10,"oss_zip_url":75,"oss_zip_packed_at":75,"status":17,"created_at":102,"updated_at":103,"faqs":104,"releases":138},2056,"TalkingData\u002FFregata","Fregata","A light weight, super fast, large scale machine learning library on spark .","Fregata 是一款基于 Apache Spark 构建的轻量级、超大规模机器学习库，专为解决海量数据下的模型训练难题而生。它主要面向熟悉 Scala 语言的开发者与数据工程师，能够无缝集成到现有的 Spark 数据处理流程中。\n\n在传统机器学习场景中，面对十亿级特征或样本的数据集时，往往面临训练速度慢、精度难以保证以及超参数（如学习率）调优复杂等痛点。Fregata 通过独特的 GSA-SGD 优化算法有效解决了这些问题：它不仅无需手动调节学习率，还能在训练过程中动态计算合适的参数，实现“零参数”配置；同时在广义线性模型上，其收敛速度极快，通常比主流库 MLLib 快 10 到 100 倍，甚至能在分钟内完成万亿级数据的训练。此外，Fregata 能根据剩余内存自动平衡输出的稀疏度，兼顾准确率与效率。目前，它已支持二分类及多分类等核心算法，是处理超大规模机器学习任务的理想选择。","Fregata: Machine Learning\n==================================\n\n[![GitHub license](http:\u002F\u002Fog41w30k3.bkt.clouddn.com\u002Fapache2.svg)](.\u002FLICENSE)\n\n- [Fregata](http:\u002F\u002Ftalkingdata.com) is a light weight, super fast, large scale machine learning library based on [Apache Spark](http:\u002F\u002Fspark.apache.org\u002F), and it provides high-level APIs in Scala.\n\n- More accurate: For various problems, Fregata can achieve higher accuracy compared to MLLib.\n\n- Higher speed: For Generalized Linear Model, Fregata often converges in one data epoch. For a 1 billion X 1 billion data set, Fregata can train a Generalized Linear Model in 1 minute with memory caching or 10 minutes without it. Usually, Fregata is 10-100 times faster than MLLib.\n\n- Parameter Free: Fregata uses [GSA](http:\u002F\u002Farxiv.org\u002Fabs\u002F1611.03608) SGD optimization, which dosen't require learning rate tuning, because we found a way to calculate appropriate learning rate in the training process. When confronted with super high-dimension problem, Fregata calculates remaining memory dynamically to determine the sparseness of the output, balancing accuracy and efficiency automatically. Both features enable Fregata to be treated as a standard module in data processing for different problems.\n\n- Lighter weight: Fregata just uses Spark's standard API,  which allows it to be integrated into most business’ data processing flow on Spark quickly and seamlessly.\n\n## Architecture\nThis documentation is about Fregata version 0.1\n\n- core : mainly implements stand-alone algorithms based on GSA, including  **Classification** \u003Cfont color=#808080> **Regression**\u003C\u002Ffont> and \u003Cfont color=#808080>  **Clustering** \u003C\u002Ffont>\n  - Classification: supports both binary and multiple classification\n  - Regression: will release later\n  - Clustering: will release later\n- spark : mainly implements large scale machine learning algorithms based on **spark** by wrapping **core.jar** and supplies the corresponding algorithms\n\n**Fregata supports spark 1.x and 2.x with scala 2.10 and scala 2.11 .**\n\n## Algorithms\n- [Trillion LR](.\u002Fdocs\u002Flargescale_lr.md)\n- [Trillion SoftMax](.\u002Fdocs\u002Flargescale_softmax.md)\n- [Logistic Regression](.\u002Fdocs\u002Flogistic_regression.md)\n- [Combine Freatures Logistic Regression](.\u002Fdocs\u002Fclr.md)\n- [SoftMax](.\u002Fdocs\u002Fsoftmax.md)\n- [RDT](.\u002Fdocs\u002Frdt.md)\n\n## Installation\n\nTwo ways to get Fregata by Maven or SBT :\n\n- Maven's pom.xml\n\n```xml\n    \u003Cdependency>\n       \u003CgroupId>com.talkingdata.fregata\u003C\u002FgroupId>\n        \u003CartifactId>core\u003C\u002FartifactId>\n        \u003Cversion>0.0.3\u003C\u002Fversion>\n    \u003C\u002Fdependency>\n    \u003Cdependency>\n        \u003CgroupId>com.talkingdata.fregata\u003C\u002FgroupId>\n        \u003CartifactId>spark\u003C\u002FartifactId>\n        \u003Cversion>0.0.3\u003C\u002Fversion>\n    \u003C\u002Fdependency>\n```\n\n- SBT's build.sbt\n\n```scala\n    \u002F\u002F if you deploy to local mvn repository please add\n    \u002F\u002F resolvers += Resolver.mavenLocal\n    libraryDependencies += \"com.talkingdata.fregata\" % \"core\" % \"0.0.3\"\n    libraryDependencies += \"com.talkingdata.fregata\" % \"spark\" % \"0.0.3\"\n```\n\nIf you want to manual deploy to local maven repository , as follow :\n```\ngit clone https:\u002F\u002Fgithub.com\u002FTalkingData\u002FFregata.git\ncd Fregata\nmvn clean package install\n```\n\n## Quick Start\nSuppose that you're familiar with Spark, the example below shows how to use Fregata's **Logistic Regression**, and experimental datas can be obtained on [LIBSVM Data](https:\u002F\u002Fwww.csie.ntu.edu.tw\u002F~cjlin\u002Flibsvmtools\u002Fdatasets\u002F)\n\n- adding Fregata into project by Maven or SBT referring to the **Downloading** part\n- importing packages\n\n```scala\n\timport fregata.spark.data.LibSvmReader\n\timport fregata.spark.metrics.classification.{AreaUnderRoc, Accuracy}\n\timport fregata.spark.model.classification.LogisticRegression\n\timport org.apache.spark.{SparkConf, SparkContext}\n```\n\n- loading training datas by Fregata's LibSvmReader API\n\n```scala\n    val (_, trainData)  = LibSvmReader.read(sc, trainPath, numFeatures.toInt)\n    val (_, testData)  = LibSvmReader.read(sc, testPath, numFeatures.toInt)\n```\n\n- building Logsitic Regression model by trainging datas\n\n```scala\n    val model = LogisticRegression.run(trainData)\n```\n\n- predicting the scores of instances\n\n```scala\n    val pd = model.classPredict(testData)\n```\n\n- evaluating the quality of predictions of the model by auc or other metrics\n\n```scala\n    val auc = AreaUnderRoc.of( pd.map{\n      case ((x,l),(p,c)) =>\n        p -> l\n    })\n```\n\n## Input Data Format\nFregata's training API needs *RDD[(fregata.Vector, fregata.Num)]*, predicting API needs the same or *RDD[fregata.Vector]* without label\n\n```scala\n\timport breeze.linalg.{Vector => BVector , SparseVector => BSparseVector , DenseVector => BDenseVector}\n\timport fregata.vector.{SparseVector => VSparseVector }\n\n\tpackage object fregata {\n\t  type Num = Double\n\t  type Vector = BVector[Num]\n\t  type SparseVector = BSparseVector[Num]\n\t  type SparseVector2 = VSparseVector[Num]\n\t  type DenseVector = BDenseVector[Num]\n\t  def zeros(n:Int) = BDenseVector.zeros[Num](n)\n\t  def norm(x:Vector) = breeze.linalg.norm(x,2.0)\n\t  def asNum(v:Double) : Num = v\n\t}\n\n```\n\n- if the data format is LibSvm, then *Fregata's LibSvmReader.read() API* can be used directly\n\n```scala\n\t\u002F\u002F sc is Spark Context\n\t\u002F\u002F path is the location of input datas on HDFS\n\t\u002F\u002F numFeatures is the number of features for single instance\n\t\u002F\u002F minPartitions is the minimum number of partitions for the returned RDD pointing the input datas\n\tread(sc:SparkContext, path:String, numFeatures:Int=-1, minPartition:Int=-1):(Int, RDD[(fregata.Vector, fregata.Num)])\n```\n\n- else some constructions are needed\n\n\t- Using SparseVector\n\n\t```scala\n\t\t\u002F\u002F indices is an 0-based Array and the index-th feature is not equal to zero\n\t\t\u002F\u002F values  is an Array storing the corresponding value of indices\n\t\t\u002F\u002F length  is the total features of each instance\n\t\t\u002F\u002F label   is the instance's label\n\n\t\t\u002F\u002F input datas with label\n\t\tsc.textFile(input).map{\n\t\t\tval indicies = ...\n\t\t\tval values   = ...\n\t\t\tval label    = ...\n\t\t\t...\n\t\t\t(new SparseVector(indices, values, length).asInstanceOf[Vector], asNum(label))\n\t\t}\n\n\t\t\u002F\u002F input datas without label(just for predicting API)\n\t\tsc.textFile(input).map{\n\t\t\tval indicies = ...\n\t\t\tval values   = ...\n\t\t\t...\n\t\t\tnew SparseVector(indices, values, length).asInstanceOf[Vector]\n\t\t}\n\t```\n\t- Using DenseVector\n\n\t```scala\n\t\t\u002F\u002F datas is the value of each feature\n\t\t\u002F\u002F label   is the instance's label\n\n\t\t\u002F\u002F input datas with label\n\t\tsc.textFile(input).map{\n\t\t\tval datas = ...\n\t\t\tval label = ...\n\t\t\t...\n\t\t\t(new DenseVector(datas).asInstanceOf[Vector], asNum(label))\n\t\t}\n\n\t\t\u002F\u002F input datas without label(just for predicting API)\n\t\tsc.textFile(input).map{\n\t\t\tval datas = ...\n\t\t\t...\n\t\t\tnew DenseVector(indices, values, length).asInstanceOf[Vector]\n\t\t}\n\t```\n\n## MailList:\n   - yongjun.tian@tendcloud.com\n   - haijun.liu@tendcloud.com\n   - xiatian.zhang@tendcloud.com\n   - fan.yao@tendcloud.com\n\n## Contributors:\n\nContributed by [TalkingData](https:\u002F\u002Fgithub.com\u002FTalkingData\u002FFregata\u002Fcontributors) .\n","Fregata：机器学习\n==================================\n\n[![GitHub license](http:\u002F\u002Fog41w30k3.bkt.clouddn.com\u002Fapache2.svg)](.\u002FLICENSE)\n\n- Fregata（http:\u002F\u002Ftalkingdata.com）是一个基于[Apache Spark](http:\u002F\u002Fspark.apache.org\u002F)的轻量级、超快速的大规模机器学习库，它提供了Scala语言的高级API。\n\n- 更高精度：针对各类问题，Fregata相比MLLib能够达到更高的准确率。\n\n- 更高速度：对于广义线性模型，Fregata通常只需一个数据遍历周期即可收敛。对于10亿×10亿的数据集，使用内存缓存时Fregata可在1分钟内训练出广义线性模型；不使用内存缓存时则需约10分钟。一般而言，Fregata的速度是MLLib的10至100倍。\n\n- 无参数优化：Fregata采用[GSA](http:\u002F\u002Farxiv.org\u002Fabs\u002F1611.03608)随机梯度下降优化算法，无需手动调整学习率，因为我们找到了在训练过程中自动计算合适学习率的方法。当处理超高维问题时，Fregata会动态计算剩余内存以决定输出结果的稀疏程度，从而自动平衡准确性和效率。这两项特性使得Fregata可以作为不同问题下数据处理的标准模块。\n\n- 更轻量：Fregata仅使用Spark的标准API，这使其能够快速且无缝地集成到大多数基于Spark的业务数据处理流程中。\n\n## 架构\n本文档介绍的是Fregata 0.1版本。\n\n- core：主要实现基于GSA的独立算法，包括**分类**\u003Cfont color=#808080>**回归**\u003C\u002Ffont>和\u003Cfont color=#808080>**聚类**\u003C\u002Ffont>。\n  - 分类：支持二分类和多分类。\n  - 回归：后续发布。\n  - 聚类：后续发布。\n- spark：主要通过封装core.jar来实现基于Spark的大规模机器学习算法，并提供相应的算法接口。\n\n**Fregata支持Spark 1.x和2.x，以及Scala 2.10和2.11。**\n\n## 算法\n- [万亿LR](.\u002Fdocs\u002Flargescale_lr.md)\n- [万亿SoftMax](.\u002Fdocs\u002Flargescale_softmax.md)\n- [逻辑回归](.\u002Fdocs\u002Flogistic_regression.md)\n- [组合特征逻辑回归](.\u002Fdocs\u002Fclr.md)\n- [SoftMax](.\u002Fdocs\u002Fsoftmax.md)\n- [RDT](.\u002Fdocs\u002Frdt.md)\n\n## 安装\n\n可以通过Maven或SBT两种方式获取Fregata：\n\n- Maven的pom.xml\n\n```xml\n    \u003Cdependency>\n       \u003CgroupId>com.talkingdata.fregata\u003C\u002FgroupId>\n        \u003CartifactId>core\u003C\u002FartifactId>\n        \u003Cversion>0.0.3\u003C\u002Fversion>\n    \u003C\u002Fdependency>\n    \u003Cdependency>\n        \u003CgroupId>com.talkingdata.fregata\u003C\u002FgroupId>\n        \u003CartifactId>spark\u003C\u002FartifactId>\n        \u003Cversion>0.0.3\u003C\u002Fversion>\n    \u003C\u002Fdependency>\n```\n\n- SBT的build.sbt\n\n```scala\n    \u002F\u002F 如果部署到本地Maven仓库，请添加\n    \u002F\u002F resolvers += Resolver.mavenLocal\n    libraryDependencies += \"com.talkingdata.fregata\" % \"core\" % \"0.0.3\"\n    libraryDependencies += \"com.talkingdata.fregata\" % \"spark\" % \"0.0.3\"\n```\n\n如果希望手动部署到本地Maven仓库，可按以下步骤操作：\n```\ngit clone https:\u002F\u002Fgithub.com\u002FTalkingData\u002FFregata.git\ncd Fregata\nmvn clean package install\n```\n\n## 快速入门\n假设您已经熟悉Spark，下面的示例展示了如何使用Fregata的**逻辑回归**，实验数据可以从[LIBSVM数据集](https:\u002F\u002Fwww.csie.ntu.edu.tw\u002F~cjlin\u002Flibsvmtools\u002Fdatasets\u002F)获取。\n\n- 按照“下载”部分的内容，通过Maven或SBT将Fregata添加到项目中。\n- 导入相关包：\n\n```scala\n\timport fregata.spark.data.LibSvmReader\n\timport fregata.spark.metrics.classification.{AreaUnderRoc, Accuracy}\n\timport fregata.spark.model.classification.LogisticRegression\n\timport org.apache.spark.{SparkConf, SparkContext}\n```\n\n- 使用Fregata的LibSvmReader API加载训练数据：\n\n```scala\n    val (_, trainData)  = LibSvmReader.read(sc, trainPath, numFeatures.toInt)\n    val (_, testData)  = LibSvmReader.read(sc, testPath, numFeatures.toInt)\n```\n\n- 利用训练数据构建逻辑回归模型：\n\n```scala\n    val model = LogisticRegression.run(trainData)\n```\n\n- 预测样本的得分：\n\n```scala\n    val pd = model.classPredict(testData)\n```\n\n- 使用AUC或其他指标评估模型预测质量：\n\n```scala\n    val auc = AreaUnderRoc.of( pd.map{\n      case ((x,l),(p,c)) =>\n        p -> l\n    })\n```\n\n## 输入数据格式\nFregata的训练API需要*RDD[(fregata.Vector, fregata.Num)]*，而预测API则需要相同格式的数据，或者不含标签的*RDD[fregata.Vector]*。\n\n```scala\n\timport breeze.linalg.{Vector => BVector , SparseVector => BSparseVector , DenseVector => BDenseVector}\n\timport fregata.vector.{SparseVector => VSparseVector }\n\n\tpackage object fregata {\n\t  type Num = Double\n\t  type Vector = BVector[Num]\n\t  type SparseVector = BSparseVector[Num]\n\t  type SparseVector2 = VSparseVector[Num]\n\t  type DenseVector = BDenseVector[Num]\n\t  def zeros(n:Int) = BDenseVector.zeros[Num](n)\n\t  def norm(x:Vector) = breeze.linalg.norm(x,2.0)\n\t  def asNum(v:Double) : Num = v\n\t}\n\n```\n\n- 如果数据格式为LibSvm，则可以直接使用*Fregata的LibSvmReader.read() API*：\n\n```scala\n\t\u002F\u002F sc是Spark Context\n\t\u002F\u002F path是输入数据在HDFS上的位置\n\t\u002F\u002F numFeatures是单个实例的特征数量\n\t\u002F\u002F minPartitions是返回的指向输入数据的RDD的最小分区数\n\tread(sc:SparkContext, path:String, numFeatures:Int=-1, minPartition:Int=-1):(Int, RDD[(fregata.Vector, fregata.Num)])\n```\n\n- 否则需要进行一些数据构造：\n\n\t- 使用SparseVector：\n\n\t```scala\n\t\t\u002F\u002F indices是一个从0开始的数组，表示非零特征的索引\n\t\t\u002F\u002F values是一个存储对应值的数组\n\t\t\u002F\u002F length是每个实例的总特征数\n\t\t\u002F\u002F label是该实例的标签\n\n\t\t\u002F\u002F 带标签的输入数据\n\t\tsc.textFile(input).map{\n\t\t\tval indicies = ...\n\t\t\tval values   = ...\n\t\t\tval label    = ...\n\t\t\t...\n\t\t\t(new SparseVector(indices, values, length).asInstanceOf[Vector], asNum(label))\n\t\t}\n\n\t\t\u002F\u002F 不带标签的输入数据（仅用于预测API）\n\t\tsc.textFile(input).map{\n\t\t\tval indicies = ...\n\t\t\tval values   = ...\n\t\t\t...\n\t\t\tnew SparseVector(indices, values, length).asInstanceOf[Vector]\n\t\t}\n\t```\n\t- 使用DenseVector：\n\n\t```scala\n\t\t\u002F\u002F datas是每个特征的数值\n\t\t\u002F\u002F label是该实例的标签\n\n\t\t\u002F\u002F 带标签的输入数据\n\t\tsc.textFile(input).map{\n\t\t\tval datas = ...\n\t\t\tval label = ...\n\t\t\t...\n\t\t\t(new DenseVector(datas).asInstanceOf[Vector], asNum(label))\n\t\t}\n\n\t\t\u002F\u002F 不带标签的输入数据（仅用于预测API）\n\t\tsc.textFile(input).map{\n\t\t\tval datas = ...\n\t\t\t...\n\t\t\tnew DenseVector(indices, values，length).asInstanceOf[Vector]\n\t\t}\n\t```\n\n## 邮件列表：\n   - yongjun.tian@tendcloud.com\n   - haijun.liu@tendcloud.com\n   - xiatian.zhang@tendcloud.com\n   - fan.yao@tendcloud.com\n\n## 贡献者：\n\n由[TalkingData](https:\u002F\u002Fgithub.com\u002FTalkingData\u002FFregata\u002Fcontributors)贡献。","# Fregata 快速上手指南\n\nFregata 是一个基于 Apache Spark 的轻量级、超大规模机器学习库，提供 Scala 高级 API。相比 Spark MLLib，它在广义线性模型等场景下具有更高的精度和速度（通常快 10-100 倍），且无需手动调节学习率。\n\n## 环境准备\n\n在开始之前，请确保您的开发环境满足以下要求：\n\n*   **操作系统**: Linux \u002F macOS \u002F Windows (需配置好 Java 环境)\n*   **JDK**: Java 8 或更高版本\n*   **Spark**: 支持 Spark 1.x 和 2.x\n*   **Scala**: 支持 Scala 2.10 和 2.11\n*   **构建工具**: Maven 或 SBT\n\n## 安装步骤\n\n您可以通过 Maven 或 SBT 将 Fregata 集成到项目中。目前主要版本为 `0.0.3`。\n\n### 方式一：Maven 项目\n\n在 `pom.xml` 文件中添加以下依赖：\n\n```xml\n\u003Cdependency>\n   \u003CgroupId>com.talkingdata.fregata\u003C\u002FgroupId>\n    \u003CartifactId>core\u003C\u002FartifactId>\n    \u003Cversion>0.0.3\u003C\u002Fversion>\n\u003C\u002Fdependency>\n\u003Cdependency>\n    \u003CgroupId>com.talkingdata.fregata\u003C\u002FgroupId>\n    \u003CartifactId>spark\u003C\u002FartifactId>\n    \u003Cversion>0.0.3\u003C\u002Fversion>\n\u003C\u002Fdependency>\n```\n\n### 方式二：SBT 项目\n\n在 `build.sbt` 文件中添加以下依赖：\n\n```scala\n\u002F\u002F 如果部署到本地 maven 仓库，请取消下面注释\n\u002F\u002F resolvers += Resolver.mavenLocal\nlibraryDependencies += \"com.talkingdata.fregata\" % \"core\" % \"0.0.3\"\nlibraryDependencies += \"com.talkingdata.fregata\" % \"spark\" % \"0.0.3\"\n```\n\n### 方式三：本地源码编译安装\n\n如果需要手动部署到本地 Maven 仓库，可执行以下命令：\n\n```bash\ngit clone https:\u002F\u002Fgithub.com\u002FTalkingData\u002FFregata.git\ncd Fregata\nmvn clean package install\n```\n\n## 基本使用\n\n以下示例展示如何使用 Fregata 进行 **逻辑回归 (Logistic Regression)** 训练与预测。假设您已熟悉 Spark 基础操作，且数据格式为 LIBSVM。\n\n### 1. 导入必要的包\n\n```scala\nimport fregata.spark.data.LibSvmReader\nimport fregata.spark.metrics.classification.{AreaUnderRoc, Accuracy}\nimport fregata.spark.model.classification.LogisticRegression\nimport org.apache.spark.{SparkConf, SparkContext}\n```\n\n### 2. 加载训练与测试数据\n\n使用 Fregata 提供的 `LibSvmReader` 直接读取数据：\n\n```scala\nval (_, trainData)  = LibSvmReader.read(sc, trainPath, numFeatures.toInt)\nval (_, testData)  = LibSvmReader.read(sc, testPath, numFeatures.toInt)\n```\n\n### 3. 训练模型\n\n调用 `LogisticRegression.run` 即可自动完成训练（无需设置学习率）：\n\n```scala\nval model = LogisticRegression.run(trainData)\n```\n\n### 4. 进行预测\n\n使用训练好的模型对测试数据进行评分预测：\n\n```scala\nval pd = model.classPredict(testData)\n```\n\n### 5. 评估模型效果\n\n计算 AUC (Area Under Roc) 等指标来评估模型质量：\n\n```scala\nval auc = AreaUnderRoc.of( pd.map{\n  case ((x,l),(p,c)) =>\n    p -> l\n})\n```\n\n> **提示**：实验数据可从 [LIBSVM Data](https:\u002F\u002Fwww.csie.ntu.edu.tw\u002F~cjlin\u002Flibsvmtools\u002Fdatasets\u002F) 获取。若数据非 LIBSVM 格式，需参照官方文档构造 `SparseVector` 或 `DenseVector` 格式的 RDD。","某大型电商公司的数据团队需要在 Spark 集群上，利用数十亿条用户行为日志训练高维稀疏特征的广告点击率（CTR）预测模型。\n\n### 没有 Fregata 时\n- **调参耗时极长**：使用原生 MLlib 训练广义线性模型时，数据科学家需花费数天反复手动调整学习率，难以找到最优收敛点。\n- **训练速度缓慢**：面对十亿级数据量，传统算法往往需要多个数据轮次（Epoch）才能收敛，单次训练耗时数小时甚至更久。\n- **资源消耗巨大**：在处理超高维特征时，内存管理不够灵活，常因无法动态平衡稀疏度与精度而导致任务失败或效率低下。\n- **预测精度受限**：在同等数据规模下，现有库的模型准确率难以满足业务对精细化运营的高要求。\n\n### 使用 Fregata 后\n- **实现零参数训练**：Fregata 内置 GSA 优化算法，能自动计算合适的学习率，无需人工调参即可直接投入生产流程。\n- **极速模型收敛**：凭借超快算法引擎，Fregata 通常仅需一个数据轮次即可收敛，十亿级数据集的训练时间从小时级缩短至分钟级。\n- **动态内存优化**：工具能根据剩余内存动态决定输出稀疏度，自动平衡计算效率与模型精度，稳定运行于大规模集群。\n- **显著提升准确率**：在各类实际业务问题中，Fregata 生成的模型相比 MLlib 具备更高的预测准确度，直接提升广告投放 ROI。\n\nFregata 通过免调参的自适应优化和极致的运算速度，将超大规模机器学习任务从“昂贵的实验”变成了“标准化的数据处理环节”。","https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002FTalkingData_Fregata_461d423e.png","TalkingData","https:\u002F\u002Foss.gittoolsai.com\u002Favatars\u002FTalkingData_fe55ae4c.jpg","",null,"https:\u002F\u002Fwww.talkingdata.com","https:\u002F\u002Fgithub.com\u002FTalkingData",[79,83],{"name":80,"color":81,"percentage":82},"Scala","#c22d40",91.8,{"name":84,"color":85,"percentage":86},"Java","#b07219",8.2,679,184,"2026-03-16T13:35:49","NOASSERTION",4,"未说明","未说明（文档提及可动态计算剩余内存以平衡效率，但未给出具体数值）",{"notes":95,"python":96,"dependencies":97},"该工具是一个基于 Apache Spark 的轻量级机器学习库，主要使用 Scala 语言开发，不提供 Python API。它支持 Spark 1.x 和 2.x 版本，对应需要 Scala 2.10 或 2.11 环境。核心算法基于 GSA SGD 优化，无需手动调整学习率。输入数据支持 LibSVM 格式或通过代码构建稀疏\u002F稠密向量。","不支持（该工具基于 Scala 开发）",[98,99,100],"Apache Spark 1.x 或 2.x","Scala 2.10 或 2.11","Breeze (隐式依赖，用于向量操作)",[14],"2026-03-27T02:49:30.150509","2026-04-11T18:30:57.968073",[105,110,115,120,125,129,133],{"id":106,"question_zh":107,"answer_zh":108,"source_url":109},9367,"如何导出或获取训练好的模型权重？","Fregata 中的所有模型类都继承自 `Serializable` 接口。因此，您可以直接使用 Java\u002FScala 原生的序列化 API 来读取或写入（保存\u002F加载）模型文件，无需额外的导出命令。","https:\u002F\u002Fgithub.com\u002FTalkingData\u002FFregata\u002Fissues\u002F11",{"id":111,"question_zh":112,"answer_zh":113,"source_url":114},9368,"训练大规模数据（如 10 亿特征）时遇到内存溢出（Error 143）或性能瓶颈怎么办？","当前开源版本受限于 `treeReduce` 操作的内存消耗，建议训练的特征数量不要超过 1 亿。如果遇到内存问题，可以尝试减少 Spark 的 partition 数目。对于支持 1000 亿级别特征的超大规模训练，目前仅在内部版本中支持，尚未开源。","https:\u002F\u002Fgithub.com\u002FTalkingData\u002FFregata\u002Fissues\u002F16",{"id":116,"question_zh":117,"answer_zh":118,"source_url":119},9369,"LogisticRegression.run 方法中 localEpochNum 和 epochNum 参数的具体含义及设置注意事项是什么？","这两个参数分别代表不同层级的迭代次数：\n1. `epochNum`：Spark 全局迭代次数。每次迭代会广播权重、训练本地模型并平均权重。\n2. `localEpochNum`：每个 Partition 内本地模型的训练迭代次数。\n注意：如果在旧版本中将这两个参数设置为大于 1 的值可能会报空指针错误（NullPointerException），请确保代码已更新到修复该问题的版本（参考 commit b004ca5）。","https:\u002F\u002Fgithub.com\u002FTalkingData\u002FFregata\u002Fissues\u002F18",{"id":121,"question_zh":122,"answer_zh":123,"source_url":124},9370,"训练结果出现所有权重 Wi 均为 NaN（非数字）的原因及解决方法？","这通常不是数据量限制导致的，而是数值溢出问题。解决方法是对输入数据进行归一化（Normalize）处理。如果是 SoftMax 等模型出现此问题，可能是计算指数时溢出，需要在代码中对 margins 减去最大值（maxMargin）来进行数值稳定处理。","https:\u002F\u002Fgithub.com\u002FTalkingData\u002FFregata\u002Fissues\u002F17",{"id":126,"question_zh":127,"answer_zh":128,"source_url":109},9371,"RDT 模块在 0.0.2 版本中如何使用？构造函数和训练数据格式是怎样的？","在 0.0.2 版本中：\n1. `RDT` 是一个父类，实际使用请选择子类 `RDTClassification`（分类）或 `RDTRegression`（回归）。\n2. 训练方法 `rdt.train()` 需要传入一个数组，数组元素为 `SparseVector` 类型的实例，即格式应为 `Array[SparseVector]`，而非直接传入单个向量。\n3. 预测功能可参考源码中的 `TestClassification.scala` 示例。",{"id":130,"question_zh":131,"answer_zh":132,"source_url":109},9372,"如何查看模型在各个标签上的准确率或混淆矩阵？","在当前的开源版本中，暂未直接提供计算各标签准确率或生成混淆矩阵的功能。该功能计划在后续版本中发布。目前用户可能需要自行编写代码对比预测结果与真实标签来统计准确率。",{"id":134,"question_zh":135,"answer_zh":136,"source_url":137},9373,"线性回归（LR）模型中的偏置项（bias\u002Fintercept）在哪里？为什么有时偏置为 0？","在 LR 模型中，偏置项通常对应权重向量的最后一位（即 `weights(size-1)`）。如果发现偏置始终为 0.0，这可能是早期版本的一个 Bug，导致截距项（intercept weight）未被正确更新。请检查是否使用了已修复该问题的最新版本代码。","https:\u002F\u002Fgithub.com\u002FTalkingData\u002FFregata\u002Fissues\u002F8",[139,143],{"id":140,"version":141,"summary_zh":75,"released_at":142},205315,"0.0.2","2016-12-20T02:46:06",{"id":144,"version":145,"summary_zh":75,"released_at":146},205316,"0.0.1","2016-11-22T08:19:30"]