From e8666689c2051c7ec84f91780b4a56e55a3b1390 Mon Sep 17 00:00:00 2001 From: Kochkareva Date: Fri, 24 Nov 2023 15:28:14 +0400 Subject: [PATCH] kochkareva_elizaveta_lab_4 is ready --- kochkareva_elizaveta_lab_4/ElbowMethod.png | Bin 0 -> 23777 bytes .../KMeansClustering.png | Bin 0 -> 18493 bytes kochkareva_elizaveta_lab_4/README.md | 300 ++++++++++++++++++ kochkareva_elizaveta_lab_4/main.py | 122 +++++++ .../static/charts/ElbowMethod.png | Bin 0 -> 23777 bytes .../static/charts/KMeansClustering.png | Bin 0 -> 18551 bytes 6 files changed, 422 insertions(+) create mode 100644 kochkareva_elizaveta_lab_4/ElbowMethod.png create mode 100644 kochkareva_elizaveta_lab_4/KMeansClustering.png create mode 100644 kochkareva_elizaveta_lab_4/README.md create mode 100644 kochkareva_elizaveta_lab_4/main.py create mode 100644 kochkareva_elizaveta_lab_4/static/charts/ElbowMethod.png create mode 100644 kochkareva_elizaveta_lab_4/static/charts/KMeansClustering.png diff --git a/kochkareva_elizaveta_lab_4/ElbowMethod.png b/kochkareva_elizaveta_lab_4/ElbowMethod.png new file mode 100644 index 0000000000000000000000000000000000000000..aaf455507e5aace02e57bc74bf52f07b994a7ca9 GIT binary patch literal 23777 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

