3

我正在使用此处的股票市场数据 (Smarket.csv) 拟合线性判别分析模型。我正在尝试Direction使用列Lag1Lag2. Direction有两个值:UpDown

这是我的可重现代码和结果:

import pandas as pd
from sklearn.discriminant_analysis import LinearDiscriminantAnalysis

url="https://raw.githubusercontent.com/JWarmenhoven/ISLR-python/master/Notebooks/Data/Smarket.csv"
Smarket=pd.read_csv(url, usecols=range(1,10), index_col=0, parse_dates=True)

X_train = Smarket[:'2004'][['Lag1', 'Lag2']]
y_train =  Smarket[:'2004']['Direction']


LDA = LinearDiscriminantAnalysis()
model = LDA.fit(X_train, y_train)

print(model.priors_)
[0.49198397 0.50801603]

我如何知道哪个先验值对应于哪个类(UpDown)?我查看了文档,但似乎什么都没有。

有人可以向我解释或指向我解释这一点的资源吗?

4

1 回答 1

2

虽然我在文档中找不到明确的参考(我确信在某处有一个通用的参考),但在这种情况下,这些类是按字母顺序排列的,即。在你的情况下是['Down', 'Up']

您可以在此处轻松验证这与您的结果是否一致;因为priors_属性只是通过priors参数传递的,根据文档,这只是从训练数据中推断出的类比例(当priors=None,就像这里一样):

y_train.value_counts(normalize=True)

给出:

Up      0.508016
Down    0.491984
Name: Direction, dtype: float64

model.priors_[0] == (y_train.value_counts(normalize=True)['Down']
# True
model.priors_[1] == (y_train.value_counts(normalize=True)['Up']
# True
于 2021-04-03T12:54:54.363 回答