Я создал модель полиномиальной линейной регрессии с помощью Sklearn с конвейером (штандскейлер, полином и подгонка). Модель имеет три функции и является полиномиальной в степени 2. Я хотел бы построить для каждой функции диаграмму рассеяния с фактическими данными и линию тренда прогнозируемого значения; две другие характеристики должны оставаться постоянными и иметь свое (масштабированное) среднее значение в этих банках. График генерируется функцией, но всегда выдается ошибка "ValueError: имена объектов должны соответствовать тем, которые были переданы во время подгонки.
Имена функций должны быть в том же порядке, в котором они были при подгонке".
Что может быть не так в этом коде?
sel = ['input1', 'input2', 'input3']
df_X = df[sel]
df_Y = df['output']
# Change to numpy array
y = df_Y
X = df_X
from sklearn.pipeline import Pipeline
from sklearn.compose import ColumnTransformer
from sklearn.preprocessing import OneHotEncoder
from sklearn.linear_model import LinearRegression
from sklearn.preprocessing import PolynomialFeatures, StandardScaler
# first scale and afterwards do polynomial
pipeline = Pipeline([
('scaler', StandardScaler()),
('poly', PolynomialFeatures(degree=2, interaction_only=False, include_bias=False)),
('regressor', LinearRegression(fit_intercept=True))]) # fit by linear regressor with estimating intercept
pipeline.fit(X, y)
# Function to plot scatter plots with trendline
def plot_with_trendline(X, y, feature_name):
plt.figure(figsize=(8, 6))
# Calculate mean values of other features
mean_values = X.mean()
mean_values = mean_values.drop(feature_name) # Drop the current feature
# Generate a range of values for the current feature
feature_values = np.linspace(X[feature_name].min(), X[feature_name].max(), 100)
# Prepare input for predictions
X_plot = pd.DataFrame({
feature_name: feature_values,
**{k: mean_values[k] for k in mean_values.index}
})
# Scale the features
X_scaled = pipeline.named_steps['scaler'].transform(X_plot)
# Transform the scaled features using polynomial features
X_poly = pipeline.named_steps['poly'].transform(X_scaled)
# Get trendline predictions
y_trendline = pipeline.named_steps['regressor'].predict(X_poly)
# Scatter plot
plt.scatter(X[feature_name], y, color='blue', label='Data Points')
# Plot trendline
plt.plot(feature_values, y_trendline, color='red', label='Trendline', linewidth=2)
plt.xlabel(feature_name)
plt.ylabel('Target Variable')
plt.title(f'Scatter Plot of {feature_name} vs. Target Variable')
plt.legend()
plt.grid()
plt.show()
# Create scatter plots with trendlines for each feature
for feature in X.columns
plot_with_trendline(X, y, 'feature')
Подробнее здесь: https://stackoverflow.com/questions/790 ... ch-feature