From 477fc5e1592ec5ada28c219074ed653e32449e7b Mon Sep 17 00:00:00 2001 From: qudwns245 Date: Wed, 30 Apr 2025 15:28:50 +0900 Subject: [PATCH] Nam model --- Nam/Final_code 1.py | 45 +++ Nam/best_model 1.h5 | Bin 0 -> 68648 bytes Nam/scaler 1.pkl | Bin 0 -> 1720 bytes jun/code.ipynb | 733 +++----------------------------------------- 4 files changed, 88 insertions(+), 690 deletions(-) create mode 100644 Nam/Final_code 1.py create mode 100644 Nam/best_model 1.h5 create mode 100644 Nam/scaler 1.pkl diff --git a/Nam/Final_code 1.py b/Nam/Final_code 1.py new file mode 100644 index 0000000..e2a381f --- /dev/null +++ b/Nam/Final_code 1.py @@ -0,0 +1,45 @@ + +import pandas as pd +import pickle +from tensorflow.keras.models import load_model +from sklearn.metrics import accuracy_score, f1_score, precision_score, recall_score +from url_preprocessing import preprocess_url_dataframe # 너가 만든 전처리 모듈 + +# 1. 원본 데이터 불러오기 +df = pd.read_csv("train.csv") # 또는 적절한 파일명으로 수정 +print("원본 데이터 불러옴") + +# 2. 전처리 적용 +df_processed = preprocess_url_dataframe(df) +print(" 전처리 완료") + +# 3. 피처/레이블 분리 +X = df_processed.drop(columns=['label', 'URL', 'URL_clean'], errors='ignore') # 'label' 없으면 자동 무시 +y = df_processed['label'] if 'label' in df_processed.columns else None + +# 4. 스케일러 불러오기 +with open("scaler.pkl", "rb") as f: + scaler = pickle.load(f) +X_scaled = scaler.transform(X) +print(" 스케일링 완료") + +# 5. 모델 불러오기 +model = load_model("best_model.h5") +print(" 모델 불러오기 완료") + +# 6. 예측 +y_pred_proba = model.predict(X_scaled).ravel() +best_threshold = 0.34 # 여기에 저장된 값이 있다면 pickle로 불러올 수 있음 + +y_pred = (y_pred_proba > best_threshold).astype(int) + +# 7. 결과 출력 +if y is not None: + print("예측 결과 (테스트셋 평가)") + print("Accuracy:", accuracy_score(y, y_pred)) + print("F1 Score:", f1_score(y, y_pred)) + print("Precision:", precision_score(y, y_pred)) + print("Recall:", recall_score(y, y_pred)) +else: + print("예측 완료! 라벨이 없어 평가 생략") + print("예측 결과 샘플:", y_pred[:10]) diff --git a/Nam/best_model 1.h5 b/Nam/best_model 1.h5 new file mode 100644 index 0000000000000000000000000000000000000000..ae3950df6962673c58ddc3786499a2d8d6467078 GIT binary patch literal 68648 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 literal 0 HcmV?d00001 diff --git a/Nam/scaler 1.pkl b/Nam/scaler 1.pkl new file mode 100644 index 0000000000000000000000000000000000000000..65ea96a2deaad491f9f62ef9a0f7afe79bfc21d5 GIT binary patch literal 1720 zcmc&#&1)1f6yI&T{n~y?Yqd%X;$a0@=s{2vW}zzBr7g60vrV%z*`2|e%xsczcfpSe zR$B-{Z9FSfL=Z2Ec=50xB6#yZ(6g5co&?ckzG#b3dXR=;9(nn_y!U&*OlG<5@vHV! zF!(Wg-A0h$yho5nTpdwr;YuDDkU_zFrY$@T>+?Fa5fK~W)Ln5)ovrxw6^7mH9i=lFmw!tCW4gEc&)LRx0einY~nwUwuDikX?2 zsXuZAucF38X>CDPpEazC#enYmmh%!O5l-+~RP~`9ul7}a zM49E{*wG0SWRE3Ddy2PDY{3sv59yW)H6e-N!$B3mEd#^#OEv=3mgPv=CZwQNtI3X0 zpL&*VxxRF`#E2uiJ;+R8AdgA-h=SWLu7Hpml|>?~Bf$sNO3-Of?yk5B-lcpdV;&WJ zC@BEdbsIWRk&${NZo`#L8b#QU=`ER2cO6I4MRkTS4X{~B56BJ?B|nl~=6x7M+J~|i zhj>2*6gsj73MfMIC`@h6UQF?Js*V;AW{=sg^fd>!t9zKYly_))VV9;UrRn6;`OOY~ ztys|3zb$6oJhQd2VBFR!@3vk}tS@SpM;6$ZOEvBIr>cCo_UPml`MlP`Z(vIs>;62R z{xu%0zfb&EgYhxhFUIe-A?~eKxRd^!`B_WikG}Zc`eWsTCR9_}9Q6hKo9KB-BHZ-< zy~CzFjEdWTo`6J`x);C!Gl^<%?w>;tvAmrLtnaCb{iG1YeXWKz1w-3hj^^da&PDcg zWVgazw>G2siJkt`k#OEz+U1YpQnAg2>q{uXb#m?A^K+wxfJrvcB)EzXoJ-uBr1qFY cZ1>?MgkQ@41%83goB#j- literal 0 HcmV?d00001 diff --git a/jun/code.ipynb b/jun/code.ipynb index 83501d9..417dd2e 100755 --- a/jun/code.ipynb +++ b/jun/code.ipynb @@ -2392,703 +2392,56 @@ }, { "cell_type": "code", - "execution_count": 10, + "execution_count": 2, "metadata": {}, "outputs": [ { - "data": { - "application/vnd.microsoft.datawrangler.viewer.v0+json": { - "columns": [ - { - "name": "index", - "rawType": "object", - "type": "string" - }, - { - "name": "label", - "rawType": "float64", - "type": "float" - }, - { - "name": "url_length_cat", - "rawType": "float64", - "type": "float" - }, - { - "name": "num_dots", - "rawType": "float64", - "type": "float" - }, - { - "name": "num_digits", - "rawType": "float64", - "type": "float" - }, - { - "name": "num_special_chars", - "rawType": "float64", - "type": "float" - }, - { - "name": "url_keyword", - "rawType": "float64", - "type": "float" - }, - { - "name": "num_underbar", - "rawType": "float64", - "type": "float" - }, - { - "name": "extract_consecutive_numbers", - "rawType": "float64", - "type": "float" - }, - { - "name": "number", - "rawType": "float64", - "type": "float" - }, - { - "name": "upper", - "rawType": "float64", - "type": "float" - }, - { - "name": "is_common_tld", - "rawType": "float64", - "type": "float" - }, - { - "name": "is_country_tld", - "rawType": "float64", - "type": "float" - }, - { - "name": "is_suspicious_tld", - "rawType": "float64", - "type": "float" - }, - { - "name": "domain_length", - "rawType": "float64", - "type": "float" - }, - { - "name": "has_subdomain", - "rawType": "float64", - "type": "float" - }, - { - "name": "subdomain_length", - "rawType": "float64", - "type": "float" - }, - { - "name": "subdomain_count", - "rawType": "float64", - "type": "float" - }, - { - "name": "path_depth", - "rawType": "float64", - "type": "float" - }, - { - "name": "has_query", - "rawType": "float64", - "type": "float" - }, - { - "name": "query_length", - "rawType": "float64", - "type": "float" - }, - { - "name": "query_param_count", - "rawType": "float64", - "type": "float" - }, - { - "name": "url_shorteners", - "rawType": "float64", - "type": "float" - }, - { - "name": "compression_ratio", - "rawType": "float64", - "type": "float" - }, - { - "name": "entropy", - "rawType": "float64", - "type": "float" - }, - { - "name": "digit_ratio", - "rawType": "float64", - "type": "float" - }, - { - "name": "special_char_ratio", - "rawType": "float64", - "type": "float" - } - ], - "conversionMethod": "pd.DataFrame", - "ref": "c79a077e-8e52-4e42-b88f-dc9698b0fa30", - "rows": [ - [ - "count", - "6995056.0", - "6995056.0", - "6995056.0", - "6995056.0", - "6995056.0", - "6995056.0", - "6995056.0", - "6995056.0", - "6995056.0", - "6995056.0", - "6995056.0", - "6995056.0", - "6995056.0", - "6995056.0", - "6995056.0", - "6995056.0", - "6995056.0", - "6995056.0", - "6995056.0", - "6995056.0", - "6995056.0", - "6995056.0", - "6995056.0", - "6995056.0", - "6995056.0", - "6995056.0" - ], - [ - "mean", - "0.22371472079708868", - "1.4435534183000107", - "1.546944584861079", - "1.6343590387267808", - "2.6635716711917676", - "0.0370789025849114", - "0.045005501028154746", - "0.056463736673444787", - "0.08128040719044995", - "0.0357764112252997", - "0.6133649251700057", - "0.12739140329970197", - "0.022784949827420967", - "10.464007150192936", - "0.21130266862767075", - "2.43731000866898", - "0.2660177416735477", - "0.6056849294701858", - "0.027221368921135157", - "1.9155892390282507", - "0.04228915393958247", - "0.0018421582329004942", - "1.4552534994784176", - "3.5360434022769756", - "0.029042428345387533", - "0.1102289088601276" - ], - [ - "std", - "0.41673309122602675", - "1.1161203432813147", - "1.010078604927829", - "9.827940363271033", - "7.1618457272654", - "0.18895518694176003", - "0.6023702991784359", - "0.23081505741717664", - "0.273265280035072", - "0.18573223887275842", - "0.4869788780260291", - "0.33341093196934307", - "0.14921728811320575", - "5.0652546813544035", - "0.4082326232468674", - "6.90096602515224", - "0.6272395647222854", - "1.6003209664806863", - "0.1627279010519657", - "19.702068343354906", - "0.35208851309719974", - "0.04288082262284407", - "0.24856536988340924", - "0.47898938276414027", - "0.08255957016074264", - "0.046338026902092454" - ], - [ - "min", - "0.0", - "0.0", - "0.0", - "0.0", - "0.0", - "0.0", - "0.0", - "0.0", - "0.0", - "0.0", - "0.0", - "0.0", - "0.0", - "0.0", - "0.0", - "0.0", - "0.0", - "0.0", - "0.0", - "0.0", - "0.0", - "0.0", - "0.010181818181818183", - "-0.0", - "0.0", - "0.0" - ], - [ - "25%", - "0.0", - "0.0", - "1.0", - "0.0", - "1.0", - "0.0", - "0.0", - "0.0", - "0.0", - "0.0", - "0.0", - "0.0", - "0.0", - "7.0", - "0.0", - "0.0", - "0.0", - "0.0", - "0.0", - "0.0", - "0.0", - "0.0", - "1.3076923076923077", - "3.238901256602631", - "0.0", - "0.07142857142857142" - ], - [ - "50%", - "0.0", - "1.0", - "1.0", - "0.0", - "2.0", - "0.0", - "0.0", - "0.0", - "0.0", - "0.0", - "1.0", - "0.0", - "0.0", - "10.0", - "0.0", - "0.0", - "0.0", - "0.0", - "0.0", - "0.0", - "0.0", - "0.0", - "1.4444444444444444", - "3.5068905956085183", - "0.0", - "0.10344827586206896" - ], - [ - "75%", - "0.0", - "2.0", - "2.0", - "0.0", - "3.0", - "0.0", - "0.0", - "0.0", - "0.0", - "0.0", - "1.0", - "0.0", - "0.0", - "13.0", - "0.0", - "0.0", - "0.0", - "1.0", - "0.0", - "0.0", - "0.0", - "0.0", - "1.6153846153846154", - "3.7962176025900556", - "0.0", - "0.14285714285714285" - ], - [ - "max", - "1.0", - "3.0", - "171.0", - "2011.0", - "8198.0", - "1.0", - "136.0", - "1.0", - "1.0", - "1.0", - "1.0", - "1.0", - "1.0", - "63.0", - "1.0", - "237.0", - "38.0", - "136.0", - "1.0", - "8367.0", - "131.0", - "1.0", - "5.0", - "6.570554108088201", - "0.9545454545454546", - "1.0" - ] - ], - "shape": { - "columns": 26, - "rows": 8 - } - }, - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
labelurl_length_catnum_dotsnum_digitsnum_special_charsurl_keywordnum_underbarextract_consecutive_numbersnumberupper...subdomain_countpath_depthhas_queryquery_lengthquery_param_counturl_shortenerscompression_ratioentropydigit_ratiospecial_char_ratio
count6.995056e+066.995056e+066.995056e+066.995056e+066.995056e+066.995056e+066.995056e+066.995056e+066.995056e+066.995056e+06...6.995056e+066.995056e+066.995056e+066.995056e+066.995056e+066.995056e+066.995056e+066.995056e+066.995056e+066.995056e+06
mean2.237147e-011.443553e+001.546945e+001.634359e+002.663572e+003.707890e-024.500550e-025.646374e-028.128041e-023.577641e-02...2.660177e-016.056849e-012.722137e-021.915589e+004.228915e-021.842158e-031.455253e+003.536043e+002.904243e-021.102289e-01
std4.167331e-011.116120e+001.010079e+009.827940e+007.161846e+001.889552e-016.023703e-012.308151e-012.732653e-011.857322e-01...6.272396e-011.600321e+001.627279e-011.970207e+013.520885e-014.288082e-022.485654e-014.789894e-018.255957e-024.633803e-02
min0.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+00...0.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+001.018182e-02-0.000000e+000.000000e+000.000000e+00
25%0.000000e+000.000000e+001.000000e+000.000000e+001.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+00...0.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+001.307692e+003.238901e+000.000000e+007.142857e-02
50%0.000000e+001.000000e+001.000000e+000.000000e+002.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+00...0.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+001.444444e+003.506891e+000.000000e+001.034483e-01
75%0.000000e+002.000000e+002.000000e+000.000000e+003.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+00...0.000000e+001.000000e+000.000000e+000.000000e+000.000000e+000.000000e+001.615385e+003.796218e+000.000000e+001.428571e-01
max1.000000e+003.000000e+001.710000e+022.011000e+038.198000e+031.000000e+001.360000e+021.000000e+001.000000e+001.000000e+00...3.800000e+011.360000e+021.000000e+008.367000e+031.310000e+021.000000e+005.000000e+006.570554e+009.545455e-011.000000e+00
\n", - "

