用C語言實現簡單的多元線性回歸演算法 一

2021-10-08 07:18:46 字數 3763 閱讀 4175

簡單的一元線性回歸演算法已經在這裡「c語言簡單的一元線性回歸演算法」,並且也簡單闡述了梯度求解推導過程。

今天我們再呈上多元線性回歸演算法梯度下降的c語言實現,**中已經加入了相應的注釋。如下:

multiplelinearregression.h

#ifndef multiplelinearregression_multiplelinearregression_h

#define multiplelinearregression_multiplelinearregression_h

//設定樣本數為 10

#define sample_count 10

//設定引數個數為 6

#define parameter_count 6

void init(double learning_rate, long int x_len,long int x_arg_count,int channel);

void fit(double train_x[sample_count][parameter_count],double train_y[parameter_count],double temp[parameter_count],double theta[parameter_count]);

double _f(const double train_x[parameter_count],double theta[parameter_count]);

double* predict(double train_x[sample_count][parameter_count],double theta[parameter_count]);

double loss(double train_x[sample_count][parameter_count],double train_y[parameter_count],

double temp[parameter_count],double *loss_val);

void calc_gradient(double train_x[sample_count][parameter_count],double train_y[parameter_count],double *temp,double *theta);

void train_step(double temp[parameter_count],double theta[parameter_count]);

#endif //multiplelinearregression_multiplelinearregression_h

multiplelinearregression.h

#include "multiplelinearregression.h"

#include #include //int type_count = 5;

int g_x_len = 10;

double g_learning_rate = 0.01;

int g_x_arg_count = 5;

int g_channel = 1;

double g_out_y_pt = 0;

//**輸出值指標

double *y_pred_pt = 0;

//損失值

double loss_val[1] = ;

/* * learning_rate 學習率

* * x_len 樣本個數

* * x_arg_count 引數個數

* * channel 通道數《暫未考慮》

* */

void init(double learning_rate, long int x_len,long int x_arg_count,int channel)

void fit(double train_x[sample_count][parameter_count],double train_y[parameter_count],

double temp[parameter_count],double theta[parameter_count])

}double _f(const double train_x[parameter_count],double theta[parameter_count])

return g_out_y_pt;

}//**

double* predict(double train_x[sample_count][parameter_count],double theta[parameter_count])

return y_pred_pt;

}//求損失

double loss(double train_x[sample_count][parameter_count],double train_y[parameter_count],

double theta[parameter_count],double *loss_val)

loss_val[0] = loss_val[0] / sample_count;

printf(" loss_val = %f\n", loss_val[0]);

return loss_val[0];

}//求梯度

void calc_gradient(double train_x[sample_count][parameter_count],double train_y[parameter_count],

double temp[parameter_count], double theta[parameter_count])

sum += (hx - train_y[j]) * train_x[j][i];

}temp[i] = sum / g_x_len * 0.01;

}printf("\n--------------------\n");

train_step(temp, theta);

}//更新引數值

void train_step(double temp[parameter_count],double theta[parameter_count])

}

main.c

//#include "src/linerregression.h"

#include "utils/util.h"

#include "src/multiplelinearregression.h"

int main() ,,,

,,,,

,,

};double y_pt[10] = ;

//初始引數函式 temp 只是乙個臨時變數

double temp[6] = ;

double theta[6] = ;

//初始化相關引數

init(0.01,10,5+1,1);

fit(x_pt,y_pt,temp,theta);

return 0;

}

可以看到再訓練10000次的時候損失已經比較小了,各個引數也已經接應我們預設的引數了

step 9999:

--------------------

theta[0] = 5.994281

theta[1] = 3.999957

theta[2] = 9.000404

theta[3] = 10.000375

theta[4] = 2.000242

loss_val = 0.900745

process finished with exit code 0

python多元線性回歸簡單實現

繼上次對成都房租進行視覺化後,這次簡單的做乙個成都房租與面積 所屬區的多元回歸分析。資料集一共有3w資料,每一組觀測值對應乙個房租情況,其中 價錢 乙個月房租,單位人民幣。面積 租房的面積,單位平方公尺。所屬區 序號如下 步驟1 首先使用pandas庫匯入資料 import pandas as pd...

多元線性回歸公式推導及R語言實現

實際中有很多問題是乙個因變數與多個自變數成線性相關,我們可以用乙個多元線性回歸方程來表示。為了方便計算,我們將上式寫成矩陣形式 y xw 我們希望求出的w是最接近線性方程的解的,最接近我們定義為殘差平方和最小,殘差的公式和殘差平方和的公式如下 上面的公式用最小殘差平方和的方式匯出的,還有一種思路用最...

用C語言實現乙個簡單的一元線性回歸演算法

今天我們用c語言實現乙個簡單的線性回歸演算法 在 前面我們在回顧一下線性回歸。線性回歸是回歸問題中的一種,線性回歸假設目標值與特徵是線性相關的,即滿足乙個多元一次方程式。通過構建損失函式,來求解損失函式最小時的引數w和b。通常表示式可以表示如下 其中 y 為 值,自變數x和因變數y是已知的,我們要想...