日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

java求多项式回归_多项式回归(Polynomial Regression)(附代码)

發布時間:2023/12/15 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java求多项式回归_多项式回归(Polynomial Regression)(附代码) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

多項式回歸有個很重要的因素就是指數(degree)。如果我們發現數據的分布大致是一條曲線,那么很可能符合多項式回歸,但是我們不知道degree是多少。所以我們只能一個個去試,直到找到最擬合分布的degree。這個過程我們可以交給數據科學軟件完成。需要注意的是,如果degree選擇過大的話可能會導致函數過于擬合, 意味著對數據或者函數未來的發展很難預測,也許指向不同的方向。

這個回歸的計算需要用到矩陣數據結構。有的編程語言可能需要導入外庫。

多項式回歸有個很重要的因素就是指數(degree)。如果我們發現數據的分布大致是一條曲線,那么很可能符合多項式回歸,但是我們不知道degree是多少。所以我們只能一個個去試,直到找到最擬合分布的degree。這個過程我們可以交給數據科學軟件完成。需要注意的是,如果degree選擇過大的話可能會導致函數過于擬合, 意味著對數據或者函數未來的發展很難預測,也許指向不同的方向。

這個回歸的計算需要用到矩陣數據結構。有的編程語言可能需要導入外庫。

我們對所有擬合這個公式的點,用矩陣表示他們的關系

如果用矩陣符號表示:

多項式回歸向量的系數(使用最小二乘法):

Java 和 Python 代碼如下:package regression;

import Jama.Matrix;

import Jama.QRDecomposition;

public class PR {

private final int N;

private final int degree;

private final Matrix beta;

private double SSE;

private double SST;

public PR(double[] x, double[] y, int degree) {

this.degree = degree;

N = x.length;

// build Vandermonde matrix

double[][] vandermonde = new double[N][degree+1];

for (int i = 0; i < N; i++) {

for (int j = 0; j <= degree; j++) {

vandermonde[i][j] = Math.pow(x[i], j);

}

}

Matrix X = new Matrix(vandermonde);

// 從向量中增加一個矩陣

Matrix Y = new Matrix(y, N);

// 找到最小的平方值

QRDecomposition qr = new QRDecomposition(X);

beta = qr.solve(Y);

// 得到y的平均值

double sum = 0.0;

for (int i = 0; i < N; i++)

sum += y[i];

double mean = sum / N;

// total variation to be accounted for

for (int i = 0; i < N; i++) {

double dev = y[i] - mean;

SST += dev*dev;

}

// variation not accounted for

Matrix residuals = X.times(beta).minus(Y);

SSE = residuals.norm2() * residuals.norm2();

}

public double beta(int j) {

return beta.get(j, 0);

}

public int degreee() {

return degree;

}

public double R2() {

return 1.0 - SSE/SST;

}

public double predict(double x) {

double y = 0.0;

for (int j = degree; j>=0; j--) {

y = beta(j) + (x*y);

}

return y;

}

public String toString() {

String s = "";

int j = degree;

// 忽略系數為0.

while (Math.abs(beta(j)) < 1E-5)

j--;

// create remaining terms

for (j = j; j >= 0; j--) {

if (j == 0) s += String.format("%.2f ", beta(j));

else if (j == 1) s += String.format("%.2f N + ", beta(j));

else s += String.format("%.2f N^%d + ", beta(j), j);

}

return s + " (R^2 = " + String.format("%.3f", R2()) + ")";

}

}

ref:

總結

以上是生活随笔為你收集整理的java求多项式回归_多项式回归(Polynomial Regression)(附代码)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。