@AntonKr-03

Как исправить ошибку Scikit-learn?

import numpy as np
from sklearn.preprocessing import PolynomialFeatures
from sklearn.tree import DecisionTreeRegressor
from sklearn.linear_model import Ridge
from sklearn import linear_model
from sklearn.linear_model import SGDRegressor
from sklearn.preprocessing import StandardScaler
import pandas as pd
import matplotlib.pyplot as plt

#Create dataframe from dataset
df = pd.read_json("/data.json")

df["t"] = df["t"].astype(float)
X_train = df["t"]
X_train = np.array(X_train)[:, None]

df["c"] = df["c"].astype(float)
Y_train_c = df["c"]

df["ma"] = df["ma"].astype(float)
Y_train_ma = df["ma"]

Y_train = [Y_train_c, Y_train_ma]
for i in Y_train:
# Fit regression model
model_sgd = SGDRegressor(max_iter=1000, tol=1e-3)
model_sgd.fit(X_train, i)
model_pr = PolynomialFeatures(2)
poly = model_pr.fit_transform(X_train)
model_pr.fit(poly, i)
model_ridge = Ridge(alpha=1.0)
model_ridge.fit(X_train, i)
model_lasso = linear_model.Lasso(alpha=0.1)
model_lasso.fit(X_train, i)

# Predict
X_test = np.arange(1, 4902, 1.0)[:, np.newaxis]
X_test = X_test.reshape(1, -1)
scaler = StandardScaler()
scaler.fit(X_test)
scaler.transform(X_test)
Y_test_sgd = model_sgd.predict(X_test[-1].reshape(-1, 1))
Y_test_sgd.reshape(-1, 1)
model_sgd.predict(X_test[-1].reshape(-1, 1))
Y_test_pr = model_pr.predict(X_test)
Y_test_ridge = model_ridge.predict(X_test)
Y_test_lasso = model_lasso.predict(X_test)

#Plot the results
plt.figure()
plt.scatter(X_test, Y_train_c, s=20, edgecolor="lightblue", c="darkorange", label="data")
plt.plot(X_test, Y_test_pr, color="cornflowerblue", label="Polynomial regression", linewidth=2)
plt.plot(X_test, Y_test_sgd, color="brown", label="SGD Regression", linewidth=2)
plt.plot(X_test, Y_test_ridge, color="yellow", label="Ridge-regression", linewidth=2)
plt.plot(X_test, Y_test_lasso, color="green", label="Lasso-regression", linewidth=2)
plt.xlabel("t")
plt.ylabel("c")
plt.title("Regressions")
plt.legend()
plt.show()
plt.savefig("metric_score_c.png",bbox_inches='tight')

plt.figure()
plt.scatter(X_train, Y_train_ma, s=20, edgecolor="black", c="darkorange", label="data")
plt.plot(X_test, Y_test_pr, color="cornflowerblue", label="Polynomial regression", linewidth=2)
plt.plot(X_test, Y_test_sgd[-1].reshape(-1, 1), color="brown", label="SGD Regression")
plt.plot(X_test, Y_test_ridge, color="yellow", label="Ridge-regression", linewidth=2)
plt.plot(X_test, Y_test_lasso, color="green", label="Lasso-regression", linewidth=2)
plt.plot(X_train, Y_train_ma, color="gray")
plt.xlabel("t")
plt.ylabel("ma")
plt.title("Regressions")
plt.legend()
plt.show()
plt.savefig("metric_score_ma.png",bbox_inches='tight')

ValueError: x and y must have same first dimension, but have shapes (1, 4901) and (4901,)

Подскажите, пожалуйста, как исправить. Всё, что знал, перепробовал. Вообще не понимаю, как решить.
  • Вопрос задан
  • 103 просмотра
Пригласить эксперта
Ответы на вопрос 1
Maksim_64
@Maksim_64
Data Analyst
Ну код писал не ты, просто взял откуда-то да и все. Ошибка элементарная. У тебя где то он должен подсветить не совпадают размерности массивов. (1,4901) - это матрица с одним рядом и 4901 колонкой, а второй массив одномерный. Предположу что ошибка происходит при рисовании графика, это matplotlib выдает такую ошибку.
Я тебе сделал маленький пример с идентичной ошибкой.
X = np.arange(0,4901)
y = 1.2 * X + 3
X = X.reshape(1,4901)
plt.plot(X,y)

Вот мой код выдаст такую же ошибку. Как поправить нужно привести размерности массивов, к виду при котором с ними можно работать. ну например либо plt.plot(X.reshape(-1,1),y) сработает либо распрямить X сработает plt.plot(X.ravel(),y). И так и так сработает. Ищи на каком plot'e у тебя ошибка и приводи размерности к подходящему виду.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы