<jupyter_start><jupyter_text>Линейные модели, SVM и деревья решений  Задание 1. Выберите набор данных (датасет) для решения задачи классификации или регресии.2. В случае необходимости проведите удаление или заполнение пропусков и кодирование категориальных признаков.3. С использованием метода train_test_split разделите выборку на обучающую и тестовую.4. Обучите 1) одну из линейных моделей, 2) SVM и 3) дерево решений. Оцените качество моделей с помощью трех подходящих для задачи метрик. Сравните качество полученных моделей.5. Произведите для каждой модели подбор одного гиперпараметра с использованием GridSearchCV и кросс-валидации.6. Повторите пункт 4 для найденных оптимальных значений гиперпараметров. Сравните качество полученных моделей с качеством моделей, полученных в пункте 4.<jupyter_code>import numpy as np
import pandas as pd
from sklearn.model_selection import train_test_split
import seaborn as sns
import matplotlib.pyplot as plt
from sklearn.linear_model import SGDClassifier
from sklearn.svm import SVC
from sklearn.tree import DecisionTreeClassifier
from sklearn.metrics import accuracy_score
from sklearn.metrics import precision_score, recall_score
from sklearn.model_selection import cross_val_score
from sklearn.model_selection import GridSearchCV
data=pd.read_csv("Admission_Predict.csv")
data.head()<jupyter_output><empty_output><jupyter_text>Проверим наличие и количество пропущенных значений<jupyter_code>data.isnull().sum()<jupyter_output><empty_output><jupyter_text>Проверим наличие категориальных данных<jupyter_code>cats = [col for col in data.columns if 
        data[col].dtype=="object"]
print(len(cats))<jupyter_output>0<jupyter_text>Разделим данные на тренировочную и тестовую выборку<jupyter_code>X_train, X_test, y_train, y_test = train_test_split(
    data, data['Research'], test_size=0.2, random_state=42)<jupyter_output><empty_output><jupyter_text>Обучим модели и проверим метриками   Метод стохастического градиентного спуска<jupyter_code>sgd = SGDClassifier().fit(X_train, y_train)
res_SGD = sgd.predict(X_test)
print(accuracy_score(y_test, res_SGD))
print(precision_score(y_test, res_SGD))
print(recall_score(y_test, res_SGD))<jupyter_output>0.4125
0.0
0.0<jupyter_text>Метод опорных векторов<jupyter_code>sv = SVC(gamma='auto').fit(X_train, y_train)
res_SVC = sv.predict(X_test)
print(accuracy_score(y_test, res_SVC))
print(precision_score(y_test, res_SVC))
print(recall_score(y_test, res_SVC))<jupyter_output>0.6125
0.6212121212121212
0.8723404255319149<jupyter_text>Деревья решений<jupyter_code>DT = DecisionTreeClassifier(
    random_state=1, 
    max_depth=0.75).fit(X_train, y_train)
res_DT = DT.predict(X_test)
print(accuracy_score(y_test, res_DT))
print(precision_score(y_test, res_DT))
print(recall_score(y_test, res_DT))<jupyter_output>0.5875
0.5875
1.0<jupyter_text>Обучим  модели на кросс валидации<jupyter_code>scores_sgd = cross_val_score(SGDClassifier(),
                             X_train, y_train, 
                             cv=2)
np.mean(scores_sgd)
scores_svc = cross_val_score(SVC(gamma='auto'), 
                         X_train, y_train, cv=2)
np.mean(scores_svc)
scores_dt = cross_val_score(DecisionTreeClassifier(), 
                         X_train, y_train, cv=2)
np.mean(scores_dt)<jupyter_output><empty_output><jupyter_text>Подберем гиперпараметры и обучим модели с использованием гиперпараметров  Стохастический градиентный спуск<jupyter_code>parameters = {'alpha':[0.5,0.4,0.3,0.2,0.1]}
clf_gs_sgd = GridSearchCV(SGDClassifier(), 
                          parameters, cv=2, 
                          scoring='accuracy')
clf_gs_sgd.fit(X_train, y_train)
clf_gs_sgd.best_params_
sgd_new = SGDClassifier(
    alpha=0.5).fit(X_train, 
                   y_train)
res_sgd_new = sgd_new.predict(X_test)
print(accuracy_score(y_test, res_sgd_new))
print(precision_score(y_test, res_sgd_new))
print(recall_score(y_test, res_sgd_new))<jupyter_output>0.525
0.5633802816901409
0.851063829787234<jupyter_text>Метод опорных векторов<jupyter_code>parameters = {'gamma':[0.9,0.8,0.7,0.6,0.5,0.4,0.3,0.2,0.1]}
clf_gs_svm_svc = GridSearchCV(SVC(), parameters, cv=2, scoring='accuracy')
clf_gs_svm_svc.fit(X_train, y_train)
clf_gs_svm_svc.best_params_
svm_svc_new = SVC(gamma=0.1).fit(X_train, 
                                 y_train)
res_svc_new = svm_svc_new.predict(X_test)
print(accuracy_score(y_test, res_svc_new))
print(precision_score(y_test, res_svc_new))
print(recall_score(y_test, res_svc_new))<jupyter_output>0.6125
0.625
0.851063829787234<jupyter_text>Деревья решений<jupyter_code>parameters = {'min_impurity_decrease':[0.9,0.8,0.7,0.6,0.5,0.4,0.3,0.2,0.1]}
clf_gs_decision_tree = GridSearchCV(DecisionTreeClassifier(), parameters, cv=2, scoring='accuracy')
clf_gs_decision_tree.fit(X_train, y_train)
clf_gs_decision_tree.best_params_
decision_tree_new = DecisionTreeClassifier(
    random_state=1, 
    min_impurity_decrease=0.4, 
    max_depth=0.75).fit(X_train, y_train)
res_dt_new = decision_tree_new.predict(X_test)
print(accuracy_score(y_test, res_dt_new))
print(precision_score(y_test, res_dt_new))
print(recall_score(y_test, res_dt_new))<jupyter_output>0.5875
0.5875
1.0
{'fraction_non_alphanumeric': 0.09806201550387597, 'fraction_numerical': 0.04186046511627907, 'mean_word_length': 6.198047419804742, 'pattern_counts': {'":': 0, '<': 38, '<?xml version=': 0, '>': 38, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 1, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'chain_length': '11', 'dir': 'jupyter-structured-clean-dedup', 'id': '76708', 'license': 'MIT', 'n_tokens_mistral': 2235, 'n_tokens_neox': 2244, 'n_words': 330, 'path': 'Lab5/Lab_5.ipynb', 'repo_name': 'Lin69/ML-Technology', 'size': '5160'}