目录
一,回归分析
1,概述
在大数据分析中,回归分析是一种预测性的建模技术,它研究的是因变量(目标)和自变量(预测器)之间的关系。这种技术通常用于预测分析,时间序列模型以及发现变量之间的因果关系。例如,司机的鲁莽驾驶与道路交通事故数量之间的关系,最好的研究方法就是回归。
2、分类
按照涉及的变量的多少,分为一元回归和多元回归分析;
按照因变量的多少,可分为简单回归分析和多重回归分析;
按照自变量和因变量之间的关系类型,可分为线性回归分析和非线性回归分析。
3,相关分析与回归分析联系
两者均为研究与测度两个或两个以上变量之间关系的方法,相关分析是回归分析的基础和前提,只有变量之间存在高度相关时,进行回归分析确定相关的具体形式才有意义;回归分析是相关分析的继续和深入,变量之间的相关程度需要回归分析来确认。
二,标准差、方差、协方差、残差、均方误差、标准误差
(一)区别关系
1,方差(Variance)
方差用于衡量随机变量或一组数据的离散程度。
1.1 总体方差
总体方差,也叫做有偏估计,也是标准定义的方差,初高中数学所计算的方差。
其中,n表示这组数据个数,x1、x2、x3……xn表示这组数据具体数值。
总体方差:
其中,\bar{X}为数据的平均数,n为数据的个数,s^2为方差。
1.2 样本方差
样本方差,无偏方差,在实际情况中,因为样本过多或无法穷举,总体均值是很难得到的,往往通过抽样来计算,于是有样本方差,计算公式如下:
这里样本方差公式分母为n-1,为什么样本方差(sample variance)的分母是 n-1? 知乎上,有详细公式推导,但是对于我这种菜鸡不好理解,个人比较好理解的是这个回答:
2,标准差(Standard Deviation)
标准差也被称为标准偏差或均方差,用σ表示,标准差是方差的算术平方根。标准差能反映一个数据集的离散程度,只是由于方差出现了平方项造成量纲的倍数变化,无法直观反映出偏离程度,于是出现了标准差,标准偏差越小,这些值偏离平均值就越少,反之亦然。
总体标准差:
样本标准差:
3,协方差(Covariance)
协方差(Covariance)在概率论和统计学中用于衡量两个变量的总体误差。而方差是协方差的一种特殊情况,即当两个变量是相同的情况。
协方差表示的是两个变量的总体的误差,这与只表示一个变量误差的方差不同。如果两个变量的变化趋势一致,也就是说如果其中一个大于自身的期望值,另外一个也大于自身的期望值,那么两个变量之间的协方差就是正值。如果两个变量的变化趋势相反,即其中一个大于自身的期望值,另外一个却小于自身的期望值,那么两个变量之间的协方差就是负值。如何通俗理解协方差
4,残差
残差在数理统计中是指实际值与预测值(拟合值)之间的差。“残差”蕴含了有关模型基本假设的重要信息。如果回归模型正确的话, 可以将残差看作误差的观测值。
5,均方误差(mean-square error, MSE)
均方误差是反映实际值与预测值之间差异程度的一种度量,换句话说,实际值与预测值之差的平方的期望值。 MSE可以评价数据的变化程度,MSE的值越小,说明预测模型描述实验数据具有更好的精确度。
6,均方根误差(root mean squared error,RMSE)
**均方根误差也称之为标准误差,是均方误差的算术平方根。**引入均方根误差与引入标准差(均方查)的原因是完全一致的,即均方误差的量纲与数据量纲不同,不能直观反映离散程度,故在均方误差上开平方根,得到均方根误差:
(二)计算方法(panads、numpy、 scikit-learn)
1,方差
import numpy as np
print("numpy 实现")
rng = np.random.RandomState(1)
X = 10 * rng.rand(50)
### 默认计算总体方差 默认情况下,ddof=0。
print(f"总体方差 = {
np.var(X)}")
print(f"样本方差 = {
np.var(X, ddof=1)}") # ddof :int, 可选“自由度增量”:计算中使用的除数为N-ddof,其中N表示元素数。 默认情况下,ddof=0。
print("==========================")
print("pandas 实现")
df = pd.DataFrame(X.reshape(2,-1))
### 默认计算样本方差 默认情况下,ddof=1。
print(f"(行的)总体方差: {
df.var(axis=1,ddof=0)}") # ddof :int, 可选“自由度增量”:计算中使用的除数为N-ddof,其中N表示元素数。 默认情况下,ddof=1。
print(f"(行的)样本方差: {
df.var(axis=1)}")
""" numpy 实现 总体方差 = 9.319529649367206 样本方差 = 9.509724132007353 ========================== pandas 实现 (行的)总体方差: 0 7.827693 1 10.664427 dtype: float64 (行的)样本方差: 0 8.153847 1 11.108778 dtype: float64 """
2,标准差
print("numpy 实现")
### 默认计算总体标准差 默认情况下,ddof=0。
print(f"总体标准差 = {
np.std(X)}")
print(f"样本标准差 = {
np.std(X, ddof=1)}") # ddof :int, 可选“自由度增量”:计算中使用的除数为N-ddof,其中N表示元素数。 默认情况下,ddof=0。
print("==========================")
print("pandas 实现")
df = pd.DataFrame(X.reshape(2,-1))
### 默认计算样本标准差 默认情况下,ddof=1。
print(f"(行的)总体标准差: {
df.std(axis=1,ddof=0)}") # ddof :int, 可选“自由度增量”:计算中使用的除数为N-ddof,其中N表示元素数。 默认情况下,ddof=1。
print(f"(行的)样本标准差: {
df.std(axis=1)}")
""" numpy 实现 总体标准差 = 3.0527904692866175 样本标准差 = 3.0837840605346143 ========================== pandas 实现 (行的)总体标准差: 0 2.797801 1 3.265643 dtype: float64 (行的)样本标准差: 0 2.855494 1 3.332983 dtype: float64 """
3,协方差
cov_df = pd.DataFrame({
"heigh": [152, 160, 172, 175, 180],
"weight": [45, 54, 50, 70, 66],
})
print("pandas 实现")
print(f"协方差: {
cov_df.cov()}")
print(cov_df["heigh"].cov(cov_df["weight"]))
print("numpy 实现")
cov_np = np.array(cov_df.values)
# rowvar=True(默认值)时,每行代表一个变量,每列代表一个样本;
# rowvar=Fasle时,每列代表一个变量,每行代表一个样本。
print(f"协方差: {
np.cov(cov_np,rowvar=False)}")
""" pandas 实现 协方差: heigh weight heigh 132.20 96.75 weight 96.75 113.00 96.75 ========================== numpy 实现 协方差: [[132.2 96.75] [ 96.75 113. ]] """
5,均方误差/均方根误差
%matplotlib inline
import matplotlib.pyplot as plt
import seaborn as sns; sns.set()
import numpy as np
from sklearn.linear_model import LinearRegression
from sklearn.metrics import mean_squared_error
from math import sqrt
rng = np.random.RandomState(1) # 随机种子
X = 10 * rng.rand(200)
Y = 2 * X - 5 + rng.rand(200) #加入随机误差
##拟合直线
model = LinearRegression(fit_intercept=True)
model.fit(X[:100,np.newaxis],Y[:100])
xfit = np.linspace(0,10,1000)
yfit = model.predict(xfit[:,np.newaxis])
print(f"斜率 = {
model.coef_[0]}")
print(f"截距 = {
model.intercept_}")
""" 斜率 = 1.9959578249237235 截距 = -4.425648972091901 """
plt.scatter(X,Y)
plt.plot(xfit,yfit)
X_test = X[101:]
Y_test = Y[101:]
Y_predict = model.predict(X_test[:,np.newaxis])
meanSquaredError=mean_squared_error(Y_test, Y_predict)
print("MSE:", meanSquaredError)
rootMeanSquaredError = sqrt(meanSquaredError)
print("RMSE:", rootMeanSquaredError)
""" MSE: 0.08027495999765899 RMSE: 0.28332836073654716 """
文章评论