Download train_model_v1.py from Qamro/predicting-smartphone-addiction-binary-classification: direct link, hf CLI and curl.
- Browser
- Download file 1.84 kB
-
https://huggingface.co/Qamro/predicting-smartphone-addiction-binary-classification/resolve/main/train_model_v1.py
- Command line
-
hf download hf://Qamro/predicting-smartphone-addiction-binary-classification/train_model_v1.py
-
curl -L -o train_model_v1.py https://huggingface.co/Qamro/predicting-smartphone-addiction-binary-classification/resolve/main/train_model_v1.py
1.84 kB
| import pandas as pd, numpy as np | |
| from sklearn.model_selection import StratifiedKFold | |
| from sklearn.metrics import roc_auc_score | |
| import lightgbm as lgb | |
| train = pd.read_csv('train.csv') | |
| test = pd.read_csv('test.csv') | |
| target = 'addicted_label' | |
| cat_cols = ['gender','stress_level','academic_work_impact'] | |
| num_cols = [c for c in train.columns if c not in cat_cols+['id',target]] | |
| for c in cat_cols: | |
| train[c] = train[c].astype('category') | |
| test[c] = test[c].astype('category') | |
| # align categories | |
| cats = train[c].cat.categories | |
| test[c] = test[c].cat.set_categories(cats) | |
| X = train[num_cols+cat_cols] | |
| y = train[target] | |
| X_test = test[num_cols+cat_cols] | |
| skf = StratifiedKFold(n_splits=3, shuffle=True, random_state=42) | |
| oof = np.zeros(len(X)) | |
| preds = np.zeros(len(X_test)) | |
| aucs=[] | |
| params = dict( | |
| objective='binary', | |
| metric='auc', | |
| learning_rate=0.03, | |
| num_leaves=63, | |
| max_depth=-1, | |
| min_child_samples=30, | |
| subsample=0.8, | |
| colsample_bytree=0.8, | |
| reg_alpha=0.1, | |
| reg_lambda=0.1, | |
| n_estimators=800, | |
| verbosity=-1 | |
| ) | |
| for fold,(tr_idx,va_idx) in enumerate(skf.split(X,y)): | |
| X_tr,X_va = X.iloc[tr_idx], X.iloc[va_idx] | |
| y_tr,y_va = y.iloc[tr_idx], y.iloc[va_idx] | |
| model = lgb.LGBMClassifier(**params) | |
| model.fit(X_tr,y_tr, eval_set=[(X_va,y_va)], | |
| callbacks=[lgb.early_stopping(100, verbose=False)], | |
| categorical_feature=cat_cols) | |
| va_pred = model.predict_proba(X_va)[:,1] | |
| oof[va_idx] = va_pred | |
| auc = roc_auc_score(y_va, va_pred) | |
| aucs.append(auc) | |
| print(f"Fold {fold} AUC: {auc:.5f}") | |
| preds += model.predict_proba(X_test)[:,1] / skf.n_splits | |
| print("Mean AUC:", np.mean(aucs)) | |
| print("OOF AUC:", roc_auc_score(y, oof)) | |
| sub = pd.DataFrame({'id': test['id'], 'addicted_label': preds}) | |
| sub.to_csv('submission.csv', index=False) | |
| print(sub.head()) | |