使用文件读取数据和写入文件时,我无法获得正确的答案,但是当我调试时,它很好用
When using file to read data and writing file, I can't attain the correct anwser, but when I debug, it works nice
这是关于使用回归分析预测房价。
问题的主要是,当我在代码末尾设置断点时,我可以看到答案,但是当我 运行 它时,它 returns 错误代码。
我改变了读取文件的方式,但效果不佳。
请指出我的错误。
#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
using namespace std;
struct Data{
double feature[15];//特征值的数据
};
Data data[520];
struct Connct{
double connect;//和最后房价的相关性
int id;
}link[13];
double weight[15];//对应特征值的权重
//每个特征值对应的求和---对每个特征值用最小二乘法
double sumX[15];
double sumXY[15];
double sumXX[15];
double sumY=0.00;
double sumY2=0.00;
double besides=0.00;
int cmp(Connct x,Connct y){//返回较大的关联值
return x.connect>=y.connect;
}
int main(){
freopen("house.txt","r",stdin);
//freopen("123.txt","w",stdout);
for(int i=0;i<506;i++){
for(int j=0;j<14;j++){
scanf("%lf",&data[i].feature[j]);
}
}
preprocess();//归一化处理
//求和
for(int i=0;i<506;i++){
for(int j=0;j<13;j++){
sumX[j]+=data[i].feature[j];
sumXX[j]=sumXX[j]+data[i].feature[j]*data[i].feature[j];
sumXY[j]=sumXY[j]+data[i].feature[j]*data[i].feature[13];
}
sumY+=data[i].feature[13];
sumY2=sumY2+data[i].feature[13]*data[i].feature[13];
}
//对每一维度使用最小二乘法,计算出权重计算相关性
for(int i=0;i<13;i++){
weight[i]=(sumXY[i]-sumX[i]*sumY/506)/(sumXX[i]-sumXX[i]/506);
link[i].connect=(506*sumXY[i]-sumX[i]*sumY)/(sqrt(506*sumXX[i]-sumX[i]*sumX[i])*sqrt(506*sumY2-sumY*sumY));
link[i].id=i;
}
//找出最相关的三个因素
sort(link,link+13,cmp);
//处理,计算出偏置
for(int i=0;i<3;i++){
besides+=weight[link[i].id]*sumX[link[i].id];
printf("%lf ",weight[link[i].id]);
}
besides=(sumY-besides)/506;
printf("\n%lf",besides);
return 0;
}
已经通过删除freopen.After的功能解决了我删除了,调试的答案与运行相同。也许freopen有一些我不知道的秘密用法。
这是关于使用回归分析预测房价。 问题的主要是,当我在代码末尾设置断点时,我可以看到答案,但是当我 运行 它时,它 returns 错误代码。 我改变了读取文件的方式,但效果不佳。 请指出我的错误。
#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
using namespace std;
struct Data{
double feature[15];//特征值的数据
};
Data data[520];
struct Connct{
double connect;//和最后房价的相关性
int id;
}link[13];
double weight[15];//对应特征值的权重
//每个特征值对应的求和---对每个特征值用最小二乘法
double sumX[15];
double sumXY[15];
double sumXX[15];
double sumY=0.00;
double sumY2=0.00;
double besides=0.00;
int cmp(Connct x,Connct y){//返回较大的关联值
return x.connect>=y.connect;
}
int main(){
freopen("house.txt","r",stdin);
//freopen("123.txt","w",stdout);
for(int i=0;i<506;i++){
for(int j=0;j<14;j++){
scanf("%lf",&data[i].feature[j]);
}
}
preprocess();//归一化处理
//求和
for(int i=0;i<506;i++){
for(int j=0;j<13;j++){
sumX[j]+=data[i].feature[j];
sumXX[j]=sumXX[j]+data[i].feature[j]*data[i].feature[j];
sumXY[j]=sumXY[j]+data[i].feature[j]*data[i].feature[13];
}
sumY+=data[i].feature[13];
sumY2=sumY2+data[i].feature[13]*data[i].feature[13];
}
//对每一维度使用最小二乘法,计算出权重计算相关性
for(int i=0;i<13;i++){
weight[i]=(sumXY[i]-sumX[i]*sumY/506)/(sumXX[i]-sumXX[i]/506);
link[i].connect=(506*sumXY[i]-sumX[i]*sumY)/(sqrt(506*sumXX[i]-sumX[i]*sumX[i])*sqrt(506*sumY2-sumY*sumY));
link[i].id=i;
}
//找出最相关的三个因素
sort(link,link+13,cmp);
//处理,计算出偏置
for(int i=0;i<3;i++){
besides+=weight[link[i].id]*sumX[link[i].id];
printf("%lf ",weight[link[i].id]);
}
besides=(sumY-besides)/506;
printf("\n%lf",besides);
return 0;
}
已经通过删除freopen.After的功能解决了我删除了,调试的答案与运行相同。也许freopen有一些我不知道的秘密用法。