感觉双光耦线性隔离完全不好使-机器学习-线性回归笔记

[复制链接]
2038|22
 楼主| 叶春勇 发表于 2020-7-1 12:34 | 显示全部楼层 |阅读模式
本帖最后由 叶春勇 于 2020-7-1 12:35 编辑

在B站学习keras人工智能框架的过程中,里面有线性回归的内容。

突然想起在csjeng的帖子https://bbs.21ic.com/icview-2811264-1-1.html
感觉双光耦线性隔离完全不好使
有一组数据




本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×

评论

实话说,能用硬件保证精度的仪器随时间的价值保有量远超过靠软件拟合的仪器价值高。因此,作为工程师还是以靠硬件提升性能作为第一要旨。  发表于 2020-7-3 21:18
在范围内多取样点,一次线性不行,二次,三次都可以,反正按最小误 差值之和最小。做批量产品,最好自动样点的校正装置,这样可提高生产效率。可这样的成本远远超过用一个HCNR201.  发表于 2020-7-3 21:12
如果那个电路都能保证精度,那21ic大概就只有1个人是有脑子的了。  发表于 2020-7-2 20:32
 楼主| 叶春勇 发表于 2020-7-1 13:01 | 显示全部楼层
一、传统方法:基于线性代数

以上面的数据为例子(线性一次拟合):



