机器学习 多元线性回归数据筛选问题

前几天,偶然在网上看到,建立多元线性回归时须对其中的异常数据进行筛选剔除,那这里的异常点指的是什么呢?这里的异常点指的是人为采集数据误差或者某些异常的个例等等一些不太准确的数据。
#例子说明#
例如,对于下表中的一些数据我们来进行数据筛选。
在医学上,糖尿病人的血糖量 y ( m m o l / L ) y(mmol / L) y(mmol/L)与总胆固醇 1 X (mmol / L),甘油三脂 X 2 ( m m o l / L ) X_{2}(mmol / L) X2(mmol/L)胰岛素 X 3 ( μ U / m l ) X_{3} (\mu U / ml) X3(μU/ml)糖化血红蛋白 X 4 ( X_{4}(%) X4(等有关。附表中是某医院的原始数据。我们将对其中的异常数据进行筛选。

血糖总胆固醇甘油三脂甘油三脂胰岛素
11.25.681.94.538.2
8.83.791.647.326.9
12.36.023.566.9510.8
11.64.851.075.888.3
13.44.62.324.057.5
18.36.050.641.4213.6
11.14.98.512.68.5
12.17.0836.7511.5
9.63.852.1116.287.9
8.44.650.636.597.1
9.34.591.973.618.7
10.64.291.976.617.8
8.47.971.937.579.9
9.66.191.181.426.9
10.96.132.0610.3510.5
10.15.711.788.538
14.86.42.44.5310.3
9.16.063.6712.797.1
10.85.091.032.538.9
10.26.131.715.289.9
13.65.783.362.968
14.95.431.134.3111.3
166.56.213.4712.3
13.27.987.923.379.8
2011.5410.891.210.5
13.35.840.928.616.4

具体做法如下:
我们先通过 M a t l a b Matlab Matlab对原始数据进行检验,对残差进行分析,得到了残差分析图,剔除其中的异常点。
这里写图片描述
从图上可以看出,第 13 13 13个点和第 27 27 27个点是异常点,这样在做数据处理时就可以将其剔除。
下面是我遇到的一些问题:

  • 至今没有找到这个算法的数学原理,没看到书上有残差向量的相关介绍。
  • M a t l a b Matlab Matlab程序是改进网上的开源程序而来的,从程序中看不出他为什么要这么做。
  • 这种筛选数据的方法是否只适应于线性回归,非线性回归是否也可以借鉴。

#Matlab代码#

clear all;
clc;

%输入数据
z=xlsread('data.xls');
z1=z;
y=z(:,1);
X=[ones(size(y)),z(:,2:5)];
alpha=0.05;
b=inv((X'*X))*X'*y;  %回归系数
[n,ncolX] = size(X);

%剔除异常数据
wasnan=(isnan(y)|any(isnan(X),2));
havenans=any(wasnan);
[Q,R,perm]=qr(X,0);
p=ncolX;
RI=R\eye(p);
nu=max(0,n-p);
yhat=X*b;
r=y-yhat;  %残差
normr=norm(r);
rmse=normr/sqrt(nu);    % Root mean square error.
tval=tinv((1-alpha/2),nu);
s2=rmse^2;
hatdiag=sum(abs(Q).^2,2);
ok=((1-hatdiag)>sqrt(eps(class(hatdiag))));
denom=(nu-1).*(1-hatdiag);
sigmai=zeros(length(denom),1);
sigmai(ok)=sqrt(max(0,(nu*s2/(nu-1))-(r(ok).^2./denom(ok))));
ser=sqrt(1-hatdiag).*sigmai;
rint=[(r-tval*ser) (r+tval*ser)];
rcoplot(r,rint);
kk=[];
for i=1:n
    if (rint(i,1)>0&&rint(i,2)>0)||(rint(i,1)<0&&rint(i,2)<0)
       kk=[kk,i]; 
    end
end
X(kk,:)=[];
y(kk)=[];

%剔除异常点后,求解回归系数
beta=inv((X'*X))*X'*y;  %回归系数

%回归分析
X1=X;
X1(:,1)=[];
n=size(y,1);    %观察单位数
m=size(X,2);    
p1=m-1;          %自变量个数

alpha=0.05;  
yhat=X*beta;

%方差分析表(F检验)
SSR=(yhat-mean(y))'*(yhat-mean(y));  %回归平方和

SSE=(yhat-y)'*(yhat-y);        %残差平方和

SST=(y-mean(y))'*(y-mean(y));    %总平方和

Fb=(SSR/(m-1))/(SSE/(n-m));       %显著性检验的统计量

Falpha=2*(1-fcdf(abs(Fb),m-1,n-m));

table1=cell(4,6);    %创建元胞
table1(1,:)={'模型','偏差平方和','自由度','均方','F值','F.Sig'};
table1(2,1:6)={'回归',SSR,m-1,SSR/(m-1),Fb,Falpha};
table1(3,1:6)={'残差',SSE,n-m,SSE/(n-m),[],[]};
table1(4,1:3)={'总和',SST,n-1};

C=diag(inv((X'*X)));
bj2=beta.*beta;     %回归系数平方
SSj=bj2(2:end)./C(2:end);     %偏回归系数平方和

%决定系数检验
R2=SSR/SST;   %决定系数
R=sqrt(R2);   %复相关系数
RC=1-(1-R2)*(n-1)/(n-1-p1);
Sy=sqrt(SSE/(n-m));   %剩余标准差
table2=cell(2,5);    %创建元胞
table2(1,:)={'模型','R','R平方','校正决定系数','剩余标准差'};
table2(2,1)={1};
table2(2,2)={R};
table2(2,3)={R2};
table2(2,4)={RC};
table2(2,5)={Sy};

%t检验
s=zeros(m,1);       %回归系数的标准误差
for i=1:m
    s(i,1)=sqrt(C(i))*sqrt(SSE/(n-m));
end

mnX=mean(X1);
MNX=repmat(mnX,n,1);   %复制mnX到矩阵MNX中
Ljj=diag((X1-MNX)'*(X1-MNX));     %Ljj的对角线元素为(X1-MNX)'*(X1-MNX)
Pj=beta(2:end).*sqrt(Ljj/SST);   %标准偏回归系数;

t=zeros(m,1);
for i=1:m
    t(i,1)=beta(i,1)/s(i,1);
end

p2=zeros(m,1);
for i=1:m
    p2(i,1)=2*(1-tcdf(abs(t(i,1)),n-m));
end

table3=cell(m+1,6);    %创建元胞
table3(1,:)={'模型','偏回归系数','回归系数的标准误差','标准偏回归系数','t值','P值'};
table3(2,:)={'常量',beta(1,1),s(1,1),[],t(1,1),p2(1,1)};

for kk=1:m-1
    table3(kk+2,:)={['x',num2str(kk)],beta(kk+1,1),s(kk+1,1),Pj(kk,1),t(kk+1,1),p2(kk+1,1)};
end

disp('系数分析表');
disp(table3);
disp('模型汇总');
disp(table2);
disp('方差分析表');
disp(table1);
  • 0
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
多元线性回归中,可以使用Python来筛选影响因子。首先,可以使用统计学中的共线性诊断方法来找出存在共线关系的变量。这可以通过计算变量之间的相关性矩阵或者计算方差膨胀因子(VIF)来完成。 其次,可以使用Python的机器学习库(如scikit-learn)来构建多元线性回归模型。首先导入所需的库,然后加载数据并指定预测变量和目标变量。接下来,可以使用LinearRegression()函数来创建模型,并使用fit()函数来拟合数据。最后,可以打印出预测结果、系数和截距。 此外,还可以使用statsmodels库进行影响点的探查。可以使用add_constant()函数为预测变量添加常数列,并使用OLS()函数来拟合模型。然后,可以使用summary()函数来获取模型的详细统计信息,包括参数估计值、标准误差等。 综上所述,使用Python可以进行多元线性回归的影响因子筛选,具体步骤如下: 1. 使用共线性诊断方法来找出存在共线关系的变量。 2. 使用机器学习库构建多元线性回归模型,拟合数据并打印出预测结果、系数和截距。 3. 使用statsmodels库进行影响点的探查,获取模型的详细统计信息。 希望可以对您有所帮助!<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [多元线性回归变量筛选](https://blog.csdn.net/weixin_39825322/article/details/110788240)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* [python实现多元线性回归,以2022数模国赛为例(实战必看,附源代码)](https://blog.csdn.net/jiebaoshayebuhui/article/details/126942000)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值