如何标准化数据框中的列,然后绘制回归线? [复制]

Posted

技术标签:

【中文标题】如何标准化数据框中的列,然后绘制回归线? [复制]【英文标题】:How can I normalize columns in a data frame and then plot a regression line? [duplicate] 【发布时间】:2020-05-02 19:53:41 【问题描述】:

我有一个包含许多列的大型数据框。我想规范化几列都是数字的,然后使用回归绘制两个。我认为下面的代码会为我做这件事。

from sklearn import preprocessing
# Create x, where x the 'scores' column's values as floats
modDF = df[['WeightedAvg','Score','Co','Score', 'PeerGroup', 'TimeT', 'Ter', 'Spread']].values.astype(float)
# Create a minimum and maximum processor object
min_max_scaler = preprocessing.MinMaxScaler()
# Create an object to transform the data to fit minmax processor
x_scaled = min_max_scaler.fit_transform(modDF)
# Run the normalizer on the dataframe
df_normalized = pd.DataFrame(x_scaled)


import seaborn as sns
import matplotlib.pyplot as plt
sns.regplot(x="WeightedAvg", y="Spread", data=modDF)

但是,我收到以下错误:IndexError: only integers, slices (:), ellipsis (...), numpy.newaxis (None) and integer or boolean arrays are valid indices

我使用sns.regplot 进行了没有归一化的回归,它工作了,但看起来很奇怪,所以我想看到它应用了归一化。我知道回归是如何工作的。我只是不知道回归是如何工作的。

【问题讨论】:

从您的示例中不清楚发生错误的位置。在您的示例中,您创建“modDF”,然后缩放“x”。一般来说,如果我为 x 创建了一个数字 ndarray,你的代码似乎确实可以使用 哦,不错。我刚刚更改了它,所以现在是这样,我重新运行了代码,我得到了同样的错误。 只要你在数据帧上调用.values,它就会变成一个numpy数组。你可以试试df.loc[:, ['your columns']].astype(float) 这能回答你的问题吗? Linear Regression on Pandas DataFrame using Sklearn ( IndexError: tuple index out of range) ***.com/questions/34952651/… 【参考方案1】:

无需使用命令:df_normalized = pd.DataFrame(x_scaled)

如果你想运行linear regression。这应该有效:

from sklearn import preprocessing
from sklearn.linear_model import LinearRegression

df = ['WeightedAvg','Score','Co','Score', 'PeerGroup', 'TimeT', 'Ter', 'Spread']
df[cols] = df[cols].apply(pd.to_numeric, errors='coerce', axis=1)

X = df[['WeightedAvg','Score','Co','Score', 'PeerGroup', 'TimeT', 'Ter', 'Spread']]
#select your target variable
y = df[['target']]
#train test split
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.33, random_state=42)

# Create a minimum and maximum processor object
min_max_scaler = preprocessing.MinMaxScaler()
# Create an object to transform the data to fit minmax processor
X_train_scaled = min_max_scaler.fit_transform(X_train)
X_test_scaled = min_max_scaler.transform(X_test)
#start linear regression
reg = LinearRegression().fit(X_train_scaled, y_train)
#predict for test
y_predict = reg(X_test_scaled, y_test)

如果您使用 train/test-split,请务必仅在训练数据上使用缩放器拟合,此时测试数据是未知的!对于测试部分,您只能将其用于转换。

【讨论】:

以上是关于如何标准化数据框中的列,然后绘制回归线? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

如何将包含列表的列转换为熊猫数据框中的单独列? [复制]

绘制属于数据框中特定列数据的多条回归线[重复]

删除数据框中的列

在 pandas 数据框中按组回归并添加带有预测值和 beta/t-stats 的列

如何对一个数据框中的列值求和并将结果添加为另一个数据框中的列?

将熊猫数据框中的列向上移动一位?