最小二乘法 之 线性函数模型
原理可见https://zh.wikipedia.org/wiki/%E6%9C%80%E5%B0%8F%E4%BA%8C%E4%B9%98%E6%B3%95
链接需要科学上网(2015.10),
实现阶段有多种方法,本文采用维基百科最后介绍的广义逆矩阵的方法计算。
即输入矩阵的广义逆矩阵{点乘}输出矩阵 ,运算结果既为求解的 参数矩阵。
需要用到的函数为 pinv ,matlab中pinv(X) , python中numpy库中有此函数,即 : np.linalg.pinv
code:
#Global Vars global params #train function def train(train_x , train_y): global params pinv = np.linalg.pinv(train_x) # cacul the pseudo-inverse matrix params = np.dot( pinv , train_y ) # figure out the params print('The params:') print(params)
以上即为训练过程。
随后可以进行回归: 即将测试数据的x矩阵点乘参数矩阵 ,可得模型得到的输出。
code
#test function def test(test_x , test_y , result_path): global params rs = open(result_path , 'w') regressValue = np.dot(test_x,params) print('The regress value of test data:') print(regressValue) print('-------------------------------------------------------') print('The errors:') err = regressValue - test_y print(err) print('The RMSE(root mean squared error) is:') MRSE = math.sqrt(np.sum(np.square(err)) / regressValue.size) print(MRSE) print('-------------------------------------------------------')
源代码传送门(python):http://download.csdn.net/detail/zzukun/9210049