我在網上抓取了一個資料集,其中包含今年 NBA 球員的資料。我正在嘗試對資料集運行線性回歸,以查看給定球員在給定以下特征的情況下平均可能得分多少分:團隊名稱、位置、年齡、每場比賽的比賽分鐘數。但是,我無法理解如何處理前兩列,它們是我的分類變數。我剛剛在 Udemy 上開始了一門資料科學課程,但講師并沒有真正解釋在這種情況下要做什么,因為他的 OneHotEncoding 示例僅適用于具有一個分類變數的資料集。
我的代碼:
#Import Libraries
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
#Import Dataset
dataset = pd.read_csv('nba_clean.csv')
X = dataset.iloc[:, 1:-1].values
y = dataset.iloc[:, -1].values
#Encode Dataset
from sklearn.compose import ColumnTransformer
from sklearn.preprocessing import OneHotEncoder
ct = ColumnTransformer(transformers = [('encoder', OneHotEncoder(), [0, 1])], remainder = 'passthrough')
X = np.array(ct.fit_transform(X))
#Splitting the Dataset into Training set and Test Set
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.25, random_state = 0)
#Perform Multiple Linear Regression on Training set
from sklearn.linear_model import LinearRegression
regressor = LinearRegression()
regressor.fit(X_train, y_train)
#Compare predicted values to true values
y_pred = regressor.predict(X_test)
np.set_printoptions(precision = 2)
new_y_pred = y_pred.reshape(len(y_pred), 1)
new_y_test = y_test.reshape(len(y_test), 1)
print(np.concatenate((new_y_pred, new_y_test), 1))
uj5u.com熱心網友回復:
您的列變壓器必須處理所有不同的列型別:您必須更換
ct = ColumnTransformer(transformers = [('encoder', OneHotEncoder(), [0, 1])], remainder = 'passthrough')
使用以下型別的代碼:
首先定義您的列型別串列:
num_f = ['age', 'points', ...]
ord_f = ['bbb', 'ccc', ...]
cat_f = ['aaa', 'ddd', ...]
drop_f = []
然后為每種型別的值創建一個轉換器
# create a transformer for the categorical values
cat_tr = Pipeline(steps=[
('onehot', OneHotEncoder())])
# create a transformer for the categorical ordinal values
ord_tr = Pipeline(steps=[
('ordinal', OrdinalEncoder())])
# create a transformed for the numerical values
num_tr = Pipeline(steps=[
('scaler', StandardScaler())])
ct = ColumnTransformer(transformers=[
("drop",'drop' ,drop_f)
,("cat", cat_tr, cat_f)
,("ord", ord_tr, ord_f)
,("num", num_tr, num_f)
],remainder='passthrough')
uj5u.com熱心網友回復:
您可以使用 pandas 函式將某些列轉換為 one-hot:
pandas.get_dummies(data, column=["TeamName", "Position"])
像這樣:
df = pd.DataFrame({
"Player": ['player1', 'player2', 'player3'],
"TeamName": ['Lakers', 'Spurs', 'Lakers'],
"Position":['point guard', 'center', 'forward']
})
df
Player TeamName Position
0 player1 Lakers point guard
1 player2 Spurs center
2 player3 Lakers forward
pd.get_dummies(df, columns=['TeamName', 'Position'], prefix='', prefix_sep='')
Player Lakers Spurs center forward point guard
0 player1 1 0 0 0 1
1 player2 0 1 1 0 0
2 player3 1 0 0 1 0
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/347346.html
