Skip to content

Instantly share code, notes, and snippets.

@CoderEx24
Created April 23, 2024 17:13
Show Gist options
  • Save CoderEx24/b27523dc744c9548348d2b8d1a986e6a to your computer and use it in GitHub Desktop.
Save CoderEx24/b27523dc744c9548348d2b8d1a986e6a to your computer and use it in GitHub Desktop.
Compare multiple algorithms
import numpy as np
import pandas as pd
import seaborn as sns
import matplotlib
import matplotlib.pyplot as plt
from sklearn.metrics import accuracy_score, classification_report, RocCurveDisplay
from sklearn.preprocessing import StandardScaler
from sklearn.decomposition import PCA
from sklearn.tree import DecisionTreeClassifier
from sklearn.ensemble import RandomForestClassifier
from sklearn.neural_network import MLPClassifier
from sklearn.neighbors import KNeighborsClassifier
from sklearn.model_selection import train_test_split
# class_row = 'Outcome'
# filename = './diabetes.csv'
class_row = 'DEATH_EVENT'
filename = './heart_failure_clinical_records_dataset.csv'
data = pd.read_csv(filename)
filtered = data.drop(class_row, axis=1)
scaler = StandardScaler()
b_standard = scaler.fit_transform(filtered)
rocs = []
algos = (
('K-NN', KNeighborsClassifier, {}),
('Decision Tree', DecisionTreeClassifier, {}),
('Random Forest', RandomForestClassifier, {}),
('MLP', MLPClassifier, {'max_iter':500, 'activation':'logistic'}),
)
print(b_standard.shape)
plt.subplots(2, 2)
plt.figure(figsize=(10.0, 10.0))
for i, (name, klass, args) in enumerate(algos):
ax = plt.subplot(2, 2, i + 1)
plt.title(name)
for i in range(1, min(10, b_standard.shape[1])):
print(f'Processing: Method {name}, comps {i}')
pca_model = PCA(n_components=i)
pca_data_standard = pca_model.fit_transform(b_standard)
pca_dataset = pd.DataFrame(data=pca_data_standard, columns=[f'PC{j + 1}' for j in range(i)])
pca_dataset[class_row] = data[class_row]
x = pca_dataset.drop(class_row, axis=1)
y = pca_dataset[class_row]
train_x, test_x, train_y, test_y = train_test_split(x, y, test_size=0.2)
classifier = klass(**args)
classifier.fit(train_x, train_y)
pred = classifier.predict(test_x)
roc_disp = RocCurveDisplay.from_estimator(
classifier,
test_x,
test_y,
name=f"{i} components",
ax=ax,
alpha=0.75,
)
ax.legend(fontsize='xx-small')
rocs.append(roc_disp)
plt.savefig(f'{filename[:-4]}-roc.png')
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment