线性回归

把酒祝东风,且共从容。垂杨紫陌洛城东。总是当时携手处,游遍芳丛。

聚散苦匆匆,此恨无穷。今年花胜去年红。可惜明年花更好,知与谁同?

欧阳修 《浪淘沙》

 

笔记地址:机器学习-白板推导系列(三)-线性回归(Linear Regression) 笔记 - 知乎 (zhihu.com)

视频地址:机器学习-白板推导系列(三)-线性回归

目录

  1. 线性回归
  2. 局部加权线性回归
  3. 岭回归和逐步线性回归

Y = W*X + 1*b

W = (XTX)-1XTY

 

 1 #include <iostream>
 2 #include <fstream>
 3 #include <Eigen/Dense>
 4 #include <string>
 5 #include "StringUntils.h"
 6 
 7 using namespace std;
 8 using namespace Eigen;
 9 
10 int main()
11 {
12     string s;
13     string filename;
14     filename = "E:/shujuji/ML/LSE/abalone.txt";
15     fstream file(filename);
16 
17     int lines=0;
18 
19     getline(file, s);
20     vector<string> l = vsplit(s, "    ");
21     int cols = l.size();
22 
23     file.clear();
24     file.seekg(0, ios::beg);
25 
26     while (!file.eof())
27     {
28         getline(file, s);
29         lines++;
30     }
31 
32     MatrixXd dataM(lines-1,cols-1);
33     MatrixXd labelM(lines-1, 1);
34 
35     string tmp[8];
36 
37     vector<string> res;
38 
39     file.clear();
40     file.seekg(0, ios::beg);
41 
42     int c = 0;
43     while (!file.eof())
44     {
45         getline(file, s);
46         res = vsplit(s, "    ");
47 
48         for (int i = 0; i < res.size(); i++) {
49             
50             if (i == res.size() - 1) {
51                 labelM(c,0) = stod(res[i]);
52                 break;
53             }
54             dataM(c, i) = stod(res[i]);
55         }
56         c++;
57     }
58 
59     MatrixXd XX = dataM.transpose() * dataM;
60     MatrixXd XY = dataM.transpose() * labelM;
61     MatrixXd W;
62 
63     if (XX.determinant() != 0) {
64         W = XX.inverse() * XY;
65     }
66 
67     cout << W << endl;
68 
69     return 0;
70 }

 

posted @ 2021-12-10 10:11  人间别久不成悲  阅读(67)  评论(0编辑  收藏  举报