8 rows × 26 columns

\n", - "
" - ], - "text/plain": [ - " label url_length_cat num_dots num_digits \\\n", - "count 6.995056e+06 6.995056e+06 6.995056e+06 6.995056e+06 \n", - "mean 2.237147e-01 1.443553e+00 1.546945e+00 1.634359e+00 \n", - "std 4.167331e-01 1.116120e+00 1.010079e+00 9.827940e+00 \n", - "min 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 \n", - "25% 0.000000e+00 0.000000e+00 1.000000e+00 0.000000e+00 \n", - "50% 0.000000e+00 1.000000e+00 1.000000e+00 0.000000e+00 \n", - "75% 0.000000e+00 2.000000e+00 2.000000e+00 0.000000e+00 \n", - "max 1.000000e+00 3.000000e+00 1.710000e+02 2.011000e+03 \n", - "\n", - " num_special_chars url_keyword num_underbar \\\n", - "count 6.995056e+06 6.995056e+06 6.995056e+06 \n", - "mean 2.663572e+00 3.707890e-02 4.500550e-02 \n", - "std 7.161846e+00 1.889552e-01 6.023703e-01 \n", - "min 0.000000e+00 0.000000e+00 0.000000e+00 \n", - "25% 1.000000e+00 0.000000e+00 0.000000e+00 \n", - "50% 2.000000e+00 0.000000e+00 0.000000e+00 \n", - "75% 3.000000e+00 0.000000e+00 0.000000e+00 \n", - "max 8.198000e+03 1.000000e+00 1.360000e+02 \n", - "\n", - " extract_consecutive_numbers number upper ... \\\n", - "count 6.995056e+06 6.995056e+06 6.995056e+06 ... \n", - "mean 5.646374e-02 8.128041e-02 3.577641e-02 ... \n", - "std 2.308151e-01 2.732653e-01 1.857322e-01 ... \n", - "min 0.000000e+00 0.000000e+00 0.000000e+00 ... \n", - "25% 0.000000e+00 0.000000e+00 0.000000e+00 ... \n", - "50% 0.000000e+00 0.000000e+00 0.000000e+00 ... \n", - "75% 0.000000e+00 0.000000e+00 0.000000e+00 ... \n", - "max 1.000000e+00 1.000000e+00 1.000000e+00 ... \n", - "\n", - " subdomain_count path_depth has_query query_length \\\n", - "count 6.995056e+06 6.995056e+06 6.995056e+06 6.995056e+06 \n", - "mean 2.660177e-01 6.056849e-01 2.722137e-02 1.915589e+00 \n", - "std 6.272396e-01 1.600321e+00 1.627279e-01 1.970207e+01 \n", - "min 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 \n", - "25% 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 \n", - "50% 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 \n", - "75% 0.000000e+00 1.000000e+00 0.000000e+00 0.000000e+00 \n", - "max 3.800000e+01 1.360000e+02 1.000000e+00 8.367000e+03 \n", - "\n", - " query_param_count url_shorteners compression_ratio entropy \\\n", - "count 6.995056e+06 6.995056e+06 6.995056e+06 6.995056e+06 \n", - "mean 4.228915e-02 1.842158e-03 1.455253e+00 3.536043e+00 \n", - "std 3.520885e-01 4.288082e-02 2.485654e-01 4.789894e-01 \n", - "min 0.000000e+00 0.000000e+00 1.018182e-02 -0.000000e+00 \n", - "25% 0.000000e+00 0.000000e+00 1.307692e+00 3.238901e+00 \n", - "50% 0.000000e+00 0.000000e+00 1.444444e+00 3.506891e+00 \n", - "75% 0.000000e+00 0.000000e+00 1.615385e+00 3.796218e+00 \n", - "max 1.310000e+02 1.000000e+00 5.000000e+00 6.570554e+00 \n", - "\n", - " digit_ratio special_char_ratio \n", - "count 6.995056e+06 6.995056e+06 \n", - "mean 2.904243e-02 1.102289e-01 \n", - "std 8.255957e-02 4.633803e-02 \n", - "min 0.000000e+00 0.000000e+00 \n", - "25% 0.000000e+00 7.142857e-02 \n", - "50% 0.000000e+00 1.034483e-01 \n", - "75% 0.000000e+00 1.428571e-01 \n", - "max 9.545455e-01 1.000000e+00 \n", - "\n", - "[8 rows x 26 columns]" - ] - }, - "execution_count": 10, - "metadata": {}, - "output_type": "execute_result" + "ename": "NameError", + "evalue": "name 'processed_train' is not defined", + "output_type": "error", + "traceback": [ + "\u001b[31m---------------------------------------------------------------------------\u001b[39m", + "\u001b[31mNameError\u001b[39m Traceback (most recent call last)", + "\u001b[36mCell\u001b[39m\u001b[36m \u001b[39m\u001b[32mIn[2]\u001b[39m\u001b[32m, line 1\u001b[39m\n\u001b[32m----> \u001b[39m\u001b[32m1\u001b[39m \u001b[43mprocessed_train\u001b[49m.describe()\n", + "\u001b[31mNameError\u001b[39m: name 'processed_train' is not defined" + ] } ], "source": [ "processed_train.describe()" ] }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [ + { + "ename": "NameError", + "evalue": "name 'processed_train' is not defined", + "output_type": "error", + "traceback": [ + "\u001b[31m---------------------------------------------------------------------------\u001b[39m", + "\u001b[31mNameError\u001b[39m Traceback (most recent call last)", + "\u001b[36mCell\u001b[39m\u001b[36m \u001b[39m\u001b[32mIn[1]\u001b[39m\u001b[32m, line 4\u001b[39m\n\u001b[32m 1\u001b[39m \u001b[38;5;28;01mimport\u001b[39;00m\u001b[38;5;250m \u001b[39m\u001b[34;01mmatplotlib\u001b[39;00m\u001b[34;01m.\u001b[39;00m\u001b[34;01mpyplot\u001b[39;00m\u001b[38;5;250m \u001b[39m\u001b[38;5;28;01mas\u001b[39;00m\u001b[38;5;250m \u001b[39m\u001b[34;01mplt\u001b[39;00m\n\u001b[32m 2\u001b[39m \u001b[38;5;28;01mimport\u001b[39;00m\u001b[38;5;250m \u001b[39m\u001b[34;01mseaborn\u001b[39;00m\u001b[38;5;250m \u001b[39m\u001b[38;5;28;01mas\u001b[39;00m\u001b[38;5;250m \u001b[39m\u001b[34;01msns\u001b[39;00m\n\u001b[32m----> \u001b[39m\u001b[32m4\u001b[39m desc = \u001b[43mprocessed_train\u001b[49m.describe()\n\u001b[32m 6\u001b[39m plt.figure(figsize=(\u001b[32m12\u001b[39m, \u001b[32m6\u001b[39m))\n\u001b[32m 7\u001b[39m sns.barplot(data=desc.T[[\u001b[33m'\u001b[39m\u001b[33mmean\u001b[39m\u001b[33m'\u001b[39m, \u001b[33m'\u001b[39m\u001b[33mstd\u001b[39m\u001b[33m'\u001b[39m, \u001b[33m'\u001b[39m\u001b[33mmin\u001b[39m\u001b[33m'\u001b[39m, \u001b[33m'\u001b[39m\u001b[33mmax\u001b[39m\u001b[33m'\u001b[39m]])\n", + "\u001b[31mNameError\u001b[39m: name 'processed_train' is not defined" + ] + } + ], + "source": [ + "import matplotlib.pyplot as plt\n", + "import seaborn as sns\n", + "\n", + "desc = processed_train.describe()\n", + "\n", + "plt.figure(figsize=(12, 6))\n", + "sns.barplot(data=desc.T[['mean', 'std', 'min', 'max']])\n", + "plt.title('Feature Statistics')\n", + "plt.xticks(rotation=45)\n", + "plt.tight_layout()\n", + "plt.show()\n" + ] + }, { "cell_type": "code", "execution_count": 11, @@ -3248,12 +2601,12 @@ }, { "cell_type": "code", - "execution_count": 18, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ "import tensorflow as tf\n", - "from tensorflow.keras.layers import Dense, Dropout, BatchNormalization\n", + "from tensorflow.keras.layers import Dense\n", "\n", "def build_model(input_dim, learning_rate=0.001):\n", " \"\"\"\n",