使用ML.NET建立PCB加投率模型对单一蚀刻工序进行加投率预测, 此实例为最简单预测,要想实现全流程加投率预测挑战难度还是挺大的,可以查看另一种关于大数据在PCB行业应用---加投率计算基本原理:PCB 加投率计算实现基本原理--K最近邻算法(KNN)

  一.PCB加投数据结构

建立数据结构,蚀刻工序影响报废的的关键参数,铜厚、线宽公差、最小线宽、最小线距(实际影响参数会更多)

    /// <summary>
/// PCB加投模型样本数据结构(此为演示结构并非真实加投模型结构)--蚀刻工序
/// 大数据量样本数越多预测结果数据越准确(选用的大数据数据分类算法)
/// </summary>
public class PCB_Scrap_Data
{
/// <summary>
/// PCB铜厚
/// </summary>
[Column("")]
public float CuThickness;
/// <summary>
/// 蚀刻线宽公差
/// </summary>
[Column("")]
public float Tolerance;
/// <summary>
/// 最小线宽
/// </summary>
[Column("")]
public float Width;
/// <summary>
/// 最小线距
/// </summary>
[Column("")]
public float Space;
/// <summary>
/// 加投率数值
/// </summary>
[Column("")]
[ColumnName("Label")]
public float Label;
}
/// <summary>
/// 此为预测PCB加投率结果类
/// </summary>
public class ScrapPrediction
{
/// <summary>
/// 预测加投率值
/// </summary>
[ColumnName("PredictedLabel")]
public float PredictedLabels;
}
  二.准备数据---蚀刻工序数据

准备PCB蚀刻工序历史实际报废率数据与对应的影响蚀刻报废的参数因子(测试数据只用了12条,数据量是远远不够的,仅仅用于测试用,要实际要预测的话于少准备1年以前的生产数据,数据量的多少决定预测的准确率高低),此数据是参数对此蚀刻工序的影响报废权重值,并非真实的值, 为了简化:报废多少量就是因该要加投多少量。

如下数据:每行数据带表信息: 【表面铜厚】,【铜厚】,【最小线宽】,【最小线距】,【报废率】

,,,,0.03
,,,,0.03
,,,,0.03
,,,,0.03
,,,,0.02
,,,,0.02
,,,,0.02
,,,,0.02
,,,,0.01
,,,,0.01
,,,,0.01
,,,,0.01
  三.训练PCB加投率模型(加载数据,转换数据,学习算法,训练模型)
            //创建管道并加载数据
var pipeline = new LearningPipeline();
string dataPath = ".\\Data\\pcb.data";
pipeline.Add(new TextLoader<PCB_Scrap_Data>(dataPath, separator: ","));
//转换数据
pipeline.Add(new Dictionarizer("Label"));
//将所有功能放入矢量
pipeline.Add(new ColumnConcatenator("Features", "CuThickness", "Tolerance", "Width", "Space"));
//添加学习算法(SDCA算法--即:随机双坐标上升)
pipeline.Add(new StochasticDualCoordinateAscentClassifier());
//将标签转Label换回原始文本
pipeline.Add(new PredictedLabelColumnOriginalValueConverter() { PredictedLabelColumn = "PredictedLabel" });
//根据数据集--训练模型
var model = pipeline.Train<PCB_Scrap_Data, ScrapPrediction>();
//训练模型好的PCB加投率模型保存起来
model.WriteAsync("PCB_Scrap_Model.zip");
// 用PCB加投率(参数因子)套入训练好模型来预测PCB加投率-----测试调用
var prediction = model.Predict(new PCB_Scrap_Data()
{
CuThickness = ,
Tolerance = ,
Width = ,
Space = ,
});
Console.WriteLine($"PCB加投率预测值为: {prediction.PredictedLabels}");
  四.读取PCB加投率模型并调用

PCB加投率模型封装WebAPI接口,供外部调用

        // POST api/ScrapPrediction
/// <summary>
/// PCB加投率预测---通过训练好模型来预测PCB加投率
/// </summary>
/// <param name="value"></param>
/// <returns></returns>
[HttpPost]
public async Task<double> Post([FromBody] PCB_Scrap_Data value)
{
var model = await PredictionModel.ReadAsync<PCB_Scrap_Data, ScrapPrediction>("PCB_Scrap_Model.zip");
var prediction = model.Predict(value);
return prediction.PredictedLabels;
}
  五.PCB加投率预测调用实例

