В чем разница между выполнением регрессии с фреймом данных и ndarray? - PullRequest
0 голосов
/ 12 апреля 2020

Я хотел бы знать, зачем мне нужно преобразовывать мой фрейм данных в ndarray при выполнении регрессии, поскольку я получаю тот же результат для перехвата и коэффицирования, когда я не конвертирую его?

import matplotlib.pyplot as plt
import pandas as pd
import pylab as pl
import numpy as np
from sklearn import linear_model
%matplotlib inline

# import data and create dataframe

!wget -O FuelConsumption.csv https://s3-api.us-geo.objectstorage.softlayer.net/cf-courses-data/CognitiveClass/ML0101ENv3/labs/FuelConsumptionCo2.csv    

df = pd.read_csv("FuelConsumption.csv")
cdf = df[['ENGINESIZE','CYLINDERS','FUELCONSUMPTION_COMB','CO2EMISSIONS']]

# Split train/ test data

msk = np.random.rand(len(df)) < 0.8 
train = cdf[msk] 
test = cdf[~msk] 

# Modeling

regr = linear_model.LinearRegression()

train_x = np.asanyarray(train[['ENGINESIZE']])
train_y = np.asanyarray(train[['CO2EMISSIONS']])

**# if I use the dataframe, train[['ENGINESIZE']] for 'x', and train[['CO2EMISSIONS']] for 'y' 
below, I get the same result**

regr.fit (train_x, train_y) 

# The coefficients
print ('Coefficients: ', regr.coef_)
print ('Intercept: ',regr.intercept_)

Спасибо тебе очень нравится!

1 Ответ

0 голосов
/ 12 апреля 2020

То есть df - это загруженный фрейм данных, cdf - это еще один фрейм с выбранными столбцами, а train - выбранные строки.

train[['ENGINESIZE']] - это фрейм данных с 1 столбцом (я думаю, train['ENGINESIZE'] будет pandas Series).

Я считаю, что предпочтительный синтаксис для получения массива из кадра данных:

 train[['ENGINESIZE']].values          # or
 train[['ENGINESIZE']].to_numpy()

, хотя

 np.asanyarray(train[['ENGINESIZE']])

должен делать то же самое.

Копая код regr.fit, я вижу, что он вызывает sklearn.utils.check_X_y, что, в свою очередь, вызывает sklearn.tils.check_array. Это заботится о преобразовании входных данных в numpy массивы, с некоторой осведомленностью об pandas особенностях фрейма данных (таких как множественные dtypes).

Таким образом, получается, что если fit принимает ваши фреймы данных, вы не Не нужно конвертировать их заранее. Но если вы можете получить из массива данных хороший массив, в этом нет никакого вреда. В любом случае сопоставление выполняется с массивами, полученными из кадра данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...