Добавил:
darkwarius13@gmail.com Рад если помог :). Можешь на почту спасибо сказать Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Лб3 Віка

.doc
Скачиваний:
5
Добавлен:
27.06.2021
Размер:
448.51 Кб
Скачать

МІНІСТЕРСТВО ОСВІТИ ТА НАУКИ УКРАЇНИ

ХАРКІВСЬКИЙ НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ РАДІОЕЛЕКТРОНІКИ

Кафедра СТ

Звіт

про виконання лабораторної роботи № 3

з дисципліни Інтелектуальна обробка даних в розподілених інформаційних середовищах

на тему “Методи навчання з вчителем. Класифікація даних”

Виконав:

ст. гр. СПРм-19-1

Шемчук В. Н.

Перевірила:

Перова І. Г.

Харків 2020

МЕТОДЫ ОБУЧЕНИЯ С УЧИТЕЛЕМ. КЛАССИФИКАЦИЯ ДАННЫХ

Цель работы: Получение навыков работы с методами классификации данных

Ход работы:

1 Загрузить в DataFrame результаты 1-й лабораторной работы

file = pd.ExcelFile('Dataset.xlsx')

df = pd.read_excel(file, sheet_name='Лист1', header=1);

df_res = dropNaRowByPercent(df, 4);

df_dropNa = df_res.dropna()

resultData = df_res.copy()

for x, row in df_res.iterrows():

for y, value in row.iteritems():

if isNa(value):

resultData.loc[x, y] = generateValue(x, y, len(df_dropNa.index) + 1)

2. Розділити дані і діагноз з використанням методу .loc() і .values(). Провести нормування або стандартизацію даних з використанням методу StandardScaler() або MinMaxScaler() з бібліотеки sklearn.

symptoms_1 = resultData.loc[:].drop(columns=['№иб']).drop(columns=['Діагноз']).values

diagnoses_1 = resultData.loc[:,['Діагноз']].replace('ХОЗЛ', 0).replace('БА', 2).replace('Пневмонія', 1).values

x_norm_1 = StandardScaler().fit_transform(symptoms_1)

3. Розділити дані на навчальну та тестову вибірки за допомогою методу train_test_split() із sklearn.model_selection().

from sklearn.model_selection import train_test_split

X_train, X_test, Y_train, Y_test = train_test_split(x_norm_1, diagnoses_1, test_size=0.35, random_state=33)

4. Провести навчання методів класифікації таких як LinearRegression() та LogisticRegression() з sklearn.linear_model на навчальній вибірці, провести їхнє тестування на тестовій вибірці та розрахувати метрики МАЕ, RMSE та R2. Побудувати confusion_matrix та classification_report для кожного з методів. Оцінити отриманий результат.

from sklearn.linear_model import LinearRegression, LogisticRegression

linearRegressor = LinearRegression()

logisticRegressor = LogisticRegression()

linearRegressor.fit(X_train, Y_train)

logisticRegressor.fit(X_train, Y_train.ravel())

#testing linearRegressor

y_pred = linearRegressor.predict(X_test)

from sklearn.metrics import mean_absolute_error, mean_squared_error, r2_score

def getErrorScores(predictedData, modelName):

predictedData = predictedData.flatten()

print('---------------------- ', modelName, '---------------------')

print('mean_absolute_error: ', mean_absolute_error(Y_test.flatten(), predictedData) )

print('mean_squared_error: ', mean_squared_error(Y_test.flatten(), predictedData) )

print('r2_score: ', r2_score(Y_test.flatten(), predictedData))

getErrorScores(y_pred, 'linearRegressor')

Рисунок 1 — Результаты оценки работы метода линейной регрессии

#testing logisticRegressor

y_pred_log_reg = logisticRegressor.predict(X_test)

getErrorScores(y_pred_log_reg, 'logisticRegressor')

#Visualize matrix funtion

#%%

import seaborn as sn

def showMatrix(matrix):

sn.set(font_scale=1.4) # for label size

sn.heatmap(matrix, annot=True, annot_kws={"size": 16}) # font size

plt.show()

#show classification report function

#%%

def showCR(cr_data, cr_name):

cr_data = cr_data.ravel()

