Sklearn

Поиск аномалий в данных

Средство визуализации (ящик с усами)
sns.boxplot(df['Age'])

Первая Процедура поиска выбросов

m - среднее значение признака .mean()
s - отклонение признака .std()

Построить интервал [m-3s, m+3s]. Все объекты, значение признака которых не попадет в этот интервал, нужно объявить выбросами и удалить из таблицы.

m=df['Weight'].mean()
s=df['Weight'].std()
m-3*s, m+3*s

df=df[(df['Weight']<m+3*s) & (df['Weight']>m-3*s)]
sns.boxplot(df['Weight'])


Вторая процедура поиска выбросов

a - 25-ая процентиль признака
b - 75-ая процентиль признака

Построим интервал:
[a-1.5(b-a), b+1.5(b-a)]

a=df['Age'].quantile(0.25)
b=df['Age'].quantile(0.75)

df=df[(df['Age']<b+1.5*(b-a)) & (df['Age']>a-1.5*(b-a))]
sns.boxplot(df['Age'])

Работа с категориальными признаками

OneHotEncoder()

from sklearn.preprocessing import OneHotEncoder
import numpy as np

# создаем массив категориальных признаков
colors = np.array(['красный', 'синий', 'зеленый', 'зеленый', 'красный']).reshape(-1, 1)

# создаем объект OneHotEncoder и обучаем его на массиве цветов
encoder = OneHotEncoder().fit(colors)

# преобразуем категориальные значения в числовые
encoded_colors = encoder.transform(colors).toarray()

# выводим закодированные значения
print(encoded_colors)

Результат выполнения кода:
array([[1., 0., 0.],
       [0., 1., 0.],
       [0., 0., 1.],
       [0., 0., 1.],
       [1., 0., 0.]])

LabelEncoder()
from sklearn import preprocessing
coder = preprocessing.LabelEncoder()
coder.fit(df['Sex'])
coder.transform(df['Sex'])

for name in ['Sex','Coin','Animal','Army','Glasses','Your rating in university',
             'Fastfood','Hostel','Chocolate','Brother-sister','Plane seat','Problems in last semester',
             'Rock paper scissors','Strange people','Your insitute']:
  coder.fit(df[name])
  df[name]=coder.transform(df[name])

StandardScaler()
from sklearn.preprocessing import StandardScaler
import numpy as np

# создаем массив признаков
data = np.array([[2, 4], [4, 6], [6, 8]])

# создаем объект StandardScaler и обучаем его на массиве признаков
scaler = StandardScaler().fit(data)

# стандартизируем признаки
scaled_data = scaler.transform(data)

# выводим стандартизированные признаки
print(scaled_data)


mean_absolute_error()
from sklearn.metrics import mean_absolute_error
import numpy as np

# создаем массив фактических значений и массив предсказанных значений
actual_values = np.array([2, 4, 6, 8])
predicted_values = np.array([3, 5, 7, 9])

# вычисляем среднюю абсолютную ошибку
mae = mean_absolute_error(actual_values, predicted_values)

# выводим среднюю абсолютную ошибку
print(mae)

train_test_split()
from sklearn.model_selection import train_test_split
import pandas as pd

# загрузка данных
data = pd.read_csv('data.csv')

# разделение на признаки и целевую переменную
X = data.drop('target', axis=1)
y = data['target']

# разделение на тренировочный и тестовый наборы
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)

# вывод размерности полученных наборов данных
print('Размерность X_train:', X_train.shape)
print('Размерность X_test:', X_test.shape)
print('Размерность y_train:', y_train.shape)
print('Размерность y_test:', y_test.shape)

Построить графическое отображение дерева решений
import graphviz 
dot_data = tree.export_graphviz(model, out_file=None, 
                      feature_names=['Growth', 'Weight', 'Hair length', 'Children number'],  
                      class_names=['f', 'm'],  
                     filled=True, rounded=True,  
                      special_characters=True)  
graph = graphviz.Source(dot_data)  
graph 

Проверить точность предсказания:
pd.crosstab(df_test_cut['Predicted'],df_test_cut['Sex'])

Узнать важность каждого параметра
from sklearn.ensemble import ExtraTreesClassifier
selector=ExtraTreesClassifier()
result=selector.fit(df[df.columns], df['Sex'])
result.feature_importances_  
features_table= pd.DataFrame(result.feature_importances_, index =df.columns,
                                              columns =['importance'])
print(features_table)
features_table.sort_values(by='importance', ascending=False)

accuracy_score()
from sklearn.metrics import accuracy_score
from sklearn.datasets import make_classification
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LogisticRegression

