簡體   English   中英

線性回歸 - 如何預測兩個變量

[英]Linear Regression - How to predict two variables

我試圖使用虛擬變量(flv1、h264、mpeg4)來預測(umem 和 utime)。 關於如何基於單個分類變量預測兩個結果的任何建議?

數據集

這是我到目前為止所做的。 每當我嘗試運行 fit function, python 時,只會返回沒有屬性的 LinearRegression()。

迄今為止的進展

我不確定你能做到這一點。

讓我們看看列 ["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”的值如何為分類的每個值分布多變的)。

希望這是有道理的。

首先,您調用了線性回歸的fit()方法,但為了進行預測,您需要在fit()之后調用predict()方法。

其次,您想預測多個結果,線性回歸適用於預測單個結果。 您應該查看 scikit-lear 中的Multiclass and multioutput algorithms ,其中包含一些多輸出回歸算法。

“編解碼器”是您要用作預測“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”比較。 您不需要將“編解碼器”轉換為虛擬變量。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM