Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何修复统计模型(模型缺少所需的结果变量)

如何修复统计模型(模型缺少所需的结果变量)
EN

Stack Overflow用户
提问于 2019-09-12 15:19:44
回答 2查看 2K关注 0票数 0

我刚刚开始在python中学习机器学习,我正在学习多元线性回归。在那里我了解了虚拟变量陷阱,它可以通过反向消除来解决,但在应用反向消除时,我得到了这个错误。(PatsyError:模型缺少必需的结果变量)

这些是我导入的文件

代码语言:javascript
运行
AI代码解释
复制
import pandas as pd
import matplotlib.pyplot as plt
import numpy as np
from sklearn.preprocessing import LabelEncoder , OneHotEncoder
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression
import statsmodels.formula.api as sm

下面是我的数据集的前5行:

代码语言:javascript
运行
AI代码解释
复制
        gender    age    exercise    hours     grade
0       female    17        3        10        82.4
1       male      18        4        4         78.2
2       male      18        5        9         79.3
3       female    14        2        7         83.2
4       female    18        4        15        87.4


real_x = data_frame.iloc[:,:4].values
real_y = data_frame.iloc[:,4:].values

label_encoder_obj = LabelEncoder()
real_x[:,0] = label_encoder_obj.fit_transform(real_x[:,0])
one_hot_encoder = OneHotEncoder(categorical_features=[2])
real_x = one_hot_encoder.fit_transform(real_x).toarray()

real_x = real_x[:,1:]
training_x,test_x,training_y,test_y=
train_test_split(real_x,real_y,test_size=0.2,random_state=0)

multiple_linear_regression = LinearRegression()
multiple_linear_regression.fit(training_x,training_y)
predection_y = multiple_linear_regression.predict(test_x)


real_x=np.append(arr=np.ones((real_x.shape[0],1)).astype(int),
values=real_x,axis=1)

x_optimization = real_x[:,[0,1,2,3,4,5]] 

在下面的代码行中,我得到了错误。

代码语言:javascript
运行
AI代码解释
复制
regresion_ordinary_least_squar = sm.ols(real_y,data=x_optimization).fit();

如果缺少== 'raise‘,则不存在missing_mask

代码语言:javascript
运行
AI代码解释
复制
PatsyError: model is missing required outcome variables

我在网上看到过一些例子,其中的一些代码

代码语言:javascript
运行
AI代码解释
复制
sm.OLS() 

被使用,而不是

代码语言:javascript
运行
AI代码解释
复制
sm.ols()

有什么关系?

EN

回答 2

Stack Overflow用户

发布于 2020-12-02 08:52:15

前面的简短回答是:你混淆了statsmodel的ols实现的两个不同版本,并且给出了你选择了错误输入的模型。

长答案: Statsmodel包括普通最小二乘模型的两个版本。

我所看到的可接受的导入设置是:

代码语言:javascript
运行
AI代码解释
复制
import statsmodels.api as sm
import statsmodels.formula.api as smf

然后这是一个选择:

代码语言:javascript
运行
AI代码解释
复制
sm.OLS()
smf.ols()

它们的行为也不同。

sm.OLS采用单独的x和y数据帧(或exog和endog)。sm.OLS也不会向模型中添加常量。您需要先添加它。还要注意的是,statsmodel版本从sklearn模型输入数据的方式向后切换了输入变量的顺序-Y,然后是X。

代码语言:javascript
运行
AI代码解释
复制
X = sm.add_constant(X)
model = sm.OLS(Y,X)
results = model.fit()
result.summary()

这也是可行的:

代码语言:javascript
运行
AI代码解释
复制
X = sm.add_constant(X)
model = sm.OLS(Y,X).fit()
model.summary()

.summary()表示模型的分数、系数和p值的输出。

smf.ols采用补丁短语和数据帧,其中包括响应或目标变量以及所有功能。patsy短语允许您告诉模型在为response变量创建其ols模型时使用哪些列。拼凑的短语是一个看起来像'y ~ X1 + X2 + X3'的字符串。此外,smf.ols版本在默认情况下添加了截取。

代码语言:javascript
运行
AI代码解释
复制
df = pd.DataFrame({'X1':x, 'X2':x2, 'X3':x3, 'y':Y})
model = smf.ols('y ~ X1 + X2 + X3', df).fit()

或者,

代码语言:javascript
运行
AI代码解释
复制
phrase = 'y ~ X1 + X2 + X3 + X4'
model = smf.ols(phase,df).fit()

然后执行以下操作:

代码语言:javascript
运行
AI代码解释
复制
model.summary2()

检索分数、系数和p值的格式良好的摘要,与sm.OLS摘要非常相似,但略有不同。

如果您为您选择的statsmodel版本正确地构建了输入,那么这个错误应该会消失。

