【问题标题】:Why my Logistic Regression Score is always 1.0?为什么我的逻辑回归分数总是 1.0?
【发布时间】:2021-02-01 11:42:56
【问题描述】:

我在 python 中使用 sklearn,实现的想法是使用逻辑回归预测 SPX 500。

我从 yfinance 获得了 SPX 历史价格,并根据每日回报(我也计算过)计算了 5 个特征 (x)。

因变量 (y) 为 1 表示正回报,0 表示负回报。

当我预测模型并检查model.score()时,值总是1。但是为什么呢?

代码是:

# Import the data
df= yf.download('^GSPC', start="2018-1-1", end="2020-10-20")
df = df.dropna()

df['Return'] = np.log(df['Adj Close']/df['Adj Close'].shift(1))

# Create Indicators
df['Ret_1'] = df['Return'].shift(1)
df['Ret_2'] = df['Return'].shift(2)
df['Adj Close-Adj Close 1day'] = df['Adj Close'] - df['Adj Close'].shift(1)
df['Adj Close-Adj Close 5days'] = df['Adj Close'] - df['Adj Close'].shift(5)
df['S_10'] = df['Adj Close'].rolling(window=5).mean()

df = df.dropna()
X = df.iloc[:,-5:]

y =np.where(df['Return'] > 0 ,1,0)


# Split the Dataset and Instantiate Logistic Regression
split = int(0.7*len(df))
X_train, X_test, y_train, y_test = X[:split], X[split:], y[:split], y[split:]

model = LogisticRegression()
model = model.fit (X_train,y_train)
predicted = model.predict(X_test)

print(model.score(X_test,y_test))  

【问题讨论】:

  • @Progman python
  • Python (spyder)
  • 欢迎来到 SO;下次 1) 请使用适当的标签 2) 正确格式化代码 cmets(不是 " ")。
  • 谢谢@desertnaut。你能举出适当标签的例子吗?
  • 查看已编辑的标签; scikit-learn 比超模糊和笼统的 supervised-learning 提供的信息

标签: python machine-learning scikit-learn logistic-regression


【解决方案1】:

在您在逻辑回归中输入的 5 个特征中,变量

df['Adj Close-Adj Close 1day'] = df['Adj Close'] - df['Adj Close'].shift(1)

与您在目标中使用的基础变量 df['Return'] 具有相同的符号

y =np.where(df['Return'] > 0 ,1,0)

因此逻辑回归将非常匹配。

此外,两者都使用df['Adj Close'],因此您正在尝试使用实际上使您能够精确计算目标值的东西来预测目标值。

【讨论】:

  • 知道了。在这种情况下,为了使模型更“真实”,我应该使用与因变量不直接相关的不同特征。我说的对吗?
  • 实际上,根据预测的定义,您正在尝试查找与目标相关的特征。但是这些不应该使您能够准确计算目标......否则它不再是一个预测。
  • 我应该怎么做才能在这段代码中使用 Lasso 而不是 LogisticRegression? @Bluexm
猜你喜欢
  • 1970-01-01
  • 2021-12-01
  • 2015-08-10
  • 2019-09-28
  • 2021-03-11
  • 1970-01-01
  • 2014-06-05
  • 2020-07-20
  • 2021-03-23
相关资源
最近更新 更多