数模打怪(四)之拟合模型

一、什么是“拟合”

拟合:得到一条确定的曲线,经过尽可能多的点

插值:要经过所有样本点,为了避免龙格现象通常采取分段

倾向于选择拟合,因为希望得到确定的曲线

二、拟合的方法:最小二乘法 

三、评价拟合效果:R_2 

SSE也可当成拟合优度 

线性函数拟合效果看R_2,非线性函数和其他复杂的函数看SSE即可

此处线性函数不是针对变量而言,而是针对参数来说是线性  

 特别地,这里指数函数可以取对数,从而变为线性于参数的函数

四、代码

(补充)匿名函数:

handle=@(传入的参数,多个参数用逗号分隔)函数表达式

handle为调用匿名函数时使用的名字

比如:

%z=@(x,y)x^2+y^2

%z(1,2)

%ans=5

fplot函数可用于画出匿名一元函数的图形

fplot(f,xinterval)画出匿名函数f在指定区间xinterval=[xmin,xmax]上的图像

clear;clc

%画样本点
plot(x,y,'o')
%给x和y轴加上标签
xlabel('x的值')
ylabel('y的值')
n=size(x,1) %求行数->共有几个样本点(x和y的数据按列排下来)
k=(n*sum(x.*y)-sum(x)*sum(y))/(n*sum(x.*x)-sum(x)*sum(x))
b=(sum(x.*x)*sum(y)-sum(x.*y)*sum(x))/(n*sum(x.*x)-sum(x)*sum(x))
hold on %继续在之前的图上画
grid on %显示网格线

%模拟生成新数据(间隔设置得越小,画的图形越准确)
xx=2.5:0.1:7 
yy=k*xx+b
%plot(xx,yy,'-')

%匿名函数
%handle=@(传入的参数,多个参数用逗号分隔)函数表达式 handle为调用匿名函数时使用的名字
%比如
%z=@(x,y)x^2+y^2
%z(1,2)
%fplot函数可用于画出匿名一元函数的图形
%fplot(f,xinterval)画出匿名函数f在指定区间xinterval=[xmin,xmax]上的图像

f=@(x)k*x+b;
fplot(f,[2.5,7]);
legend('样本数据','拟合函数','Location','southeast')

y_hat=k*x+b %y的拟合值
SSR=sum((y_hat-mean(y)).^2) %回归平方和 mean()是求平均值的函数
SSE=sum((y_hat-y).^2) %误差平方和
SST=sum((y-mean(y)).^2) %总和平方和
SST-SSE-SSR %结果为0,证明SST=SSE+SSR
R_2=SSR/SST




五、强大的拟合工具箱:cftool

命令行窗口输入cftool 

注意:

拟合方式选择:Custom Equation(自定义方程)时,

写入自定义公式(注意在代码中写时,要把乘除写成点乘和点除,因为这里x和y是向量了)

若result栏显示: Fit computation did not converge即没有找到收敛解,且拟合图效果也不好,

则点击Fit Options,修改非线性拟合的初始值(StartPoint),r修改为0.02,xm修改为500

可以导出图片和代码

六、生成随机数(randi rand normrnd roundn)

%randi: 生成均匀分布的随机整数(i=int)
s1=randi(10,2,5) %生成1-10的随机整数矩阵,大小为2*5
s2=randi([-5,5],1,10) %生成-5至5之间的随机整数矩阵,大小为1*10

%rand: 生成在0-1之间均匀分布的随机数
s3=rand(1,5) %生成0-1的随机矩阵,大小为1*5
%a+(b-a)*rand(*,*): 生成在a和b之间均匀分布的随机矩阵
s4=2+(5-2)*rand(1,5) %生成2至5之间的随机矩阵,大小为1*5

%normrnd: 产生正态分布的随机数
%产生一个均值为0,标准差为2的正态分布随机矩阵,大小为3*4
%s5=normrnd(0,2,3,4)

%roundn: 任意位置四舍五入
% 0个位 1十位 2百位 -1小数点后一位 -2小数点后两位
a=3.1415
roundn(a,-2) %ans=3.1400
roundn(a,2) %ans=0
a=31415
roundn(a,2) %ans=31400
a=5.5
roundn(a,0) %ans=6
roundn(a,1) %ans=10

clear;clc
x=rand(30,1)*10 %x是0-10之间均匀分布的随机向量(30个样本)
y=3*exp(0.5*x)-5+normrnd(0,1,30,1)
cftool

*** 函数或变量 'normrnd' 无法识别:

1、命令行窗口输入doc normrnd,打开相应的文档(如图)

 

2、会显示未安装某某产品,点击进去,按提示安装即可 

  • 6
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Hugging Face是一个自然语言处理(NLP)模型和工具库的开源社区,它提供了许多预训练的NLP模型和相关工具。使用Hugging Face可以方便地加载、使用和部署这些模型。 要在本地使用Hugging Face的模型,首先需要安装`transformers`库。可以使用以下命令进行安装: ``` pip install transformers ``` 安装完成后,可以通过以下步骤来使用本地模型: 1. 导入所需的库和模型: ```python from transformers import AutoModelForQuestionAnswering, AutoTokenizer model_name = "模型名称" # 比如"bert-base-chinese" model = AutoModelForQuestionAnswering.from_pretrained(model_name) tokenizer = AutoTokenizer.from_pretrained(model_name) ``` 2. 准备输入数据: ```python context = "上下文文本" # 输入的上下文文本 question = "问题文本" # 输入的问题文本 ``` 3. 对输入进行编码和处理: ```python inputs = tokenizer.encode_plus(question, context, add_special_tokens=True, return_tensors="pt") input_ids = inputs["input_ids"].tolist()[0] attention_mask = inputs["attention_mask"].tolist()[0] ``` 4. 使用模型进行预测: ```python outputs = model(**inputs) start_scores = outputs.start_logits end_scores = outputs.end_logits start_index = torch.argmax(start_scores) end_index = torch.argmax(end_scores) answer = tokenizer.convert_tokens_to_string(tokenizer.convert_ids_to_tokens(input_ids[start_index:end_index+1])) ``` 以上是使用Hugging Face的步骤,你可以根据自己的需求进行调整和扩展。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值