Это будет более короткий проект, так как я немного занят работой.

Что ж, набор данных, который у нас есть, взят из репозитория машинного обучения UCI. Это набор данных Divorce Predictor, подаренный 24 июля 2019 г. Вот ссылка

Данные содержат 170 ответов на 54 вопроса от 84 (49%) разведенных и 86 (51%) супружеских пар. В исследуемой группе было 84 мужчины (49%) и 86 женщин (51%). Возраст участников варьировался от 20 до 63 лет.

Вопросы должны были быть оценены от 0 до 4, и приведены ниже.

Мы стремимся выяснить, какие 5 из этих вопросов важнее, и, следовательно, найти то, что на самом деле разрушает отношения.

Давайте погрузимся….

Таким образом, несмотря на то, что набор данных содержит классы (разведенные/здоровые), я все же хочу увидеть, существует ли на самом деле неотъемлемое различие между ответами. Выполним кластеризацию.

import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
dataset = pd.read_csv(‘divorce.csv’)
dataset[‘Class’].describe()
X = dataset.iloc[:,0:54].values
y = dataset.iloc[:,-1].values

Итак, 2 кластера можно довольно легко различить. Я бы хотел, чтобы набор данных был больше, мы могли бы узнать типы браков……

from sklearn.cluster import KMeans
wcss = []
for i in range(1, 11):
 kmeans = KMeans(n_clusters = i, init = ‘k-means++’, random_state = 42)
 kmeans.fit(X)
 wcss.append(kmeans.inertia_)
plt.plot(range(1, 11), wcss)
plt.title(‘The Elbow Method’)
plt.xlabel(‘Number of clusters’)
plt.ylabel(‘WCSS’)
plt.show()

Давайте проверим, насколько хорошо прошла кластеризация, сравнив ее с исходной информацией.

Это почти полностью точно с точностью 97,6%.

kmeans = KMeans(n_clusters = 2, init = ‘k-means++’, random_state = 42)
y_kmeans = kmeans.fit_predict(X)
from sklearn.metrics import confusion_matrix
cm= confusion_matrix(y,y_kmeans)

Итак, я планирую использовать XGBoost для классификации. После этого я хочу выяснить факторы, которые больше всего повлияли на процесс принятия решения. А поскольку XGBoost — это метод обучения ансамбля, мы можем выяснить важные факторы во всех созданных деревьях.

Это создает классификатор XGBoost, который создаст 100 деревьев с максимальной глубиной 8. colsample_bytree и subsample обозначают, какую долю столбцов и строк следует взять для случайного создания каждого дерева.

from sklearn.model_selection import train_test_split
import xgboost as xgb
xtrain, xtest,ytrain,ytest = train_test_split(X,y)
model1= xgb.XGBClassifier(learning_rate=0.1,
 n_estimators=100,
 max_depth=8,
 colsample_bytree=0.8,
 subsample=0.7,
 booster=’gbtree’,
 objective=’reg:squarederror’,
 )

Идеально ! Теперь давайте посмотрим на функции, которые имеют наибольшее значение для всех деревьев.

model1.fit(xtrain,ytrain, eval_set=[(xtest,ytest)])
results=model1.predict(X)
cm= confusion_matrix(y,results)

Это несколько аспектов оценки деревьев решений в XGBoost.

important_featues = pd.DataFrame(model1.get_booster().get_score().items(), columns=[‘feature’,’importance’]).sort_values(‘importance’, ascending=False)
fig, ax = plt.subplots(figsize=(5,5))
xgb.plot_importance(model1,importance_type=”weight”,max_num_features=10,ax=ax)

fig, ax = plt.subplots(figsize=(5,5))
xgb.plot_importance(model1,importance_type=”gain”,max_num_features=10,ax=ax)

fig, ax = plt.subplots(figsize=(5,5))
xgb.plot_importance(model1,importance_type=”cover”,max_num_features=10,ax=ax)

Вес – это количество раз, когда объект используется для разделения данных по всем деревьям. Покрытие измеряет относительное количество наблюдений, относящихся к объекту, и Прирост — это улучшение точности, привносимое функцией в ветки, на которых она находится.

Хотя вес дает нам общую важность, поскольку эти особенности чаще повторяются в деревьях, более интересно наблюдать за комбинацией усиления и покрытия. Здесь f18 и f8 значительно повышают точность, когда они присутствуют в дереве, и они также имеют большой охват, занимая 3-е и 4-е места.

Среди весов мы видим, что первые 3 функции имеют несколько большее значение, чем остальные.

Я думаю, что мы можем объединить все, чтобы получить 5 характеристик, наиболее влияющих на наш классификатор.

f18, f8, f0, f2 и f1

Соответствующие вопросы -

Мы разделяем одинаковые взгляды на то, чтобы быть счастливыми в нашей жизни с моим супругом

Мы похожи на двух незнакомцев, живущих в одной среде дома, а не в семье.

Если один из нас извиняется, когда наша дискуссия ухудшается, дискуссия заканчивается.

Когда нам это нужно, мы можем продолжить наши обсуждения с моим супругом с самого начала и исправить это.

