این کد استفاده کن 
اسم فایل همون :
WGS_Omni25_BIN_wo_ConsentsIssues.bed  WGS_Omni25_BIN_wo_ConsentsIssues.fam
WGS_Omni25_BIN_wo_ConsentsIssues.bim
review and edit this code :
import os
import pandas as pd
import numpy as np
from sklearn.model_selection import train_test_split, GridSearchCV
from sklearn.preprocessing import StandardScaler
from sklearn.neighbors import KNeighborsClassifier
from sklearn.svm import SVC
from sklearn.ensemble import RandomForestClassifier
from sklearn.tree import DecisionTreeClassifier
from sklearn.metrics import accuracy_score, classification_report
import matplotlib.pyplot as plt
import seaborn as sns

# نصب کتابخانه pandas-plink
!pip install pandas-plink

# وارد کردن توابع خواندن داده‌های PLINK
from pandas_plink import read_plink

# خواندن فایل‌های PLINK
bim, fam, bed = read_plink("WGS_Omni25_BIN_wo_ConsentsIssues")

# تبدیل داده‌های ژنوتیپ به فرمت مناسب (0, 1, 2)
genotypes = np.zeros((bed.shape[1], bed.shape[0]), dtype=np.int8)
for i in range(bed.shape[0]):
    genotypes[:, i] = (bed[i] & 1) + ((bed[i] >> 1) & 1)

# ایجاد DataFrame از داده‌های ژنوتیپ
genotype_df = pd.DataFrame(genotypes, columns=bim['snp'])

# اضافه کردن فنوتیپ به DataFrame
genotype_df['phenotype'] = fam['phenotype']

# بررسی تعداد کلاس‌های منحصر به فرد در فنوتیپ
unique_phenotypes = genotype_df['phenotype'].unique()
print(f"تعداد کلاس‌های منحصر به فرد در فنوتیپ: {len(unique_phenotypes)}")
print(f"مقادیر منحصر به فرد فنوتیپ: {unique_phenotypes}")

# اگر فقط یک کلاس وجود دارد، ممکن است نیاز به تغییر مقادیر فنوتیپ باشد
if len(unique_phenotypes) == 1:
    print("هشدار: فقط یک کلاس در داده‌های فنوتیپ وجود دارد.")
    print("در حال تبدیل مقادیر فنوتیپ به یک مسئله دوکلاسه...")
    median_phenotype = genotype_df['phenotype'].median()
    genotype_df['phenotype'] = (genotype_df['phenotype'] > median_phenotype).astype(int)
    print(f"مقادیر جدید فنوتیپ: {genotype_df['phenotype'].unique()}")

# انتخاب SNP‌های معنادار (به طور تصادفی 1000 SNP)
significant_snps = np.random.choice(bim['snp'], size=1000, replace=False)

# آماده‌سازی داده‌ها
X = genotype_df[significant_snps]
y = genotype_df['phenotype']

# تقسیم داده‌ها به مجموعه‌های آموزش و آزمون
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

# نرمال‌سازی داده‌ها
scaler = StandardScaler()
X_train_scaled = scaler.fit_transform(X_train)
X_test_scaled = scaler.transform(X_test)

# تعریف مدل‌ها و پارامترهای آنها برای بهینه‌سازی
models = {
    'KNN': (KNeighborsClassifier(), {'n_neighbors': [3, 5, 7, 9]}),
    'SVM': (SVC(), {'kernel': ['rbf', 'linear'], 'C': [0.1, 1, 10]}),
    'Random Forest': (RandomForestClassifier(), {'n_estimators': [50, 100, 200], 'max_depth': [5, 10, None]}),
    'Decision Tree': (DecisionTreeClassifier(), {'max_depth': [5, 10, None], 'min_samples_split': [2, 5, 10]})
}

# اجرا و بهینه‌سازی مدل‌ها
results = {}

for name, (model, params) in models.items():
    print(f"\nبهینه‌سازی {name}...")
    grid_search = GridSearchCV(model, params, cv=5, scoring='accuracy', n_jobs=-1)
    grid_search.fit(X_train_scaled, y_train)

    best_model = grid_search.best_estimator_
    y_pred = best_model.predict(X_test_scaled)

    accuracy = accuracy_score(y_test, y_pred)
    report = classification_report(y_test, y_pred)

    results[name] = {
        'model': best_model,
        'best_params': grid_search.best_params_,
        'accuracy': accuracy,
        'report': report
    }

    print(f"بهترین پارامترها: {grid_search.best_params_}")
    print(f"دقت: {accuracy}")
    print("گزارش طبقه‌بندی:")
    print(report)

# تحلیل و بررسی نتایج
# نمایش نتایج به صورت نمودار
accuracies = [result['accuracy'] for result in results.values()]
model_names = list(results.keys())

plt.figure(figsize=(10, 6))
sns.barplot(x=model_names, y=accuracies)
plt.title("دقت مدل‌های مختلف")
plt.xlabel("مدل")
plt.ylabel("دقت")
plt.show()