Polynomial Features hinzufügen
import pandas as pd
pd.set_option('display.max_columns', 50)
import numpy as np
import os
os.chdir('D:\Data\Projects\Klassifikation\Heart Disease')
import plotly_express as px
import matplotlib.pyplot as plt
plt.style.use('Solarize_Light2')
import seaborn as sns
from warnings import filterwarnings
filterwarnings('ignore')
from IPython.core.pylabtools import figsize
figsize(10, 10)
plt.rcParams['font.size'] = 15
from sklearn.preprocessing import PolynomialFeatures
from sklearn.ensemble import RandomForestClassifier
df = pd.read_csv('heart.csv')
df.shape
df.head()
df.corr()['target'].sort_values(ascending=False)
Mit Random Forest auf dem kompletten Datensatz die Feature Importances lernen.
plt.rcParams['font.size'] = 20
x = df.drop('target', axis=1)
y = df.target
params = {'random_state': 0, 'n_jobs': 4, 'n_estimators': 5000, 'max_depth': 8}
clf = RandomForestClassifier(**params)
clf = clf.fit(x, y)
# Plot features importances
fi = pd.Series(data=clf.feature_importances_, index=x.columns).sort_values(ascending=False)
plt.figure(figsize=(15,10))
plt.title("Feature Importances", fontsize = 25)
ax = sns.barplot(y=fi.index, x=fi.values, palette="Blues_d", orient='h')
Kombinationen vorhandene Variablen und das Potenzieren von Variablen können Beziehungen zwischen diesen und der Zielvariablen hervorzubringen, die zuvor nicht klar ersichtlich waren. Wenn eine Variable alleine keine große Korrelation mit dem Ziel hat, so können Multiplikationen zweier Variablen eine bedeutsame Korrelation mit diesem haben. Diese Methode muss mit Bedacht angewendet werden, um Overfitting zu vermeiden. Zudem gibt es die Gefahr des "Fluchs der Dimensionalität"
poly_features = df[['cp', 'thalach', 'ca', 'oldpeak', 'thal', 'age']]
poly_transformer = PolynomialFeatures(degree = 3)
# Trainieren von poly
poly_transformer.fit(poly_features)
# Transformieren der Features
poly_features = poly_transformer.transform(poly_features)
cols = poly_transformer.get_feature_names(['cp', 'thalach', 'ca', 'oldpeak', 'thal', 'age'])
poly_features = pd.DataFrame(poly_features, columns = cols)
poly_features.head()
# Originalspalten entfernen, da diese im Original DF vorhanden sind
poly_features = poly_features.drop(['cp', 'thalach', 'ca', 'oldpeak', 'thal', 'age'], axis=1)
# mit Original DF verschmelzen
df_poly = df.join(poly_features, how='outer')
df_poly.head()
#df_poly.to_csv('df_poly.csv', sep=',', encoding='utf-8', index=False)