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

Алгоритм дерева решений. Разделите данные на подгруппы на основе одного признака, который лучше всего разделяет данные. Прирост информации / Индекс Джини используется для количественной оценки того, насколько хорош раздел. Эта функция становится корнем дерева. Следуйте методу рекурсивно, чтобы построить дочерние узлы на основе своего раздела данных. Рекурсия останавливается, когда достигается максимальная глубина или в момент, когда дальнейшее разбиение невозможно. Хотя это легко объяснить, существует высокая вероятность переоснащения алгоритмом дерева решений.

из sklearn.tree импортировать DecisionTreeClassifer

clf=DecisionTreeClassifier(max_depth=5)

clf.fit(поезд[независимые_столбцы],поезд.зависимый_столбец)

прогнозы = clf.predict (тест [independent_cols]

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

из sklearn.tree импортировать RandomForestClassifier

#n_estimator — количество деревьев в лесу, max_features — количество признаков, которые необходимо учитывать при каждом разделении.

clf = RandomForestClassifier (max_depth = 5, n_estimators = 10, max_features = 1)

clf.fit(поезд[X], поезд.Y)

прогнозы = clf.predict (тест [X])

Машина опорных векторов. Это бинарный классификатор, который пытается разделить набор данных на два класса с помощью гиперплоскости. Предполагается, что набор данных является линейно разделимым. Иногда, если это невозможно, «ядро SVM» используется для преобразования данных в линейно разделимый набор. Некоторые популярные ядра являются полиномиальными, гауссовыми и сигмовидными.

from sklearn import svm
X = [[0, 0], [1, 1]]
y = [0, 1]
clf = svm.SVC(gamma='scale')
clf.fit(X, y)
clf.predict([[2., 2.]])

Логистическая регрессия: это небинарная версия SVM, которая подсчитывает баллы с помощью сигмовидной функции (значение которой лежит в пределах 0,1) в зависимости от расстояния от гиперплоскости. Если классы перекрываются только в точках, находящихся далеко друг от друга, получите уверенные оценки 0 или 1. Модели логистической регрессии удобно хранить и использовать.

из sklearn импортировать linear_model

clf = linear_model.LogisticRegression()

clf.fit(train_data, train_labels)

прогнозы = clf.predict(test_data)

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

из sklearn импортировать linear_model

clf = linear_model.Lasso (альфа = 0,1)

clf.fit(train_data, train_labels)

прогнозы = clf.predict(test_data)

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

из sklearn.naive_bayes импортировать GaussianNB

clf = GaussianNB()

clf.fit(train_data, train_labels)

прогнозы = clf.predict(test_data)

Нейронные сети. Сеть состоит из входных, скрытых и выходных слоев. Каждый узел применяет взвешенную функцию активации (например, сигмовидную функцию, relu) для преобразования входных данных для получения выходных данных. При этом используется итеративный алгоритм, называемый обратным распространением, где вес, применяемый в скрытых слоях, настраивается для достижения выходных данных с наименьшей ошибкой. Эта область машинного обучения также называется глубоким обучением.

Keras — это мощная и простая в использовании библиотека Python для разработки и оценки моделей глубокого обучения в Theano или TensorFlow. В приведенном ниже примере первый слой имеет 12 нейронов и ожидает 8 входных переменных. Второй скрытый слой имеет 8 нейронов и, наконец, выходной слой имеет 1 нейрон для предсказания класса.

из keras.models импорт последовательный

из keras.layers импорт плотный

модель = Последовательный()

model.add(Dense(12, input_dim=8, активация='relu'))

model.add(Dense(8, активация='relu'))

model.add(Плотный(1, активация='сигмоид'))

model.compile (потеря = 'binary_crossentropy', оптимизатор = 'адам', метрики = ['точность'])

model.fit(X, Y, эпохи=150, batch_size=10)

баллы = model.evaluate(X, Y)

Оценка классификатора:

Если мы когда-нибудь классифицируем спам, мы получим это правильно и найдем спам (истинно положительный), можно классифицировать не-спам как спам (ложноположительный). Последнее опасно. Идеальным является классификатор с высоким числом истинных срабатываний и отсутствием ложных срабатываний. Эту производительность можно измерить с помощью AUC (площади под ROC-кривой), чем выше, тем лучше. Порог отсечения можно использовать для выбора единственной лучшей классификации для оценки классификаторов, дающих непрерывные оценки.

из sklearn.metrics импортировать roc_curve, auc

falsepositiverate, truepositiverate, пороги = roc_curve(Y_test, прогнозы)

auc_score = auc (ложноположительный показатель, истинный положительный показатель)