Обычно вы бы " one-hot encode " категориальные переменные. Это также называется " добавление фиктивных переменных ".
Вы также захотите " стандартизировать " числовые переменные.
Scikit-learn делаетэто просто:
from sklearn.compose import ColumnTransformer
from sklearn.preprocessing import OneHotEncoder
t = ColumnTransformer(transformers=[
('onehot', OneHotEncoder(), ['par3', 'par4']),
('scale', StandardScaler(), ['par1', 'par2'])
], remainder='passthrough') # Default is to drop untransformed columns
t.fit_transform(df)
Наконец, вам необходимо преобразовать свой вход таким же образом, прежде чем запускать его через модель.
Собрав все вместе, вы получите:
import pandas as pd
from sklearn.linear_model import LinearRegression
from sklearn.compose import ColumnTransformer
from sklearn.preprocessing import OneHotEncoder, StandardScaler
df = pd.DataFrame({'par1':[1,3,5,7,9, 11,13],
'par2':[0.2, 0.4, 0.5, 0.7, 1, 1.2, 1.45],
'par3':['yes', 'no', 'no', 'yes', 'no', 'yes', 'no'],
'par4':['blue', 'red', 'red', 'blue', 'green', 'green', 'blue'],
'output':[103, 310, 522, 711, 921, 1241, 1451]})
t = ColumnTransformer(transformers=[
('onehot', OneHotEncoder(), ['par3', 'par4']),
('scale', StandardScaler(), ['par1', 'par2'])
], remainder='passthrough')
# Transform the features
features = t.fit_transform(df.iloc[:,:-1])
result = df.iloc[:,-1]
# Train the linear regression model
reg = LinearRegression()
model = reg.fit(features, result)
# Generate a prediction
example = t.transform(pd.DataFrame([{
'par1': 2, 'par2': 0.33, 'par3': 'no', 'par4': 'red'
}]))
prediction = model.predict(example)
reg_score = reg.score(features, result)
print(prediction, reg_score)