#python #machine-learning #scikit-learn #linear-regression
Вопрос:
У меня есть df, содержащий столбцы «год» и «доход на душу населения (в долларах США)».
plt.scatter(df.year, df['per capita income (US$)'], color='red')
plt.xlabel('Year')
plt.ylabel('Per Capita Income (US$)')
plt.show()
reg = linear_model.LinearRegression()
reg.fit(df[['year']], df['per capita income (US$)'])
reg.predict(2011)
Получено сообщение об ошибке:
ValueError: Expected 2D array, got scalar array instead:
array=2011.
Reshape your data either using array.reshape(-1, 1) if your data has a single feature or array.reshape(1, -1) if it contains a single sample.
Я настроил вызов reg.predict() на:
reg.predict([[2011]])
Код выполнен без ошибок, однако .predict()
функция не вернула желаемый результат.
print(df.columns)
Index(['year', 'per capita income (US$)'], dtype='object')
Комментарии:
1. Не могли бы вы поделиться базовым форматом набора данных ? (и результат, который вы получите) В ML формат и тип данных, составляющие набор данных, столь же важны, как и сама модель. Я не могу воспроизвести вашу ошибку, потому что у меня нет данных, но мой первый инстинкт заключается в том, что, возможно, ваш df [«доход на душу населения (долл .США)»] Находится в строковом формате, а не в double/float/int и т. Д…
2. Обновлен исходный вопрос! Спасибо вам за оперативный ответ!
3. df[«год»] — это формат int. xxxx, в то время как df[«доход на душу населения (USD$)»] является плавающим. формат xxxx.xxxx.
Ответ №1:
Вы должны изменить свой X, чтобы он был 2D-массивом, а не 1D-массивом. Для подгонки модели требуется 2D-массив.т. е. (n_samples, n_features).
При использовании .reshape(-1,1)
он добавляет к данным одно измерение.
X = df['year'].values.reshape(-1,1)
y = df['per capita income (US$)'].values
reg = linear_model.LinearRegression()
reg.fit(X,y)
print(reg.predict([[2011]]))
Комментарии:
1. Это лучшее объяснение решения поставленной проблемы. Спасибо!