线性回归模型


  • 常用数学符号

  http://fhdq.net/sx/14.html

  • 因变量与自变量

  因变量(dependent variable)函数中的专业名词,也叫函数值。函数关系式中,某些特定的数会随另一个(或另几个)会变动的数的变动而变动,就称为因变量。

  如:Y=f(X)。此式表示为:Y随X的变化而变化。Y是因变量,X是自变量。

    自变量是“原因”,而因变量就是“结果”。

判断是否存在两个变量之间是否存在线性或者非线性关系

1、画散点图并观察

 

2、通过特定公式计算

公式的代码实现

import numpy
import pandas
​
# 因变量与自变量
X = [52,19,7,33,2]
Y = [162,61,22,100,6]
1.公式计算
# 均值
XMean = numpy.mean(X)
YMean = numpy.mean(Y)
# 标准差
XSD = numpy.std(X)
YSD = numpy.std(Y)
# Z分数
ZX = (X-XMean)/XSD
ZY = (Y-YMean)/YSD
# 相关的系数
r = numpy.sum(ZX*ZY)/(len(X))
'''
    计算过程略微繁琐,不过可以使用模块自带的方法直接计算
'''
2.利用numpy的corrcoef方法直接计算
    t = numpy.corrcoef(X,Y)
3.利用pandas的corr方法直接计算
    data = pandas.DataFrame({'X':X,'Y':Y})
    t2 = data.corr()

判断结果的方法

  1、绝对值大于0.8             因变量和自变量具有明显的线性关系   

  2、绝对值大于等于0.5且小于等于0.8    因变量和自变量具有线性关系   

  3、绝对值大于等于0.3且小于0.5      因变量和自变量可能具有线性关系   

  4、绝对值小于0.3              因变量和自变量几乎不具有线性关系

通过公式计算可知,上述数据X与Y具有明显的线性关系。

  • 线性回归

线性回归是利用数理统计中回归分析,来确定两种或两种以上变量间相互依赖的定量关系的一种统计分析方法,运用十分广泛。

  表达形式为 y = wx+ee为服从均值为0的正态分布的误差值。

线性回归分析中,只包括一个自变量和一个因变量,且二者的关系可用一条直线近似表示,这种回归分析称为一元线性回归分析。

如果回归分析中包括两个或两个以上的自变量,且因变量和自变量之间是线性关系,则称为多元线性回归分析。

一元线性回归

1、可以用示例数据看一下,便于熟悉

dfSd = pd.read_csv(r'Salary_Data.csv')

2、看一下散点图,从点的分布情况判断大概具有线性关系

plt.scatter(x=dfSd['YearsExperience'], y=dfSd['Salary'])
plt.show()

3、求一下相关系数看一下是否具有线性关系,这里显然具有明显的线性关系

dfSd.corr()

多元线性回归

1、看一下实例数据

一般来说,利润是随着各类成本或地区的改变而变化的。

所以这里,Profit是因变量,其它四个字段是自变量。

pt = pd.read_excel(r'Predict to Profit.xlsx')
pt.head()

 线性回归过程

那么,如何通过数据推导出其线性关系(线性回归的过程)???

  针对案例一(一元线性回归)

  1、需要引入统计建模模块

import statsmodels.api as sm

   2、构建模型

    调用statsmodels.api.formula.ols()方法,参数1是因变量与自变量以~拼接的字符串,参数2是数据

fit = sm.formula.ols('Salary~YearsExperience',data=dfSd).fit()
fit.params

   3、得出结论,该线性关系近似于 Salary = 25792+9450*YearExperience

    通过与相关数据进行比对,可知这个结果基本正确。

  针对案例二(多元线性回归)

  1、需要导入机器学习框架

from sklearn import model_selection

  2、为了比对结果是否足够正确,将数据随机分为训练集和测试集

train,test = model_selection.train_test_split(pt,test_size=0.2,random_state=1234)

  3、构建模型

    调用statsmodels.api.formula.ols()方法,参数1是因变量与自变量以~拼接的字符串,多个自变量由+分割,参数2是数据

pModel = sm.formula.ols('Profit~RD_Spend+Administration+Marketing_Spend+C(State)',data=train).fit()
pModel.params

  测试集与训练集的概念

    1、训练集用于模型的训练创建,一般占总数据量80%左右,越大越精确。

    2、测试集用于模型的测试校验,一般占总数据量20%。

  哑变量

    哑变量 (Dummy Variables) 又称虚设变量、名义变量或虚拟变量,用以反映质的属性的一个人工变量,是量化了的自变量,通常取值为0或1,一般用于表示离散变量。

    简单来说,就是非数字,无法直接代入公式计算的变量。

      如:反映文化程度的哑变量

        本科学历—1

        非本科学历—0

    针对上述案例,State字段就被框架当做哑变量处理。

    默认会随机删除一项使剩下的项之间不存在确定的关系

    

  验证线性回归结果

    1、查看框架自动生成的哑变量

dummies = pd.get_dummies(pt.State)
dummies

    2、删除test数据集中的Profit变量,⽤剩下的⾃变量进⾏理论推导

testP = test.drop(columns=['Profit'])
pred = pModel.predict(exog=testP)

    3、对比理论值与实际值

pd.DataFrame({"预测值":pred,'真实值':test.Profit})

  • 自定义哑变量

​经过测试我们发现,非数字、无法直接代入公式计算的变量会被框架转换成哑变量带入计算。

然后会在相关性强的选项中随机删除一个使剩下的选项无关,这个被删除的选项可以自定义。

 1、生成由State变量衍生的哑变量

dummies = pd.get_dummies(pt.State)

 2、将哑变量与原始数据集水平合并

ptNew = pd.concat([pt,dummies], axis=1)

 3、删除State与New York列

ptNew.drop(labels = ['State','New York'], axis = 1, inplace = True)

4、将数据集拆分成训练集与测试集

train, test = model_selection.train_test_split(ptNew, test_size = 0.2, random_state=1234)

5、构建线性回归模型,可以看到地区以外的偏回归系数还是之前的值

pModel2 = sm.formula.ols('Profit~RD_Spend+Administration+Marketing_Spend+Florida+California', data = train).fit()
print('模型的偏回归系数分别为:\n', pModel2.params)


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM