小编典典

LinearRegression TypeError

all

样本.xlsx

以上截图参考为:sample.xlsx。我一直无法使用 LinearRegression() 函数获取每只股票的 beta。

输入:

import numpy as np
import pandas as pd
from sklearn.linear_model import LinearRegression

df = pd.read_excel('sample.xlsx')
mean = df['ChangePercent'].mean()

for index, row in df.iterrows():
    symbol = row['stock']
    perc = row['ChangePercent']

    x = np.array(perc).reshape((-1, 1))
    y = np.array(mean)
    model = LinearRegression().fit(x, y)
    print(model.coef_)

输出:

第 16 行:model = LinearRegression().fit(x, y) “单例数组 %r 不能被视为有效集合。” % X

TypeError:单例数组数组(3.34)不能被视为有效集合。

如何使集合有效,以便我可以获得每只股票的 beta 值(model.coef_)?


阅读 69

收藏
2022-08-07

共1个答案

小编典典

X 和 y 必须具有相同的形状,因此您需要将 x 和 y 都重塑为 1 行和 1 列。在这种情况下,它恢复为以下内容:

np.array(mean).reshape(-1,1)`或者`np.array(mean).reshape(1,1)

假设您正在训练 5 个分类器,每个分类器只有一个值,这 5 个模型将“学习”线性回归的系数为 0 且截距为 3.37 ( ) 也就不足为奇了y

import numpy as np
import pandas as pd
from sklearn.linear_model import LinearRegression

df = pd.DataFrame({
    "stock": ["ABCD", "XYZ", "JK", "OPQ", "GHI"],
    "ChangePercent": [-1.7, 30, 3.7, -15.3, 0]
    })

mean = df['ChangePercent'].mean()

for index, row in df.iterrows():
    symbol = row['stock']
    perc = row['ChangePercent']

    x = np.array(perc).reshape(-1,1)
    y = np.array(mean).reshape(-1,1)
    model = LinearRegression().fit(x, y)
    print(f"{model.intercept_} + {model.coef_}*{x} = {y}")

从算法的角度来看这是正确的,但考虑到您只提供一个示例来训练每个模型,这没有任何实际意义。

2022-08-07