{"metadata":{"kernelspec":{"display_name":"datascience","language":"python","name":"python3"},"language_info":{"codemirror_mode":{"name":"ipython","version":3},"file_extension":".py","mimetype":"text/x-python","name":"python","nbconvert_exporter":"python","pygments_lexer":"ipython3","version":"3.11.9"},"kaggle":{"accelerator":"none","dataSources":[{"sourceId":81933,"databundleVersionId":9643020,"sourceType":"competition"}],"dockerImageVersionId":30804,"isInternetEnabled":false,"language":"python","sourceType":"notebook","isGpuEnabled":false}},"nbformat_minor":4,"nbformat":4,"cells":[{"cell_type":"markdown","source":"Kaggle importy","metadata":{}},{"cell_type":"code","source":"#KAGGLE\nimport numpy as np # linear algebra\nimport pandas as pd # data processing, CSV file I/O (e.g. pd.read_csv)\n\nimport os\nfor dirname, _, filenames in os.walk('/kaggle/input'):\n    for filename in filenames:\n        print(os.path.join(dirname, filename))\n\n","metadata":{"execution":{"iopub.execute_input":"2024-12-03T21:05:31.224446Z","iopub.status.busy":"2024-12-03T21:05:31.224011Z","iopub.status.idle":"2024-12-03T21:05:32.574131Z","shell.execute_reply":"2024-12-03T21:05:32.572102Z","shell.execute_reply.started":"2024-12-03T21:05:31.224408Z"},"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"code","source":"#załadowanie danych\n\ntrain_csv = pd.read_csv(\"/kaggle/input/child-mind-institute-problematic-internet-use/train.csv\")\ntest_csv = pd.read_csv(\"/kaggle/input/child-mind-institute-problematic-internet-use/test.csv\")","metadata":{"execution":{"iopub.execute_input":"2024-12-03T21:05:32.577179Z","iopub.status.busy":"2024-12-03T21:05:32.576676Z","iopub.status.idle":"2024-12-03T21:05:32.636512Z","shell.execute_reply":"2024-12-03T21:05:32.635132Z","shell.execute_reply.started":"2024-12-03T21:05:32.577136Z"},"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"Local Importy","metadata":{}},{"cell_type":"code","source":"#import bibliotek \nimport pandas as pd\nimport numpy as np\nfrom sklearn.impute import KNNImputer #imputacja danych\nfrom xgboost import XGBClassifier\nfrom sklearn.ensemble import RandomForestClassifier\nfrom sklearn.linear_model import LogisticRegression\nfrom sklearn.model_selection import train_test_split\nfrom sklearn.preprocessing import StandardScaler #normalizacja danych\nfrom sklearn.metrics import accuracy_score, classification_report #ocena modelu","metadata":{},"outputs":[],"execution_count":null},{"cell_type":"code","source":"#załadowanie danych\n#train_csv = pd.read_csv(\"train.csv\")\n#test_csv = pd.read_csv(\"test.csv\")","metadata":{},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"Dane","metadata":{}},{"cell_type":"code","source":"train_csv.isnull().sum()\nprint(train_csv.columns)\nprint(test_csv.columns)","metadata":{"execution":{"iopub.execute_input":"2024-12-03T21:05:32.638653Z","iopub.status.busy":"2024-12-03T21:05:32.637972Z","iopub.status.idle":"2024-12-03T21:05:32.651138Z","shell.execute_reply":"2024-12-03T21:05:32.649562Z","shell.execute_reply.started":"2024-12-03T21:05:32.638495Z"},"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"code","source":"print(train_csv['id'])\nprint(train_csv['sii'])\n#zwraca ilosc wierszy id w test.csv \nprint(test_csv['id'])","metadata":{"execution":{"iopub.execute_input":"2024-12-03T21:05:32.653222Z","iopub.status.busy":"2024-12-03T21:05:32.652750Z","iopub.status.idle":"2024-12-03T21:05:32.669345Z","shell.execute_reply":"2024-12-03T21:05:32.668222Z","shell.execute_reply.started":"2024-12-03T21:05:32.653172Z"},"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"code","source":"#drop wiersz jeżeli sii jest puste \ntrain_csv = train_csv.dropna(subset=['sii'])\n\n#zamiana wartości foat na int\ntrain_csv['sii'] = train_csv['sii'].astype(int)\n","metadata":{"execution":{"iopub.execute_input":"2024-12-03T21:05:32.672230Z","iopub.status.busy":"2024-12-03T21:05:32.671814Z","iopub.status.idle":"2024-12-03T21:05:32.690231Z","shell.execute_reply":"2024-12-03T21:05:32.689157Z","shell.execute_reply.started":"2024-12-03T21:05:32.672194Z"},"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"code","source":"numeric_cols_train = train_csv.select_dtypes(include=[np.number]).columns\nnumeric_cols_test = test_csv.select_dtypes(include=[np.number]).columns\n\n#common_numeric_cols = numeric_cols_train.intersection(numeric_cols_test)\n\n#train_numeric = train_csv[common_numeric_cols]\n#test_numeric = test_csv[common_numeric_cols]\n\ntrain_csv[numeric_cols_train] = train_csv[numeric_cols_train].fillna(train_csv[numeric_cols_train].mean()) #wypełnienie wartości średnią\ntest_csv[numeric_cols_test] = test_csv[numeric_cols_test].fillna(test_csv[numeric_cols_test].mean()) #wypełnienie wartości średnią\n\n#imputer = KNNImputer(n_neighbors=5)\n#train_csv[common_numeric_cols] = imputer.fit_transform(train_numeric)\n#test_csv[common_numeric_cols] = imputer.transform(test_numeric)","metadata":{"execution":{"iopub.execute_input":"2024-12-03T21:05:32.692068Z","iopub.status.busy":"2024-12-03T21:05:32.691506Z","iopub.status.idle":"2024-12-03T21:05:32.774886Z","shell.execute_reply":"2024-12-03T21:05:32.773492Z","shell.execute_reply.started":"2024-12-03T21:05:32.692002Z"},"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"code","source":"train_csv.isnull().sum()","metadata":{},"outputs":[],"execution_count":null},{"cell_type":"code","source":"#naprawione :D\ntrain_csv = pd.get_dummies(train_csv, columns=train_csv.select_dtypes(include=['object']).columns.drop('id'))\ntest_csv = pd.get_dummies(test_csv, columns=test_csv.select_dtypes(include=['object']).columns.drop('id'))\n\n\n#te dwa usuwały kolumnę ID \n#train_csv = pd.get_dummies(train_csv, columns=train_csv.select_dtypes(include=['object']).columns)  \n#test_csv = pd.get_dummies(test_csv, columns=test_csv.select_dtypes(include=['object']).columns)","metadata":{"execution":{"iopub.execute_input":"2024-12-03T21:05:32.777460Z","iopub.status.busy":"2024-12-03T21:05:32.777086Z","iopub.status.idle":"2024-12-03T21:05:32.817289Z","shell.execute_reply":"2024-12-03T21:05:32.815961Z","shell.execute_reply.started":"2024-12-03T21:05:32.777423Z"},"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"code","source":"X_train_full = train_csv.drop(columns=['sii'])\ny_train_full = train_csv['sii']\n\nX_test = test_csv\n","metadata":{"execution":{"iopub.execute_input":"2024-12-03T21:05:32.819133Z","iopub.status.busy":"2024-12-03T21:05:32.818735Z","iopub.status.idle":"2024-12-03T21:05:32.837287Z","shell.execute_reply":"2024-12-03T21:05:32.836013Z","shell.execute_reply.started":"2024-12-03T21:05:32.819096Z"},"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"code","source":"# Dopasowanie kolumn w X_train i X_test\ncommon_columns = X_train_full.columns.intersection(X_test.columns)\n\n# Wybranie wspólnych kolumn\nx_train = X_train_full[common_columns]\nX_test = X_test[common_columns]\n","metadata":{"execution":{"iopub.execute_input":"2024-12-03T21:05:32.839195Z","iopub.status.busy":"2024-12-03T21:05:32.838729Z","iopub.status.idle":"2024-12-03T21:05:32.849331Z","shell.execute_reply":"2024-12-03T21:05:32.848158Z","shell.execute_reply.started":"2024-12-03T21:05:32.839139Z"},"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"code","source":"# Zachowanie kolumny 'id' i usunięcie jej z danych\nid_column_train = x_train['id']  # Jeśli potrzebujesz 'id' z danych treningowych\nid_column_test = X_test['id']    # Jeśli potrzebujesz 'id' z danych testowych\n\nx_train = x_train.drop(columns=['id'])\nX_test = X_test.drop(columns=['id'])\n\n# Upewnienie się, że kolumny nadal się zgadzają\nassert list(x_train.columns) == list(X_test.columns), \"Columns in X_train and X_test do not match\"\n\nfrom sklearn.preprocessing import MinMaxScaler\n\n# Tworzenie instancji skalera\nscaler = MinMaxScaler()\n\n# Dopasowanie i przeskalowanie danych treningowych\nx_train_scaled = scaler.fit_transform(x_train)\n\n# Przeskalowanie danych testowych\nX_test_scaled = scaler.transform(X_test)","metadata":{},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"Poprzednia validacja oraz znajdowanie najlepszego modelu","metadata":{}},{"cell_type":"code","source":"#funkcja do walidacji modelu\n# from sklearn.model_selection import cross_val_score\n\n#def validate_model(model, x_train, y_train, test_size=0.2, random_state=42):\n    \n    #x_train_split, x_val_split,y_train_split, y_val_split = train_test_split(\n   #     x_train, y_train, test_size=test_size, random_state=random_state)\n    \n    #trenowanie modelu na zestawie treningowym\n   # model.fit(x_train_split, y_train_split)\n\n   # val_predictions = model.predict(x_val_split)\n\n   # accuracy = accuracy_score(y_val_split, val_predictions)\n\n\n    \n    #print(f\"Accuracy: {accuracy}\")\n    #print('Raport klassyfikacji:')\n    #print(classification_report(y_val_split, val_predictions))\n    #return accuracy\n    \n# def validate_model(model, x_train, y_train, cv=5):\n#     scores = cross_val_score(model, x_train, y_train, cv=cv, scoring='accuracy')\n#     mean_accuracy = scores.mean()\n#     return mean_accuracy\n\n\n# #funkcja do znalezienia najlepszego modelu\n# def find_best_model(models, x_train, y_train):\n#     best_accuracy = 0\n#     best_model = None\n    \n#     for model in models:\n#         accuracy = validate_model(model, x_train, y_train)\n#         if accuracy > best_accuracy:\n#             best_accuracy = accuracy\n#             best_model = model\n#     print(f'Wybrany model: {best_model} z dokładnością {best_accuracy}')\n#     return best_model\n","metadata":{},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"Inny sposób","metadata":{}},{"cell_type":"code","source":"from sklearn.model_selection import GridSearchCV\nfrom sklearn.ensemble import GradientBoostingClassifier\nfrom sklearn.svm import SVC\n\n# Definicja modeli\ndef find_best_model(models, param_grid, x_train, y_train):\n    best_accuracy = 0\n    best_model = None\n    best_params = None\n\n    for model_name, model in models.items():\n        grid_search = GridSearchCV(model, param_grid[model_name], cv=5, scoring='accuracy')\n        grid_search.fit(x_train, y_train)\n        if grid_search.best_score_ > best_accuracy:\n            best_accuracy = grid_search.best_score_\n            best_model = grid_search.best_estimator_\n            best_params = grid_search.best_params_\n    print(f'Wybrany model: {best_model} z dokładnością {best_accuracy} i parametrami {best_params}')\n    return best_model\n\n\n\nparam_grid = {\n    'XGBClassifier': {\n        'n_estimators': [100, 200],\n        'learning_rate': [0.01, 0.1]\n    },\n    'RandomForestClassifier': {\n        'n_estimators': [100, 200],\n        'max_depth': [None, 10, 20]\n    },\n    'LogisticRegression': {\n        'C': [0.1, 1, 10]\n    },\n    'GradientBoostingClassifier': {\n        'n_estimators': [100, 200],\n        'learning_rate': [0.01, 0.1]\n    },\n    'SVC': {\n        'C': [0.1, 1, 10],\n        'kernel': ['linear', 'rbf']\n    }\n}\n\n# Modele do testowania\nmodels = {\n    'XGBClassifier': XGBClassifier(),\n    'RandomForestClassifier': RandomForestClassifier(),\n    'LogisticRegression': LogisticRegression(max_iter=500),\n    'GradientBoostingClassifier': GradientBoostingClassifier(),\n    'SVC': SVC()\n}\n\n# Trenuj model\nbest_model = find_best_model(models, param_grid, x_train_scaled, y_train_full)\n\n# Dopasuj najlepszy model do pełnych danych treningowych\nbest_model.fit(x_train_scaled, y_train_full)\n\n# Przewiduj wyniki\npredictions = best_model.predict(X_test_scaled)\n\n# Przywróć kolumnę 'id' do wyników\nresults = pd.DataFrame({'id': id_column_test, 'prediction': predictions})\n\n# Wyświetl wyniki\nprint(results)","metadata":{},"outputs":[],"execution_count":null},{"cell_type":"code","source":"# Teraz wykonaj predykcję na X_test\n#y_test_pred = best_model.predict(X_test)\n\n# Opcjonalnie: zapisuj wyniki do CSV\n#results = pd.DataFrame({'Id': test_csv['Id'], 'sii': y_test_pred})\nresults.to_csv('submission.csv', index=False)","metadata":{"execution":{"iopub.execute_input":"2024-12-03T21:06:18.926481Z","iopub.status.busy":"2024-12-03T21:06:18.926096Z","iopub.status.idle":"2024-12-03T21:06:18.934441Z","shell.execute_reply":"2024-12-03T21:06:18.933207Z","shell.execute_reply.started":"2024-12-03T21:06:18.926446Z"},"trusted":true},"outputs":[],"execution_count":null}]}