target_names = ['ХОЗЛ', 'Пневмонія', 'БА']

print(cr_name, ' --- classification_report \n')

print(metrics.classification_report(Y_test.flatten(), cr_data, target_names=target_names))

Рисунок 2 — Результаты оценки работы метода логистической регрессии

5. Провести візуалізацію даних за допомогою методу PCA() на двох поруч розташованих малюнках: лівий – дані розмічені згідно значення діагнозу, правий – дані розмічені згідно роботи кожного методу.

y_predict_all = linearRegressor.predict(x_norm)

showPCA(y_predict_all.ravel(), "Linear Reggression")

Рисунок 3 — Визуализация результатов работы линейной регрессии(справа) и исходных данных (слева)

y_logisic_predict_all = logisticRegressor.predict(x_norm)

showPCA(y_logisic_predict_all.ravel(), "Logistic Reggression")

Рисунок 4 — Визуализация результатов работы логистической регрессии(справа) и исходных данных (слева)

6. Провести навчання методів класифікації таких як KNeighborsClassifier() з

sklearn.neighbors, DecisionTreeClassifier() з sklearn.tree, MLPClassifier() з

sklearn.neural_network. Побудувати confusion matrix та classification_report для

кожного з методів. Оцінити отриманий результат.

from sklearn.neighbors import KNeighborsClassifier

K_neigh = KNeighborsClassifier(n_neighbors=3)

K_neigh.fit(X_train, Y_train.flatten())

Y_K_neigh_predict = K_neigh.predict(X_test)

K_neigh_conf_matrix = metrics.confusion_matrix(Y_test.flatten(), Y_K_neigh_predict.flatten());

#show classification report

showCR(Y_K_neigh_predict, 'KNeighborsClassifier')

#visualizing confusion matrix

showMatrix(K_neigh_conf_matrix)

Рисунок 5 — Оценка метода KNeighbors

from sklearn.tree import DecisionTreeClassifier

DTC = DecisionTreeClassifier(max_depth=5)

DTC.fit(X_train, Y_train.flatten())

DTC_predict = DTC.predict(X_test)

DTC_conf_matrix = metrics.confusion_matrix(Y_test.flatten(), DTC_predict.flatten());

#show classification report

showCR(DTC_predict, 'DecisionTreeClassifier')

#visualizing confusion matrix

showMatrix(DTC_conf_matrix)

Рисунок 6 — Оценка метода Decision Tree

from sklearn.neural_network import MLPClassifier

MLP = MLPClassifier()

MLP.fit(X_train, Y_train.flatten())

MLP_predict = MLP.predict(X_test)

MLP_conf_matrix = metrics.confusion_matrix(Y_test.flatten(), MLP_predict.flatten());

#show classification report

showCR(MLP_predict, 'MLPClassifier')

#visualizing confusion matrix

showMatrix(MLP_conf_matrix)

Рисунок 7 — Оценка метода MLP

7. Провести візуалізацію даних за допомогою методу PCA() на двох поруч розташованих малюнках: лівий – дані розмічені згідно значення діагнозу, правий – дані розмічені згідно роботи кожного методу.

Рисунок 8 — Визуализация работы алгоритма Kneighbors

Рисунок 9 — Визуализация работы алгоритма Decision Tree

Рисунок 10 — Визуализация работы алгоритма MLP

Выводы:

Была проведена классификация методами LinearRegression и LogisticRegression. Из результатов визуализации видно, что LinearRegression не дала сравниваемых результатов что видно на Рисунке 3. Также confusion_matrix и classification_report можно было построить только для LogisticRegression. Также были построены модели на основе методов KNeighborsClassifier, DecisionTreeClassifier(), MLPClassifier(). Был проведен анализ полученных данных с помощью визуализации PCA. Из всех методов наиболее точным для нашей выборки оказался MLP, это можно видеть на Рисунке 10.

Логистическая регрессия намного лучше справляется с задачами классификации, так как работает с целевым значением категориального типа. По полученным метрикам можно видеть, что результат намного ближе к ожидаемому, чем при линейной регрессии. Это же видно и на Рисунке 4.ы

Соседние файлы в предмете Интеллектуальная обработка данных в распределенных информационных средах