我尝试使用虚拟变量(flv1、h264、mpeg4)来预测(umem 和 utime)。关于如何基于单个分类变量预测两个结果的任何建议?
这是我目前所做的。每当我尝试运行 fit 函数时,python 只会返回没有属性的 LinearRegression()。
答案 0 :(得分:0)
我不确定你能不能做到。
让我们看看列 ["flv1", "h264", "mpeg4"]。它们是由单个分类变量构建的,这意味着这三列中的值只有 3 种可能性:(1, 0, 0), (0, 1, 0), (0, 0, 1),但是有“umem”和“utime”有 4890 个不同的值。 例如,查看索引为 0、3、4887 的行 --> 在所有情况下,flv1 = 0、h264 = 1、mpeg4 = 0,但“umem”和“utime”的值明显不同。
对于初学者来说,您可以为分类变量的每个值计算“umem”和“utime”变量的均值/标准/分布。换句话说,我将从原始数据帧(基于 ladt 三列中的值)创建三个数据帧,并分别分析它们,以查看“umem”和“utime”的值如何为分类的每个值分布变量)。
希望这是有道理的。
答案 1 :(得分:0)
首先,您调用了线性回归的 fit()
方法,但为了预测,您需要在 predict()
之后调用 fit()
方法。
其次,您想要预测多个结果,线性回归适用于预测单个结果。 您应该从 scikit-lear 中查看多类和多输出算法,其中包含 一些 multioutput-regression 算法。
答案 2 :(得分:0)
“编解码器”是您要用作参考以预测“umem”和“utime”的数据列吗?如果是这样,您需要一个管道。
from sklearn.pipeline import Pipeline
from sklearn.preprocessing import StandardScaler
from sklearn.linear_model import LinearRegression
from sklearn.metrics import mean_squared_error
from sklearn.model_selection import train_test_split
std_scaler = StandardScaler()
lin_reg = LinearRegression()
lin_regressor = Pipeline([
("std_scaler", std_scaler),
("lin_reg", lin_reg),
])
X = df[['umem', 'utime']]
y_train_predict = df['codec']
def learning_curves(regressor, X, y):
X_train, X_val, y_train, y_val = train_test_split(X, y, test_size=0.2, random_state=55)
train_errors, val_errors = [], []
for m in range(2, len(X_train)):
regressor.fit(X_train[:m], y_train[:m])
y_train_predict = regressor.predict(X_train[:m])
y_val_predict = regressor.predict(X_val)
train_errors.append(mean_squared_error(y_train[:m], y_train_predict))
val_errors.append(mean_squared_error(y_val, y_val_predict))
# this part is just for the plot setting
plt.figure(figsize=(12,9))
plt.plot(np.sqrt(train_errors), "r-", linewidth=2, label="train")
plt.plot(np.sqrt(val_errors), "b-", linewidth=3, label="val")
plt.legend(loc="upper right", fontsize=14)
plt.xlabel("Training set size", fontsize=14)
plt.ylabel("RMSE", fontsize=14)
plt.axis([0, 60, 0, 20])
plt.show()
print(np.sqrt(train_errors)[-1], np.sqrt(val_errors)[-1])
return X_train, y_train
X_train, y_train = learning_curves(lin_regressor, X, y_train_predict)
在这种情况下,您将“umem”和“utime”中的数据与“codec”进行比较。您不需要将“编解码器”转换为虚拟变量。