回归:建立因变量 y 和自变量 x 之间的函数关系
- y ˆ k = f ( X ) \text{\^{y}}_k = f(X) yˆk=f(X)
- y:希望被预测或被解释的变量,目标或响应
- x:预测变量,一般指容易获得的样本特征,x 可以作为向量。当包含多个特征时,为多元回归
- 根据函数关系 f f f 是否为线性,分为线性回归和非线性回归
线性回归
y ˆ k = β 0 + β 1 x k \text{\^{y}}_k = \beta_0 + \beta_1x_k yˆk=β0+β1xk
- β 0 \beta_0 β0:截距
- β 1 \beta_1 β1:回归系数
- y ˆ k \text{\^{y}}_k yˆk:将模型得到的值称为预测值
- y k \text{y}_k yk:将对 y 观测得到的值称为观测值
- 预测值和观测值之间的差异就是残差
- 最小二乘法求回归线方程
- 回归直线是使残差平方和最小的直线,且通过点 ( x ˉ , y ˉ ) (\bar{x}, \bar{y}) (xˉ,yˉ)
- 均方根误差 RMSE: R M S E = 1 N ∑ ( y ˆ i − y k ) 2 RMSE = \sqrt{{\frac{1}{N}\sum(\text{\^{y}}_i - \text{y}_k)^2 }} RMSE=N1∑(yˆi−yk)2
- RMSE与 y 有相同单位或量纲
- Sklearn库中linear_mode 模块中的LinerRegression对象可以用来做线性回归
鸢尾花数据集:http://archive.ics.uci.edu/ml/datasets/Iris
import pandas as pd
import numpy as np
from scipy import stats
from matplotlib import pyplot as plt
from sklearn.linear_model import LinearRegression
from sklearn import metrics
my_iris=pd.read_csv('E:\my_data\iris\iris.csv', sep=',', decimal='.',header=None,
names=['sepal_length','sepal_width',
'petal_length', 'pental_width', 'target'])
feature_cols='petal_length'
x = my_iris[[feature_cols]]
y = np.array(my_iris['sepal_length'])
plt.plot(x, y, 'o', alpha=0.5)
linreg = LinearRegression()
linreg.fit(x, y)
print('f(x) = ', linreg.intercept_ , '+', linreg.coef_[0], 'x')
pred_y = linreg.predict(x)
plt.plot(x, pred_y,'g',alpha=0.5)
plt.plot(np.array(x).mean(),y.mean(), 'r*', ms = 12)
print('RMSE =', np.sqrt(metrics.mean_squared_error(y, pred_y)))
print('\n')
print('r_score = ', linreg.score(x, y))
- 回归效果评价参数( r 2 {r^2} r2):回归平方和与样本的总平方和之比,也等于1减去残差平方和之比。用模型可解释部分与总离差比较,取值在0到1之间,越靠近1,模型可解释乘法越多,性能越好。
- 总平方和:样本相对于样本均值的总离差。
- 回归平方和:由于回归函数索隐入的样本相对于均值的离差,属于样本变异性中可以被回归模型解释的部分。
- 残差平方和:变异性中不能被模型解释的部分。
线性相关分析 | 线性回归模型 |
---|---|
线性相关系数反映两个变量的耦合程度,其中两个变量的地位平等,不能用一个去预测另一个 | 强调回归函数的确定,之间建立起两个变量之间的函数关系,以期用 x 去预测 y |
取值 [ -1, 1] | 取值 [0, 1] |
- r 2 = ρ 2 r^2 = \rho^2 r2=ρ2