
Лб3
.docМІНІСТЕРСТВО ОСВІТИ ТА НАУКИ УКРАЇНИ
ХАРКІВСЬКИЙ НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ РАДІОЕЛЕКТРОНІКИ
Кафедра СТ
Звіт
про виконання лабораторної роботи № 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.
mainData_1 = resultData.loc[:].drop(columns=['№иб']).drop(columns=['Діагноз']).values
diagnoses_1 = resultData.loc[:,['Діагноз']].replace('ХОЗЛ', 0).replace('БА', 2).replace('Пневмонія', 1).values
x_stan_1 = StandardScaler().fit_transform(mainData)
3. Розділити дані на навчальну та тестову вибірки за допомогою методу train_test_split() із sklearn.model_selection().
#split
from sklearn.model_selection import
train_test_split
X_train, X_test, Y_train, Y_test =
train_test_split(x_stan_1, diagnoses_1, test_size=0.3,
random_state=22)
4. Провести навчання методів класифікації таких як LinearRegression() та LogisticRegression() з sklearn.linear_model на навчальній вибірці, провести їхнє тестування на тестовій вибірці та розрахувати метрики МАЕ, RMSE та R2. Побудувати confusion_matrix та classification_report для кожного з методів. Оцінити отриманий результат.
#train
from sklearn.linear_model import
LinearRegression, LogisticRegression
linearRegressor = LinearRegression()
logisticRegressor = LogisticRegression()
linearRegressor.fit(X_train, Y_train)
logisticRegressor.fit(X_train, Y_train.ravel())
print(linearRegressor.intercept_)
print(linearRegressor.coef_)
#testing linearRegressor
y_pred = linearRegressor.predict(X_test)
df_test_lin_reg = pd.DataFrame({'Фактичний':
Y_test.flatten(), 'Передбачуваний': y_pred.flatten()})
from sklearn.metrics import
mean_absolute_error, mean_squared_error, r2_score
LinRegMAE =
mean_absolute_error(Y_test.flatten(), y_pred.flatten())
LinRegRmse =
mean_squared_error(Y_test.flatten(), y_pred.flatten())
LinRegR2 = r2_score(Y_test.flatten(),
y_pred.flatten())
print('mean_absolute_error: ', LinRegMAE)
print('mean_squared_error: ', LinRegRmse)
print('r2_score: ', LinRegR2)
Рисунок 1 — Результаты оценки работы метода линейной регрессии
#testing logisticRegressor
#%%
y_pred_log_reg =
logisticRegressor.predict(X_test)
df_test_log_reg = pd.DataFrame({'Фактичний':
Y_test.flatten(), 'Передбачуваний':
y_pred_log_reg.flatten()})
#MAE RMSE R2 logisticRegressor
#%%
LogRegMAE =
mean_absolute_error(Y_test.flatten(), y_pred_log_reg.flatten())
LogRegRmse =
mean_squared_error(Y_test.flatten(), y_pred_log_reg.flatten())
LogRegR2 = r2_score(Y_test.flatten(),
y_pred_log_reg.flatten())
print('mean_absolute_error: ', LogRegMAE)
print('mean_squared_error: ', LogRegRmse)
print('r2_score: ', LogRegR2)
Рисунок 2 — Результаты оценки работы метода логистической регрессии
5. Провести візуалізацію даних за допомогою методу PCA() на двох поруч розташованих малюнках: лівий – дані розмічені згідно значення діагнозу, правий – дані розмічені згідно роботи кожного методу.
Рисунок
3 — Визуализация результатов работы
линейной регрессии(справа) и исходных
данных (слев)
Рисунок
4 — Визуализация результатов работы
логистической регрессии(справа) и
исходных данных (слева)
6. Провести навчання методів класифікації таких як KNeighborsClassifier() з
#KNeighborsClassifier
#%%
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());
print('KNeighborsClassifier ---
classification_report ',
metrics.classification_report(Y_test.flatten(),
Y_K_neigh_predict.flatten()))
print('KNeighborsClassifier ---
confusion_matrix ', K_neigh_conf_matrix)
#visualizing confusion matrix
sn.set(font_scale=1.4) # for label size
sn.heatmap(K_neigh_conf_matrix, annot=True,
annot_kws={"size": 16}) # font size
Рисунок 5 — Оценка метода KNeighbors
#DecisionTreeClassifier
#%%
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());
print('DecisionTreeClassifier ---
classification_report ',
metrics.classification_report(Y_test.flatten(),
DTC_predict.flatten()))
print('DecisionTreeClassifier ---
confusion_matrix ', DTC_conf_matrix)
#visualizing confusion matrix
sn.set(font_scale=1.4) # for label size
sn.heatmap(DTC_conf_matrix, annot=True,
annot_kws={"size": 16}) # font size
plt.show()
Рисунок 6 — Оценка метода Decision Tree
#MLPClassifier
#%%
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());
print('MLPClassifier --- classification_report
', metrics.classification_report(Y_test.flatten(),
MLP_predict.flatten()))
print('MLPClassifier --- confusion_matrix ',
MLP_conf_matrix)
#visualizing confusion matrix
sn.set(font_scale=1.4) # for label size
sn.heatmap(MLP_conf_matrix, annot=True,
annot_kws={"size": 16}) # font size
plt.show()
Рисунок 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.ы