# создание синтетических данных
X, y = make_classification(n_samples=1000, n_features=10, n_informative=5, random_state=42)

# разделение на тренировочный и тестовый наборы
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)

# создание и обучение модели логистической регрессии
model = LogisticRegression()
model.fit(X_train, y_train)

# получение предсказаний для тестового набора данных
y_pred = model.predict(X_test)

# вычисление точности классификации
accuracy = accuracy_score(y_test, y_pred)

# вывод точности классификации
print('Точность классификации:', accuracy)

GridSearchCV()
from sklearn.model_selection import GridSearchCV
from sklearn.ensemble import RandomForestClassifier
from sklearn.datasets import make_classification

# создание синтетических данных
X, y = make_classification(n_samples=1000, n_features=10, n_informative=5, random_state=42)

# задание сетки параметров
param_grid = {
    'n_estimators': [50, 100, 200],
    'max_depth': [None, 5, 10],
    'max_features': ['auto', 'sqrt', 'log2']
}

# создание модели случайного леса
rf = RandomForestClassifier()

# выполнение поиска наилучших параметров
grid_search = GridSearchCV(estimator=rf, param_grid=param_grid, cv=5)
grid_search.fit(X, y)

# вывод наилучших параметров и оценки точности модели
print('Наилучшие параметры:', grid_search.best_params_)
print('Оценка точности модели:', grid_search.best_score_)

precision_score()
precision_score - это функция из библиотеки scikit-learn, которая используется для вычисления точности (precision) метрики классификации. Она определяется как доля правильно предсказанных объектов класса относительно всех объектов, которые были предсказаны как этот класс.
from sklearn.metrics import precision_score
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LogisticRegression
import pandas as pd

# Загружаем данные
data = pd.read_csv('spam.csv')

# Разделяем данные на обучающую и тестовую выборки
X_train, X_test, y_train, y_test = train_test_split(data['text'], data['label'], random_state=0)

# Обучаем модель логистической регрессии
model = LogisticRegression()
model.fit(X_train, y_train)

# Получаем предсказания на тестовой выборке
y_pred = model.predict(X_test)

# Вычисляем точность модели на тестовых данных
precision = precision_score(y_test, y_pred, pos_label='spam')
print('Precision:', precision)

recall_score()
recall_score - это функция из библиотеки scikit-learn, которая используется для вычисления полноты (recall) метрики классификации. Она определяется как доля правильно предсказанных объектов класса относительно всех объектов этого класса в тестовой выборке.
from sklearn.metrics import recall_score
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LogisticRegression
import pandas as pd

# Загружаем данные
data = pd.read_csv('medical_data.csv')

# Разделяем данные на обучающую и тестовую выборки
X_train, X_test, y_train, y_test = train_test_split(data.drop('label', axis=1), data['label'], random_state=0)

# Обучаем модель логистической регрессии
model = LogisticRegression()
model.fit(X_train, y_train)

# Получаем предсказания на тестовой выборке
y_pred = model.predict(X_test)

# Вычисляем полноту модели на тестовых данных
recall = recall_score(y_test, y_pred)
print('Recall:', recall)

precision_recall_fscore_support - это функция из библиотеки scikit-learn, которая используется для вычисления точности, полноты и F-меры (F1 score) метрик классификации для каждого класса. Она также возвращает количество объектов каждого класса в тестовой выборке.

Для примера, допустим, у нас есть задача классификации изображений на 3 класса: кошки, собаки и птицы. Мы хотим оценить точность, полноту и F-меру для каждого класса на тестовой выборке.
from sklearn.metrics import precision_recall_fscore_support
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LogisticRegression
import pandas as pd

# Загружаем данные
data = pd.read_csv('animals.csv')

# Разделяем данные на обучающую и тестовую выборки
X_train, X_test, y_train, y_test = train_test_split(data.drop('label', axis=1), data['label'], random_state=0)

# Обучаем модель логистической регрессии
model = LogisticRegression()
model.fit(X_train, y_train)

# Получаем предсказания на тестовой выборке
y_pred = model.predict(X_test)

# Вычисляем точность, полноту и F-меру для каждого класса
precision, recall, fscore, support = precision_recall_fscore_support(y_test, y_pred)

# Выводим результаты
print('Class 0 (cat): Precision={}, Recall={}, Fscore={}, Support={}'.format(precision[0], recall[0], fscore[0], support[0]))
print('Class 1 (dog): Precision={}, Recall={}, Fscore={}, Support={}'.format(precision[1], recall[1], fscore[1], support[1]))
print('Class 2 (bird): Precision={}, Recall={}, Fscore={}, Support={}'.format(precision[2], recall[2], fscore[2], support[2]))

