for(i in 1:nsimu){ aa=data[order(runif(ss)),] A0=aa[c(1:ss0),] A1=aa[-c(1:ss0),] model.1=glm(是否点击 ~ 平台编码+ 竞拍底价 + 是否为全插屏广告 + 手机运营商 + 网络状况 + 设备制造商 + 时段 ,family=binomial(link=logit),data=A0) model.2=glm(是否点击 ~ 平台编码+ 竞拍底价 + 是否为全插屏广告 + 设备制造商 + 时段 ,family=binomial(link=logit),data=A0) model.3=glm(是否点击 ~ 是否为全插屏广告 ,family=binomial(link=logit),data=A0) pred.1=predict(model.1,A1) pred.2=predict(model.2,A1) pred.3=predict(model.3,A1) Y=A1$是否点击 auc.1=roc(Y,pred.1)$auc auc.2=roc(Y,pred.2)$auc auc.3=roc(Y,pred.3)$auc AUC[i,]=c(auc.1,auc.2,auc.3) }
时间: 2024-01-17 08:04:41 浏览: 24
这段代码中,首先通过`order(runif(ss))`来产生一个长度为`ss`的随机序列,然后使用该序列对原始数据`data`进行随机重排,得到一个新的数据集`aa`。接着,将`aa`按照`ss0`的比例分成两个数据集`A0`和`A1`,用`A0`来训练模型,用`A1`来测试模型预测结果。其中,`是否点击`为因变量,`平台编码`、`竞拍底价`、`是否为全插屏广告`、`手机运营商`、`网络状况`、`设备制造商`、`时段`为自变量。接着,使用`glm`函数来建立三个不同的逻辑回归模型,分别为`model.1`、`model.2`、`model.3`。其中,`model.1`包含所有自变量,`model.2`去掉了`手机运营商`和`网络状况`两个变量,`model.3`只包含`是否为全插屏广告`一个变量。使用`predict`函数对`A1`数据集进行预测,得到三个模型的预测结果`pred.1`、`pred.2`、`pred.3`。接着使用`roc`函数计算出三个模型的AUC值,存放在`AUC`矩阵中的第`i`行。这个过程将重复运行`nsimu`次,得到三个模型的AUC值的分布情况。
相关问题
这两个网络的流量矩阵怎么计算,用MATLAB实现:m0=2 m=2 N=20 x1=100rand(1,m0); y1=100rand(1,m0); x2=100rand(1,m0); y2=100rand(1,m0); for i=1:N z11(i)=10 end z1=z11' for i=1:N z22(i)=90 end z2=z22' %for i=1:N %z1(i)=10 %end %for i=1:N %z2(i)=90 %end for i=1:m0 for j=i+1:m0 p1=rand(1,1); p2=rand(1,1); if p1>0.5 a1(i,j)=1; a1(j,i)=0; end if p2>0.5 a2(i,j)=1; a2(j,i)=0; end end end for k=m0+1:N M=size(a1,1);p=zeros(1,M); M1=size(a2,1);p1=zeros(1,M1); x0=100rand(1,1);y0=100rand(1,1); x1(k)=x0;y1(k)=y0; x2(k)=x0;y2(k)=y0; if length(find(a1==1))==0 p(:)=1/M; else for i=1:M p(i)=length(a1(i,:)==1)/length(find(a1==1)); end if length(find(a2==1))==0 p1(:)=1/M1; else for i=1:M1 p1(i)=length(a2(i,:)==1)/length(find(a2==1)); end end end pp=cumsum(p); pp1=cumsum(p1); for i=1:m random_data=rand(1,1); random_data1=rand(1,1); aa=find(pp>=random_data);jj=aa(1); aa1=find(pp1>=random_data1);jj1=aa1(1); a1(k,jj)=1; a1(jj,k)=1; a2(k,jj1)=1; a2(jj1,k)=1; end end
这段代码的作用是生成两个网络的流量矩阵a1和a2,其中m0是已经存在的节点数,N是总的节点数,x1、y1、x2、y2是节点的坐标,z1和z2是节点的流量需求。下面是计算流量矩阵的代码:
```matlab
m0 = 2;
m = 2;
N = 20;
x1 = 100*rand(1,m0);
y1 = 100*rand(1,m0);
x2 = 100*rand(1,m0);
y2 = 100*rand(1,m0);
% 初始化节点流量需求
for i = 1:N
z11(i) = 10;
end
z1 = z11';
for i = 1:N
z22(i) = 90;
end
z2 = z22';
% 初始化连接矩阵
a1 = zeros(N,N);
a2 = zeros(N,N);
% 随机连接已有节点
for i = 1:m0
for j = i+1:m0
p1 = rand(1,1);
p2 = rand(1,1);
if p1 > 0.5
a1(i,j) = 1;
a1(j,i) = 0;
end
if p2 > 0.5
a2(i,j) = 1;
a2(j,i) = 0;
end
end
end
% 生成新节点并进行连接
for k = m0+1:N
% 计算节点k与已有节点的连接概率
M = size(a1,1);
p = zeros(1,M);
M1 = size(a2,1);
p1 = zeros(1,M1);
x0 = 100*rand(1,1);
y0 = 100*rand(1,1);
x1(k) = x0;
y1(k) = y0;
x2(k) = x0;
y2(k) = y0;
if length(find(a1==1)) == 0
p(:) = 1/M;
else
for i = 1:M
p(i) = length(a1(i,:)==1)/length(find(a1==1));
end
end
if length(find(a2==1)) == 0
p1(:) = 1/M1;
else
for i = 1:M1
p1(i) = length(a2(i,:)==1)/length(find(a2==1));
end
end
pp = cumsum(p);
pp1 = cumsum(p1);
for i = 1:m
random_data = rand(1,1);
random_data1 = rand(1,1);
aa = find(pp>=random_data);
jj = aa(1);
aa1 = find(pp1>=random_data1);
jj1 = aa1(1);
a1(k,jj) = 1;
a1(jj,k) = 1;
a2(k,jj1) = 1;
a2(jj1,k) = 1;
end
end
```
其中,`a1`和`a2`即为两个网络的流量矩阵。
c语言:求sn=a+aa+aaa
以下是两种C语言求Sn=a+aa+aaa的例子:
1.使用循环计算
```c
#include <stdio.h>
int func(int a, int n){
int result = 0; // 结果
int i = 0; // 每次累加的结果为上一次的加数*10再加a
int add = a;
while (i < n) // 循环n次,也就是n项和
{
result += add;
add = add * 10 + a;
i++; }
return result;
}
int main(){
int a, n;
printf("请输入a和n:\n");
scanf("%d%d", &a, &n);
printf("结果为:%d\n", func(a, n));
return 0;
}
```
2.使用数学公式计算
```c
#include <stdio.h>
#include <math.h>
int func(int a, int n){
int result = 0;
int i;
for (i = 1; i <= n; i++)
{
result += a * (pow(10, i) - 1) / 9;
}
return result;
}
int main(){
int a, n;
printf("请输入a和n:\n");
scanf("%d%d", &a, &n);
printf("结果为:%d\n", func(a, n));
return 0;
}
```