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

Лаб 2 / Лб2 Віка

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

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

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

Кафедра СТ

Звіт

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

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

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

Виконав:

ст. гр. СПРм-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 = resultData.loc[:].drop(columns=['№иб']).drop(columns=['Діагноз']).values

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

x_norm = StandardScaler().fit_transform(mainData) from sklearn.preprocessing import StandardScaler

x = StandardScaler().fit_transform(x)

3. Провести кластеризацию даных с помощью метода Kmeans. Оценить качество кластеризации с использованием методов библиотеки klearn metrics.classification_report() и metrics.confusion_matrix() для трёх диагнозов одновременно. symptoms = resultData.loc[:].drop(columns=['№иб']).drop(columns=['Діагноз']).values

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

x_norm = StandardScaler().fit_transform(symptoms)

kmeans = KMeans(n_clusters = 3, init = 'k-means++', random_state = 33)

kMeansPredicted = kmeans.fit_predict(x_norm)

expected = diagnoses

predicted = kMeansPredicted

print(metrics.classification_report(expected, predicted))

print(metrics.confusion_matrix(expected, predicted))

Рисунок 1 — метрики результатов кластеризации методом Kmeans

4. Провести визуализацию даных при помощи метода PCA() на двух радом расположенных рисунках: левый — даные, размеченные согласно значения диагноза; правый — данные, размеченные согласно работе метода Kmeans.

def showPCA(data_right, title_right):

pca = PCA(n_components=2)

pca_diagnosis = pca.fit_transform(x_norm)

principalDf = pd.DataFrame(data = pca_diagnosis [:, 0:2], columns = ['principal component 1', 'principal component 2'])

pcaDF = pd.concat([principalDf, pd.DataFrame(data = diagnoses)], axis=1)

f, axes = plt.subplots(1, 2, figsize=(15,7))

scatter(pcaDF.loc[:, 'principal component 1'], pcaDF.loc[:, 'principal component 2'], ax=axes[0], hue=diagnoses[:,0])

scatter(pcaDF.loc[:, 'principal component 1'], pcaDF.loc[:, 'principal component 2'], ax=axes[1], hue=data_right)

axes[0].set_title('Diagnoses')

axes[1].set_title(title_right) plt.show()

Рисунок 2 — Результат визуализации PCA по диагнозу(слева) и по результатам KMeans(справа)

5. Провести визуализацию даных при помози метода TSNE() на двух расположенных рядом рисунках: левый — даные, размеченные согласно значения диагноза; правый — данные, размеченные согласно работе метода Kmeans. Подобрать значения параметров метода TSNE() для лучшей визуализации. Сделать выводы.

tsne = TSNE (n_components = 2, perplexity = 18, n_iter=1000, random_state = 33, learning_rate = 100)

x_2D = tsne.fit_transform(x_norm)

tsneDf = pd.DataFrame(data = x_2D, columns = ['dim 1', 'dim 2'])

final_tsneDf = pd.concat([tsneDf, pd.DataFrame(data = diagnoses)], axis = 1)

f, axes = plt.subplots(1, 2, figsize=(15,7))

scatter(final_tsneDf.loc[:, 'dim 1'], final_tsneDf.loc[:, 'dim 2'], ax=axes[0], hue=diagnoses[:,0])

scatter(final_tsneDf.loc[:,'dim 1'], final_tsneDf.loc[:, 'dim 2'], ax=axes[1], hue=kMeansPredicted)

scatter(centers[:,0], centers[:,1], ax=axes[1], marker="s",s=200)

plt.show()

Рисунок 3 — Результат визуализации TSNE по диагнозу(слева) и по результатам KMeans(справа)

6. Провести кластеризацию даных при помощи метода DBSCAN(). Повторить шаги 4-5 для результатов работы DBSCAN().

from sklearn.cluster import DBSCAN

dbscan = DBSCAN(eps=9, min_samples=3)

dbscan.fit(x_norm)

showPCA(dbscan.labels_, 'Method DBSAN')

Рисунок 4 — Результат визуализации PCA по диагнозу(слева) и по результатам DBSCAN(справа)

tsne = TSNE (n_components = 2, perplexity = 18, n_iter=1000, random_state = 33, learning_rate = 100)

x_2D = tsne.fit_transform(x_norm)

tsneDf = pd.DataFrame(data = x_2D, columns = ['dim 1', 'dim 2'])

final_tsneDf = pd.concat([tsneDf, pd.DataFrame(data = diagnoses)], axis = 1)

f, axes = plt.subplots(1, 2, figsize=(15,7))

scatter(final_tsneDf.loc[:, 'dim 1'], final_tsneDf.loc[:, 'dim 2'], ax=axes[0], hue=diagnoses[:,0])

scatter(final_tsneDf.loc[:, 'dim 1'], final_tsneDf.loc[:, 'dim 2'], ax=axes[1], hue=dbscan.labels_)

axes[0].set_title('Diagnoses')

axes[1].set_title('Method DBSAN')

plt.show()

Рисунок 5Результат визуализации TSNE по диагнозу(слева) и по результатам DBSCAN(справа)

7. Провести оценку работы методов кластеризации с использованием adjusted_rand_score() , adjusted_mutual_info_score() , homogeneity_score() , completeness_score(), v_measure_score(), silhouette_score().

dbscan_predicted = dbscan.labels_

def getMetrics(methodName, predictedData):

print('-------------------------------------', methodName, '-------------------------------------')

print('adjusted_rand_score: ', metrics.adjusted_rand_score(expected[:,0], predictedData))

print('adjusted_mutual_info_score: ', metrics.adjusted_mutual_info_score(expected[:,0], predictedData))

print('homogeneity_score: ', metrics.homogeneity_score(expected[:,0], predictedData))

print('completeness_score: ', metrics.completeness_score(expected[:,0], predictedData))

print('v_measure_score: ', metrics.v_measure_score(expected[:,0], predictedData))

print('silhouette_score: ', metrics.silhouette_score(x_norm, predictedData))

getMetrics('DBSCAN', dbscan_predicted)

getMetrics('KMEANS', kMeansPredicted)

Рисунок 6 – Результаты работы методов кластеризации

Выводы: сравнивая методы визуализации многомерных данных (РСА, TSNE), можно отметить, что РСА был более показательным, так с помощью него можно было увидеть группы данных, объединённых в кластер. Метод кластеризации KMeans показал лучше себя, чем DBSCAN при работе с данными, если сравнивать алгоритмы кластеризации на данном наборе данных. И хоть KMeans был более показательным, нельзя говорить что он лучше во всех случаях, нужно учитывать что DBSCAN не предназначен для работы с данными которые имеют пропуски. DBSCAN необходимо использовать с данными, которые могут иметь шум. Можно отметить, что оба алгоритма можно использовать для первичного анализа данных.

Если внимательно изучить результаты подсчёта метрик(рис.6), то можно утверждать, что данная выборка плохо поддаётся кластеризации в принципе: кластеры накладываются друг на друга, изначально данные не полные и самих данных мало.

Соседние файлы в папке Лаб 2