KMeans

KMeans - это алгоритм кластеризации, который используется для группировки объектов на основе их сходства. Он может быть полезен в следующих случаях:

Сегментация рынка: KMeans может помочь разбить клиентов на группы, основанные на сходстве их поведения или потребностей. Это позволяет компаниям создавать более эффективные маркетинговые кампании, нацеленные на определенные сегменты рынка.

Анализ данных: KMeans может использоваться для анализа данных и выявления скрытых закономерностей. Например, он может помочь выделить группы пользователей на основе их интересов или поведения в социальных сетях.

Обработка изображений: KMeans может использоваться для сегментации изображений на различные области, основанные на цвете или яркости.

Биологические исследования: KMeans может быть применен для классификации генов и выявления групп, которые могут быть связаны с определенными болезнями.

Финансовый анализ: KMeans может помочь выделить группы акций на основе их доходности и риска, что может быть полезно для инвесторов.

Рекомендательные системы: KMeans может использоваться для сегментации пользователей на основе их предпочтений и интересов, что может помочь в создании более персонализированных рекомендаций.

from sklearn.cluster import KMeans
kmeans = KMeans(n_clusters=3, random_state=666)
kmeans.fit(df_cut[['Weight','Growth']])
df_cut['Label']=kmeans.labels_

Линейная регрессия

Линейная регрессия - это метод статистического моделирования, который используется для предсказания числовых значений одной переменной на основе значения другой или нескольких других переменных.

Линейная регрессия часто используется в следующих случаях:

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

Прогнозирование: Линейная регрессия используется для прогнозирования значений целевой переменной на основе значений предикторов. Например, можно использовать линейную регрессию для прогнозирования продаж в зависимости от рекламных расходов.

Оценка эффекта: Линейная регрессия может использоваться для оценки эффекта, который имеет одна переменная на другую переменную. Например, можно использовать линейную регрессию для оценки того, как изменение температуры влияет на расходы на отопление.

Выявление взаимосвязей: Линейная регрессия может использоваться для выявления взаимосвязей между переменными и определения того, какие переменные наиболее сильно связаны друг с другом. Например, можно использовать линейную регрессию для определения того, как изменения в количестве осадков влияют на урожайность определенного вида растений.

Моделирование: Линейная регрессия может использоваться для моделирования данных и предсказания будущих значений. Например, можно использовать линейную регрессию для моделирования тенденций рынка на основе исторических данных.

from sklearn.linear_model import LinearRegression
lienearRegression = LinearRegression()
results=lienearRegression.fit(df_cut['Shoe size'].values.reshape(-1, 1), y=df_cut['Growth'].values)
df_cut['Predicted Growth']=results.predict(df_cut['Shoe size'].values.reshape(-1, 1))

Метод k ближайших соседей (kNN)

Метод k ближайших соседей (kNN) используется в задачах машинного обучения, когда требуется классифицировать новый объект на основе его близости к уже известным объектам. Он относится к методам обучения без учителя, то есть не требует заранее размеченных данных для обучения модели.

Конкретные случаи, когда используют метод kNN, могут включать:

Классификация объектов на основе их близости к другим объектам. Например, можно использовать kNN для классификации изображений, звуковых сигналов, текстовых документов и т.д.

Регрессионный анализ, когда требуется оценить числовое значение для нового объекта на основе близости к другим объектам. Например, можно использовать kNN для прогнозирования цен на недвижимость или оценки рисков.

Обнаружение аномалий в данных, когда нужно определить, является ли новый объект выбросом, отклоняющимся от остальных объектов.

Сжатие данных, когда требуется представить многомерные данные в виде меньшей размерности. Например, можно использовать kNN для нахождения наиболее близких точек в пространстве объектов и замены их одним средним значением.

from sklearn.neighbors import KNeighborsClassifier
model = KNeighborsClassifier(n_neighbors=3)
model.fit(arr, y=df_cut['Sex'].values)
arr_test=scaler.transform(df_test_cut[['Weight', 'Growth']].values.reshape(-1, 2))
df_test_cut['Predicted']=model.predict(arr_test)

Линейный классификатор

Линейный классификатор - это алгоритм машинного обучения, который используется для разделения данных на два или более класса на основе линейных функций.

Линейные классификаторы широко используются в задачах классификации, когда данные могут быть разделены гиперплоскостью. Например, они могут быть использованы для классификации спам-писем, распознавания образов или предсказания покупок клиентов.
from sklearn.linear_model import SGDClassifier
Гипотеза: мужчины и женщины образуют два облака. Эти облака можно попытаться разделить прямой линией.

