Как изменить «год» из одной функции?

#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. Это лучшее объяснение решения поставленной проблемы. Спасибо!