其他分享
首页 > 其他分享> > 表格自带正则方法和线性回归模型

表格自带正则方法和线性回归模型

作者:互联网

表格自带正则方法和线性回归模型

 

作业改进

需求:

新增几个列,分别是酒店类型、酒店评分、游玩时间

列表自带正则方法

语法:

变量[列表名].str.extract(正则)

酒店类型

# 正则获取数据
data['酒店类型']=data['酒店'].str.extract(' (.*?) ')
# 去除空数据,用众数代替
data['酒店类型'].fillna(data['酒店类型'].mode()[0],inplace=True)

酒店评分

data['酒店评分']=data['酒店'].str.extract(' (\d\.\d)')

游玩时间

data['游玩时间']=data['路线 '].str.extract(' (\d\.\d分)')

 

重要名词解释

离散型

离散型数据就是非数字类型

数据符号网站

网址:http://www.fhdq.net/sx/14.html

因变量与自变量

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

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

自变量是被操纵的变量,而因变量是被测定或被记录的变量。也就是说自变量是“原因”,而因变量就是“结果”。

哑变量

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

训练集与测试集

  训练集用于模型的训练创建 测试集用于模型的测试检验

  一般情况下训练集占总数据的80%、测试集占总数占20%

 

判断线性关系

如何判断两个变量之间是否存在线性关系与非线性关系

1.散点图

2.公式计算

绝对值大于等于0.8表示高度相关
绝对值大于等于0.5小于等于0.8表示中度相关
绝对值大于等于0.3小于0.5表示弱相关
绝对值小于0.3表示几乎不相关(需要注意这里的不相干指的是没有线性关系 可能两者之间有其他关系)

数据准备

# 调用模块
import numpy
import pandas
# 申明变量
X = [52,19,7,33,2]
Y = [162,61,22,100,6]

方法1:公式计算

代码:(了解代码即可)

# 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))
r

 方法2:numpy中的corrcoef方法直接计算

t=numpy.corrcoef(X,Y)

方法3: pandas中的corr方法直接计算

data = pandas.DataFrame({'X':X,'Y':Y})
t2=data.corr()

 

一元线性回顾模型

一元线性回归模型公式

Y=a+bX+ε

Y为因变量,X为自变量,a为截距,b为斜率,ε为误差项。

ε是为了平衡等号两边的值,通常被称为模型⽆法解释的部分;

参数a和b的求解思路

 

 

1.如果拟合线能够精确地捕捉到每⼀个点(即所有散点全部落在拟 合线上),那么对应的误差项ε应该为0;

2.模型拟合的越好,则误差项ε应该越⼩

模型应用

调用模块

import statsmodels.api as sm
sm.ols(formula, data, subset=None, drop_cols=None)

参数

formula:以字符串的形式指定线性回归模型的公式,如'y~x'就表示简单线性回归模型

data:指定建模的数据集

实操

# 调用模块
import pandas as pd
import statsmodels.api as sm
# 读取文件
income = pd.read_csv('Salary_Data.csv')
# 利⽤收⼊数据集,构建回归模型
infom = sm.formula.ols('Salary ~ YearsExperience', data = income).fit()
# 返回模型的参数值
infom.params

 

 

 验证

 

 

将上诉参数代入:

1.1*9450+25792

 

 

结论:

较为接近

 

多元线性回归模型

公式:

Yi=β0+β1X1i+β2X2i+…+βkXki+ε

多元模型的预测

# 导入模块
from sklearn import model_selection
# 获取数据
Profit=pd.read_excel('Predict to Profit.xlsx')
# 将数据集拆分为训练集和测试集
train, test = model_selection.train_test_split(Profit, test_size = 0.2, random_state=1234)
# 根据train数据集建模
model = sm.formula.ols('Profit ~ RD_Spend+Administration+Marketing_Spend+C(State)', data= train).fit()
print('模型的偏回归系数分别为:\n', model.params)

 

 可以看见这里没有加利福尼亚的数据为什么,因为自变量之间不能存在关系,而构造哑变量时,加利福尼亚与某个州有关系所以删除

# ⽣成由State变量衍⽣的哑变量
dummies = pd.get_dummies(Profit.State)
dummies

 

 验证,比较差异

# 删除test数据集中的Profit变量,⽤剩下的⾃变量进⾏预测
test_X = test.drop(labels = 'Profit', axis = 1)
pred = model.predict(exog = test_X)
print('对⽐预测值和实际值的差异:\n',pd.DataFrame({'Prediction':pred,'Real':test.Profit}))

 

多元模型的预测

# ⽣成由State变量衍⽣的哑变量
dump = pd.get_dummies(Profit.State)
# 将哑变量与原始数据集⽔平合并
new_date = pd.concat([Profit,dump], axis = 1)
# 删除State变量和California变量(因为State变量已被分解为哑变量,New York变量需要作为参照组)
new_date.drop(labels = ['State','New York'], axis = 1, inplace = True)
# 拆分数据集Profit_New
train, test = model_selection.train_test_split(new_date, test_size = 0.2, random_state=1234)
# 建模
model2 = sm.formula.ols('Profit~RD_Spend+Administration+Marketing_Spend+Florida+California',data = train).fit()
print('模型的偏回归系数分别为:\n', model2.params)

返回目录

标签:变量,表格,Profit,模型,State,正则,test,自带,data
来源: https://www.cnblogs.com/20wod/p/15434210.html