from sklearn.preprocessing import StandardScaler
scaler = StandardScaler()
scaler.fit(df_cut[['Weight', 'Growth']].values.reshape(-1, 2))
arr=scaler.transform(df_cut[['Weight', 'Growth']].values.reshape(-1, 2))
model=SGDClassifier()
model.fit(arr, y=df_cut['Sex'].values)
arr_test=scaler.transform(df_test_cut[['Weight', 'Growth']].values.reshape(-1, 2))
df_test_cut['Predicted']=model.predict(arr_test)

Дерево решений 

Дерево решений - это метод машинного обучения, который используется для решения задач классификации и регрессии. Он может быть применен во многих областях, включая бизнес, финансы, медицину, инженерию, науку о данных и многие другие.

Вот несколько примеров, когда можно использовать деревья решений:

Прогнозирование вероятности наступления определенного события, например, прогнозирование вероятности оттока клиентов, вероятности попадания заемщика в дефолт, вероятности возникновения заболевания у пациента и т.д.

Классификация объектов на основе их характеристик, например, классификация писем на спам и не спам, классификация цветков ириса по их признакам, классификация продуктов на полки в магазине и т.д.

Принятие решений на основе определенных условий, например, определение того, нужно ли кому-то давать кредит, определение оптимального времени для проведения рекламной кампании и т.д.

Анализ данных и выявление взаимосвязей между различными признаками, например, выявление важных признаков в данных о продажах, чтобы определить, какие факторы наиболее влияют на продажи, или выявление связей между факторами риска и заболеваемостью определенным заболеванием.

Деревья решений могут использоваться в любой ситуации, где требуется принятие решений на основе определенных условий и данных.

from sklearn import tree
model=tree.DecisionTreeClassifier(max_depth=2)
model.fit(df_cut[['Growth','Weight','Hair length','Children number']].values.reshape(-1,4), y=df_cut['Sex'].values)
df_test_cut['Predicted']=model.predict(df_test_cut[['Growth','Weight','Hair length','Children number']].values.reshape(-1,4))

Random Forest (случайный лес)

Random Forest (случайный лес) - это алгоритм машинного обучения, который используется для классификации, регрессии и других задач машинного обучения. Он основан на идее комбинации нескольких деревьев решений в одну модель. Каждое дерево строится на основе случайной выборки данных и случайного набора признаков, что позволяет уменьшить переобучение и повысить обобщающую способность модели.

Random Forest может использоваться во многих случаях, включая:

Классификация и распознавание объектов: Random Forest может использоваться для определения, принадлежит ли объект к определенному классу или категории.

Регрессионный анализ: Random Forest может использоваться для предсказания численных значений, например, для прогнозирования цен на недвижимость.

Отбор признаков: Random Forest может использоваться для оценки важности признаков в задачах машинного обучения и выбора наиболее значимых признаков для построения модели.

Анализ временных рядов: Random Forest может использоваться для предсказания будущих значений временных рядов, например, для прогнозирования продаж в будущем.

Обработка естественного языка: Random Forest может использоваться для классификации текстовых данных, например, для определения тональности текста.

В целом, Random Forest может быть использован в любой задаче, в которой требуется построение модели машинного обучения.

from sklearn.ensemble import RandomForestClassifier
model = RandomForestClassifier(max_depth=2, random_state=0)
model.fit(df_cut[['Growth','Weight','Hair length','Children number']].values.reshape(-1,4), y=df_cut['Sex'].values)
df_test_cut['Predicted']=model.predict(df_test_cut[['Growth','Weight','Hair length','Children number']].values.reshape(-1,4))

Градиентный бустинг

Градиентный бустинг (Gradient Boosting) - это метод машинного обучения, который позволяет строить ансамбли моделей путем последовательного добавления новых моделей, которые исправляют ошибки предыдущих моделей.

Градиентный бустинг часто используется в случаях, когда нужно получить наилучшее качество предсказания на задачах регрессии или классификации. Он хорошо работает с различными типами данных, в том числе с категориальными, числовыми и текстовыми признаками.

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

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

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

from sklearn.ensemble import GradientBoostingClassifier
model=GradientBoostingClassifier(random_state=0)
model.fit(df_cut[['Growth','Weight','Hair length','Children number']].values.reshape(-1,4), y=df_cut['Sex'].values)
df_test_cut['Predicted']=model.predict(df_test_cut[['Growth','Weight','Hair length','Children number']].values.reshape(-1,4))

Признаки "плохого кода"

Кратко рассмотрим 12 признаков, когда код можно улучшить: 1. Duplicated Code  — иногда повторяющийся код не всегда несет в себе пользу. Выде...