python - 无法修复 ValueError("endog 必须在单位区间内")
问题描述
我被要求使用以下步骤编写逻辑回归程序。
- 从 MASS 包中加载 R 数据集活检。
- 将数据捕获为 pandas 数据框。
- 将列名类重命名为 Class。
- 将类别列值良性和恶性分别转换为“0”和“1”。
- 建立一个自变量 V1 和因变量 Class 的逻辑回归模型。
- 用数据拟合模型,并显示伪 R 平方值
我已经尝试更改值,但我不确定该怎么做。另外,我是使用 Python 进行统计的初学者。
import statsmodels.api as sa
import statsmodels.formula.api as sfa
biopsy = sa.datasets.get_rdataset("biopsy","MASS")
biopsy_data = biopsy.data
biopsy_data.rename(columns={"class":"Class"})
biopsy_data.Class = biopsy_data.Class.map({"benign":0,"malignant":1})
log_mod1 = sfa.logit("V1~Class",biopsy_data)
log_res1 = log_mod1.fit()
print(log_res1.summary())
我希望有一个值表,但输出是
ValueError("endog must be in the unit interval.")
解决方案
您需要执行一些预处理步骤,它们告诉您必须处于单位间隔内,因此介于 0 和 1 之间。
您可以做的是通过执行以下操作进行特征缩放:X - Xmin/ Xmax - Xmin
在这里它应该起作用的修改:
import statsmodels.api as sa
import statsmodels.formula.api as sfa
biopsy = sa.datasets.get_rdataset("biopsy","MASS")
biopsy_data = biopsy.data
biopsy_data.rename(columns={"class":"Class"},inplace=True)
biopsy_data.Class = biopsy_data.Class.map({"benign":0,"malignant":1})
biopsy_data["V1"] = np.divide(biopsy_data["V1"] - biopsy_data["V1"].min(), biopsy_data["V1"].max() - biopsy_data["V1"].min())
log_mod1 = sfa.logit("V1~Class",biopsy_data)
log_res1 = log_mod1.fit()
print(log_res1.summary())
就在调用之前,sfa.logit()
我已经对您想要使用的自变量进行了预处理(V1
此处)。
推荐阅读
- java - 在它们之间切换时避免刷新片段
- sql - SQL 语句与 LINQ to SQL 的输出排序结果不同
- python - SemEval-2013 任务 2 下载错误 - urllib.error.HTTPError:HTTP 错误 401:需要授权
- java - java.lang.RuntimeException 的未知原因
- java - 来自 macOS 10.13.6 上的 JNI 应用程序的“非法指令:4”
- android - 启用暗模式时 MODE_NIGHT_YES 和 MODE_NIGHT_FOLLOW_SYSTEM 之间的差异
- python - 验证嵌套字典的值类型
- sharepoint-2019 - 在 sharepoint 2019 online 中将顶部链接导航移至下方
- border - 如何制作透明边框
- charts - 如何使用 Google Visualization API 创建具有双 y 轴的图表?