Pandas 使用dataframe和ndarray进行回归有什么区别?
我想知道为什么在进行回归时需要将数据帧转换为ndarray,因为在不转换数据帧时,截距和coef的结果是相同的Pandas 使用dataframe和ndarray进行回归有什么区别?,pandas,numpy,scikit-learn,Pandas,Numpy,Scikit Learn,我想知道为什么在进行回归时需要将数据帧转换为ndarray,因为在不转换数据帧时,截距和coef的结果是相同的 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 FuelCo
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_)
多谢各位 因此df是加载的数据帧,cdf是另一个具有选定列的帧,train是选定行
train['ENGINESIZE']]是一个1列数据帧,我相信train['ENGINESIZE']将是一个系列
我认为从数据帧获取数组的首选语法是:
train[['ENGINESIZE']].values # or
train[['ENGINESIZE']].to_numpy()
虽然
np.asanyarray(train[['ENGINESIZE']])
应该做同样的事情
深入研究regr.fit代码,我看到它调用sklearn.utils.check_X_y,这反过来又调用sklearn.tils.check_数组。它负责将输入转换为numpy数组,并了解一些数据帧特性,例如多个数据类型
因此,如果fit接受您的数据帧,您不需要提前转换它们。但是,如果您可以从数据帧获得一个好的数组,那么这样做也没有坏处。无论采用哪种方式,都可以使用从数据帧派生的数组进行拟合。数据帧只是一个增强的ndarray,它在下面使用ndarray。唯一的原因是速度和优化,我认为没有其他理由使用ndarray而不是dataframe。以免避免额外的一层复杂性