N-42. 回归预测

这题放在本周也不知道是什么意思,感觉应该放到前3周当一个分类讨论
就纯ex人,对练习代码没有一点用
题目描述:

机器学习是人工智能的一个分支,是一门人工智能的科学,该领域的主要研究对象是人工智能,特别是如何在经验学习中改善具体算法的性能。随着人工智能技术的发展,机器学习领域也越来越受到重视。

回归分析预测法,是在分析市场现象自变量和因变量之间相关关系的基础上,建立变量之间的回归方程,并将回归方程作为预测模型,根据自变量在预测期的数量变化来预测因变量关系大多表现为相关关系,因此,回归分析预测法是一种重要的市场预测方法,是有监督分析的一类分支,当我们在对市场现象未来发展状况和水平进行预测时,如果能将影响市场预测对象的主要因素找到,并且能够取得其数量资料,就可以采用回归分析预测法进行预测。它是一种具体的、行之有效的、实用价值很高的常用市场预测方法。

题目中将给你多组数据,每组数据包含多对x-y的值。请你求出每组数据的线性回归方程,以及在x等于某个值时,对y的预测。

附线性回归方程公式:

输入格式:

共m组输入数据(m不给出),每组数据占三行:

第一行 n为数据个数, p为待预测的自变量数值;

第二行n个数据,表示该组数据的x值。

第三行n个数据,表示该组数据的y值,与第二行对应。

输出格式:

共m行,每行两个式子,中间用空格隔开,前半部分表示求得的回归方程,格式为y=bx+a(常数均保留两位小数),后半部分表示在x=p时对y的预测值,格式为predict=y(p),保留两位小数。具体格式请参考样例输出(例外:如果a=0,则前半部分输出为y=bx;如果b=0,则前半部分输出为y=a)。

行末没有多余空格,但是有换行符。


这道题就直接按它说的做就行了,但是这个案例是这样的:因为它只让你输出两位小数,如果a/b在
(-0.005,0.005)之间的话,两位小数就会变为0,按照案例的说法就不能再输出a/b了
eg. b = 0.003 , a = 3.4
我们就要输出y=3.4 predict=3.4
而不是y=0.0x+3.4 predict=3.4
这点比较坑人,其他还好。

#include <stdio.h>  
#include <math.h>  
int a[50010], b[50010];  
int main () {  
    int n, p;  
    while (scanf("%d%d", &n, &p)!= EOF) {  
        long long ans1 = 0, ans2 = 0, ans3 = 0, ans4 = 0;  
        double res1 = 0, res2 = 0;  
        for (int i = 1; i <= n; i++) scanf("%d", &a[i]);  
        for (int i = 1; i <= n; i++) scanf("%d", &b[i]);  
        for (int i = 1; i <= n; i++) {  
            ans2 += a[i];  
            ans3 += b[i];  
        }  
        double av1 = (double)ans2 / n, av2 = (double)ans3 / n;  
        for (int i = 1; i <= n; i++) {  
            res1 += (a[i] - av1) * (b[i] - av2);  
            res2 += (a[i] - av1) * (a[i] - av1);  
        }  
        double res3 = res1 / res2;  
        double res4 = av2 - res3 * av1;  
        if (res3 == 0) printf("y=%.2lf predict=%.2lf\n", res4, res4);  
        else if (res3 <= 0.02 && res3 >= -0.02) printf("y=%.2lf predict=%.2lf\n", res4, res3 * p + res4);  
        else if(res4 > 0) printf("y=%.2lfx+%.2lf predict=%.2lf\n", res3, res4, res3 * p + res4);  
        else if(res4 < 0) printf("y=%.2lfx%.2lf predict=%.2lf\n", res3, res4, res3 * p + res4);  
        else printf("y=%.2lfx predict=%.2lf\n", res3, res3 * p + res4);  
    }  
    return 0;  
}  

(我处理的时候就随便了一点,不过不影响答案)

posted @ 2022-04-27 17:37  misasteria  阅读(203)  评论(0编辑  收藏  举报