
Лб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.
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.ы