使用最小二乘法實現多元回歸,只需將資料格式化存入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...