簡單的一元線性回歸演算法已經在這裡「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是已知的,我們要想...