使用线性回归函数实现简单的股票预测程序

需求:已知一个数组(array) A, A代表某一支股票的历史的开盘价;以及用于预测未来价格时所考虑的历史天数K,现在要大家写一个函数,将A中的用于预测开盘价所参考的历史值和所预测当天的实际值提取出来。
比如,A是这样一个数组 a=[1,2,3,4,5,6,7,8], 意思是这个股票过期期间的股票价格分别为第一天1刀,第二天2刀,以此类推。K如果等于2,意思是我们在预测股价的时候只考虑过去两个交易日的价格。即如果知道第一天和第二天的价格分别是1刀和2刀,那么预测的第三天价格应该是3刀;如果知道第二天和第三天的价格分别是2刀和3刀,那么预测的第四天价格应该是4刀。

RegressionEquation类:

package PredictBonus;
import org.apache.commons.math3.stat.descriptive.moment.Mean;
/***
 * least squares method
 * @author miaoyibo
 *
 */
public class RegressionEquation {

    private double[] dependentValues;

    private double[] independentValues;

    public RegressionEquation(double[] dependentValues, double[] independentValues) {
        this.dependentValues = dependentValues;
        this.independentValues = independentValues;
    }

    public double getMean(double[] dd) {
        Mean meanUtil = new Mean();
        return meanUtil.evaluate(dd);
    }

    public double[] getRegressionModel() {
        if(dependentValues.length!=independentValues.length) {
            return null;
        }
        Mean meanUtil = new Mean();
        double xmean=meanUtil.evaluate(independentValues);
        double ymean=meanUtil.evaluate(dependentValues);
        double numerator=0d;
        double denominator=0d;
        for(int i=0;i<dependentValues.length;i++) {
            double x=independentValues[i];
            double y=dependentValues[i];
            numerator=numerator+(x-xmean)*(y-ymean);
            denominator=denominator+(x-xmean)*(x-xmean);
        }
        double b1=numerator/denominator;
        double b0=ymean-b1*xmean;
        double[] model= {b0,b1};//b0值代表y轴的截距,b1值代表斜率。

        return model;
    }
}

Predict类:

package PredictBonus;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;

public class Predict {
    public Map kmom(double[]a, int k){
        ArrayList<Double> b=new ArrayList();//预测的历史数据
        for (int i=a.length-k;i<a.length;i++){
            b.add(a[i]);
        }
        double[] independentValues=new double[k];//independent:自变量
        for (int i=0;i<k;i++){
            independentValues[i]=i;
        }
        double[] dependentValues=new double[b.size()];//自变量
        for (int i=0;i<dependentValues.length;i++){
            dependentValues[i]=b.get(i);
        }
        Map<Integer,double[]> map=new HashMap<>();
        map.put(1,independentValues);
        map.put(2,dependentValues);
        return map;
    }

    public static void main(String[] args) {
        int k=2;
        Predict p=new Predict();
        Map map = p.kmom(new double[]{2, 3, 8, 23}, k);
        RegressionEquation regressionEquation=new RegressionEquation((double[]) map.get(2),(double[]) map.get(1));
        double[] regressionModel = regressionEquation.getRegressionModel();
        double predect =k*regressionModel[1]+regressionModel[0];
        System.out.println("预测的值为:"+predect);
    }
}

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
使用Java实现线性回归算法的高血压预测模型可以分为以下几个步骤: 1. 数据预处理:收集高血压相关的数据,包括年龄、性别、身高、体重、收缩压、舒张压等指标,并对数据进行清洗、归一化处理。 2. 特征选择:根据相关性分析、特征重要性评估等方法,选择与高血压相关的特征作为模型的输入变量。 3. 模型训练:使用线性回归算法对数据进行拟合,求出回归系数,得到预测模型。 4. 模型评估:使用测试集对训练好的模型进行验证,评估模型的预测性能。 下面是一个简单Java代码示例,实现线性回归算法的高血压预测模型: ```java import java.util.ArrayList; public class LinearRegression { private double[] theta; // 回归系数 private double alpha; // 学习率 private int iterations; // 迭代次数 public LinearRegression(double alpha, int iterations) { this.alpha = alpha; this.iterations = iterations; } // 训练模型 public void train(ArrayList<double[]> X, ArrayList<Double> y) { int m = X.size(); int n = X.get(0).length; theta = new double[n]; for (int i = 0; i < iterations; i++) { double[] error = new double[n]; for (int j = 0; j < m; j++) { double[] xi = X.get(j); double yi = y.get(j); double predict_yi = h(xi); for (int k = 0; k < n; k++) { error[k] += (predict_yi - yi) * xi[k]; } } for (int k = 0; k < n; k++) { theta[k] -= alpha * error[k] / m; } } } // 预测结果 public double predict(double[] X) { double y = h(X); return y; } // 假设函数 private double h(double[] X) { double y = 0; for (int i = 0; i < theta.length; i++) { y += theta[i] * X[i]; } return y; } } ``` 使用上述代码,可以在实际应用中根据高血压相关指标训练出一个线性回归模型,并通过预测输入数据得到高血压的预测结果。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值