簡體   English   中英

如何傳遞單個列因變量來訓練線性回歸模型?

[英]How to pass the single columnar dependent variable to train the linear regression model?

我是機器學習的新手,最近開始學習簡單線性回歸模型。

我有一個數據集,除了列id (整數類型)之外,所有列都是String數據類型。 我已將其加載到 pandas 數據框中並從中選擇索引,如下所示。

pandas 數據框共有 32 列,第 33 列是因變量列,僅顯示YESNO 使用所有自變量(第 0 列到第 31 列),我試圖找出是否可以預測第 32 列中的值,這是我的因變量。

data = psyco.read_into_pandas()
X = data.iloc[:, 1:33].values
Y = data.iloc[:, 32].values

# Add missing values
imputer = SimpleImputer(missing_values=np.nan, strategy='most_frequent', add_indicator=True)

# Fit the rows and columns into the imputer
imputer.fit(X[:, 1:33])

# Transform the data.
X[:, 1:33] = imputer.transform(X[:, 1:33])

# One hot encoding
ct = ColumnTransformer(transformers=[('encoder', OneHotEncoder(), [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31])], remainder='passthrough')
X = np.array(ct.fit_transform(X))

# Label Encoder
le = LabelEncoder()
Y = le.fit_transform(Y)

# Split data into train and test data
X_train, X_test, Y_train, Y_test = train_test_split(X, Y, test_size=0.2, random_state=0)

在發送X_trainY_train的值之前,我只打印了Y_train的值,我可以看到它包含一個整數數組,如下圖所示。

在此處輸入圖像描述

但是當我將X_trainY_train的數據發送到我的LinearRegression()時,我遇到了一個錯誤,上面寫着:

ValueError: could not convert string to float: 'yes'

完整錯誤:

Traceback (most recent call last):
  File "/Some/Path/mltask.py", line 52, in task_2
    lr.fit(X_train, Y_train)
  File "/Some/Path/venv/lib/python3.9/site-packages/sklearn/linear_model/_base.py", line 684, in fit
    X, y = self._validate_data(
  File "/Some/Path/venv/lib/python3.9/site-packages/sklearn/base.py", line 596, in _validate_data
    X, y = check_X_y(X, y, **check_params)
  File "/Some/Path/venv/lib/python3.9/site-packages/sklearn/utils/validation.py", line 1074, in check_X_y
    X = check_array(
  File "/Some/Path/venv/lib/python3.9/site-packages/sklearn/utils/validation.py", line 856, in check_array
    array = np.asarray(array, order=order, dtype=dtype)
ValueError: could not convert string to float: 'yes'

我不明白的是,當我打印Y_train時,我在數組中看到整數,但回歸表明它無法將字符串轉換為浮點數。

如果我錯過了中間的任何步驟,誰能告訴我,我該如何糾正我的錯誤? 非常感謝任何幫助。

我認為您未轉換的數據可能在 X_train 中,而不是 Y_train 中。

說明:您按以下方式拆分數據:

X = data.iloc[:, 1:33].values
Y = data.iloc[:, 32].values

這意味着Y包含在X中。 在 python 中,索引從 0 開始,所以如果你的因變量是最后一列,你想像這樣拆分:

X = data.iloc[:, 0:32].values
Y = data.iloc[:, 32]

否則,您將嘗試預測 Y,其中 Y 在您不需要線性回歸來實現的特征集中。

在其余代碼中,X 中的額外列未通過OneHotEncoder傳遞(因為您傳遞了第 1 到 31 列),這導致您在 X_train 中有一些“是”、“否”數據

暫無
暫無

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

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