016-线性回归——最简单、最容易理解的模型

有很多同学,刚开始学习数据挖掘的时候,入门的第一个算法就是线性回归。那么今天本人将浅析数据挖掘算法中的——线性回归问题。

线性回归,顾名思义就是线性地去求解一个问题,比如说

y=2x

在上面的算式中,x是我们的输入值,y是我们的输出值,2则是我们将要求得的函数,那么把上面的算式泛化之后可以得到,

y=f(x)

其中x是输入,y是输出,f是要求的函数,那么我们通过训练得到f的过程就叫做线性回归

 

在我们实际的计算中,最常见的场景是

y=\Theta x

其中θ和x都是矩阵,这个时候有必要讲解最常见的矩阵运算模型——最小二乘法模型

 

最小二乘法模型三大公式:

y=\Theta x

L=\frac{1}{2}\left ( \Theta x-y \right )^{T}\left ( \Theta x-y \right )

\Theta =\left ( x^{T}x \right )^{-1}x^{T}y

——公式一是参数模型,这是一个线性模型

——公式二是一个损失函数,线性回归的终极目的就是使得这个函数值最小

——公式三是求导数之后,可以直接在Python里面操作的一个公式

 

具体操作:首先将Numpy这个库,这是一个神奇的库,对矩阵操作非常友好

import numpy as np
#矩阵的逆
from numpy.linalg import inv
#点乘
from numpy import dot
#矩阵
from numpy import mat

操作代码如下:

import numpy as np
from numpy.linalg import inv
from numpy import dot
from numpy import mat

A = np.mat([1,1])
print(A)

B = np.mat([[1,2],[2,3]])
print(B)

#A 1*2  B 2*2
print(dot(A,B))

print(dot(B,A.T))#运算成功

#求B的逆矩阵
print("B的逆矩阵",inv(B))

#求B的第一行
print(B[0,:])
# 求B的第一列
print(B[:,0])

#把一行两列变成两行一列
print(A.reshape(2,1))

C = np.mat([[2,3],[4,5],[5,6]])
print(C)
#转为2行3列或者1行6列
print(C.reshape(2,3))#[[2 3 4] [5 5 6]]
print(C.reshape(1,6))

#y=2x
#把一行三列的输入值转变为三行一列
X = mat([1,2,3]).reshape(3,1)
Y = 2*X

#然后求θ
xita = dot(dot(inv(dot(X.T,X)),X.T),Y)
print(xita)

wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==

猜你喜欢

转载自blog.csdn.net/qq_31698195/article/details/89399241