搜索
bottom↓
回复: 7

数学好的坛友请进,帮忙用数学公式拟合一组实验数据

[复制链接]

出10入12汤圆

发表于 2021-7-7 15:06:34 | 显示全部楼层 |阅读模式
1700汤圆
算法是用在OLED显示屏驱动板上,使屏幕显示亮度更均匀的,附件中是实验数据
应用背景可以参考这个帖子
https://www.amobbs.com/thread-5751568-1-1.html

如图红色框里的数据,含义为
白色灰阶值=16,基色灰阶值GRAY_I=104时的基色亮度,这里的其色指R或G或B基色中的一种
基色灰阶值的取值范围为0~(255-白色灰阶),也就是说白色灰阶为0时,基色灰阶取值为0~255,白色灰阶值为100时,基色灰阶取值为0~155。
实验数据是每隔8个灰阶取一次样

我需要根据实验数据拟合一个算法出来
算法输入参数为:
亮度系数K,取值范围 0.70~1.00
白色灰阶值GRAY_W,取值范围0~255
基色灰阶值,GRAY_IN,取值范围为0~(255-GRAY_W)
(输入参数来源于系统的外部数据输入)

算法的输出结果为:
基色灰阶值,GRAY_OUT

请数学好的坛友帮忙用数学公式拟合一下吧,非常感谢。
算法会运行在FPGA上,所以最好能基于普通的加乘运算来实现


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

出0入442汤圆

发表于 2021-7-7 15:52:43 | 显示全部楼层
matlab可以直接拟合曲线,研究一下。

出150入640汤圆

发表于 2021-7-7 18:50:04 | 显示全部楼层
多元统计,SPSS,SAS,总有一样帮到你

出35入0汤圆

发表于 2021-7-8 00:10:03 | 显示全部楼层
网上找了个python代码,然后把你的数据整理了一下,得到以下结果.我也不知道结果是啥
参考网址:https://blog.csdn.net/tonydz0523/article/details/84591954
参考代码:
# -*- coding: utf-8 -*-

import numpy as np
import pandas as pd
from sklearn.linear_model import BayesianRidge, LinearRegression, ElasticNet
from sklearn.svm import SVR
from sklearn.ensemble.gradient_boosting import GradientBoostingRegressor   # 集成算法
from sklearn.model_selection import cross_val_score    # 交叉验证
from sklearn.metrics import explained_variance_score, mean_absolute_error, mean_squared_error, r2_score  
import matplotlib.pyplot as plt
import seaborn as sns
# %matplotlib inline

# 数据导入
df = pd.read_excel(r'E:\L_Programming\L_Python\py_3.7\E_projects\Motor\TEST.xlsx', #此处为数据文件路径.


                 usecols=["I","W","O"])

# 可视化数据关系
sns.set(style='whitegrid', context='notebook')   #style控制默认样式,context控制着默认的画幅大小
sns.pairplot(df, size=2)

corr = df.corr()
# 相关度热力图
sns.heatmap(corr, cmap='GnBu_r', square=True, annot=True)
plt.savefig('xx.png')


# 自变量
X = df[['I', 'W']].values
# 因变量
y = df[df.columns[-1]].values

# 设置交叉验证次数
n_folds = 5

# 建立贝叶斯岭回归模型
br_model = BayesianRidge()

# 普通线性回归
lr_model = LinearRegression()

# 弹性网络回归模型
etc_model = ElasticNet()

# 支持向量机回归
svr_model = SVR()

# 梯度增强回归模型对象
gbr_model = GradientBoostingRegressor()

# 不同模型的名称列表
model_names = ['BayesianRidge', 'LinearRegression', 'ElasticNet', 'SVR', 'GBR']
# 不同回归模型
model_dic = [br_model, lr_model, etc_model, svr_model, gbr_model]
# 交叉验证结果
cv_score_list = []
# 各个回归模型预测的y值列表
pre_y_list = []

# 读出每个回归模型对象
for model in model_dic:
    # 将每个回归模型导入交叉检验
    scores = cross_val_score(model, X, y, cv=n_folds)
    # 将交叉检验结果存入结果列表
    cv_score_list.append(scores)
    # 将回归训练中得到的预测y存入列表
    pre_y_list.append(model.fit(X, y).predict(X))