X 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 literal 0 HcmV?d00001 diff --git a/kochkareva_elizaveta_lab_4/KMeansClustering.png b/kochkareva_elizaveta_lab_4/KMeansClustering.png new file mode 100644 index 0000000000000000000000000000000000000000..03940437a559427094d3fb9162bc33e6aecedac5 GIT binary patch literal 18493 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 S7eOfWn54MOwbZM+kNyv6gq#%s literal 0 HcmV?d00001 diff --git a/kochkareva_elizaveta_lab_4/README.md b/kochkareva_elizaveta_lab_4/README.md new file mode 100644 index 0000000..e3606d8 --- /dev/null +++ b/kochkareva_elizaveta_lab_4/README.md @@ -0,0 +1,300 @@ + +# Лабораторная работа 4. Вариант 15 + +### Задание +Использовать алгоритм кластеризации *K-means*, самостоятельно сформулировав задачу. Интерпретировать результаты и оценить, насколько хорошо он подходит для решения сформулированной задачи. + +### Как запустить лабораторную работу +Для запуска программы необходимо с помощью командной строки в корневой директории файлов прокета прописать: +``` +python main.py +``` +### Какие технологии использовали +- Библиотека *numpy* для работы с массивами. +- Библиотека *pandas* для работы с данными в формате таблицы. +- Библиотека *matplotlib pyplot* - для визуализации данных. +- Библиотека *sklearn*: + - *KMeans* для использования алгоритма кластеризации K-средних. + - *train_test_split* для разделения набора данных на обучающую и тестовую выборки. + - *LinearRegression* для создания и работы с моделью Линейной регрессии. + - RFE для рекурсивного отбора признаков + +### Описание лабораторной работы +#### Сформулированная задача +Задача анализа, решаемые алгоритмом кластеризации: выделить локации (страны) с похожими характеристиками вакансий для определения региональных тенденций и особенностей рынка труда. + +#### Оценка важности параметров +Прежде, чем перейти к решению поставленной задачи. Произведем анализ важности параметров, чтобы выделить наиболее существенные характеристики, которые влияют на выделение лакаций с похожиим характеристиками. Для этого создадим функцию `recursive_feature_elimination()`, где создаем копию исходного датафрейма `data` и присваивается переменной `df`. В `df` удаляем столбцы `"Country"` и `"location"` с помощью метода `drop()`, т.к. на данных столбца `"Country"` будем использовать как целеввые значения (заранее пропишем `y = data['Country']` общий для всех функций, которые создадим в дальнейшем). Данные разделяем на обучающую и тестовую выборки с использованием функции `train_test_split()`. Размер тестовой выборки составляет 20% от исходных данных. Разделенные данные сохраняются в переменные `X_train`, `X_test`, `y_train` и `y_test`. Задаем имена столбцов датасета в переменной `column_names`, которые будем использовать для вывода данных. Далее для ранжирования важности параметров создаем экземпляры модели линейной регрессии `LinearRegression()` и модели RFE, которую обучаем на обучающих данных с помощью метода `fit()`. Для сортировки полученных результатов воспользуемся функцией `rank_to_dict_rfe(ranking, names)` из прошлой лабораторной работы. + +```python +def recursive_feature_elimination(): + df = data.copy() + df.drop(["Country", "location"], axis=1, inplace=True) + X_train, X_test, y_train, y_test = train_test_split(df, y, test_size=0.2) + column_names = ['Qualifications', 'Work Type', 'Company Size', 'Preference', 'Job Title', 'Role', 'Job Portal', + 'skills', 'Company', 'Min Experience', 'Max Experience', 'Min Salary', + 'Max Salary', 'Sector', 'Industry', 'City', 'State', 'Ticker', 'year', 'month', 'day', + "'Casual Dress Code, Social and Recreational Activities, Employee Referral Programs, Health and Wellness Facilities, Life and Disability Insurance'", + "'Childcare Assistance, Paid Time Off (PTO), Relocation Assistance, Flexible Work Arrangements, Professional Development'", + "'Employee Assistance Programs (EAP), Tuition Reimbursement, Profit-Sharing, Transportation Benefits, Parental Leave'", + "'Employee Referral Programs, Financial Counseling, Health and Wellness Facilities, Casual Dress Code, Flexible Spending Accounts (FSAs)'", + "'Flexible Spending Accounts (FSAs), Relocation Assistance, Legal Assistance, Employee Recognition Programs, Financial Counseling'", + "'Health Insurance, Retirement Plans, Flexible Work Arrangements, Employee Assistance Programs (EAP), Bonuses and Incentive Programs'", + "'Health Insurance, Retirement Plans, Paid Time Off (PTO), Flexible Work Arrangements, Employee Assistance Programs (EAP)'", + "'Legal Assistance, Bonuses and Incentive Programs, Wellness Programs, Employee Discounts, Retirement Plans'", + "'Life and Disability Insurance, Stock Options or Equity Grants, Employee Recognition Programs, Health Insurance, Social and Recreational Activities'", + "'Transportation Benefits, Professional Development, Bonuses and Incentive Programs, Profit-Sharing, Employee Discounts'", + "'Tuition Reimbursement, Stock Options or Equity Grants, Parental Leave, Wellness Programs, Childcare Assistance'"] + + estimator = LinearRegression() + rfe_model = RFE(estimator) + rfe_model.fit(X_train.values, y_train.values) + ranks = rank_to_dict_rfe(rfe_model.ranking_, column_names) + sorted_dict = dict(sorted(ranks.items(), key=lambda x: x[1], reverse=True)) + print(sorted_dict) + +def rank_to_dict_rfe(ranking, names): + n_ranks = [float(1 / i) for i in ranking] + n_ranks = map(lambda x: round(x, 2), n_ranks) + return dict(zip(names, n_ranks)) +``` +После запуска функции `recursive_feature_elimination()`, получаем следующий результат: +``` +{'Qualifications': 1.0, 'Work Type': 1.0, 'Preference': 1.0, 'Job Portal': 1.0, 'Min Experience': 1.0, "'Casual Dress Code, Social and Recreational Activities, Employee Referral Programs, Health and Wellness Facilities, Life and Disability Insurance'": 1.0, "'Childcare Assistance, Paid Time Off (PTO), Relocation Assistance, Flexible Work Arrangements, Professional Development'": 1.0, "'Employee Assistance Programs (EAP), Tuition Reimbursement, Profit-Sharing, Transportation Benefits, Parental Leave'": 1.0, "'Employee Referral Programs, Financial Counseling, Health and Wellness Facilities, Casual Dress Code, Flexible Spending Accounts (FSAs)'": 1.0, "'Flexible Spending Accounts (FSAs), Relocation Assistance, Legal Assistance, Employee Recognition Programs, Financial Counseling'": 1.0, "'Health Insurance, Retirement Plans, Flexible Work Arrangements, Employee Assistance Programs (EAP), Bonuses and Incentive Programs'": 1.0, "'Health Insurance, Retirement Plans, Paid Time Off (PTO), Flexible Work Arrangements, Employee Assistance Programs (EAP)'": 1.0, "'Legal Assistance, Bonuses and Incentive Programs, Wellness Programs, Employee Discounts, Retirement Plans'": 1.0, "'Life and Disability Insurance, Stock Options or Equity Grants, Employee Recognition Programs, Health Insurance, Social and Recreational Activities'": 1.0, "'Transportation Benefits, Professional Development, Bonuses and Incentive Programs, Profit-Sharing, Employee Discounts'": 1.0, "'Tuition Reimbursement, Stock Options or Equity Grants, Parental Leave, Wellness Programs, Childcare Assistance'": 1.0, 'month': 0.5, 'year': 0.33, 'Max Experience': 0.25, 'State': 0.2, 'day': 0.17, 'Sector': 0.14, 'Company': 0.12, 'Ticker': 0.11, 'Job Title': 0.1, 'Role': 0.09, 'Industry': 0.08, 'City': 0.08, 'skills': 0.07, 'Min Salary': 0.07, 'Company Size': 0.06, 'Max Salary': 0.06} +``` +Как можно заметить, наиболее важными параметрами являются 'Qualifications': 1.0, 'Work Type': 1.0, 'Preference': 1.0, 'Job Portal': 1.0, 'Min Experience': 1.0 и все показатели льгот. + +#### Оценка количества кластеров +Для оценки количества кластеров воспользуемся методом локтя - графический метод для оценки оптимального количества кластеров при использовании алгоритма k-means. Данный метод основан на расчете суммы квадратов расстояний между каждым объектом данных и центроидом его кластера. Эта сумма называется инерцией. Чем меньше инерция, тем лучше кластеризация. + +Сначала создаем копию данных `df`, после чего удаляем ненужных столбцов из `df` с помощью метода `drop()`. Затем данные разделяем на обучающую и тестовую выборки с помощью функции `train_test_split()`. +Далее инициализируем пустой список `inertias`, который будет хранить значения инерции для различного количества кластеров. В цикле for перебираем значения `k` от 1 до 14. Внутри цикла создаем объект KMeans с параметром `n_clusters=k`, который выполняет кластеризацию обучающей выборки. Значение инерции для текущего количества кластеров добавляется в список `inertias`. +После завершения цикла строим график метода локтя, где по оси *x* отображается количество кластеров, а по оси *y* - значение инерции. + +С помощью графика выберем точку, где изменение инерции становится менее значительным по сравнению с предыдущими значениями. + +``` python +df = data.copy() + df.drop(['Country', 'location', 'Company Size', 'Job Title', 'Role', + 'skills', 'Company', 'Max Experience', 'Min Salary', + 'Max Salary', 'Sector', 'Industry', 'City', 'State', 'Ticker', 'year', 'month', 'day' + ], + axis=1, inplace=True) + X_train, X_test, y_train, y_test = train_test_split(df, y, test_size=0.2) + inertias = [] + for k in range(1, 15): + kmeans = KMeans(n_clusters=k, random_state=1).fit(X_train.values, y_train.values) + inertias.append(np.sqrt(kmeans.inertia_)) + plt.plot(range(1, 15), inertias, marker='o') + plt.xlabel('Number of clusters') + plt.ylabel('Inertia') + plt.title("Метод локтя") + plt.savefig('static/charts/ElbowMethod.png') + plt.close() +``` +Выполним построение графика: + + +![График "Метод локтя"](ElbowMethod.png) + +Таким образом, с помощью метода локтя получилось визуально определить оптимальное количество кластеров для алгоритма k-means на основе значения инерции, равное 9. + +#### Алгоритм кластеризации *K-means* +Для работы с алгоритмом кластеризации *K-means* создадим функцию `k_means()` . Сохраняем копию оригинальных данных в переменной `df`. Затем, из этой копии удаляем столбцы, которые имеют наименьшую важность. Далее, данные разделяем на обучающую и тестовую выборки с помощью функции `train_test_split`. Обучающие данные сохраняются в переменные `X_train` и `y_train`, а тестовые данные - в переменные `X_test` и `y_test`. Здесь `y` представляет собой целевую переменную. Затем, создаем объект `kmeans` класса KMeans с параметром `n_clusters=9`, что означает, что алгоритм будет искать 9 кластеров в данных. Обучение модели выполняется с помощью метода `fit`, передавая в него значения `X_train` и `y_train`.Далее, применяется обученная модель к тестовым данным с помощью метода `predict`, чтобы получить метки кластеров. Координаты центроидов кластеров сохраняются в переменной `centroids`. + +```python +def k_means(): + df = data.copy() + df.drop(['Country', 'location', 'Company Size', 'Preference', 'Job Title', 'Role', 'Job Portal', + 'skills', 'Company', 'Min Experience', 'Max Experience', 'Min Salary', + 'Max Salary', 'Sector', 'Industry', 'City', 'State', 'Ticker', 'year', 'month', 'day', + "'Casual Dress Code, Social and Recreational Activities, Employee Referral Programs, Health and Wellness Facilities, Life and Disability Insurance'", + "'Childcare Assistance, Paid Time Off (PTO), Relocation Assistance, Flexible Work Arrangements, Professional Development'", + "'Employee Assistance Programs (EAP), Tuition Reimbursement, Profit-Sharing, Transportation Benefits, Parental Leave'", + "'Employee Referral Programs, Financial Counseling, Health and Wellness Facilities, Casual Dress Code, Flexible Spending Accounts (FSAs)'", + "'Flexible Spending Accounts (FSAs), Relocation Assistance, Legal Assistance, Employee Recognition Programs, Financial Counseling'", + "'Health Insurance, Retirement Plans, Flexible Work Arrangements, Employee Assistance Programs (EAP), Bonuses and Incentive Programs'", + "'Health Insurance, Retirement Plans, Paid Time Off (PTO), Flexible Work Arrangements, Employee Assistance Programs (EAP)'", + "'Legal Assistance, Bonuses and Incentive Programs, Wellness Programs, Employee Discounts, Retirement Plans'", + "'Life and Disability Insurance, Stock Options or Equity Grants, Employee Recognition Programs, Health Insurance, Social and Recreational Activities'", + "'Transportation Benefits, Professional Development, Bonuses and Incentive Programs, Profit-Sharing, Employee Discounts'", + "'Tuition Reimbursement, Stock Options or Equity Grants, Parental Leave, Wellness Programs, Childcare Assistance'"], + axis=1, inplace=True) + X_train, X_test, y_train, y_test = train_test_split(df, y, test_size=0.2) + kmeans = KMeans(n_clusters=9) + kmeans.fit(X_train.values, y_train.values) + labels = kmeans.predict(X_test.values) + centroids = kmeans.cluster_centers_ + print("Метки кластеров:", labels) + print("Координаты центроидов:", centroids) + plt.scatter(X_test['Qualifications'], X_test['Work Type'], c=labels, cmap='viridis') + plt.scatter(centroids[:, 0], centroids[:, 1], marker='x', color='red') + plt.xlabel('Qualifications') + plt.ylabel('Work Type') + plt.title('KMeans Clustering') + plt.savefig('static/charts/KMeansClustering.png') + plt.close() + + print("Уникальных Work Type :", data['Work Type'].nunique()) + print("Уникальных Qualifications:", data['Qualifications'].nunique()) + + unique_labels = np.unique(labels) + for label in unique_labels: + indices = np.where(labels == label) + y_values = data_orig.loc[indices, 'Country'] + print(f"Значения y для кластера {label}: {y_values}") +``` +Выполним построение графика: + + +![График "Алгоритм кластеризации K-means"](KMeansClustering.png) + +Также выводим результаты работы алгоритма кластеризации в консоль, где можно увидеть подробные результаты разбиения на кластеры: + +``` +Значения y для кластера 0: 9 Antigua and Barbuda +16 San Marino +21 Tuvalu +22 Eritrea +35 New Caledonia + ... +319899 Nepal +319912 Uzbekistan +319927 Colombia +319933 Spain +319955 Niger +Name: Country, Length: 25672, dtype: object +Значения y для кластера 1: 10 Bahrain +14 Syrian Arab Republic +19 Democratic Republic Of Congo +31 Chile +40 Cote d'Ivoire + ... +319904 Mauritania +319905 Macao SAR, China +319906 Vietnam +319929 French Polynesia +319945 Mauritius +Name: Country, Length: 31971, dtype: object +Значения y для кластера 2: 7 Sao Tome and Principe +15 Yemen +17 French Polynesia +20 Azerbaijan +24 British Virgin Islands + ... +319935 Dominican Republic +319937 Japan +319938 Gambia +319946 Indonesia +319949 Latvia +Name: Country, Length: 38400, dtype: object +Значения y для кластера 3: 0 Isle of Man +6 Cayman Islands +11 Bermuda +23 Honduras +30 Jordan + ... +319931 Sint Maarten (Dutch part) +319942 Hong Kong SAR, China +319943 Bangladesh +319950 Croatia +319952 Syrian Arab Republic +Name: Country, Length: 51148, dtype: object +Значения y для кластера 4: 3 Benin +4 Chile +5 Belgium +12 Jamaica +18 North Korea + ... +319922 Gabon +319925 Korea, Rep. +319926 Ethiopia +319941 Zimbabwe +319951 Korea, Rep. +Name: Country, Length: 38574, dtype: object +Значения y для кластера 5: 1 Turkmenistan +38 Solomon Islands +42 Virgin Islands (U.S.) +47 Belize +59 Republic Of Congo + ... +319918 Spain +319924 Paraguay +319947 Brazil +319948 Macao SAR, China +319953 China +Name: Country, Length: 38422, dtype: object +Значения y для кластера 6: 37 West Bank and Gaza +57 Guam +102 Fiji +111 Ecuador +124 Cabo Verde + ... +319896 Sint Maarten (Dutch part) +319903 Madagascar +319914 South Africa +319940 Netherlands +319954 Albania +Name: Country, Length: 25701, dtype: object +Значения y для кластера 7: 2 Macao SAR, China +8 Maldives +13 Gambia +25 Cuba +27 Gambia + ... +319892 Turks and Caicos Islands +319920 Luxembourg +319923 Trinidad and Tobago +319939 China +319944 Fiji +Name: Country, Length: 38449, dtype: object +Значения y для кластера 8: 48 Malta +49 Panama +52 Republic Of Congo +81 Bangladesh +82 Nepal + ... +319902 Cambodia +319921 Barbados +319932 Lesotho +319934 St. Kitts and Nevis +319936 Nigeria +Name: Country, Length: 31619, dtype: object +``` + +Также выведем координаты центроидов: +``` +Координаты центроидов: [[2.49909662 0.4986962 ] + [6.49757212 3.00005221] + [1.12332665 3.12941867] + [6.79715885 0.40238426] + [3.99726263 3.50030885] + [8.50117367 3.49953735] + [4.2877207 1.14426123] + [8.60271303 1.19776253] + [0.40101301 0.79759215]] +``` + +И оценим качество кластеризации, используя силуэтный коэффициент и индекс Дэвиса-Болдина: +1. Силуэтный коэффициент - это метрика, которая измеряет, насколько точка хорошо соответствует своему собственному кластеру в сравнении с другими кластерами. Он находится в диапазоне от -1 до 1, где значение ближе к 1 указывает на хорошую кластеризацию, а значение ближе к -1 указывает на плохую кластеризацию. +```python + # Оценка силуэтного коэффициента + silhouette = silhouette_score(X_test.values, kmeans.predict(X_test.values)) + print("Силуэтный коэффициент:", silhouette) +``` +В нашем случае силуэтный коэффициент равен 0.4086103390706535. +2. Индекс Дэвиса-Болдина - это метрика, которая измеряет сходство между кластерами на основе их средних расстояний и средних расстояний между кластерами. Чем меньше значение этого индекса, тем лучше кластеризация. +```python + # Оценка индекса Дэвиса-Болдина + davies_bouldin = davies_bouldin_score(X_test.values, kmeans.predict(X_test.values)) + print("Индекс Дэвиса-Болдина:", davies_bouldin) +``` +В нашем случае индекс Дэвиса-Болдина равен 0.8682047121172671. + +### Вывод + +Таким образом, с помощью оценок силуэтного коэффициента и индекса Дэвиса-Болдина, можно сделать следующие выводы о качестве кластеризации: +1. Силуэтный коэффициент равен 0.4086103390706535. В данном случае, значение силуэтного коэффициента выше 0, что говорит о том, что кластеры имеют некоторую степень разделения, но не являются идеально разделимыми. В целом, это может указывать на некоторое качество кластеризации, но не является оптимальным. +2. Индекс Дэвиса-Болдина равен 0.8682047121172671. Значение этого индекса является положительным числом. В данном случае, значение индекса Дэвиса-Болдина выше 0, что указывает на некоторое сходство между кластерами. + +Таким образом, на основе предоставленных значений можно сказать, что кластеризация имеет некоторую степень разделения, но не является идеальной. \ No newline at end of file diff --git a/kochkareva_elizaveta_lab_4/main.py b/kochkareva_elizaveta_lab_4/main.py new file mode 100644 index 0000000..19178ad --- /dev/null +++ b/kochkareva_elizaveta_lab_4/main.py @@ -0,0 +1,122 @@ +import os.path +import numpy as np +import pandas as pd +from sklearn.cluster import KMeans +from sklearn.metrics import silhouette_score, davies_bouldin_score +from sklearn.model_selection import train_test_split +from sklearn.linear_model import LinearRegression +from sklearn.feature_selection import RFE +import matplotlib.pyplot as plt + + +picfld = os.path.join('static', 'charts') + +data = pd.read_csv('D:/Интеллектуальные информационные системы/Dataset/updated_job_descriptions.csv') +data_orig = pd.read_csv('D:/Интеллектуальные информационные системы/Dataset/job_descriptions.csv') +y = data['Country'] + + +def k_means(): + df = data.copy() + df.drop(['Country', 'location', 'Company Size', 'Preference', 'Job Title', 'Role', 'Job Portal', + 'skills', 'Company', 'Min Experience', 'Max Experience', 'Min Salary', + 'Max Salary', 'Sector', 'Industry', 'City', 'State', 'Ticker', 'year', 'month', 'day', + "'Casual Dress Code, Social and Recreational Activities, Employee Referral Programs, Health and Wellness Facilities, Life and Disability Insurance'", + "'Childcare Assistance, Paid Time Off (PTO), Relocation Assistance, Flexible Work Arrangements, Professional Development'", + "'Employee Assistance Programs (EAP), Tuition Reimbursement, Profit-Sharing, Transportation Benefits, Parental Leave'", + "'Employee Referral Programs, Financial Counseling, Health and Wellness Facilities, Casual Dress Code, Flexible Spending Accounts (FSAs)'", + "'Flexible Spending Accounts (FSAs), Relocation Assistance, Legal Assistance, Employee Recognition Programs, Financial Counseling'", + "'Health Insurance, Retirement Plans, Flexible Work Arrangements, Employee Assistance Programs (EAP), Bonuses and Incentive Programs'", + "'Health Insurance, Retirement Plans, Paid Time Off (PTO), Flexible Work Arrangements, Employee Assistance Programs (EAP)'", + "'Legal Assistance, Bonuses and Incentive Programs, Wellness Programs, Employee Discounts, Retirement Plans'", + "'Life and Disability Insurance, Stock Options or Equity Grants, Employee Recognition Programs, Health Insurance, Social and Recreational Activities'", + "'Transportation Benefits, Professional Development, Bonuses and Incentive Programs, Profit-Sharing, Employee Discounts'", + "'Tuition Reimbursement, Stock Options or Equity Grants, Parental Leave, Wellness Programs, Childcare Assistance'"], + axis=1, inplace=True) + X_train, X_test, y_train, y_test = train_test_split(df, y, test_size=0.2) + kmeans = KMeans(n_clusters=9) + kmeans.fit(X_train.values) + labels = kmeans.predict(X_test.values) + centroids = kmeans.cluster_centers_ + print("Координаты центроидов:", centroids) + plt.scatter(X_test['Qualifications'], X_test['Work Type'], c=labels, cmap='viridis') + plt.scatter(centroids[:, 0], centroids[:, 1], marker='x', color='red') + plt.xlabel('Qualifications') + plt.ylabel('Work Type') + plt.title('KMeans Clustering') + plt.savefig('static/charts/KMeansClustering.png') + plt.close() + print("Уникальных Work Type :", data['Work Type'].nunique()) + print("Уникальных Qualifications:", data['Qualifications'].nunique()) + unique_labels = np.unique(labels) + for label in unique_labels: + indices = np.where(labels == label) + y_values = data_orig.loc[indices, 'Country'].values + print(f"Значения y для кластера {label}: {y_values}") + # Оценка силуэтного коэффициента + silhouette = silhouette_score(X_test.values, kmeans.predict(X_test.values)) + print("Силуэтный коэффициент:", silhouette) + # Оценка индекса Дэвиса-Болдина + davies_bouldin = davies_bouldin_score(X_test.values, kmeans.predict(X_test.values)) + print("Индекс Дэвиса-Болдина:", davies_bouldin) + + +# оценка количества кластеров +def selection_number_clusters(): + df = data.copy() + df.drop(['Country', 'location', 'Company Size', 'Job Title', 'Role', + 'skills', 'Company', 'Max Experience', 'Min Salary', + 'Max Salary', 'Sector', 'Industry', 'City', 'State', 'Ticker', 'year', 'month', 'day' + ], + axis=1, inplace=True) + X_train, X_test, y_train, y_test = train_test_split(df, y, test_size=0.2) + inertias = [] + for k in range(1, 15): + kmeans = KMeans(n_clusters=k, random_state=1).fit(X_train.values, y_train.values) + inertias.append(np.sqrt(kmeans.inertia_)) + plt.plot(range(1, 15), inertias, marker='o') + plt.xlabel('Number of clusters') + plt.ylabel('Inertia') + plt.title("Метод локтя") + plt.savefig('static/charts/ElbowMethod.png') + plt.close() + + +# оценка важности параметров +def recursive_feature_elimination(): + df = data.copy() + df.drop(["Country", "location"], axis=1, inplace=True) + X_train, X_test, y_train, y_test = train_test_split(df, y, test_size=0.2) + column_names = ['Qualifications', 'Work Type', 'Company Size', 'Preference', 'Job Title', 'Role', 'Job Portal', + 'skills', 'Company', 'Min Experience', 'Max Experience', 'Min Salary', + 'Max Salary', 'Sector', 'Industry', 'City', 'State', 'Ticker', 'year', 'month', 'day', + "'Casual Dress Code, Social and Recreational Activities, Employee Referral Programs, Health and Wellness Facilities, Life and Disability Insurance'", + "'Childcare Assistance, Paid Time Off (PTO), Relocation Assistance, Flexible Work Arrangements, Professional Development'", + "'Employee Assistance Programs (EAP), Tuition Reimbursement, Profit-Sharing, Transportation Benefits, Parental Leave'", + "'Employee Referral Programs, Financial Counseling, Health and Wellness Facilities, Casual Dress Code, Flexible Spending Accounts (FSAs)'", + "'Flexible Spending Accounts (FSAs), Relocation Assistance, Legal Assistance, Employee Recognition Programs, Financial Counseling'", + "'Health Insurance, Retirement Plans, Flexible Work Arrangements, Employee Assistance Programs (EAP), Bonuses and Incentive Programs'", + "'Health Insurance, Retirement Plans, Paid Time Off (PTO), Flexible Work Arrangements, Employee Assistance Programs (EAP)'", + "'Legal Assistance, Bonuses and Incentive Programs, Wellness Programs, Employee Discounts, Retirement Plans'", + "'Life and Disability Insurance, Stock Options or Equity Grants, Employee Recognition Programs, Health Insurance, Social and Recreational Activities'", + "'Transportation Benefits, Professional Development, Bonuses and Incentive Programs, Profit-Sharing, Employee Discounts'", + "'Tuition Reimbursement, Stock Options or Equity Grants, Parental Leave, Wellness Programs, Childcare Assistance'"] + + estimator = LinearRegression() + rfe_model = RFE(estimator) + rfe_model.fit(X_train.values, y_train.values) + ranks = rank_to_dict_rfe(rfe_model.ranking_, column_names) + sorted_dict = dict(sorted(ranks.items(), key=lambda x: x[1], reverse=True)) + print(sorted_dict) + + +def rank_to_dict_rfe(ranking, names): + n_ranks = [float(1 / i) for i in ranking] + n_ranks = map(lambda x: round(x, 2), n_ranks) + return dict(zip(names, n_ranks)) + + +if __name__ == '__main__': + # selection_number_clusters() + # recursive_feature_elimination() + k_means() diff --git a/kochkareva_elizaveta_lab_4/static/charts/ElbowMethod.png b/kochkareva_elizaveta_lab_4/static/charts/ElbowMethod.png new file mode 100644 index 0000000000000000000000000000000000000000..aaf455507e5aace02e57bc74bf52f07b994a7ca9 GIT binary patch literal 23777 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

X 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 literal 0 HcmV?d00001 diff --git a/kochkareva_elizaveta_lab_4/static/charts/KMeansClustering.png b/kochkareva_elizaveta_lab_4/static/charts/KMeansClustering.png new file mode 100644 index 0000000000000000000000000000000000000000..fe3b104ab6810a2ed0cd3cf5ab1591c66613a2e1 GIT binary patch literal 18551 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 literal 0 HcmV?d00001 -- 2.25.1