熊猫:线性回归将标准缩放器应用于某些列
Posted
技术标签:
【中文标题】熊猫:线性回归将标准缩放器应用于某些列【英文标题】:Pandas : Linear Regression apply standard scaler to some columns 【发布时间】:2021-12-20 02:43:01 【问题描述】:所以我有以下数据集:
new_data=pd.read_csv('https://raw.githubusercontent.com/michalis0/DataMining_and_MachineLearning/master/data/regression_sales.csv')
然后我做了一个简单的线性回归:
y = np.array(new_data['sales_per_day'])
X = np.array(new_data[['number_orders', 'number_items', 'number_segments', 'year', 'month', 'day']])
X.shape, y.shape
train, test = train_test_split(df, test_size=0.2, train_size=0.8, random_state = 77)
from sklearn.linear_model import LinearRegression
regression_model = LinearRegression(fit_intercept=True)
regression_model.fit(X, y)
我现在想标准化'number_orders', 'number_items', 'number_segments'
,这是我尝试过的:
from sklearn.preprocessing import StandardScaler
Std_Scaler = StandardScaler()
Std_data = Std_Scaler.fit_transform(X_train)
Std_data = pd.DataFrame(Std_Scaler.transform(X_test), columns=['number_items', 'number_orders', 'number_segments'])
但是我收到以下错误ValueError: Wrong number of items passed 6, placement implies 3
。
问题是我只想标准化这三列和其他三列(year, month, day
),但我似乎无法使其工作。
你知道有什么方法可以只标准化数据集的一部分吗?
【问题讨论】:
【参考方案1】:您可以像这样拆分数据框:
X = new_data[['number_orders', 'number_items', 'number_segments', 'year', 'month', 'day']]
y = new_data['sales_per_day']
X_train, X_test, y_train, y_test = train_test_split(X,y,test_size=0.2,
train_size=0.8, random_state = 77)
定义要缩放的列:
Cols = ['number_items', 'number_orders', 'number_segments']
那么你需要制作一个副本,因为你正在修改数据框,所以像:
X_train = X_train.copy()
X_test = X_test.copy()
X_train[Cols] = Std_Scaler.fit_transform(X_train[Cols])
X_test[Cols] = Std_Scaler.fit_transform(X_test[Cols])
【讨论】:
但是Std_data = pd.DataFrame(Std_Scaler.transform(X_test), columns= Cols)
不起作用。我必须fit_transform
缩放器,然后将transform
应用于X_test
。在标准化这些列之后,我想对标准化数据进行线性回归模型。
您不需要创建另一个 data.frame。你可以只回归 X_train
哦,我明白了!伟大的 !感谢您的帮助以上是关于熊猫:线性回归将标准缩放器应用于某些列的主要内容,如果未能解决你的问题,请参考以下文章
ng机器学习视频笔记 ——线性回归的多变量特征缩放标准方程法
Bagging策略和随机森林的应用以及线性回归与局部加权回归三种实例(线性回归AdaBoostGradientBoostingRegressor)机器学习