Upload files to "/"
This commit is contained in:
parent
1e6e288161
commit
321149bec8
41
qsvm.py
41
qsvm.py
|
|
@ -215,32 +215,24 @@ def prepare_data(data_file):
|
||||||
from sklearn.manifold import TSNE
|
from sklearn.manifold import TSNE
|
||||||
from sklearn.metrics import silhouette_score
|
from sklearn.metrics import silhouette_score
|
||||||
|
|
||||||
print(f"\n======= PRZYGOTOWANIE DANYCH =======")
|
|
||||||
start_time_data = time.time()
|
start_time_data = time.time()
|
||||||
|
|
||||||
# Wczytanie danych
|
# Wczytanie danych
|
||||||
data = pd.read_csv(data_file)
|
data = pd.read_csv(data_file)
|
||||||
print(f"Wymiary oryginalnych danych: {data.shape}")
|
|
||||||
|
|
||||||
# Wydzielenie zmiennej docelowej
|
# Wydzielenie zmiennej docelowej
|
||||||
y = data['Primary_Diagnosis']
|
y = data['Primary_Diagnosis']
|
||||||
print(f"Unikalne wartości zmiennej docelowej: {y.unique()}")
|
|
||||||
print(f"Rozkład klas: {y.value_counts().to_dict()}")
|
|
||||||
|
|
||||||
# Usunięcie kolumn identyfikacyjnych
|
# Usunięcie kolumn identyfikacyjnych
|
||||||
id_columns = ['Project', 'Case_ID']
|
id_columns = ['Project', 'Case_ID']
|
||||||
data_processed = data.drop(id_columns + ['Grade'], axis=1)
|
data_processed = data.drop(id_columns + ['Grade'], axis=1)
|
||||||
print(f"Wymiary danych po usunięciu kolumn identyfikacyjnych: {data_processed.shape}")
|
|
||||||
|
|
||||||
# Przekształcenie kolumn kategorycznych na binarne
|
# Przekształcenie kolumn kategorycznych na binarne
|
||||||
print("Przekształcanie kolumn kategorycznych na binarne...")
|
|
||||||
categorical_columns = data_processed.select_dtypes(include=['object']).columns.tolist()
|
categorical_columns = data_processed.select_dtypes(include=['object']).columns.tolist()
|
||||||
print(f"Kolumny kategoryczne do przekształcenia: {categorical_columns}")
|
|
||||||
|
|
||||||
# Przekształcenie każdej kolumny kategorycznej
|
# Przekształcenie każdej kolumny kategorycznej
|
||||||
for col in categorical_columns:
|
for col in categorical_columns:
|
||||||
unique_values = data_processed[col].unique()
|
unique_values = data_processed[col].unique()
|
||||||
print(f"Kolumna {col} zawiera wartości: {unique_values}")
|
|
||||||
|
|
||||||
if len(unique_values) == 2:
|
if len(unique_values) == 2:
|
||||||
if set(unique_values) == {'Yes', 'No'}:
|
if set(unique_values) == {'Yes', 'No'}:
|
||||||
|
|
@ -254,9 +246,7 @@ def prepare_data(data_file):
|
||||||
else:
|
else:
|
||||||
try:
|
try:
|
||||||
data_processed[col] = pd.to_numeric(data_processed[col], errors='raise')
|
data_processed[col] = pd.to_numeric(data_processed[col], errors='raise')
|
||||||
print(f"Kolumna {col} została przekształcona na liczbową.")
|
|
||||||
except:
|
except:
|
||||||
print(f"Kolumna {col} zostanie zakodowana jako one-hot.")
|
|
||||||
dummies = pd.get_dummies(data_processed[col], prefix=col, drop_first=True)
|
dummies = pd.get_dummies(data_processed[col], prefix=col, drop_first=True)
|
||||||
data_processed = pd.concat([data_processed, dummies], axis=1)
|
data_processed = pd.concat([data_processed, dummies], axis=1)
|
||||||
data_processed.drop(col, axis=1, inplace=True)
|
data_processed.drop(col, axis=1, inplace=True)
|
||||||
|
|
@ -264,43 +254,31 @@ def prepare_data(data_file):
|
||||||
# Sprawdzenie, czy wszystkie dane są numeryczne
|
# Sprawdzenie, czy wszystkie dane są numeryczne
|
||||||
non_numeric = data_processed.select_dtypes(include=['object']).columns.tolist()
|
non_numeric = data_processed.select_dtypes(include=['object']).columns.tolist()
|
||||||
if non_numeric:
|
if non_numeric:
|
||||||
print(f"UWAGA: Pozostały kolumny nieliczbowe: {non_numeric}")
|
|
||||||
print("Usuwanie pozostałych kolumn nieliczbowych...")
|
|
||||||
data_processed = data_processed.drop(non_numeric, axis=1)
|
data_processed = data_processed.drop(non_numeric, axis=1)
|
||||||
|
|
||||||
print(f"Wymiary danych po przekształceniu: {data_processed.shape}")
|
|
||||||
|
|
||||||
# Wypełnienie brakujących wartości
|
# Wypełnienie brakujących wartości
|
||||||
if data_processed.isnull().sum().sum() > 0:
|
if data_processed.isnull().sum().sum() > 0:
|
||||||
print("Wypełnianie brakujących wartości...")
|
|
||||||
data_processed.fillna(data_processed.mean(), inplace=True)
|
data_processed.fillna(data_processed.mean(), inplace=True)
|
||||||
|
|
||||||
# Przygotowanie danych do modelowania
|
# Przygotowanie danych do modelowania
|
||||||
X = data_processed.values
|
X = data_processed.values
|
||||||
print(f"Wymiary danych wejściowych: {X.shape}")
|
|
||||||
|
|
||||||
# Przetwarzanie cech
|
# Przetwarzanie cech
|
||||||
scaler = StandardScaler()
|
scaler = StandardScaler()
|
||||||
X_scaled = scaler.fit_transform(X)
|
X_scaled = scaler.fit_transform(X)
|
||||||
print(f"Wymiary danych po skalowaniu: {X_scaled.shape}")
|
|
||||||
|
|
||||||
# Redukcja wymiarowości
|
# Redukcja wymiarowości
|
||||||
print("\n======= REDUKCJA WYMIAROWOŚCI =======")
|
|
||||||
|
|
||||||
# Przygotowanie różnych wersji zredukowanych danych
|
# Przygotowanie różnych wersji zredukowanych danych
|
||||||
X_reduced_versions = {}
|
X_reduced_versions = {}
|
||||||
|
|
||||||
if USE_PCA:
|
if USE_PCA:
|
||||||
pca_components = min(PCA_COMPONENTS, X_scaled.shape[1])
|
pca_components = min(PCA_COMPONENTS, X_scaled.shape[1])
|
||||||
print(f"Liczba komponentów PCA: {pca_components}")
|
|
||||||
pca = PCA(n_components=pca_components)
|
pca = PCA(n_components=pca_components)
|
||||||
X_reduced_pca = pca.fit_transform(X_scaled)
|
X_reduced_pca = pca.fit_transform(X_scaled)
|
||||||
print(f"Wymiary danych po redukcji PCA: {X_reduced_pca.shape}")
|
|
||||||
print(f"Wyjaśniona wariancja: {sum(pca.explained_variance_ratio_):.4f}")
|
|
||||||
X_reduced_versions['pca'] = X_reduced_pca
|
X_reduced_versions['pca'] = X_reduced_pca
|
||||||
|
|
||||||
if USE_TSNE:
|
if USE_TSNE:
|
||||||
print(f"\nStosowanie t-SNE na danych skalowanych...")
|
|
||||||
tsne = TSNE(
|
tsne = TSNE(
|
||||||
n_components=TSNE_COMPONENTS,
|
n_components=TSNE_COMPONENTS,
|
||||||
perplexity=TSNE_PERPLEXITY,
|
perplexity=TSNE_PERPLEXITY,
|
||||||
|
|
@ -312,20 +290,16 @@ def prepare_data(data_file):
|
||||||
X_reduced_tsne = tsne.fit_transform(X_scaled)
|
X_reduced_tsne = tsne.fit_transform(X_scaled)
|
||||||
tsne_end_time = time.time()
|
tsne_end_time = time.time()
|
||||||
tsne_time = tsne_end_time - tsne_start_time
|
tsne_time = tsne_end_time - tsne_start_time
|
||||||
print(f"Wymiary danych po redukcji t-SNE: {X_reduced_tsne.shape}")
|
|
||||||
print(f"Czas wykonania t-SNE: {tsne_time:.2f} sekund")
|
|
||||||
|
|
||||||
if EVALUATE_SILHOUETTE:
|
if EVALUATE_SILHOUETTE:
|
||||||
try:
|
try:
|
||||||
silhouette_avg = silhouette_score(X_reduced_tsne, y)
|
silhouette_avg = silhouette_score(X_reduced_tsne, y)
|
||||||
print(f"Silhouette Score dla t-SNE: {silhouette_avg:.4f}")
|
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
print(f"Nie udało się obliczyć Silhouette Score: {str(e)}")
|
pass
|
||||||
|
|
||||||
X_reduced_versions['tsne'] = X_reduced_tsne
|
X_reduced_versions['tsne'] = X_reduced_tsne
|
||||||
|
|
||||||
if USE_UMAP:
|
if USE_UMAP:
|
||||||
print(f"\nStosowanie UMAP na danych skalowanych...")
|
|
||||||
umap_reducer = umap.UMAP(
|
umap_reducer = umap.UMAP(
|
||||||
n_components=UMAP_COMPONENTS,
|
n_components=UMAP_COMPONENTS,
|
||||||
n_neighbors=UMAP_NEIGHBORS,
|
n_neighbors=UMAP_NEIGHBORS,
|
||||||
|
|
@ -337,31 +311,24 @@ def prepare_data(data_file):
|
||||||
X_reduced_umap = umap_reducer.fit_transform(X_scaled)
|
X_reduced_umap = umap_reducer.fit_transform(X_scaled)
|
||||||
umap_end_time = time.time()
|
umap_end_time = time.time()
|
||||||
umap_time = umap_end_time - umap_start_time
|
umap_time = umap_end_time - umap_start_time
|
||||||
print(f"Wymiary danych po redukcji UMAP: {X_reduced_umap.shape}")
|
|
||||||
print(f"Czas wykonania UMAP: {umap_time:.2f} sekund")
|
|
||||||
|
|
||||||
if EVALUATE_SILHOUETTE:
|
if EVALUATE_SILHOUETTE:
|
||||||
try:
|
try:
|
||||||
silhouette_avg_umap = silhouette_score(X_reduced_umap, y)
|
silhouette_avg_umap = silhouette_score(X_reduced_umap, y)
|
||||||
print(f"Silhouette Score dla UMAP: {silhouette_avg_umap:.4f}")
|
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
print(f"Nie udało się obliczyć Silhouette Score dla UMAP: {str(e)}")
|
pass
|
||||||
|
|
||||||
X_reduced_versions['umap'] = X_reduced_umap
|
X_reduced_versions['umap'] = X_reduced_umap
|
||||||
|
|
||||||
# Wybór domyślnej wersji zredukowanych danych
|
# Wybór domyślnej wersji zredukowanych danych
|
||||||
if 'pca' in X_reduced_versions:
|
if 'pca' in X_reduced_versions:
|
||||||
X_reduced = X_reduced_versions['pca']
|
X_reduced = X_reduced_versions['pca']
|
||||||
print("Używanie danych zredukowanych przez PCA jako domyślnych.")
|
|
||||||
elif 'umap' in X_reduced_versions:
|
elif 'umap' in X_reduced_versions:
|
||||||
X_reduced = X_reduced_versions['umap']
|
X_reduced = X_reduced_versions['umap']
|
||||||
print("Używanie danych zredukowanych przez UMAP jako domyślnych.")
|
|
||||||
elif 'tsne' in X_reduced_versions:
|
elif 'tsne' in X_reduced_versions:
|
||||||
X_reduced = X_reduced_versions['tsne']
|
X_reduced = X_reduced_versions['tsne']
|
||||||
print("Używanie danych zredukowanych przez t-SNE jako domyślnych.")
|
|
||||||
else:
|
else:
|
||||||
X_reduced = X_scaled
|
X_reduced = X_scaled
|
||||||
print("Nie wybrano żadnej metody redukcji wymiarowości. Używanie oryginalnych danych skalowanych.")
|
|
||||||
|
|
||||||
# Podział na zbiory treningowy i testowy
|
# Podział na zbiory treningowy i testowy
|
||||||
X_train_reduced, X_test_reduced, y_train, y_test = train_test_split(
|
X_train_reduced, X_test_reduced, y_train, y_test = train_test_split(
|
||||||
|
|
@ -371,12 +338,8 @@ def prepare_data(data_file):
|
||||||
# Podział dla oryginalnych danych
|
# Podział dla oryginalnych danych
|
||||||
X_train, X_test, _, _ = train_test_split(X, y, test_size=TEST_SIZE, random_state=RANDOM_STATE)
|
X_train, X_test, _, _ = train_test_split(X, y, test_size=TEST_SIZE, random_state=RANDOM_STATE)
|
||||||
|
|
||||||
print(f"Wymiary zbioru treningowego: {X_train_reduced.shape}")
|
|
||||||
print(f"Wymiary zbioru testowego: {X_test_reduced.shape}")
|
|
||||||
|
|
||||||
end_time_data = time.time()
|
end_time_data = time.time()
|
||||||
data_preparation_time = end_time_data - start_time_data
|
data_preparation_time = end_time_data - start_time_data
|
||||||
print(f"\nCzas przygotowania danych: {data_preparation_time:.2f} sekund")
|
|
||||||
|
|
||||||
return {
|
return {
|
||||||
'X_train': X_train,
|
'X_train': X_train,
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue