[英]How to create a tf.data.Datasets for linear regression and train model
[英]How to pass the single columnar dependent variable to train the linear regression model?
我是機器學習的新手,最近開始學習簡單線性回歸模型。
我有一個數據集,除了列id
(整數類型)之外,所有列都是String
數據類型。 我已將其加載到 pandas 數據框中並從中選擇索引,如下所示。
pandas 數據框共有 32 列,第 33 列是因變量列,僅顯示YES
或NO
。 使用所有自變量(第 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_train
和Y_train
的值之前,我只打印了Y_train
的值,我可以看到它包含一個整數數組,如下圖所示。
但是當我將X_train
和Y_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.