Spaces:
Build error
Build error
Download index.py from SubashUbahs/python: direct link, hf CLI and curl.
- Browser
- Download file 6.08 kB
-
https://huggingface.co/spaces/SubashUbahs/python/resolve/main/index.py
- Command line
-
hf download hf://spaces/SubashUbahs/python/index.py
-
curl -L -o index.py https://huggingface.co/spaces/SubashUbahs/python/resolve/main/index.py
6.08 kB
| import pandas as pd | |
| import numpy as np | |
| from sklearn.ensemble import RandomForestClassifier | |
| from sklearn.metrics import recall_score,accuracy_score,roc_auc_score,average_precision_score,roc_curve,auc | |
| from sklearn.feature_selection import RFECV | |
| import seaborn as sns | |
| from sklearn.metrics import confusion_matrix, ConfusionMatrixDisplay | |
| from sklearn.model_selection import cross_val_score,train_test_split | |
| from sklearn.preprocessing import LabelEncoder | |
| from sklearn.impute import KNNImputer | |
| import joblib | |
| df=pd.read_excel('appendicitis.xlsx') | |
| columns=['AppendixDiameter','ReboundTenderness','CoughingPain','FreeFluids','MigratoryPain','BodyTemp','KetonesInUrine','Nausea', | |
| 'WBCCount','NeutrophilPerc','CRPEntry','Peritonitis','DiagnosisByCriteria'] | |
| df=df[columns] | |
| usg_col =['AppendixDiameter','FreeFluids'] | |
| df[usg_col]=df[usg_col].fillna(0) | |
| mapping ={ | |
| '+++' : 3, | |
| '++': 2, | |
| '+': 1, | |
| 'no':0, | |
| 'yes':1, | |
| 'local':1, | |
| 'generalised':2, | |
| 'normal':0, | |
| 'noAppendicitis':0, | |
| 'appendicitis':1 | |
| } | |
| for col in df.columns: | |
| df[col]=df[col].replace(mapping) | |
| x = df.iloc[:, 0:-1] | |
| y = df.iloc[:, -1] | |
| x_tempi, x_testi, y_temp, y_testi = train_test_split(x,y,test_size=0.2,random_state=17) | |
| x_traini,x_vali,y_traini,y_vali = train_test_split(x_tempi,y_temp,test_size=0.25,random_state=17) | |
| imputer_train = KNNImputer(n_neighbors=5) | |
| imputer_val = KNNImputer(n_neighbors=5) | |
| imputer_test = KNNImputer(n_neighbors=5) | |
| imputer_temp=KNNImputer(n_neighbors=5) | |
| x_temp=pd.DataFrame(imputer_temp.fit_transform(x_tempi),columns=x_tempi.columns,index=x_tempi.index) | |
| x_train = pd.DataFrame(imputer_train.fit_transform(x_traini), columns=x_traini.columns, index=x_traini.index) | |
| x_val = pd.DataFrame(imputer_val.fit_transform(x_vali), columns=x_vali.columns, index=x_vali.index) | |
| x_test = pd.DataFrame(imputer_test.fit_transform(x_testi), columns=x_testi.columns, index=x_testi.index) | |
| y_train=y_traini.squeeze() | |
| y_val=y_vali.squeeze() | |
| y_test=y_testi.squeeze() | |
| y_temp=y_temp.squeeze() | |
| columns_round = [ 'MigratoryPain','ReboundTenderness','CoughingPain','Peritonitis','KetonesInUrine','Nausea'] | |
| for col in columns_round: | |
| if col in x_temp.columns: | |
| x_temp[col]=x_temp[col].round().astype(int) | |
| if col in x_train.columns: | |
| x_train[col] = x_train[col].round().astype(int) | |
| if col in x_val.columns: | |
| x_val[col] = x_val[col].round().astype(int) | |
| if col in x_test.columns: | |
| x_test[col] = x_test[col].round().astype(int) | |
| rf_model=RandomForestClassifier( | |
| n_estimators=700, | |
| min_samples_split=12, | |
| min_samples_leaf=1, | |
| max_depth=35, | |
| random_state=17 | |
| ) | |
| scores = cross_val_score(rf_model, x_train, y_train, cv=10, scoring='accuracy', n_jobs=2) | |
| print("Mean cross_val accuracy Score:", scores.mean()) | |
| print("Standard Deviation of cross_val accuracy Scores:", scores.std()) | |
| rf_model.fit(x_train,y_train) | |
| joblib.dump(rf_model, 'rf_model.pkl') | |
| # y_pred_prob=rf_model.predict_proba(x_val)[:,1] | |
| # fpr, tpr, thresholds = roc_curve(y_val, y_pred_prob) | |
| # youden_index = tpr - fpr | |
| # optimal_idx = np.argmax(youden_index) | |
| # optimal_threshold = thresholds[optimal_idx] | |
| # distances = np.sqrt((1 - tpr)**2 + fpr**2) | |
| # optimal_idx = np.argmin(distances) | |
| # optimal_threshold = thresholds[optimal_idx] | |
| # print(f"Optimal Threshold: {optimal_threshold}") | |
| threshold=0.7032966204148201 | |
| y_pred_prob=rf_model.predict_proba(x_val)[:,1] | |
| y_thres=(y_pred_prob >= threshold).astype(int) | |
| auc_score = roc_auc_score(y_val, y_pred_prob) | |
| print("Val AUC:", auc_score) | |
| val_conf_matrix = confusion_matrix(y_val, y_thres) | |
| TNv, FPv, FNv, TPv = val_conf_matrix.ravel() | |
| val_sensitivity = TPv / (TPv + FNv) | |
| val_specificity = TNv / (TNv + FPv) | |
| val_ppv = TPv/(TPv+FPv) | |
| val_npv = TNv/(TNv+FNv) | |
| print(f"Sensitivity: {val_sensitivity:.3f} ({val_sensitivity * 100:.2f}%)") | |
| print(f"Specificity: {val_specificity:.3f} ({val_specificity * 100:.2f}%)") | |
| print (f"Positive predictive value : {val_ppv:.3f}({val_ppv*100:.2f}%)") | |
| print (f"Negative predictive value : {val_npv:.3f}({val_npv*100:.2f}%)") | |
| print("Val Confusion Matrix:\n", val_conf_matrix) | |
| val_acu=accuracy_score(y_val,y_thres) | |
| print("Val accuracy score:",val_acu) | |
| y_test_prob=rf_model.predict_proba(x_test)[:,1] | |
| y_thres_test=(y_test_prob >= threshold).astype(int) | |
| auc_score = roc_auc_score(y_test, y_test_prob) | |
| print("Test AUC:", auc_score) | |
| test_conf_matrix = confusion_matrix(y_test, y_thres_test) | |
| print("Test Confusion Matrix:\n", test_conf_matrix) | |
| TNt, FPt, FNt, TPt = test_conf_matrix.ravel() | |
| test_sensitivity = TPt / (TPt + FNt) | |
| test_specificity = TNt / (TNt + FPt) | |
| test_ppv = TPt/(TPt+FPt) | |
| test_npv = TNt/(TNt+FNt) | |
| print(f"Sensitivity: {test_sensitivity:.3f} ({test_sensitivity * 100:.2f}%)") | |
| print(f"Specificity: {test_specificity:.3f} ({test_specificity * 100:.2f}%)") | |
| print (f"Positive predictive value : {test_ppv:.3f}({test_ppv*100:.2f}%)") | |
| print (f"Negative predictive value : {test_npv:.3f}({test_npv*100:.2f}%)") | |
| test_acu=accuracy_score(y_test,y_thres_test) | |
| print("Test Accuracy score:",test_acu) | |
| rf_model.fit(x_temp,y_temp) | |
| y_test1_prob=rf_model.predict_proba(x_test)[:,1] | |
| y_thres1_test=(y_test1_prob >= threshold).astype(int) | |
| auc_score1 = roc_auc_score(y_test, y_test1_prob) | |
| print("Test AUC:", auc_score1) | |
| test1_conf_matrix = confusion_matrix(y_test, y_thres1_test) | |
| print("Test Confusion Matrix:\n", test1_conf_matrix) | |
| TNt1, FPt1, FNt1, TPt1 = test1_conf_matrix.ravel() | |
| test_sensitivity1 = TPt1 / (TPt1 + FNt1) | |
| test_specificity1 = TNt1 / (TNt1 + FPt1) | |
| test_ppv1 = TPt1/(TPt1+FPt1) | |
| test_npv1 = TNt1/(TNt1+FNt1) | |
| print(f"Sensitivity: {test_sensitivity1:.3f} ({test_sensitivity1 * 100:.2f}%)") | |
| print(f"Specificity: {test_specificity1:.3f} ({test_specificity1 * 100:.2f}%)") | |
| print (f"Positive predictive value : {test_ppv1:.3f}({test_ppv1*100:.2f}%)") | |
| print (f"Negative predictive value : {test_npv1:.3f}({test_npv1*100:.2f}%)") | |
| test1_acu=accuracy_score(y_test,y_thres1_test) | |
| print("Test Accuracy score:",test1_acu) |