非线性支持向量回归问题 - Sklearn Python 3.6

数据挖掘 机器学习 Python scikit-学习 回归 支持向量机
2022-02-18 02:59:34

我对 Sklearn 和机器学习还很陌生,在使用带有 RBF 内核的 SVR 时遇到了问题。以下是我的预测数据与我的真实数据直接比较:

在此处输入图像描述

我不知道我做错了什么,想知道你们是否可以帮助我。

下面是我的代码:

scaler=MinMaxScaler(feature_range=(0,1))
data=scaler.fit_transform(df['close'].values.reshape(-1,1).astype('float32'))

def split_data(data, test_size=0.2):
    split=len(data)-int(test_size * len(data))
    train=data[:split]
    test=data[split:]

    return train,test

xtrain,xtest=split_data(data)
ytrain,ytest=np.roll(xtrain,-1)[:-1].ravel(), np.roll(xtest,-1)[:-1].ravel()
xtrain,xtest=xtrain[:-1], xtest[:-1]

svr_poly=SVR(kernel='poly', C=1e3, degree=2)
svr_lin=SVR(kernel='linear', C=1e3)
svr_rbf=SVR(kernel='rbf', C=1e3, gamma=0.1)

lin_regr=LinearRegression()

svr_poly.fit(xtrain,ytrain)
svr_lin.fit(xtrain,ytrain)
svr_rbf.fit(xtrain,ytrain)

lin_regr.fit(xtrain,ytrain)

谢谢!

编辑

我只有一个功能的原因是因为我想将它包含在以下循环中,以根据过去的预测来预测价格:

def predict(iterations, data, buy_threshold=0.2, sell_threshold=0.2):

    preds=[data[-1]]
    lin_preds=[data[-1]]
    mean_preds=[]

    buysell=[]
    for d in range(iterations):
        pred=svr_poly.predict(preds[-1].reshape(-1,1))
        lin_pred=svr_lin.predict(preds[-1].reshape(-1,1))


        ### BUY/SELL/KEEP
        # MEAN AVERAGE OF LINEAR AND POLYNOMIAL PREDICTIONS
        mean_pred=(pred+lin_pred)/2

        # NEXT AVERAGE PREDICTION
        next_mean_pred=(svr_poly.predict(mean_pred.reshape(-1,1))+lin_regr.predict(mean_pred.reshape(-1,1)))/2

        if(next_mean_pred >= mean_pred*(1-buy_threshold)):
            buysell.append('BUY')
        elif(next_mean_pred <= mean_pred*(1+sell_threshold)):
            buysell.append('SELL')
        else:
            buysell.append('KEEP')


        ### APPEND PREDICTIONS TO LISTS
        preds.append(pred)
        lin_preds.append(lin_pred)
        mean_preds.append(mean_pred)

    gap=preds[0]-preds[1]
    for i in range(len(preds)):
        preds[i]+=gap

    return np.concatenate(tuple(preds[1:])), np.concatenate(tuple(lin_preds[1:])), np.concatenate(tuple(mean_preds)), buysell

这里也是我绘制的训练数据输出: 在此处输入图像描述

0个回答
没有发现任何回复~