alexandrov_dmitrii_lab_4 ready #44
40
alexandrov_dmitrii_lab_4/lab4.py
Normal file
40
alexandrov_dmitrii_lab_4/lab4.py
Normal file
@ -0,0 +1,40 @@
|
|||||||
|
from scipy.cluster import hierarchy
|
||||||
|
import pandas as pd
|
||||||
|
from matplotlib import pyplot as plt
|
||||||
|
|
||||||
|
|
||||||
|
def start():
|
||||||
|
data = pd.read_csv('sberbank_data.csv', index_col='id')
|
||||||
|
x = data[['full_sq', 'price_doc']]
|
||||||
|
plt.figure(1, figsize=(16, 9))
|
||||||
|
plt.title('Дендрограмма кластеризации цен')
|
||||||
|
|
||||||
|
prices = [0, 0, 0, 0]
|
||||||
|
for ind, val in x.iterrows():
|
||||||
|
val = val['price_doc'] / val['full_sq']
|
||||||
|
if val < 100000:
|
||||||
|
prices[0] = prices[0] + 1
|
||||||
|
elif val < 300000:
|
||||||
|
prices[1] = prices[1] + 1
|
||||||
|
elif val < 500000:
|
||||||
|
prices[2] = prices[2] + 1
|
||||||
|
else:
|
||||||
|
prices[3] = prices[3] + 1
|
||||||
|
print('Результаты подчсёта ручного распределения:')
|
||||||
|
print('низких цен:'+str(prices[0]))
|
||||||
|
print('средних цен:'+str(prices[1]))
|
||||||
|
print('высоких цен:'+str(prices[2]))
|
||||||
|
print('премиальных цен:'+str(prices[3]))
|
||||||
|
|
||||||
|
hierarchy.dendrogram(hierarchy.linkage(x, method='single'),
|
||||||
|
truncate_mode='lastp',
|
||||||
|
p=15,
|
||||||
|
orientation='top',
|
||||||
|
leaf_rotation=90,
|
||||||
|
leaf_font_size=8,
|
||||||
|
show_contracted=True)
|
||||||
|
|
||||||
|
plt.show()
|
||||||
|
|
||||||
|
|
||||||
|
start()
|
27
alexandrov_dmitrii_lab_4/readme.md
Normal file
27
alexandrov_dmitrii_lab_4/readme.md
Normal file
@ -0,0 +1,27 @@
|
|||||||
|
### Задание
|
||||||
|
Использовать метод кластеризации по варианту для выбранных данных по варианту, самостоятельно сформулировав задачу.
|
||||||
|
Интерпретировать результаты и оценить, насколько хорошо он подходит для
|
||||||
|
решения сформулированной вами задачи.
|
||||||
|
|
||||||
|
Вариант 1: dendrogram
|
||||||
|
|
||||||
|
Была сформулирована следующая задача: необходимо разбить записи на кластеры в зависимости от цен и площади.
|
||||||
|
|
||||||
|
### Запуск программы
|
||||||
|
Файл lab4.py содержит и запускает программу, аргументов и настройки ~~вроде~~ не требует.
|
||||||
|
|
||||||
|
### Описание программы
|
||||||
|
Программа считывает цены и площади из файла статистики сбербанка по рынку недвижимости.
|
||||||
|
Поскольку по заданию требуется оценить машинную кластеризацию, для сравнения программа подсчитывает и выводит в консоль количество записей в каждом из выделенных вручную классов цен.
|
||||||
|
Далее программа кластеризует данные с помощью алгоритма ближайших точек (на другие памяти нету) и выводит дендрограмму на основе кластеризации.
|
||||||
|
Выводимая дендрограмма ограничена 15 последними (верхними) объединениями.
|
||||||
|
|
||||||
|
### Результаты тестирования
|
||||||
|
По результатам тестирования, можно сказать следующее:
|
||||||
|
* Последние объединения в дендрограмме - объединения выбросов с 'основным' кластером, то есть 10-20 записей с кластером с более чем 28000 записями.
|
||||||
|
* Это правильная информация, так как ручная классификация показывает, что премиальных (аномально больших) цен как раз порядка 20, остальные относятся к другим классам.
|
||||||
|
* Поскольку в имеющихся данных нет ограничений по ценам, выбросы аномально высоких цен при использовании данного алгоритма формируют отдельные кластеры, что негативно сказывается на наглядности.
|
||||||
|
* Ценовое ограничение также не дало положительнх результатов: снова сформировался 'основной' кластер, с которым последними объединялись отдельные значения.
|
||||||
|
* Значит, сам алгоритм не эффективен.
|
||||||
|
|
||||||
|
Итого: Алгоритм ближайших точек слишком чувствителен к выбросам, поэтому можно признать его неэффективным для необработанных данных. Дендрограмма как средство визуализации скорее уступает по наглядности диаграмме рассеяния.
|
28896
alexandrov_dmitrii_lab_4/sberbank_data.csv
Normal file
28896
alexandrov_dmitrii_lab_4/sberbank_data.csv
Normal file
File diff suppressed because one or more lines are too long
Loading…
Reference in New Issue
Block a user