使用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. NOI模拟赛(3.8)Problem B

    Description Alice和Bob在玩一个游戏,给出一张n*m的棋盘,上面有一些点是障碍,游戏的开始,Alice选定棋盘上任意一个不是障碍的格子,并且将一枚棋子放在其中,然后Bob先手,两人轮 ...

  2. 【】node基础概念问题(转载)

    1.nodejs编写HelloWord,了解什么是nodejs,nodejs有什么特点   2.nodejs的模块怎么用,如何载入别的模块(require),如何给另一模块调用(module, mod ...

  3. nativeLibraryDirectories=[/data/app/com.lukouapp-1/lib/arm64, /vendor/lib64, /system/lib64]]] couldn't find "libxxxx.so

    一开始我遇到的问题是,如果手机有SD卡槽,则不管有没有插卡,都会闪退,打日记后发现是找不到so文件.报错日记如下: nativeLibraryDirectories=[/data/app/com.lu ...

  4. POJ-3041 Asteroids,二分匹配解决棋盘问题。

    Asteroids Time Limit: 1000MS   Memory Limit: 65536K       Description Bessie wants to navigate her s ...

  5. [K3Cloud] QueryService使用注意事项

    QueryServlice是目前查询数据非常好用的服务,但目前在使用过程中由于使用不当产生不少问题,下面将一一解答: 1.在查询一些实体关键字段如实体主键.分录序号时,条件中的别名怎么会变来变去?   ...

  6. Linux下汇编语言学习笔记12 ---

    这是17年暑假学习Linux汇编语言的笔记记录,参考书目为清华大学出版社 Jeff Duntemann著 梁晓辉译<汇编语言基于Linux环境>的书,喜欢看原版书的同学可以看<Ass ...

  7. 无权二分图最大匹配 HDU2063 匈牙利算法 || Hopcroft-Karp

    参考两篇比较好的博客 http://www.renfei.org/blog/bipartite-matching.html http://blog.csdn.net/thundermrbird/art ...

  8. nginx: [emerg] unknown directive "聽" in D:\software03\GitSpace\cms\nginx-1.14.0/conf/nginx.conf:36

    nginx: [emerg] unknown directive "聽" in D:\software03\GitSpace\cms\nginx-1.14.0/conf/nginx ...

  9. 洛谷 U41572 Portal2

    U41572 Portal2 题目背景 某地ENLIGHTENED的XM研究所正在研究Portal的处理法则,想要揭示XM能量的来源以及应用XM能量.ENLIGHTENED的首席科学家Jacks发现其 ...

  10. mysql你确定掌握的那些sql语句

    1.创建表 create table test(uid int not null,create_time timestamp default current_timestamp); 即:没有双引号,单 ...