表格自带正则方法和线性回归模型
作者:互联网
表格自带正则方法和线性回归模型
- 作业改进
- 重要名词解释
- 判断线性关系
- 一元线性回归模型
作业改进
需求:
新增几个列,分别是酒店类型、酒店评分、游玩时间
列表自带正则方法
语法:
变量[列表名].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