基础思想

  • 线性回归,是在给出的众多数据中,找到一个可以满足所有数据样本并使得误差最小的线性方程。
  • 其中将满足误差最小的过程通过量化为误差函数,最后得出MSE(Mean Squared Error)最小即最优解。
  • 多元线性回归:需要注意的是将系数序列与x序列分别写在一个列向量中,并且将系数向量进行转置与x序号列向量进行点积,即得到最后的表达式。
  • 前置知识:中心极限定理、最大似然估计
  • 最小二乘线性回归:数据之间相互独立,可以看作误差服从正态分布

  • 如果明确表明或者可以推断得出误差服从泊松分布等,再根据最大似然估计的方法去求对应的MSE。 
  • 已知MSE函数,通过高数求驻点的方法求出最优解:

  • 驻点不一定是全局最优解,常用办法是判定函数是否为凸函数:黑塞矩阵(目标函数在X处二阶偏导数组成的对称矩阵)是否为半正定。

代码实现

简单实现

  • 使用numpy的自带功能进行求解一元线性回归,同时通过matplotlib库进行可视化:
import numpy as np
import matplotlib.pyplot as plt

#随机均匀分布 100行一列的
X = 2 * np.random.rand(100, 1)
print(len(X))
print(X)

#randn s是标准正态分布
Y = 5 + 4*X + np.random.randn(100, 1)

X_b = np.c_[np.ones((100, 1)), X]
print(X_b)
#linalg.inv为ie矩阵求逆
theta_best = np.linalg.inv(X_b.T.dot(X_b)).dot(X_b.T).dot(Y)
print(theta_best)

X_new = np.array([[0],[2]])
X_new_b = np.c_[(np.ones((2,1))), X_new]
print(X_new_b)

y_predict = X_new_b.dot(theta_best)
print(y_predict)

#r-表示折线图
plt.plot(X_new, y_predict, 'r-')
#b.蓝色散点图
plt.plot(X, Y, 'b.')
plt.axis([0,2,0,15])
plt.show()

  •  对于多元回归进行求解
#多元线性回归
X1 = 2 * np.random.rand(100, 1)
X2 = 3 * np.random.rand(100, 1)
X_b = np.c_[np.ones((100, 1)), X1, X2]
print(X_b)

Y = 5 + 4*X1 + 3*X2 + np.random.randn(100, 1)
theta_best = np.linalg.inv(X_b.T.dot(X_b)).dot(X_b.T).dot(Y)
print(theta_best)

使用LinearRegression类

  • 安装sklearn:
    • conda:conda install scikit-learn(需要注意不同的名称)
    • pip install sklearn(没有尝试过,由网上总结来)
  • 案例:
    import numpy as np
    from sklearn.linear_model import LinearRegression
    
    X1 = 2 * np.random.rand(100, 1)
    X2 = 2 * np.random.rand(100, 1)
    X = np.c_[X1, X2]
    y = 4 + 3*X1 + 5*X2 + np.random.randn(100, 1)
    lin_reg = LinearRegression()
    #相当于直接使用类中方法进行自动拟合
    lin_reg.fit(X, y)
    print(lin_reg.intercept_, lin_reg.coef_)
    
    #调整后不会自动带上截距,即从原点出发
    lin_reg2 = LinearRegression(fit_intercept=False)
    lin_reg2.fit(X, y)
    print(lin_reg2.intercept_, lin_reg2.coef_)
    
    #记住在选择维度时一定是与训练时候的维度相同的
    X_new = np.array([[0,0], [2,1], [2,4]])
    print(lin_reg.predict(X_new))
    

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