Ожидался двумерный массив, вместо этого получен скалярный массив: array=11

Вопрос или проблема

import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
from sklearn.metrics import r2_score

# загрузка данных
veriler = pd.read_csv(r'C:\Users\k\Desktop\maaslar_yeni.csv')
# x здесь независимая переменная, y же является зависимой переменной.
x = veriler.iloc[:,2:3]
y = veriler.iloc[:,5:]
X=x.values.reshape(-1,1)
Y=y.values.reshape(-1,1)

# линейная регрессия
from sklearn.linear_model import LinearRegression
lin_reg = LinearRegression()
lin_reg.fit(X,Y)

import statsmodels.api as sm
model=sm.OLS(lin_reg.predict(X),X)
print(model.fit().summary())

На уроке инструктор просто изменил x, создав новые X и Y. Затем он пытается использовать LinearRegression, как вы видите на картинке, чтобы узнать значение R. Но когда я пытаюсь это сделать, я вижу указанную ошибку. Как я могу это исправить?

Ваш код может содержать ошибку

x = veriler.iloc[:,2:3]
y = veriler.iloc[:,5:]
X=x.values.reshape(-1,1)
Y=y.values.reshape(-1,1)

Как вы можете видеть, у x есть ОДНА колонка (2:3), но у y может быть больше одной (5: означает 6-й столбец до конца). В результате, когда вы выполняете reshape, длина Y может быть в два (или более) раза больше, чем длина X.

Пожалуйста, приведите несколько записей ваших данных, чтобы помочь вам больше; но вообще, X может иметь несколько колонок, а Y — одну колонку. Однако, если вы собираетесь делать регрессию для 1 колонки X и Y, возможное исправление вашего кода выглядит так (уберите : для вашего y)

y = veriler.iloc[:,5]

Ответ или решение

Ошибка "Expected 2D array, got scalar array instead: array=11" часто возникает в контексте работы с библиотеками для машинного обучения, такими как scikit-learn, и может быть связана с тем, что ожидались данные в двумерном формате, тогда как на самом деле был передан скаляр или одномерный массив. В данной ситуации данная ошибка может быть вызвана некорректным определением массивов X и Y.

Рассмотрим вашу кодовую базу более подробно и выявим возможные проблемы, которые могут привести к данной ошибке.

Анализ кода

  1. Импорт необходимых библиотек:
    Код начинается с импорта необходимых модулей, таких как numpy, pandas, matplotlib и sklearn, что является стандартной практикой для работы с данными и машинным обучением.

  2. Загрузка данных:

    veriler = pd.read_csv(r'C:\Users\k\Desktop\maaslar_yeni.csv')

    Здесь вы загружаете данные из CSV-файла в DataFrame pandas. Убедитесь, что файл существует по указанному пути и данные корректно загружены.

  3. Определение независимой и зависимой переменной:

    x = veriler.iloc[:,2:3]  # Независимая переменная
    y = veriler.iloc[:,5:]    # Зависимая переменная

    В этом коде вы извлекаете независимые и зависимые переменные. Важно заметить, что x будет являться одной колонкой, тогда как y может содержать несколько колонок, если в вашем наборе данных больше одной зависимой переменной, что потенциально вызывает несоответствие в размерах.

  4. Преобразование в массивы и изменение формы:

    X = x.values.reshape(-1, 1)  # Преобразование x в двумерный массив
    Y = y.values.reshape(-1, 1)  # Преобразование y в двумерный массив

    Использование метода reshape(-1, 1) здесь создает двумерные массивы. Однако, если y содержит более одной колонки, и если размеры X и Y не совпадают, это приведет к ошибке при попытке выполнения регрессии.

Решение проблемы

Для устранения данной проблемы рекомендуется изменить определение y, чтобы извлечь только одну колонку. Это можно сделать следующим образом:

y = veriler.iloc[:, 5]  # Извлечение одной колонки

Таким образом y станет одномерным массивом, и в дальнейшем изменения не потребуются, так как y будет совместим с методом регрессии scikit-learn.

Обновленный код

Вот ваша обновленная часть кода с исправлениями:

# Определение зависимой переменной
y = veriler.iloc[:, 5]  # Извлечение только одной колонки

# Преобразование в массивы
X = x.values.reshape(-1, 1)
Y = y.values.reshape(-1, 1)

Заключение

После внесения указанных изменений ошибка "Expected 2D array, got scalar array instead" должна исчезнуть. Следует также удостовериться, что форма массивов X и Y совпадает перед вызовом метода fit модели линейной регрессии. Проверяйте размерности массивов с помощью print(X.shape, Y.shape), чтобы убедиться, что они соответствуют друг другу.

Если ошибка возникает снова, проверьте целостность и структуру данных в вашем CSV-файле.

Оцените материал
Добавить комментарий

Капча загружается...