首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >ValueError: X有一个特性,但SVC需要3个特性作为输入。

ValueError: X有一个特性,但SVC需要3个特性作为输入。
EN

Stack Overflow用户
提问于 2022-05-15 23:30:43
回答 1查看 3.8K关注 0票数 1

我正试图使用Keras和sklearn创建一个股票价格预测器(而不是实际使用它来投资-别担心),后者从卡格尔获取任何时间序列,并检查“关闭”。然后,它接受一个特定长度的滚动时间窗口,并预测方向精度,向上(1)或向下(0)。

在试图运行下面的代码时,出现了以下错误:

代码语言:javascript
运行
复制
File "...", line 71, in test
    y_pred = self.model.predict(self.X_test)
ValueError: X has 1 features, but SVC is expecting 3 features as input.

有人能在这个问题上给我指点吗?SVC预计我可能会错过哪些功能?

代码: Model.py

create_features根据滚动时间窗口检查市场是低还是高,并设置X和y:

代码语言:javascript
运行
复制
#window_size = the set size of the rolling time window

def create_features(data, window_size):
    X = []
    y = []

    for i in range(0, len(data.index) - window_size):
        temp = [data.iloc[i + j]['Close'] for j in range(0, window_size)]
        avg = sum(temp) / len(temp)

        X.append(temp)
        y.append(0 if data.iloc[i + window_size]['Close'] < avg else 1)

    return X, y
代码语言:javascript
运行
复制
class Model:
    def __init__(self, market: Market, training_percent: float, window_size: int):
        self.model = SVC(C=10, gamma='scale', kernel='rbf')

        X, y = create_features(market.data, window_size)
        self.X_train, self.y_train, self.X_test, self.y_test = train_test_split(X, y, shuffle=False, stratify=None, train_size=training_percent)

        self.X_train = np.array(self.X_train)
        self.y_train = np.array(self.y_test)

        #self.X_test = np.array(self.X_test).reshape(-1, 1)

    def train(self):
        self.model.fit(self.X_train, self.y_train)

    def test(self):
        y_pred = self.model.predict(self.X_test) #THE COMPLAINING LINE

        y_pred = [0 if i < 0.5 else 1 for i in y_pred]
        tn, fp, fn, tp = confusion_matrix(self.y_test, y_pred, labels=[0, 1]).ravel()
        print(tn, fp, fn, tp)
        print("Accuracy:", (tn + fp) / (tn + fp + fn + tp))

    def predict(self, input_array):
        return self.model.predict(input_array)

上面的名称为:

代码语言:javascript
运行
复制
model_test = Model(markets[m], training_testing[j], window_size[i])
model_test.train()
model_test.test()

如果能在这个问题上提供任何帮助,我们将不胜感激。提前谢谢你。

EN

Stack Overflow用户

回答已采纳

发布于 2022-05-16 07:55:44

问题在于如何获得train_test_split的输出。正如文档声明的那样,您应该按照顺序得到拆分的数据集:

代码语言:javascript
运行
复制
# Notice the order of the unpacking.
self.X_train, self.X_test, self.y_train, self.y_test = train_test_split(X, y, shuffle=False, stratify=None, train_size=training_percent)

因此,测试数据集具有不同的形状,因为它实际上是培训标签。您也不需要.reshape

另外,您也不确定是否要这样做:

代码语言:javascript
运行
复制
# Assigning y_test to y_train.
self.y_train = np.array(self.y_test)
票数 3
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72252887

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档