### 模型效果指标评估 ###
# 获取样本量,特征数
n_sample, n_feature = X.shape
# 回归评估指标对象列表
model_metrics_name = [explained_variance_score, mean_absolute_error, mean_squared_error, r2_score]
# 回归评估指标列表
model_metrics_list = []
# 循环每个模型的预测结果
for pre_y in pre_y_list:
    # 临时结果列表
    tmp_list = []
    # 循环每个指标对象
    for mdl in model_metrics_name:
        # 计算每个回归指标结果
        tmp_score = mdl(y, pre_y)
        # 将结果存入临时列表
        tmp_list.append(tmp_score)
    # 将结果存入回归评估列表
    model_metrics_list.append(tmp_list)
df_score = pd.DataFrame(cv_score_list, index=model_names)
df_met = pd.DataFrame(model_metrics_list, index=model_names, columns=['ev', 'mae', 'mse', 'r2'])

# 各个交叉验证的结果
print(df_score)

print(df_met)

### 可视化 ###
# 创建画布
plt.figure(figsize=(9, 6))
# 颜色列表
color_list = ['r', 'g', 'b', 'y', 'c']
# 循环结果画图
for i, pre_y in enumerate(pre_y_list):
    # 子网络
    plt.subplot(2, 3, i+1)
    # 画出原始值的曲线
    plt.plot(np.arange(X.shape[0]), y, color='k', label='y')
    # 画出各个模型的预测线
    plt.plot(np.arange(X.shape[0]), pre_y, color_list, label=model_names)
    plt.title(model_names)
    plt.legend(loc='lower left')
plt.savefig('xxx.png')
plt.show()
数据导成三列,I,W,O

输出图像1

输出图像2

得到结果:
                          0         1         2         3         4
BayesianRidge    -50.453559 -0.373647  0.161773  0.744801 -0.199644
LinearRegression -50.571180 -0.379227  0.161765  0.745467 -0.195883
ElasticNet       -49.738647 -0.360971  0.161715  0.742455 -0.214294
SVR              -14.903784  0.964464  0.992775  0.976152 -2.252350
GBR               -3.684508  0.170723  0.396638  0.499717 -0.377717
                        ev       mae       mse        r2
BayesianRidge     0.932674  1.561085  3.773556  0.932674
LinearRegression  0.932675  1.561234  3.773519  0.932675
ElasticNet        0.932663  1.560602  3.774189  0.932663
SVR               0.987519  0.379886  0.734005  0.986904
GBR               0.999840  0.071407  0.008941  0.999840
最后是什么意思...还得请你自己研究了

本帖子中包含更多资源

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

x

出10入12汤圆

 楼主| 发表于 2021-7-8 08:58:36 | 显示全部楼层
Andrewz 发表于 2021-7-8 00:10
网上找了个python代码,然后把你的数据整理了一下,得到以下结果.我也不知道结果是啥
参考网址:https ...

这个....我也看不懂

出0入0汤圆

发表于 2021-7-8 09:13:28 | 显示全部楼层
excel 也可以拟合曲线公式,

出10入12汤圆

 楼主| 发表于 2021-7-8 12:06:27 | 显示全部楼层
zhongguoren 发表于 2021-7-8 09:13
excel 也可以拟合曲线公式,

是的,用趋势线功能就能拟合出公式,但对于多维数,就不好处理了

出200入2554汤圆

发表于 2021-7-8 13:15:25 | 显示全部楼层
大只用 MATLAB 搞了一版,说下思路:

a. 没看到数据中 K 的体现,因而考虑对 Gray_W 和 Gray_IN 两个维度进行回归,加上 Gray_OUT 输出应该是一个三维曲面;

b. 原始 EXCEL 数据中,Gray_W 和 Gray_IN 作 X 和 Y 两个坐标,Gray_OUT 作 Z 坐标,可以获得一个三角形区域的数据点。
    以三角形区域的 X+Y=32 为对角线,向区域内剩余点插值,获得一个类似于悉尼歌剧院的轮廓点,方便后续回归运算(图1);

c. 上 MATLAB Curve Fitting Tool 工具箱,一顿调节参数,在 lowess-Quadratic 算法下获得还算可以的性能(图2);

d. 最后 MATLAB 输出代码,运行一下就可以获得 lowess 算法参数了(目测运算量也不小,查了下是局部加权回归)。

附图1,悉尼歌剧院:


附图2,lowess回归,黑点为插值后的歌剧院,彩面为回归后的 lowess 函数曲面:


---------------------------------------------------------------------------------

MATLAB 不熟,如有乱搞欢迎大家指正

本帖子中包含更多资源

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

x
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-4-20 19:46

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表