机器学习项目流程极简入门:从数据到部署的完整指南
前言
本文将通过一个简单案例(根据水果外观特征判断是否为橘子),逐步拆解机器学习项目的完整流程,帮助读者掌握从数据收集到模型部署的全流程方法论。
通常,一个完整的机器学习项目可以分为以下几个步骤:
• 数据收集 – 获取训练模型所需的数据
• 数据预处理 – 清洗并整理数据,使其适合模型使用
• 特征工程 – 提取和选择有用的特征作为模型输入
• 模型选择 – 确定要使用的机器学习算法或模型类型
• 模型训练 – 用已有的数据让模型学习参数
• 模型评估 – 检测模型在未见过的数据上的效果,调整优化
• 模型部署 – 将训练好的模型投入实际使用,进行预测
一、数据收集
数据是机器学习的“教材”,其质量和数量直接影响模型性能。
要让机器学习,先得有“教材”。数据就是机器学习的教材,模型能学到的东西很大程度上取决于数据质量和数量。常言道:“垃圾进,垃圾出”,如果喂给模型的是垃圾数据,它学到的也会是垃圾,自然表现不佳。所以,第一步我们需要尽可能收集充分且高质量的数据。 在水果识别的例子中,我们就要去收集各种各样的香蕉和橘子的数据。
核心要点
-
数据来源:
- 公开数据集(如Kaggle)
- 业务数据库/日志
- 手动标注或传感器采集
-
数据要求:
- 代表性:覆盖问题空间的各种情况(如不同光照条件下的水果图片)。
- 所收集的数据应尽量覆盖问题空间的各种情况。例如,如果我们的水果照片全都是在白天拍摄的,模型可能学会依赖明亮背景,一到夜晚就认不出。这就要求我们收集香蕉和橘子的样本要多样,包括颜色深浅不同的香蕉,大小不同的橘子,甚至可能包括青香蕉、半青半黄的橘子等,确保模型不会只学到某些特殊情况下的特征。代表性的数据能让模型更健壮,不容易一遇到稍有差别的新情况就出错。
- 充分性:数据量需足够支撑模型学习(至少上千条样本)。
机器学习是“用数据说话”,一般来说,数据量越多,模型能学得越全面。当然也不是无限多就一定好,但少量的数据往往难以支撑训练出一个效果稳定的模型。就像我们教小孩认字,给他看10个字肯定比不上看1000个字学得扎实。对于我们的水果分类例子,如果只收集了三五个水果样本,让模型学习显然不够,我们至少要上百上千张香蕉和橘子的图片或度量数据才比较稳妥。
案例数据示例
颜色(波长) | 形状 | 类别(标签) |
---|---|---|
580 | 长条形 | 香蕉 |
605 | 圆形 | 橘子 |
对于每一个水果,我们记录下能够量化的特征。这里简单起见,我们选两个特征:颜色和形状。香蕉通常是黄色、长条形,橘子通常是橙色、圆形。因此,我们可以用「颜色」和「形状」作为特征,并且记录每个样本的标签(香蕉或橘子)。收集的数据可能用表格表示如上:在我们的例子里,我们的目标很明确:根据颜色和形状分类水果种类(香蕉或橘子)。因此收集回来的每条数据,我们都贴上了对应的类别标签,这就是一个监督学习的数据集(带有正确答案供学习)。 总之,数据收集是整个机器学习流程的基石。这一步做好了,后面的路会顺畅得多。如果把机器学习比作造房子,数据就像砖瓦原料,只有备料充足、材质过关,房子才能盖得稳固。
二、数据预处理
原始数据需经过清洗和整理才能用于模型训练。
拿到了原始数据后,并不能直接拿来喂给模型。现实中的数据常常是“杂乱无章”的——可能有缺失值(比如有些水果漏记了颜色)、有异常值(输入错误导致某个香蕉颜色记录成了不可能的数字)、不同单位尺度不统一(比如高度用厘米,重量用公斤)等等。在进入建模阶段之前,我们需要对数据进行预处理,把它整理干净,变成模型能消化的形式。
关键步骤
- 数据清洗
- 处理缺失值(删除或填充)
- 修正异常值(如颜色记录为“蓝色”的香蕉)。
处理数据中的异常和缺失。例如,如果某些样本缺少“形状”信息,我们可以选择剔除这些不完整样本,或者用出现频率最高的形状来填补缺失值。在我们的水果例子中,如果发现一条记录颜色缺失,我们可以删除这条记录(在数据量足够大的前提下影响不大)或者重新测量补上。还要检查有无错误数据,比如有人误把香蕉记成了“蓝色”,这种明摆着不合理的数据需要更正或丢弃。数据清洗就像做实验前整理实验材料,确保没有“噪音”干扰结果。
- 格式转换
- 分类特征数值化(如“长条形”编码为1,“圆形”为0)。
将数据转换成适合分析的形式。举例来说,颜色和形状在我们的记录中可能是用文字描述的(“黄色”、“长条”),但计算机模型更擅长处理数字。我们可能需要把分类数据数值化(例如用0代表圆形、1代表长条形),或者把文本转成标准形式。又比如日期类型,我们可能拆分成年、月、日三列数值,或者转换成距离某个基准日的天数。总之,要让定性的信息用定量方式表达出来。
- 分类特征数值化(如“长条形”编码为1,“圆形”为0)。
- 特征缩放
- 归一化(Min-Max)或标准化(Z-score)以消除量纲差异。
如果各特征的取值范围相差悬殊,模型训练时可能会偏向数值大的特征,需要进行缩放处理。例如某数据集里“收入”以元计动辄上万,而“评分”是1到5,这时常用的方法是做归一化/标准化,把特征值转换到相近的尺度范围。这样可以加速模型收敛,也防止某些算法受大数值主导。对于我们的例子,假设颜色已经用数值波长表示大约在400-700范围,而形状我们用0/1表示,数值量级不同,我们也可以考虑把颜色值归一化到0-1区间。 •
- 归一化(Min-Max)或标准化(Z-score)以消除量纲差异。
- 数据集划分
- 训练集(60%-80%)、验证集(10%-20%)、测试集(10%-20%)。
这是非常重要的一步 —— 划分训练集、验证集和测试集。简单来说,我们不会把所有收集到的数据一股脑拿去训练模型,否则就无法评估模型对新数据的表现。这就像老师教学生时,会留一些题目不讲,等考试时再拿出来测试学生。通常的做法是将数据随机分为三部分: 举例来说,如果我们总共收集了1000个水果样本,可能划分出700用于训练,150验证,150测试。在整个训练过程中,测试集的数据我们绝对不去碰,直到最后评估才用。这能确保评估结果客观反映模型对“新样本”的泛化能力。对于小型项目,有时也会合并验证集和测试集,但严格来说有单独验证集会更科学一些。
- 训练集(60%-80%)、验证集(10%-20%)、测试集(10%-20%)。
训练集(train set):用来训练模型,占总数据的最大一部分,比如60%-80%。
验证集(validation set):在训练过程中用于调参和验证模型的中间表现,占总数据的10%-20%。验证集相当于平时的测验,帮助我们调整模型以防止过拟合等问题。
测试集(test set):在模型训练完毕后最终评估模型性能的数据,占总数据的剩余10%-20%。测试集就好比最终的期末考,只有一次机会来检验模型的真正能力。
预处理后数据示例
颜色(归一化) | 形状编码 | 标签 |
---|---|---|
0.75 | 1 | 0 |
0.82 | 0 | 1 |
三、特征工程
特征决定模型性能上限,算法仅逼近该上限。
在深度学习兴起之前,特征工程几乎是每个机器学习项目的重头戏;而深度学习模型能够自己从海量数据中学特征,比如卷积神经网络可以自动从图像学到边缘、纹理等高阶特征,因此在某些领域,人工特征工程的重要性有所下降。但对于结构化数据问题,特征工程依然非常关键。
机器学习有句话:“数据和特征决定了模型性能的上限,算法和模型只是逼近这个上限。” 经过预处理,我们已经有了比较干净的数据,但还需要考虑一个问题:哪些数据特征能用于预测,我们是否需要创造或挑选特征? 这就是特征工程要解决的事情。
特征(Feature)指用来描述数据的可量化属性。在我们的例子中,“颜色的波长值”和“形状类别”就是两项特征。对于不同的问题,特征可能是原始数据直接提供的(例如房价预测中房子的面积、卧室数就是天然的特征),也可能需要我们从原始数据中提炼。特征工程主要包含两部分:
核心任务
-
特征构造
- 从原始数据中提取新特征(如房价预测中计算“每平方米价格”)。
-
特征选择
- 通过相关性分析或模型评估筛选有效特征(如丢弃区分度低的“重量”特征)。
简单来说,特征工程就是要让有用的信息尽可能有效地呈现给模型,同时减少无用信息的干扰。在我们的案例里,因为一开始就选取了很有区分度的颜色和形状作为特征,可能不需要额外构造新特征,也暂时没有太多特征需要筛选(因为总共才两三个特征)。但在实际问题中,特征工程往往是最花时间也最考验功力的一步。很多时候,一个简单模型如果有好的特征,效果会胜过复杂模型配一般特征。
对于初学者,可以记住:特征是模型学习的依据,好的特征能让复杂问题变简单。 在这个过程中,多和业务领域专家沟通、发挥常识和创造力,往往能找到更佳的特征表示方法。特征工程做得好,后面的模型训练就会事半功倍。
案例优化
- 初始特征(颜色、形状)已具备高区分度,无需额外构造。
四、模型选择
根据问题类型和数据特点选择合适的模型:
问题类型 | 适用模型 |
---|---|
分类(如水果识别) | 逻辑回归、决策树、支持向量机 |
回归(如房价预测) | 线性回归、梯度提升树 |
图像处理 | 卷积神经网络(CNN) |
案例选择
- 特征简单且数据量小,优先选择决策树或逻辑回归。
五、模型训练
这一阶段,我们将让模型在已有的数据上“学习”出规律,也就是确定模型的具体参数,使模型能够较好地拟合输入与输出的关系。
通过训练数据优化模型参数,使其拟合输入输出关系。
训练流程
- 初始化模型参数(随机或预设值)。
- 输入训练数据,计算预测误差。
- 使用优化算法(如梯度下降)调整参数。
- 监控验证集表现,防止过拟合。
# 伪代码示例:模型训练过程
model = DecisionTreeClassifier()
model.fit(X_train, y_train)
通俗来讲,训练模型就像教模型去认识我们的数据。
对模型来说,训练集里的每一条样本都是一堂课。它会根据当前参数对样本做出预测,然后和真实标签比对,看看自己答得对不对、误差有多大。
接着,模型根据这些误差来调整自身的参数(这个调整的过程由特定的学习算法完成,比如梯度下降法会沿着减小误差的方向优化参数)。
模型不断地在所有训练样本上反复试错和改进,就像学生反复做题、订正、再做题一样,慢慢地,模型的预测误差会越来越小,表现越来越好。
在一开始,模型往往是“啥也不会”,比如我们初始化一个模型来分辨香蕉和橘子,最初它可能完全随机地瞎猜,错误百出。
但通过训练,它会逐渐学会:“哦,看到形状长长的更可能是香蕉”“颜色偏橙的更可能是橘子”,内部参数不断更新。训练的目标就是让模型在训练数据上表现良好,即找出一个能将输入映射到正确输出的函数近似。 值得注意的是,我们并不希望模型把训练集死记硬背,而是希望它学到普遍规律。
如果模型过度追求训练误差为零,可能陷入过拟合(Overfitting)的陷阱——就像有的学生只会做老师画过的原题,遇到新题就不行了。因此在训练过程中,我们通常会一边训练一边监控模型在验证集上的表现。
如果发现训练集准确率一直提高但验证集准确率反而下降,就意味着模型可能开始过拟合了,这时应该停止训练或采用一些正则化技术来约束模型复杂度。 对于我们的水果模型,由于特征简单清晰,一个非常简单的模型训练几轮可能就趋于收敛(达到最好状态)。
比如一个决策树很快就能找到基于颜色和形状分类的分割点,使得训练集上几乎100%正确。然而,我们更关心的是它对验证集和未来新样本的表现,所以我们不会仅以训练集的成绩评价模型好坏,而是为下一步的评估做好准备。
总结来说,模型训练就是让模型不断调整自己去拟合训练数据。这个过程需要耐心和良好的监控。有些模型训练非常快速(秒级就完事),有些比如深度学习训练一个模型可能要跑好几个小时甚至几天。这一步也对应了机器学习中的“学习”二字,是实现智能预测能力的关键环节。
六、模型评估
评估的目的是了解模型在未见过的数据上的性能,以确定它是否真的学到了有用的东西,还是仅仅“记住”了训练集。还记得我们之前留出的测试集吗?现在是时候用它来考验模型了。
用测试集验证模型泛化能力,常用指标:
分类问题
指标 | 公式/说明 |
---|---|
准确率 | 正确预测样本数 / 总样本数 |
F1-Score | 2 * (Precision * Recall) / (Precision + Recall) |
问题诊断
现象 | 原因 | 解决方案 |
---|---|---|
过拟合 | 模型复杂度过高 | 简化模型、增加正则化 |
欠拟合 | 模型过于简单 | 增加特征或模型复杂度 |
评估时,我们会将测试集(或验证集)输入训练好的模型,得到预测结果,然后将这些预测和真实的标签进行对比,计算一些评价指标。常用的评价指标取决于任务类型:
• 对于分类问题,准确率(Accuracy)是最直观的指标之一,即模型预测正确的比例。有时候我们也会关注精确率(Precision)和召回率(Recall)(特别是在正负样本不平衡时),以及它们的调和平均数F1-score。这些指标能更全面地反映分类模型的性能,例如精确率高表示预测为正的那些多数是对的,召回率高表示实际为正的多数被找出来了。
• 对于回归问题,常用指标有均方误差(MSE)、平均绝对误差(MAE)等,衡量模型预测的数值与真实值的偏差程度。
• 此外还有一些可视化方法辅助评估,比如分类问题可以绘制混淆矩阵(观察各类别被误分类的情况),二分类问题可以看ROC曲线和AUC值,回归问题可以画出预测值vs真实值的散点图等等。
对于初学者,可以先从准确率等简单指标入手理解。
例如,我们的水果分类模型在测试集上测试,如果100个水果里模型正确地分对了90个,那准确率就是90%。如果发现准确率只有60%,那说明模型可能还不够好,要么训练不到位,要么选错了特征或模型,需要回去查找原因。 模型评估除了告诉我们成绩,也可以暴露模型存在的问题。最常见的现象有两种:过拟合(Overfitting)和欠拟合(Underfitting)。
过拟合前面提过,表现为训练集结果很好但测试集结果很差,说明模型把训练集特殊性当作普遍规律了,针对这种情况我们可以考虑简化模型、加入正则化或者增加训练数据。
欠拟合则是训练集本身效果就不好,模型根本没学明白,通常可以通过提高模型复杂度或训练更久、提供更多特征来改善。
一个诀窍是画出模型的学习曲线(训练集和验证集的错误率随训练样本数的变化曲线),可以帮助判断目前处于过拟合还是欠拟合状态。
评估阶段往往决定了接下来如何改进模型。如果模型在测试集上的表现达到了预期,那皆大欢喜,可以准备部署了;但很多时候初版模型效果不理想,这很正常,需要分析问题出在哪,然后“回炉返工”。
这个返工不一定是坏事,实际上机器学习项目都是一种迭代过程:评估->发现问题->改进->再训练->再评估…循环往复把性能逼近理想水平。
例如,我们的水果模型如果发现老是把某些浅黄色橘子错认成香蕉,我们可能意识到单用颜色和形状还不够区分这些情况,或许还需要增加“表皮纹理”这样的新特征,于是回到特征工程阶段新增特征;又或者发现模型选择不当,那就尝试换一个模型再训练看看。每一次评估反馈都指导我们做出相应调整,使模型逐步完善。
最后,在我们对模型进行充分评估并觉得其性能达到业务需求后,就可以进入最终阶段——部署和预测。当然,如果评估结果不达标,就需要回到前面的步骤继续打磨。
七、模型部署
将训练好的模型投入实际应用场景:
部署方式
- 嵌入式部署:集成到移动端或物联网设备(如水果分拣机)。
- 云端服务:通过API提供预测服务(如电商用户流失预测)。
部署注意事项
- 模型需序列化保存(如
.pkl
文件)。 - 监控模型性能,定期更新以适应新数据。
经过反复打磨,我们终于得到了一个在测试集上表现优秀的模型。现在到了收获成果的时候:将模型投入实际使用,也就是进行部署和预测。所谓部署(Deployment),是指把模型集成到现实的应用环境中,让真实的数据通过模型得到预测结果,为用户或业务创造价值。 部署的方式可以有很多种,取决于具体应用场景:
• 嵌入到应用程序中:比如把模型打包进一个手机APP,当用户拍摄一张水果的照片,我们的模型就运行在APP里,立即给出这是香蕉还是橘子的预测。这种方式要求模型比较小巧高效,因为要在终端设备上执行。
• 作为云端服务:很多情况下,模型会被部署在服务器上,提供API接口 。各地的应用把数据发到云端,请求模型服务返回预测结果。例如一家电商把用户资料发送到云端模型服务,返回该用户是否流失的预测概率。部署在云端便于集中管理和更新模型,但需要保障服务的稳定性和响应速度。
• 嵌入物联网设备:有些模型会部署在工厂的流水线上或智能硬件中,比如我们的水果分类模型可以部署在一个自动分拣机器上,机器通过摄像头捕捉到水果图像,模型实时判断其种类,然后机械臂将香蕉和橘子分开放置。这类部署通常对实时性要求高,而且模型可能需要在有限算力设备上运行。
在部署模型时,还需要考虑一些工程问题,比如模型保存和加载(通常我们会将训练好的模型参数序列化保存,以便部署时读取)、预测效率(是否需要优化模型计算,加速预测速度)、可扩展性(如果请求量很大如何扩容服务)等等。初学者可以先了解概念,不用深入细节。 一旦模型部署就绪,新的数据源源不断地进来,模型就开始为我们提供预测了。这时我们要保持对模型的监控,因为真实环境可能和测试集有所差别。如果模型在实际使用中遇到很多罕见情况,性能可能下降,需要定期通过新的数据来重新训练或更新模型,保持模型的鲜活度。
机器学习部署并非终点,更像是进入了一个维护阶段,需要持续观察和改进。 经过这七个步骤,我们完成了从无到有训练一个机器学习模型并实际应用的全过程。当然,每个步骤在现实项目中都可能比我们描述的复杂得多,但基本思路是一致的:明确问题->获取并准备数据->选择并训练模型->评估效果->上线使用。 机器学习项目本质上是不断尝试和优化的过程。
资源推荐
学习资料
- 课程:吴恩达《机器学习》(B站可找到中文字幕版)。
- 书籍:
- 《机器学习实战》(Python实现经典算法)。
- 《Hands-On Machine Learning with Scikit-Learn, Keras & TensorFlow》。
工具推荐
- Python库:Scikit-learn(机器学习)、Pandas(数据处理)。
总结
机器学习项目遵循**“数据→特征→模型→评估→部署”**的迭代流程。每个环节需结合实际场景灵活调整,最终目标是构建高效、鲁棒的预测模型。
相关文章:
机器学习项目流程极简入门:从数据到部署的完整指南
前言 本文将通过一个简单案例(根据水果外观特征判断是否为橘子),逐步拆解机器学习项目的完整流程,帮助读者掌握从数据收集到模型部署的全流程方法论。 通常,一个完整的机器学习项目可以分为以下几个步骤: …...
PrivKV: Key-Value Data Collection with Local Differential Privacy论文阅读
文献阅读课需要制作ppt但是感觉选的这篇论文都是公式,决定做点动画直观展示一下。还没有完成会继续更新这个笔记 manim动画代码 需要下载ffmpeg下载latex https://docs.manim.org.cn/getting_started/installation.html ffmpeg下载教程 texlive官网 但是其实不需要…...
RViz(机器人可视化工具)的配置文件(moveitcpp)
1. Panels(面板设置) 面板是RViz界面中的各个功能区域,用于显示和操作不同的数据。 Displays(显示面板) Class: rviz_common/Displays 指定面板的类型,这里是显示面板。 Help Height: 78 帮助区域的高度…...
kotlin 01flow-StateFlow 完整教程
一 Android StateFlow 完整教程:从入门到实战 StateFlow 是 Kotlin 协程库中用于状态管理的响应式流,特别适合在 Android 应用开发中管理 UI 状态。本教程将带全面了解 StateFlow 的使用方法。 1. StateFlow 基础概念 1.1 什么是 StateFlow? StateF…...
OpenGl实战笔记(1)基于qt5.15.2+mingw64+opengl绘制三角形
一、实现效果 二、实现原理 (1)各函数作用与原理 initialize() 作用: 初始化 OpenGL 函数(initializeOpenGLFunctions()) 设置背景清除颜色为 rgba(0.2, 0.3, 0.4, 1.0)。 原理: initializeOpenGLFunctio…...
S100平台调试RS485/RS232
提供一个C语言的测试程序Demo #include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h>...
蓝桥杯 19. 植树
植树 题目描述 小明和朋友们一起去郊外植树,他们带了一些在实验室中精心研究出的小树苗。 一共有 n 个人,每个人挑选了一个适合植树的位置,一共 n 个位置。每人准备在自己的位置种下一棵树苗。 但他们遇到一个问题:有的树苗比…...
Spring Boot 中 @Bean 注解详解:从入门到实践
在 Spring Boot 开发中,Bean注解是一个非常重要且常用的注解,它能够帮助开发者轻松地将 Java 对象纳入 Spring 容器的管理之下,实现对象的依赖注入和生命周期管理。对于新手来说,理解并掌握Bean注解,是深入学习 Spring…...
git项目迁移,包括所有的提交记录和分支 gitlab迁移到gitblit
之前git都是全新项目上传,没有迁移过,因为迁移的话要考虑已有项目上的分支都要迁移过去,提交记录能迁移就好;分支如果按照全新项目上传的方式需要新git手动创建好老git已有分支,在手动一个一个克隆老项目分支代码依次提…...
前端面试每日三题 - Day 25
这是我为准备前端/全栈开发工程师面试整理的第25天每日三题练习,涵盖了: CSS中如何实现一个保持宽高比的自适应正方形元素Angular的变更检测(Change Detection)机制项目实战 - 设计一个微前端架构的前端应用。 ✅ 题目1ÿ…...
基于windows安装MySQL8.0.40
基于windows安装MySQL8.0.40 基于windows 安装 MySQL8.0.40,解压文件到D:\mysql-8.0.40-winx64 在D:\mysql-8.0.40-winx64目录下创建my.ini文件,并更新一下内容 [client] #客户端设置,即客户端默认的连接参数 # 设置mysql客户端连接服务…...
基于机器学习算法预测二手车市场数据清洗与分析平台(源码+定制+讲解) 基于Python的数据挖掘与可视化 二手车数据处理与分析系统开发 (机器学习算法预测)
博主介绍: ✌我是阿龙,一名专注于Java技术领域的程序员,全网拥有10W粉丝。作为CSDN特邀作者、博客专家、新星计划导师,我在计算机毕业设计开发方面积累了丰富的经验。同时,我也是掘金、华为云、阿里云、InfoQ等平台…...
【神经网络与深度学习】普通自编码器和变分自编码器的区别
引言 自编码器(Autoencoder,AE)和变分自编码器(Variational Autoencoder,VAE)是深度学习中广泛应用的两类神经网络结构,主要用于数据的压缩、重构和生成。然而,二者在模型设计、训练…...
【现代深度学习技术】现代循环神经网络07:序列到序列学习(seq2seq)
【作者主页】Francek Chen 【专栏介绍】 ⌈ ⌈ ⌈PyTorch深度学习 ⌋ ⌋ ⌋ 深度学习 (DL, Deep Learning) 特指基于深层神经网络模型和方法的机器学习。它是在统计机器学习、人工神经网络等算法模型基础上,结合当代大数据和大算力的发展而发展出来的。深度学习最重…...
【Linux我做主】进度条小程序深度解析
Linux下C语言进度条程序深度解析 进度条小程序GitHub地址 前言前置知识回车换行(CR/LF)的深度解析历史渊源与技术规范在进度条/倒计时中的应用 缓冲区机制的全面剖析缓冲区引入缓冲类型对比进度条开发中的关键控制 进度条实现以小见大——倒计时倒计时最…...
Vue项目安全实践指南:从输入验证到状态管理的全方位防护
一、项目背景 在Vue2项目开发过程中,我们遇到了一些需要优化的安全实践问题。本文将分享我们在项目中的一些安全优化经验,希望能帮助到其他开发者。 主要优化点: 输入输出安全处理请求安全防护数据存储安全路由访问控制文件上传处理表单数…...
Pinocchio导入URDF关节为continuous的问题及详细解释
视频讲解: Pinocchio导入URDF关节为continuous的问题及详细解释 仓库地址:GitHub - LitchiCheng/mujoco-learning 问题背景:打算测试将之前的panda的urdf换成so-arm100的urdf,发现pinocchio的代码不能用,很奇怪&#…...
《Python星球日记》第30天:Flask数据库集成
名人说:路漫漫其修远兮,吾将上下而求索。—— 屈原《离骚》 创作者:Code_流苏(CSDN)(一个喜欢古诗词和编程的Coder😊) 专栏:《Python星球日记》,限时特价订阅中ing 目录 一、数据库…...
GAF-CNN-SSA-LSSVM故障诊断/分类预测,附带模型研究报告(Matlab)
GAF-CNN-SSA-LSSVM故障诊断/分类预测,附带模型研究报告(Matlab) 目录 GAF-CNN-SSA-LSSVM故障诊断/分类预测,附带模型研究报告(Matlab)效果一览基本描述程序设计参考资料 效果一览 基本描述 本研究提出的GA…...
轻松养生:让健康融入生活
养生不是负担,而是可以轻松融入日常的生活方式。掌握以下要点,就能开启健康之旅。 清晨醒来,先喝一杯常温水,唤醒沉睡的肠胃。早餐选择富含膳食纤维的燕麦片搭配新鲜水果,补充能量又促进消化。午餐和晚餐做到荤素搭配&…...
工业主义与民主的兴衰:历史逻辑与未来危机
一、工业主义催生大众民主的机制 经济基础变革 非技术工人崛起:工业革命后,机器生产替代传统手工业,非熟练工人(包括妇女、儿童)收入提升,财富分配趋于平等,形成新兴中产阶级。 政府财政能力增…...
从代码学习深度学习 - 目标检测前置知识(二) PyTorch版
文章目录 前言一、多尺度目标检测1.1 多尺度锚框1.2 绘图工具函数 (`utils_for_huitu.py`)1.3 可视化多尺度锚框1.4 多尺度检测(理论)二、自定义目标检测数据集2.1 读取数据2.2 创建 Dataset 类2.3 创建 DataLoader2.4 验证数据加载2.5 可视化数据集样本总结前言 大家好!欢…...
什么是“系统调用”
一、什么是“系统调用”?用生活中的比喻理解 可以把“系统调用”比作你(用户)向“管理员”请求帮助完成某件事情的过程。 举个例子: 你想借书,去图书馆(操作系统)找管理员(内核&a…...
代码异味(Code Smell)识别与重构指南
1、引言:什么是“代码异味”? 在软件开发中,“代码异味(Code Smell)”是指那些虽然不会导致程序编译失败或运行错误,但暗示着潜在设计缺陷或可维护性问题的代码结构。它们是代码演进过程中的“信号灯”,提示我们某段代码可能需要优化。 1.1 ✅ 为什么关注代码异味? 预…...
005-nlohmann/json 基础方法-C++开源库108杰
《二、基础方法》:节点访问、值获取、显式 vs 隐式、异常处理、迭代器、类型检测、异常处理……一节课搞定C处理JSON数据85%的需求…… JSON 字段的简单类型包括:number、boolean、string 和 null(即空值);复杂类型则有…...
java学习之数据结构:四、树(代码补充)
这部分主要是用代码实现有序二叉树、树遍历、删除节点 目录 1.构建有序二叉树 1.1原理 1.2插入实现 2.广度优先遍历--队列实现 3.深度优先遍历--递归实现 3.1先序遍历 3.2中序遍历 3.3后序遍历 4.删除 4.1删除叶子节点 4.2删除有一棵子树的节点 4.3删除有两棵子树的节…...
Java面试场景分析:从音视频到安全与风控的技术探讨
Java面试场景分析:从音视频到安全与风控的技术探讨 在一个阳光明媚的早晨,互联网大厂的面试室里,面试官李老师坐在桌前,严肃认真;而程序员小张则显得有些紧张,甚至有些搞笑。 第一轮提问: 李老…...
《OmniMeetProTrack 全维会议链智能追录系统 软件设计文档》
撰稿人:wjz 一、引言 1.1 目的 本软件设计文档详细描述了 OmniMeetProTrack 全维会议链智能追录系统的架构、组件、模块设计及实现细节,旨在为开发人员、利益相关者和维护人员提供系统的全面设计蓝图。本文档基于需求定义文档,确保系统实现…...
C 语言逻辑运算符:组合判断,构建更复杂的条件
各类资料学习下载合集 https://pan.quark.cn/s/8c91ccb5a474 在 C 语言编程中,我们已经学习了如何使用比较运算符(如 ==, <, >)来判断两个值之间的关系,从而得到“真”或“假”的结果。但很多时候,我们需要根据多个条件的组合…...
大模型推理框架简介
概述 通常需要大量的计算资源,高效运行LLMs仍然是一个挑战, 推理框架作为LLM高效部署的关键组件,直接关系到应用的性能、成本和开发效率。 高性能框架 vLLM GitHub,由SKYPILOT构建的推理优化框架,旨在提高在GPU上…...
《MATLAB实战训练营:从入门到工业级应用》高阶挑战篇-《5G通信速成:MATLAB毫米波信道建模仿真指南》
《MATLAB实战训练营:从入门到工业级应用》高阶挑战篇-5G通信速成:MATLAB毫米波信道建模仿真指南 🚀📡 大家好!今天我将带大家进入5G通信的奇妙世界,我们一起探索5G通信中最激动人心的部分之一——毫米波信…...
word导出pdf带有目录导航栏-error记
1、打开word文档——>点击"视图"选项卡——>勾选"导航窗格" 2、点击"文件"——>导出——>创建PDF/XPS 3、点击"选项"——>勾选"创建书签时使用(C)" "标题(H)" 4、点击"确定"——>点击…...
word怎么删除空白页?word最后一页删不掉怎么办
在使用word的过程中,有时出现空白页就可能会给大家带来一些困扰。到底怎么样才能把这些空白页删除,又应该如何解决最后也删不掉的问题呢? 要想删除普通的空白页,那就需要将光标直接放在空白页,然后按【Delete】键&…...
虚幻基础:硬件输入
文章目录 triggered:按下一直触发 等于tickcompleted:必须等到triggered结束后 才触发松下triggered结束 默认按键触发顺序按下:触发两个先 Started后 Triggered 松开Completed 触发器:用于修改triggered 触发和结束驱动阈值&…...
【Java ee初阶】多线程(5)
一、wait 和 notify wait notify 是两个用来协调线程执行顺序的关键字,用来避免“线程饿死”的情况。 wait 和 notify 其实都是 Object 这个类的方法,而 Object这个类是所有类的“祖宗类”,也就是说明,任何一个类,都…...
售前赢单评分是越权吗?
相关文章 软件实施工作个人看法 当前部门软件产品经理的职责涵盖售前支持工作。此前梳理工作时,计划在每个售前支持项目完成后,由支持人对项目赢单概率进行评估,旨在通过这一机制筛选重点项目,为赢单率高的项目优先配置资源。 …...
uniapp中用canvas绘制简单柱形图,小容量,不用插件——简单使用canvas
uniapp中用canvas绘制简单柱形图,小容量,不用插件——简单使用canvas 完整代码 <template><view><!-- 学习数据 --><!-- 头部选项卡 --><view class"navTab"><view :class"listIndexi?activite:"…...
SecureCRT 使用指南:安装、设置与高效操作
目录 一、SecureCRT 简介 1.1 什么是 SecureCRT? 1.2 核心功能亮点 1.3 软件特点 二、SecureCRT 安装与激活 2.1 安装步骤(Windows 系统) 2.2 激活与破解(仅供学习参考) 三、基础配置与优化 3.1 界面与编码设…...
WebRTC 服务器之SRS服务器概述和环境搭建
1.概述 SRS(Simple Realtime Server)是一款高性能、跨平台的流媒体服务器,支持多种协议,包括 RTMP、WebRTC、HLS、HTTP-FLV、SRT、MPEG-DASH 和 GB28181。本文介绍了 SRS,包括其用途、关键功能、架构和支持协议。SRS 旨…...
第R8周:RNN实现阿尔兹海默病诊断(pytorch)
- **🍨 本文为[🔗365天深度学习训练营](https://mp.weixin.qq.com/s/rnFa-IeY93EpjVu0yzzjkw) 中的学习记录博客** - **🍖 原作者:[K同学啊](https://mtyjkh.blog.csdn.net/)** 一:前期准备工作 1.设置硬件设备 impo…...
vue+element 导航 实现例子
项目使用的是 vue 3,安装配置可以查看栏目前面的文章。 组件 导航:https://element-plus.org/zh-CN/component/menu.html 面包屑:https://element-plus.org/zh-CN/component/breadcrumb.html 安装element库 PS D:\code\my-vue3-project&g…...
金仓数据库 KingbaseES 在电商平台数据库迁移与运维中深入复现剖析
金仓数据库 KingbaseES 在电商平台数据库迁移与运维中深入复现剖析 前言 在当今数字化商业蓬勃发展的时代,电商平台的数据量呈爆发式增长,对数据库性能、稳定性和扩展性提出了极高要求。本文章基于大型电商平台原本采用 MySQL 数据库,但随着业…...
Go小技巧易错点100例(三十)
本期分享: 1.切片共享底层数组 2.获取Go函数的注释 切片共享底层数组 在Go语言中,切片和数组是两种不同的元素,但是切片的底层是数组,并且还有一个比较重要的机制:切片共享底层数组。 下面这段代码演示了切片&…...
LeetCode 热题 100 78. 子集
LeetCode 热题 100 | 78. 子集 大家好,今天我们来解决一道经典的算法题——子集。这道题在 LeetCode 上被标记为中等难度,要求给定一个整数数组 nums,返回该数组所有可能的子集(幂集)。解集不能包含重复的子集&#x…...
苹果公司正在与亚马逊支持的初创公司Anthropic展开合作
每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗?订阅我们的简报,深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同,从行业内部的深度分析和实用指南中受益。不要错过这个机会,成为AI领…...
Python项目源码57:数据格式转换工具1.0(csv+json+excel+sqlite3)
1.智能路径处理:自动识别并修正文件扩展名,根据转换类型自动建议目标路径,实时路径格式验证,自动补全缺失的文件扩展名。 2.增强型预览功能:使用pandastable库实现表格预览,第三方模块自己安装一下&#x…...
Redis总结(六)redis持久化
本文将简单介绍redis持久化的两种方式 redis提供了两种不同级别的持久化方式: RDB持久化方式能够在指定的时间间隔能对你的数据进行快照存储.AOF持久化方式记录每次对服务器写的操作,当服务器重启的时候会重新执行这些命令来恢复原始的数据,AOF命令以redis协议追加保…...
【PostgreSQL数据分析实战:从数据清洗到可视化全流程】5.3 相关性分析(PEARSON/SPEARMAN相关系数)
👉 点击关注不迷路 👉 点击关注不迷路 👉 点击关注不迷路 文章大纲 5.3 相关性分析(PEARSON/SPEARMAN相关系数)5.3.1 相关性分析理论基础5.3.1.1 相关系数定义与分类5.3.1.2 Pearson相关系数( Pearson Corr…...
C++负载均衡远程调用学习之负载均衡算法与实现
目录 01 lars 系统架构回顾 02 lars-lbAgentV0.4-route_lb处理report业务流程 03 lars-lbAgentV0.4-负责均衡判断参数配置 04 lars-lbAgentV0.4-负载均衡idle节点的失败率判断 05 lars-lbAgentV0.4-负载均衡overload节点的成功率判断 06 lars-lbAgentV0.4-负载均衡上报提交…...
AIGC学术时代:DeepSeek如何助力实验与数值模拟
目录 1.实验和数值模拟工具 2.结合使用 大家好这里是AIWritePaper官方账号,官网👉AIWritePaper~ 在工程和科学研究的世界里,实验与数值模拟是探索未知、验证理论和推动创新的两大支柱。它们如同一对翅膀,让思想得以飞翔…...