Я знаю, что мы можем игнорировать наши различия, даже если иногда становится тяжело

Эти вопросы можно интерпретировать как причины, по которым чаще всего случаются расставания.

Конечно, мы не можем знать точные пороги этих вопросов, потому что они различаются от дерева к дереву. Я только что наблюдал за несколькими деревьями, чтобы получить представление о вышеуказанных вопросах.

Визуализация некоторых деревьев решений

  • 1. Если один из нас приносит извинения, когда наша дискуссия ухудшается, дискуссия заканчивается.
    2. Я знаю, что мы можем игнорировать наши разногласия, даже если иногда возникают трудности.
    3. Когда нам это нужно, мы можем принять наши обсуждения с моим супругом с самого начала и исправить его.
    4. Когда я обсуждаю с моим супругом, связаться с ним в конечном итоге получится.
    5. Время, которое я провел с моей женой, является особенным для нас.< br /> 6. У нас нет времени дома в качестве партнеров.
    7. Мы похожи на двух незнакомцев, живущих в одной и той же обстановке дома, а не в семье.
    8. Я наслаждаюсь нашими каникулами с моим жена.
    9. Мне нравится путешествовать с женой.
    10. Большинство наших целей совпадают с моим супругом.
    11. Я думаю, что однажды в будущем, когда я оглядываюсь назад , я вижу, что мой супруг и я были в гармонии друг с другом.
    12. Мой супруг и я имеем схожие ценности с точки зрения личной свободы.
    13. Мой супруг и я одинаково развлекаемся .
    14. Большинство наших целей для людей (дети, f друзья и т. д.) совпадают.
    15. Наши с супругом мечты похожи и гармоничны.
    16. Мы с супругом согласны в том, какой должна быть любовь.
    17. Мы разделяем одинаковые взгляды на то, как быть счастливыми в жизни с моим супругом
    18. У нас с супругом схожие представления о том, каким должен быть брак
    19. У нас с супругом схожие представления о том, какими должны быть роли в браке
    20. У нас с супругом одинаковые ценности доверия.
    21. Я точно знаю, что нравится моей жене.
    22. Я знаю, как мой супруг хочет, чтобы о нем заботились, когда она/он больна.
    23. Я знаю любимую еду моего супруга.
    24. Я могу сказать вам, с каким стрессом сталкивается мой супруг/супруга в своей/его жизни.
    25. У меня есть знание внутреннего мира моего супруга.
    26. Я знаю основные тревоги моего супруга.
    27. Я знаю, каковы текущие источники стресса моего супруга.
    28. Я знаю надежды и желания моего супруга. .
    29. Я очень хорошо знаю своего супруга.
    30. Я знаю друзей моего супруга и их соц. личные отношения.
    31. Я чувствую агрессию, когда спорю с супругом/ой.
    32. При обсуждении с супругом(ой) я обычно использую такие выражения, как «ты всегда» или «ты никогда».
    33. Я могу использовать негативные высказывания о личности моего супруга во время наших обсуждений.
    34. Я могу использовать оскорбительные выражения во время наших обсуждений.
    35. Я могу оскорблять своего супруга во время наших обсуждений.
    36. Я могу быть унизительным, когда мы обсуждаем.
    37. Мой разговор с моим супругом не спокойный.
    38. Я ненавижу то, как мой супруг начинает тему.
    39. Наши разговоры часто происходят внезапно.
    40. Мы только начинаем дискуссию, прежде чем я понимаю, что происходит.
    41. Когда я говорю о чем-то с супругом, мое спокойствие внезапно нарушается.
    42. Когда я спорю с супругом, я только выхожу и не говорю ни слова.
    43. В основном я молчу, чтобы немного успокоить окружающую среду.
    44. Иногда я думаю, что мне полезно ненадолго уйти из дома.
    45. Я лучше промолчу, чем буду обсуждать с супругом(ой).
    46. Даже если я прав в обсуждении, я молчу, чтобы обидеть супруга.
    47. Когда я обсуждаю с супругом, я молчу, потому что боюсь, что не смогу контролировать мой гнев.
    48. Я чувствую себя хорошо в наших дискуссиях.
    49. Я не имею ничего общего с тем, в чем меня обвиняют.
    50. На самом деле я не тот, кто виноват в том, в чем меня обвиняют.
    51. Я не тот, кто ошибается в домашних проблемах.
    52. Я бы без колебаний o рассказать супруге о ее/его неадекватности.
    53. Когда я обсуждаю, я напоминаю супруге о ее/его неадекватности.
    54. Я не боюсь сказать супруге о ее/его некомпетентности .
  • f8 < 1.5
  • f0 < 2
  • f2 < 3
  • f1 < 2.5

Это было дерево решений 0

%matplotlib inline
from matplotlib.pylab import rcParams
rcParams[‘figure.figsize’] = 50,50
xgb.plot_tree(model1, num_trees=0)

Следующий в 45

Следующий на 99, который является последним

И это подход науки о данных к отношениям …….

Почему случаются расставания? : подход Data Science