利用C vector實現OLS多元回歸

2021-10-04 01:46:16 字數 1754 閱讀 3732

使用最小二乘法實現多元回歸,只需將資料格式化存入txt文字(格式化方法見**內部)然後調整read_data("your_path")執行即可列印出模型中引數的估計值;

```cpp

#include#include#include#includeusing namespace std;

typedef vectorvd;

typedef vector> vdd;

void matrixinversion(vdd a,vdd &b)

}if (0.0 == d)

if (is[k] != k)

for (j = 0; j <= n - 1; j++)

if (js[k] != k)

for (i = 0; i <= n - 1; i++)

a[k][k] = 1.0 / a[k][k];

for (j = 0; j <= n - 1; j++)

if (j != k)

for (i = 0; i <= n - 1; i++)

if (i != k)

for (j = 0; j <= n - 1; j++)

if (j != k)

for (i = 0; i <= n - 1; i++)

if (i != k)

}for (k = n - 1; k >= 0; k--)

if (is[k] != k)

for (i = 0; i <= n - 1; i++)

}b = a;

free(is);

free(js);

return;

//矩陣求逆有點生,這裡參考了某位大神的**

//但是回頭又找不到在哪了,但是絕非原創!!!對大神表示歉意

}vdd read_data(string path)//設定乙個函式來讀取檔案裡面的資料

return num;

}void add_constant(vdd& x)//向設計矩陣的第一行加上一來估計出常量

vdd mat_muti(vdd x1, vdd x2)//實現矩陣乘法運算

else

res.push_back(ress);

} }return res;

}vdd reverse(vdd x)

return temp;

}vdd regression(vdd y, vector> x)//y初始化為外層只有乙個元素的雙層vector

add_constant(x);

m++;//列數在原來矩陣上加1,得到設計矩陣

vdd xt = reverse(x);//求轉置矩陣

vdd xi;

matrixinversion(mat_muti(x, xt), xi);

reg_res =mat_muti(mat_muti(xi, xt), y); //這裡返回的還是雙層vector但是依然可以檢視結果

return reg_res;

}void print(vdd x)//測試函式用於列印vdd

}void main()

//此時x就是data;

y.push_back(yy);//必須初始化為單元素二維vector;

vdd reg_result=regression(data, y);

print(reg_result);//列印出估計出來的最小二乘引數;

}

c vector基本實現

include include include includeusing namespace std namespace bit 第乙個元素的位置 iterator end 最後乙個元素的位置 constiterator cbegin const constiterator cend const s...

利用systemd 實現 tomcat 多例項

環境 centos 7 x86 64 1 安裝jdk rpm ivh jdk 8u60 linux x64.rpm 2 建立普通使用者 getent group tomcat groupadd r tomcat getent passwd tomcat useradd r d opt s bin n...

c vector(模擬實現)

include using namespace std namespace bit public vector start nullptr finish nullptr end of sorage nullptr vector size t n,const t value t start nullp...