就我个人而言,我更喜欢公式模型。但是当你把你的数据帧分成X_train、y_train、X_test、y_test时,这就变得很尴尬了。

当我这样做的时候,我设置我的模型如下:

代码语言:javascript
运行
AI代码解释
复制
frames =[y_train, X_train]
df_train = pd.concat(frames, axis=1).reindex(y_train.index)

model = smf.ols(formula, df_train).fit()

我注意到你也在使用sklearn的LinearRegression。默认情况下,它还包括截取。如果您将常量添加到sm.OLS模型中,这三种方法都应该在相同的数据上给出类似的答案。在kaggle here上阅读一篇关于这方面的文章。

票数 2
EN

Stack Overflow用户

发布于 2019-12-23 01:43:19

你应该使用

将statsmodels.regression.linear_model导入为sm;

而不是

将statsmodels.formula.api导入为sm

并使用

regresion_ordinary_least_squar = sm.OLS(endog = real_y,exog = x_optimization).fit()

而不是

regresion_ordinary_least_squar = sm.ols(real_y,data=x_optimization).fit();

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57909858

复制
相关文章
如何在Linux桌面下使用PyGObject创建GUI应用程序
在Linux上创建应用程序可以使用不同的方法,但是有一些有限的方法,所以使用最简单和最功能的编程语言和库,这就是为什么我们要快速查看在Linux下创建应用程序使用桌面上的GTK +库被称为“PyGObject”Python编程语言。
用户2323866
2021/06/18
3.9K0
python编程之GUI的选择
前言:本文来自于网络位置http://www.2cto.com/kf/201009/74917.html。尽管内容可能有些老,但是没有关系,对于想深入Python开发的工作者,在选择GUI开发包,乃至可视化IDE方面都还有相当的借鉴意义。
py3study
2020/01/10
1.5K0
用 Python 构建漂亮的 GUI
在 Python 中构建 GUI 是我最喜欢做的事情之一,无论是显示一些文本的基本页面,还是构建公司使用的完整应用程序,Python 都可用于开发这些以及介于两者之间的所有应用程序。
吾非同
2021/07/12
1.9K0
用 Python 构建漂亮的 GUI 应用
Tkinter 是最受欢迎的软件包之一,它允许您使用 Python 构建 GUI,Tkinter Designer 软件包通过添加 Figma API 来开发更好看的 GUI 来构建此软件包!
用户8949263
2022/04/08
1.2K0
用 Python 构建漂亮的 GUI 应用
GUI引发的一场脑部大战|wine、wsl、mono、gtk、qt
wine可以运行大部分Windows软件,实在不行还有虚拟机,虚拟机性能弱,还可以进行远程服务器玩耍。
landv
2019/10/15
1.7K0
GUI引发的一场脑部大战|wine、wsl、mono、gtk、qt
fedora 安装gtk3开发环境
要用fedora开发gtk3,对系统的最低要求是:系统必须是fedora15即以上版本
py3study
2020/01/09
1.6K0
Ubuntu18.04 ROS1Melodic ROS2Dashing 机器人工具集学习镜像的制作说明 Pinguy
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
zhangrelay
2019/10/24
1.6K0
Ubuntu18.04 ROS1Melodic ROS2Dashing 机器人工具集学习镜像的制作说明 Pinguy
python开发_IDEL(Python GUI)的使用方法
在这篇blog"Python开发_python的安装"里面你会了解到python的安装。
Hongten
2018/09/13
4790
python开发_IDEL(Python GUI)的使用方法
msys2安装与使用_mingw使用教程
使用[清华大学开源软件镜像站]中的地址,修改\etc\pacman.d目录下的三个文件。
全栈程序员站长
2022/09/20
2.6K0
msys2安装与使用_mingw使用教程
Code::Blocks配置GTK+2和GTK+3
一:安装codeblock10.05和GTK+开发包 到 http://www.codeblocks.org 下载最新版的codeblock,我一般会选择带MinGW编译器的版本! 文件名是codeblocks-12.11mingw-setup.exe或者其他版本,下载完成后运行安装文件,一步步安装到结束。 下载安装GTK+开发包 For GTK+2: 到 http://www.gtk.org/ 下载GTK+开发包,注意是下载all-in-one bundle,但不要下载2.24.10这个版本,因为该版
zhwhong
2018/05/16
2.3K0
Python 常用的GUI框架都有哪些
Graphical User Interface,简称 GUI,又称图形化用户接口,所谓的GUI编程,指的是用户不需要输入代码指令,只通过图形界面的交互就可以操作软件功能。
吾非同
2020/12/07
3K0
Python 常用的GUI框架都有哪些
gtk还有人用吗_iperf使用方法
GTK+(GIMP Toolkit)是一套源码以LGPL许可协议分发、跨平台的图形工具包。最初是为GIMP写的,已成为一个功能强大、设计灵活的一个通用图形库,是GNU/Linux下开发图形界面的应用程序的主流开发工具之一。并且,GTK+也有Windows版本和Mac OS X版。 GTK+ 是一种图形用户界面(GUI)工具包。也就是说,它是一个库(或者,实际上是若干个密切相关的库的集合),它支持创建基于 GUI 的应用程序。可以把 GTK+ 想像成一个工具包,从这个工具包中可以找到用来创建 GUI 的许多已经准备好的构造块。差不多已经 10 年过去了。今天,在 GTK+ 的最新稳定版本 —— 2.8 版上(3.0测试中),仍然在进行许多活动,同时,GIMP 无疑仍然是使用 GTK+ 的最著名的程序之一,不过它已经不是惟一的使用 GTK+ 的程序了。已经为 GTK+ 编写了成百上千的应用程序,而且至少有两个主要的桌面环境(Xfce 和 GNOME)用 GTK+ 为用户提供完整的工作环境。 GTK+虽然是用C语言写的,但是您可以使用你熟悉的语言来使用GTK+,因为GTK+已经被绑定到几乎所有流行的语言上,如:C++,PHP, Guile,Perl, Python, TOM, Ada95, Objective C, Free Pascal, and Eiffel。
全栈程序员站长
2022/11/01
1.3K0
gtk还有人用吗_iperf使用方法
GTK 菜单的创建详解
============================================================================== 创建菜单条
RainMark
2019/09/10
1.6K0
ILMerge-GUI的使用
去这里下载: 这里下载ILMerge,http://www.microsoft.com/en-us/download/details.aspx?id=17630 这里下载ILMerge-GUI,htt
庞小明
2018/03/09
2.4K0
ILMerge-GUI的使用
【python入门项目】使用 Tkinter 的 Python 日历 GUI 应用程序
在 Python 中,我们可以使用 Tkinter 制作 GUI。如果你非常有想象力和创造力,你可以用 Tkinter 做出很多有趣的东西。在这里,我们将使用 Tkinter 制作一个 Python 日历 GUI 应用程序。在这个应用程序中,用户必须输入你想要查看日历的年份,然后日历才会出现。
程序员小新
2022/01/08
2.3K0
数独的暴力回溯解法和Python GUI版
数独起源于18世纪初瑞士数学家欧拉等人研究的拉丁方阵,20世纪70年代,经过美国及日本学者的推广和改良,定名为数独(Sudoku),大致的意思是“独个的数字”或“只出现一次的数字”。
蛰虫始航
2019/12/12
1.6K0
数独的暴力回溯解法和Python GUI版
Mybatis源码本地化构建Demo
上一篇文章中专门整理了如何构建Mybatis源码,小伙伴们可以在本地写demo跟踪或者注释修改源码等等骚操作。。。本篇就是为小伙伴们介绍一下如何本地化构建demo。 这里分享一下mybatis的中文官方文档,小编构建本地化demo时参考了官方文档。
沁溪源
2020/09/02
6020
iOS字符串的本地化(APP 内的本地化切换) 、nib本地化、图片本地化
使用本地化功能,可以轻松地将应用程序翻译成多种语言,甚至可以翻译成同一语言的多种方言
公众号iOS逆向
2021/07/05
1.7K0
iOS字符串的本地化(APP 内的本地化切换) 、nib本地化、图片本地化
Python安装cairo、gtk等问题
上一篇博文关于cairo的安装,使用过程中发现,画图还需要gtk等模块,所以需要继续安装。我安装gtk的过程很是折腾啊,下载了好多版本,不同格式文件,但最终还是安装成功了,哈哈,现把安装过程记录如下:
py3study
2020/01/10
2.4K0
设计一个界面,很简单!
本周,小编给大家分享在Python中如何制作一个简单的图形界面吧,Python里有很多图形用户界面库,如Tkinter, Pmw, wxPython, PySide, PyQt, PyGTk, win32ui, Glade等,在这些库中,小编只会Tkinter、wxPython和PyQt三种库,由于内置库Tkinter最为简单实用,所以就先从它开始吧,其他库以后慢慢介绍吧!接下来,我将给大家简单地介绍一下Tkinter的使用方法。 一、简单说明 首先,我对Tkinter这一模块做一个简要地说明。 Tkint
企鹅号小编
2018/01/22
2.7K0
设计一个界面,很简单!

相似问题

根据时间戳删除firestore中的项目

138

按带时间戳的数组删除对象

10

如何从UTC日期时间戳中删除时间戳

13

Python:从PriorityQueue中清除项目

11

如何从两个带时间戳的表中删除用户

11
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档