PCB 机器学习(ML.NET)初体验实现PCB加投率预测的更多相关文章

  1. PCB 加投率计算实现基本原理--K最近邻算法(KNN)

    PCB行业中,客户订购5000pcs,在投料时不会直接投5000pcs,因为实际在生产过程不可避免的造成PCB报废, 所以在生产前需计划多投一定比例的板板, 例:订单 量是5000pcs,加投3%,那 ...

  2. Python大数据与机器学习之NumPy初体验

    本文是Python大数据与机器学习系列文章中的第6篇,将介绍学习Python大数据与机器学习所必须的NumPy库. 通过本文系列文章您将能够学到的知识如下: 应用Python进行大数据与机器学习 应用 ...

  3. 香蕉派(or 皮?)上手初体验 -- 外观鉴赏,安装,配置&amp;总结

    一.前言及简单介绍 watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbG9uZ2Vyem9uZQ==/font/5a6L5L2T/fontsize/400/f ...

  4. python--爬虫入门(七)urllib库初体验以及中文编码问题的探讨

    python系列均基于python3.4环境 ---------@_@? --------------------------------------------------------------- ...

  5. SignalR初体验

    简介 ASP .NET SignalR[1]  是一个ASP .NET 下的类库,可以在ASP .NET 的Web项目中实现实时通信.什么是实时通信的Web呢?就是让客户端(Web页面)和服务器端可以 ...

  6. 文档数据库RavenDB-介绍与初体验

    文档数据库RavenDB-介绍与初体验 阅读目录 1.RavenDB概述与特性 2.RavenDB安装 3.C#开发初体验 4.RavenDB资源 不知不觉,“.NET平台开源项目速览“系列文章已经1 ...

  7. (数据科学学习手札35)tensorflow初体验

    一.简介 TensorFlow时谷歌于2015年11月宣布在Github上开源的第二代分布式机器学习系统,目前仍处于快速开发迭代中,有大量的新功能新特性在陆续研发中: TensorFlow既是一个实现 ...

  8. Kaggle初体验之泰坦尼特生存预测

    Kaggle初体验之泰坦尼特生存预测 学习完了决策树的ID3.C4.5.CART算法,找一个试手的地方,Kaggle的练习赛泰坦尼特很不错,记录下 流程     首先注册一个账号,然后在顶部菜单栏Co ...

  9. CNN Mini-Fashion数据集以及Pytorch初体验

    下载Fasion-MNIST数据集 Fashion-MNIST是一个替代原始的MNIST手写数字数据集的另一个图像数据集. 它是由Zalando(一家德国的时尚科技公司)旗下的研究部门提供.其涵盖了来 ...

随机推荐

  1. 集训第六周 数学概念与方法 数论 线性方程 I题

    Description The Sky is Sprite. The Birds is Fly in the Sky. The Wind is Wonderful. Blew Throw the Tr ...

  2. 集训第四周(高效算法设计)D题 (区间覆盖问题)

    原题 UVA10020  :http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=19688 经典的贪心问题,区间上贪心当然是右区间越 ...

  3. SQlServer中的MD5加密

    SELECT sys.fn_varbintohexstr(HASHBYTES('MD5', '我'));

  4. jmap Unable to open socket file解决

    pid:Unable to open socket file: target process not responding or HotSport VM not loadedThe -F option ...

  5. java项目连接access数据库

    1.导入Access_JDBC30.jar到项目中 jar包百度云链接:https://pan.baidu.com/s/10HFM3HomMArvfHjklA_1MA 密码:0qxp 项目名称-> ...

  6. [codeforces471D]MUH and Cube Walls

    [codeforces471D]MUH and Cube Walls 试题描述 Polar bears Menshykov and Uslada from the zoo of St. Petersb ...

  7. ci框架(codeigniter)Email发送邮件、收件人、附件、Email调试工具

        ci框架(codeigniter)Email发送邮件.收件人.附件.Email调试工具 Email 类         CodeIgniter 拥有强大的 Email 类来提供如下的功能: 多 ...

  8. 图解Elasticsearch中的_source、_all、store和index属性

    https://blog.csdn.net/napoay/article/details/62233031

  9. Java电商项目-5.内容管理cms系统

    目录 实现加载内容分类树功能 实现内容分类动态添加 删除内容分类节点 实现内容分类节点的分页显示 实现广告内容的添加 实现广告内容删除 实现广告内容编辑 到Github获取源码请点击此处 实现加载内容 ...

  10. P1665 正方形计数

    P1665 正方形计数 题目描述 给定平面上N个点,你需要计算以其中4个点为顶点的正方形的个数.注意这里的正方形边不一定需要和坐标轴平行. 输入输出格式 输入格式: 第一行一个数X,以下N个点的坐标. ...