用matlab解得:
  1. >> inv(A'*A)*A'*b

  2. ans =

  3.    2.807735760082863
  4.    0.915014025100015

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
 楼主| 叶春勇 发表于 2020-7-1 13:03 | 显示全部楼层
二、用matlab拟合工具箱

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
 楼主| 叶春勇 发表于 2020-7-1 13:05 | 显示全部楼层
三、基于统计学的方法:

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
雪山飞狐D 发表于 2020-7-1 13:10 | 显示全部楼层
叶哥啥时候封总工?
 楼主| 叶春勇 发表于 2020-7-1 13:12 | 显示全部楼层
雪山飞狐D 发表于 2020-7-1 13:10
叶哥啥时候封总工?

用软件学模电,哈哈。
 楼主| 叶春勇 发表于 2020-7-1 13:24 | 显示全部楼层
最后、基于深度学习框架keras(alphago也用)。
由于比较简单,设定如下:
1、采用单神经元
2、代价函数采用mape,平均绝对百分比误差
3、下降函数,adam,自适应一阶二阶调整
4、训练3000次直至过拟合
5、采用tensorflow为后台
程序如下:
  1. from tensorflow import keras
  2. import numpy as np
  3. import matplotlib.pyplot as plt
  4. from keras.models import Sequential
  5. from keras.layers import Dense

  6. x_data =np.array([639,598,533,468,406,335,271,203,139])
  7. y_data =np.array([586,550,492,432,373,310,251,189,129])
  8. plt.scatter(x_data,y_data)

  9. model=Sequential()
  10. model.add(Dense(units=1,input_dim=1))
  11. model.compile(optimizer='adam',loss='mape')

  12. model.fit(x_data,y_data,epochs=3000,verbose=2)

  13. print(model.layers[0].get_weights())
  14. y_pred=model.predict(x_data)
  15. plt.plot(x_data,y_pred)
  16. plt.show()


 楼主| 叶春勇 发表于 2020-7-1 13:28 | 显示全部楼层
运行结果:

模型结果
[array([[0.9207254]], dtype=float32), array([1.105497], dtype=float32)]
k=0.9207254,b=1.105497

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
 楼主| 叶春勇 发表于 2020-7-1 13:32 | 显示全部楼层
通过比较:
1、采用传统数学方法,直接得到最优解。缺点需要学习复杂公式
2、采用人工智能,能自动得到一个较好的解(无限接近最优解)。还有很多参数需要调整。经实践,用人工智能的方法,最好多搞点训练样本。
keer_zu 发表于 2020-7-1 15:40 | 显示全部楼层
不错,Matlab是好东西
xukun977 发表于 2020-7-3 07:36 | 显示全部楼层


这个东西用excel也能轻松搞定,就是设置复杂一丢丢。

说话不会包装,显的就老土了
现在这年头,说某某知识点,前面不加个【人工智能AI】【机器学习】等时髦术语,都拿不出手了
跟20年前不说是【纳米材料】制造,这个东西就卖不出高价一样。


现在修饰语两极分化:
一种潮流是尽可能地简单化,例如多少天精通XXXX,名词后面+那点事儿。。。等。
一种潮流是尽可能地复杂高深化,例如【深度学习XXXXX】
前者表明上看着简单,让人感觉也高深。
 楼主| 叶春勇 发表于 2020-7-3 08:12 | 显示全部楼层
xukun977 发表于 2020-7-3 07:36
这个东西用excel也能轻松搞定,就是设置复杂一丢丢。

说话不会包装,显的就老土了

说的有点道理。
但是如果你做工装,自动校验,生一个激励,然后向目标单片机,发送激励值。
目标单片机收到激励值,把读到的激励值与收到的激励值,进行校验。
由于是自动化的,需要我会这个算法。你会excel,我承认,你很厉害。
xukun977 发表于 2020-7-3 08:27 | 显示全部楼层
king5555 发表于 2020-7-3 08:03
都嘛是,手把手丶手牽手教学,直达入洞房的学习。

隔壁论坛有个网友说的,用了一堆高级术语,涉及材料学、物理学、化学、数学等,说了很长一段话,看着非常高深
最后一句画龙点睛=描述的是搬砖工!

包装的威力真是无穷!我们要学习学习,不能太老实。
tianxiongweitxw 发表于 2020-7-3 19:55 来自手机 | 显示全部楼层
叶先生不只是说,还实实在在的做出来,这点一般人真比不上。
xukun977 发表于 2020-7-3 20:18 | 显示全部楼层
tianxiongweitxw 发表于 2020-7-3 19:55
叶先生不只是说,还实实在在的做出来,这点一般人真比不上。



差点晕倒。。。

首先,曲线拟合始于1750年代,拉普拉斯刚出生不久就碰上了,此人少年时代就开始做了许多开创性的工作,可谓鼻祖。

到了现在2020年代,随便一个数学软件上都有现成的程序,使用者最多输入相关数据即可自动生成。

不会用的网友用百度搜,10分钟就能学会如何操作。



本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
 楼主| 叶春勇 发表于 2020-7-4 10:58 | 显示全部楼层
还有一组数据,不过是对数电位器。

https://bbs.21ic.com/icview-2942690-2-1.html

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
 楼主| 叶春勇 发表于 2020-7-4 11:29 | 显示全部楼层
记得当时用的是:

用穷举法可以得到在k=2.605有最小的sse。python程序如下:
  1. import math
  2. theta=[0,0.15,0.2,0.25,0.4,0.5,0.6,0.7,0.75,0.85,1]
  3. y=[0,0.016,0.03,0.045,0.1075,0.15,0.236,0.41,0.535,0.798,1]
  4. y_hat=[]
  5. all_sse=[]
  6. def f(k,a):
  7.     return (math.exp(k*a)-1)/(math.exp(k)-1)

  8. def get_sse(y,y_h):
  9.     sse=0
  10.     for i in range(len(y)):
  11.         sse=sse+(y[i]-y_h[i])**2
  12.     return sse

  13. for k in range(26000,26200):
  14.     y_hat=[]
  15.     for v in theta:
  16.         y_hat.append(f(k/10000,v))
  17.         
  18.     all_sse.append((get_sse(y,y_hat),k/10000))

  19. print(min(all_sse))

拟合曲线:

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
Jack315 发表于 2020-7-4 13:21 | 显示全部楼层
供 LZ 参考:

建模的目标并不是为了得到最小的 SSE 。
因为利用级数展开,只要项数足够多,总能无限逼近给定的数据点。

建模的目标是级数展开项数(模型参数)尽可能少,而拟合结果(SSE)足够好。
一般的统计软件(包括 Matlab、Python……)都提供模型的评价:R2 和 R2adj

在有理论模型的情况下,一般不使用级数展开。
比如理论模型是 Sin 函数,则直接拟合 Sin 函数。

在理论模型不详,或太复杂的时候考虑级数展开。
在攻城狮的世界里,级数展开的项数最高一般为一次项或二次项,及其交叉项。
最多不超过三次项,及其交叉项。
 楼主| 叶春勇 发表于 2020-7-4 13:57 | 显示全部楼层
本帖最后由 叶春勇 于 2020-7-4 14:07 编辑
Jack315 发表于 2020-7-4 13:21
供 LZ 参考:

建模的目标并不是为了得到最小的 SSE 。

这个可调电阻在0%=0,100%=1R,这是客观的事实,用matlab曲线拟合,这一头一尾不容易全部符合。所以自己写了公式。
你说的泰勒级数展开,这个函数是多元的,用数学软件展开:
  1. (%i16) t=taylor(z,a,0,1,k,c,2);
  2.                             c       c
  3.                   c      (%e  c - %e  + 1) (k - c)
  4. (%o16)/T/ t = (------- - -------------------------
  5.                  c             c 2       c
  6.                %e  - 1      (%e )  - 2 %e  + 1
  7.                    c 2     c           c 2       c         2
  8.               (((%e )  + %e ) c - 2 (%e )  + 2 %e ) (k - c)
  9.             + ---------------------------------------------- + . . .) a + . . .
  10.                           c 3        c 2       c
  11.                      2 (%e )  - 6 (%e )  + 6 %e  - 2
  12. (%i17)


k为指数陡峭程度
a为电位器百分比
用matlab的a x^b+c拟合,但是电位器100%处不能拟合。


cjseng 发表于 2020-7-6 15:42 | 显示全部楼层
这个,后来采用的方法是逐个产品标定,用一个已经人工标定好的板子,通过串口发数据给待标定板子,实现标定,目前使用下来,满足我的要求,产品最终精度要求是2%。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

151

主题

4810

帖子

50

粉丝
快速回复 在线客服 返回列表 返回顶部