python函数回归 如何用python进行回归分析

python怎么保存回归结果1、需要使用公式将回归结果计算出来 。
2、选择回归 。
3、结果将其另存为,另存为到word中就可以保存了 。
如何用python实现含有虚拟自变量的回归利用python进行线性回归
理解什么是线性回归
线性回归也被称为最小二乘法回归(Linear Regression, also called Ordinary Least-Squares (OLS) Regression) 。它的数学模型是这样的:
y = a+ b* x+e
其中,a 被称为常数项或截距;b 被称为模型的回归系数或斜率;e 为误差项 。a 和 b 是模型的参数 。
当然 , 模型的参数只能从样本数据中估计出来:
y'= a' + b'* x
我们的目标是选择合适的参数 , 让这一线性模型最好地拟合观测值 。拟合程度越高,模型越好 。
那么 , 接下来的问题就是,我们如何判断拟合的质量呢?
这一线性模型可以用二维平面上的一条直线来表示,被称为回归线 。
模型的拟合程度越高,也即意味着样本点围绕回归线越紧密 。
如何计算样本点与回归线之间的紧密程度呢?
高斯和勒让德找到的方法是:被选择的参数,应该使算出来的回归线与观测值之差的平房和最小 。用函数表示为:
这被称为最小二乘法 。最小二乘法的原理是这样的:当预测值和实际值距离的平方和最小时,就选定模型中的两个参数(a 和 b) 。这一模型并不一定反映解释变量和反应变量真实的关系 。但它的计算成本低;相比复杂模型更容易解释 。
模型估计出来后,我们要回答的问题是:
我们的模型拟合程度如何?或者说,这个模型对因变量的解释力如何?(R2)
整个模型是否能显著预测因变量的变化?(F 检验)
每个自变量是否能显著预测因变量的变化?(t 检验)
首先回答第一个问题 。为了评估模型的拟合程度如何 , 我们必须有一个可以比较的基线模型 。
如果让你预测一个人的体重是多少?在没有任何额外信息的情况下,你可能会用平均值来预测,尽管会存在一定误差,但总比瞎猜好 。
现在,如果你知道他的身高信息,你的预测值肯定与平均值不一样 。额外信息相比平均值更能准确地预测被预测的变量的能力 , 就代表模型的解释力大小 。
上图中,SSA 代表由自变量 x 引起的 y 的离差平方和,即回归平方和,代表回归模型的解释力;SSE 代表由随机因素引起的 y 的离差平方和,即剩余平方和,代表回归模型未能解释的部分;SST 为总的离差平方和,即我们仅凭 y 的平均值去估计 y 时所产生的误差 。
用模型能够解释的变异除以总的变异就是模型的拟合程度:
R2=SSA/SST=1-SSE
R2(R 的平方)也被称为决定系数或判定系数 。
第二个问题,我们的模型是否显著预测了 y 的变化?
假设 y 与 x 的线性关系不明显 , 那么 SSA 相对 SSE 占有较大的比例的概率则越小 。换句话说,在 y 与 x 无线性关系的前提下 , SSA 相对 SSE 的占比越高的概率是越小的,这会呈现一定的概率分布 。统计学家告诉我们它满足 F 分布,就像这样:
如果 SSA 相对 SSE 占比较大的情况出现了,比如根据 F 分布,这个值出现的概率小于 5% 。那么,我们最好是拒绝 y 与 x 线性关系不显著的原始假设,认为二者存在显著的线性关系较为合适 。
第三个问题 , 每个自变量是否能显著预测因变量的变化?换句话说,回归系数是否显著?
回归系数的显著性检验是围绕回归系数的抽样分布(t 分布)来进行的 , 推断过程类似于整个模型的检验过程,不赘言 。
实际上,对于只有一个自变量的一元线性模型,模型的显著性检验和回归系数的检验是一致的,但对于多元线性模型来说 , 二者就不能等价了 。
利用 statsmodels 进行最小二乘回归
#导入相应模块
In [1]: import numpy as np
In [2]: import pandas as pd
In [3]: import statsmodels.api as sm
#将数据导入 pandas 的 dataframe 对象,第一列(年份)作为行标签
In [4]: df=pd.read_csv('/Users/xiangzhendong/Downloads/vincentarelbundock-Rdatasets-1218370/csv/datasets/longley.csv', index_col=0)
#查看头部数据
In [5]: df.head()
Out[5]:
GNP.deflatorGNPUnemployedArmed.ForcesPopulationYear\
194783.0234.289235.6159.0107.6081947
194888.5259.426232.5145.6108.6321948
194988.2258.054368.2161.6109.7731949
195089.5284.599335.1165.0110.9291950
195196.2328.975209.9309.9112.0751951
Employed
194760.323
194861.122
194960.171
195061.187
195163.221
#设置预测变量和结果变量,用 GNP 预测 Employed
In [6]: y=df.Employed #结果变量
In [7]: X=df.GNP #预测变量
#为模型增加常数项,即回归线在 y 轴上的截距
In [8]: X=sm.add_constant(X)
#执行最小二乘回归,X 可以是 numpy array 或 pandas dataframe(行数等于数据点个数,列数为预测变量个数),y 可以是一维数组(numpy array)或 pandas series
In [10]: est=sm.OLS(y,X)
使用 OLS 对象的 fit() 方法来进行模型拟合
In [11]: est=est.fit()
#查看模型拟合的结果
In [12]: est.summary()
Out[12]:
#查看最终模型的参数
In [13]: est.params
Out[13]:
const51.843590
GNP0.034752
dtype: float64
#选择 100 个从最小值到最大值平均分布(equally spaced)的数据点
In [14]: X_prime=np.linspace(X.GNP.min(), X.GNP.max(),100)[:,np.newaxis]
In [15]: X_prime=sm.add_constant(X_prime)
#计算预测值
In [16]: y_hat=est.predict(X_prime)
In [17]: plt.scatter(X.GNP, y, alpha=0.3) #画出原始数据
#分别给 x 轴和 y 轴命名
In [18]: plt.xlabel("Gross National Product")
In [19]: plt.ylabel("Total Employment")
In [20]: plt.plot(X_prime[:,1], y_hat, 'r', alpha=0.9) #添加回归线 , 红色
多元线性回归(预测变量不止一个)
我们用一条直线来描述一元线性模型中预测变量和结果变量的关系,而在多元回归中,我们将用一个多维(p)空间来拟合多个预测变量 。下面表现了两个预测变量的三维图形:商品的销量以及在电视和广播两种不同媒介的广告预算 。
数学模型是:
Sales = beta_0 + beta_1*TV + beta_2*Radio
图中,白色的数据点是平面上的点,黑色的数据点事平面下的点 。平面的颜色是由对应的商品销量的高低决定的,高是红色,低是蓝色 。
利用 statsmodels 进行多元线性回归
In [1]: import pandas as pd
In [2]: import numpy as np
In [3]: import statsmodels.api as sm
In [4]: df_adv=pd.read_csv('g.csv',index_col=0)
In [6]: X=df_adv[['TV','Radio']]
In [7]: y=df_adv['Sales']
In [8]: df_adv.head()
Out[8]:
TVRadioNewspaperSales
1230.137.869.222.1
244.539.345.110.4
317.245.969.39.3
4151.541.358.518.5
5180.810.858.412.9
In [9]: X=sm.add_constant(X)
In [10]: est=sm.OLS(y,X).fit()
In [11]: est.summary()
Out[11]:
你也可以使用 statsmodels 的 formula 模块来建立多元回归模型
In [12]: import statsmodels.formula.api as smf
In [13]: est=smf.ols(formula='Sales ~ TV + Radio',data=https://www.04ip.com/post/df_adv).fit()
处理分类变量
性别或地域都属于分类变量 。
In [15]: df= pd.read_csv('httd.edu/~tibs/ElemStatLearn/datasets/SAheart.data', index_col=0)
In [16]: X=df.copy()
利用 dataframe 的 pop 方法将 chd 列单独提取出来
In [17]: y=X.pop('chd')
In [18]: df.head()
Out[18]:
sbptobaccoldladiposityfamhisttypeaobesityalcohol\
row.names
116012.005.7323.11Present4925.3097.20
21440.014.4128.61Absent5528.872.06
31180.083.4832.28Present5229.143.81
41707.506.4138.03Present5131.9924.26
513413.603.5027.78Present6025.9957.34
agechd
row.names
1521
2631
3460
4581
5491
In [19]: y.groupby(X.famhist).mean()
Out[19]:
famhist
Absent0.237037
Present0.500000
Name: chd, dtype: float64
In [20]: import statsmodels.formula.api as smf
In [21]: df['famhist_ord']=pd.Categorical(df.famhist).labels
In [22]: est=smf.ols(formula="chd ~ famhist_ord", data=https://www.04ip.com/post/df).fit()
分类变量的编码方式有许多,其中一种编码方式是虚拟变量编码(dummy-encoding),就是把一个 k 个水平的分类变量编码成 k-1 个二分变量 。在 statsmodels 中使用 C 函数实现 。
In [24]: est=smf.ols(formula="chd ~ C(famhist)", data=https://www.04ip.com/post/df).fit()
In [26]: est.summary()
Out[26]:
处理交互作用
随着教育年限(education)的增长,薪酬 (wage) 会增加吗?这种影响对男性和女性而言是一样的吗?
这里的问题就涉及性别与教育年限的交互作用 。
换言之,教育年限对薪酬的影响是男女有别的 。
#导入相关模块
In [1]: import pandas as pd
In [2]: import numpy as np
In [4]: import statsmodels.api as sm
#导入数据,存入 dataframe 对象
In [5]: df=pd.read_csv('/Users/xiangzhendong/Downloads/pydatafromweb/wages.csv')
In [6]: df[['Wage','Education','Sex']].tail()
Out[6]:
WageEducationSex
52911.36180
5306.10121
53123.25171
53219.88120
53315.38160
由于性别是一个二分变量,我们可以绘制两条回归线,一条是 sex=0(男性),一条是 sex=1(女性)
#绘制散点图
In [7]: plt.scatter(df.Education,df.Wage, alpha=0.3)
In [9]: plt.xlabel('education')
In [10]: plt.ylabel('wage')
#linspace 的作用是生成从最小到最大的均匀分布的 n 个数
In [17]: education_linspace=np.linspace(df.Education.min(), df.Education.max(),100)
In [12]: import statsmodels.formula.api as smf
In [13]: est=smf.ols(formula='Wage ~ Education + Sex', data=https://www.04ip.com/post/df).fit()
In [18]: plt.plot(education_linspace, est.params[0]+est.params[1]education_linspace+est.params[2]0, 'r')
In [19]: plt.plot(education_linspace, est.params[0]+est.params[1]education_linspace+est.params[2]1, 'g')
以上两条线是平行的 。这是因为分类变量只影响回归线的截距,不影响斜率 。
接下来我们可以为回归模型增加交互项来探索交互效应 。也就是说,对于两个类别,回归线的斜率是不一样的 。
In [32]: plt.scatter(df.Education,df.Wage, alpha=0.3)
In [33]: plt.xlabel('education')
In [34]: plt.ylabel('wage')
#使用*代表我们的回归模型中除了交互效应,也包括两个变量的主效应;如果只想看交互效应,可以用:代替,但通常不会只看交互效应
In [35]: est=smf.ols(formula='Wage ~ Sex*Education', data=https://www.04ip.com/post/df).fit()
In [36]: plt.plot(education_linspace, est.params[0]+est.params[1]0+est.params[2]education_linspace+est.params[3]0education_linspace, 'r')
In [37]: plt.plot(education_linspace, est.params[0]+est.params[1]1+est.params[2]education_linspace+est.params[3]1education_linspace, 'g')
参考资料:
DataRobot | Ordinary Least Squares in Python
DataRoboe | Multiple Regression using Statsmodels
AnalyticsVidhya | 7 Types of Regression Techniques you should know!
python逻辑回归怎么求正系数Python 逻辑回归求正系数的方法可以分为两种:
1. 使用线性模型的求解方法:可以使用sklearn中的LogisticRegression类来求解正系数,调用其中的fit()方法就可以求解出正系数 。
2. 使用梯度下降法:可以自己实现梯度下降法,通过不断迭代更新正系数 , 最终获得最优的正系数 。
python线性回归的出现的代码什么意思【python函数回归 如何用python进行回归分析】使用多个变量用来实现线性回归 。线性回归是一种有监督的学习算法 , python线性回归的出现的代码是使用多个变量用来实现线性回归的意思 , 旨在采用线性方法来建模因变量和自变量之间的关系 。
python线性回归有哪些方法线性回归:
设x,y分别为一组数据,代码如下
import matplotlib.pyplot as plt
import numpy as np
ro=np.polyfit(x,y,deg=1) #deg为拟合的多项式的次数(线性回归就选1)
ry=np.polyval(ro,x) #忘记x和ro哪个在前哪个在后了 。。。
print ro #输出的第一个数是斜率k,第二个数是纵截距b
plt.scatter(x,y)
plt.plot(x,ry)
求python支持向量机多元回归预测代码这是一段用 Python 来实现 SVM 多元回归预测的代码示例:
# 导入相关库
from sklearn import datasets
from sklearn.svm import SVR
from sklearn.model_selection import train_test_split
from sklearn.metrics import mean_squared_error
# 加载数据集
X, y = datasets.load_boston(return_X_y=True)
# 将数据集拆分为训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0)
# 创建SVM多元回归模型
reg = SVR(C=1.0, epsilon=0.2)
# 训练模型
reg.fit(X_train, y_train)
# 预测结果
y_pred = reg.predict(X_test)
# 计算均方误差
mse = mean_squared_error(y_test, y_pred)
print("Mean Squared Error:", mse)
在这段代码中,首先导入了相关的库,包括 SVR 函数、train_test_split 函数和 mean_squared_error 函数 。然后 , 使用 load_boston 函数加载数据集 , 并将数据集分为训练集和测试集 。接着,使用 SVR 函数创建了一个 SVM 多元回归模型,并使用 fit 函数对模型进行训练 。最后,使用 predict 函数进行预测,并使用 mean_squared_error 函数计算均方误差 。
需要注意的是,这仅仅是一个示例代码 , 在实际应用中,可能需要根据项目的需求进行更改,例如使用不同的超参数
python函数回归的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于如何用python进行回归分析、python函数回归的信息别忘了在本站进行查找喔 。

    推荐阅读