Диаграммы рассеяния прогнозируемых значений и данных для каждого объекта ⇐ Python

Программы на Python
Anonymous
Диаграммы рассеяния прогнозируемых значений и данных для каждого объекта

Сообщение Anonymous »

Я создал модель полиномиальной линейной регрессии с помощью 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

Вернуться в «Python»