Цитата:
Если вторая главная ось - шум, то зачем его масштабировать?
Понял, шум масштабировать смысла нет.
Разобрался сегодня как сохранять преобразование обучающего набора и применять его к тестовому. Так же отказался от РСА, что совсем не повлияло на точность модели. Сейчас она ~50% (если я всё сделал правильно).
Листинг:
Код:
import pandas
import os as os
import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline
import pylab
from mpl_toolkits.mplot3d import Axes3D
import matplotlib.font_manager
from scipy import stats
from sklearn.preprocessing import scale
from sklearn import preprocessing
from sklearn import svm
from sklearn.decomposition import PCA
import mglearn
from IPython.display import display
plt.rc('font', family='Verdana')
train_data = pandas.read_csv('D:\\0.Machine_Learning\\2.Datasets\\pcz_nt.csv', delimiter=';', header=0, encoding='utf-8')
test_data = pandas.read_csv('D:\\0.Machine_Learning\\2.Datasets\\pcz_nt_t.csv', delimiter=';', header=0, encoding='utf-8')
train_params1 = np.array(train_data.values[:,:5], dtype="float64")
test_params1 = np.array(test_data.values[:,:5], dtype="float64")
scaler = preprocessing.StandardScaler().fit(train_params1)
train_params = scaler.transform(train_params1)
test_params = scaler.transform(test_params1)
X = train_params
data_num = train_params.shape[0]
OUTLIER_FRACTION = 0.01
clf = svm.OneClassSVM(kernel="rbf")
clf.fit(X)
dist_to_border = clf.decision_function(X).ravel()
threshold = stats.scoreatpercentile(dist_to_border,
100 * OUTLIER_FRACTION)
is_inlier = dist_to_border > threshold
prediction = clf.predict(np.atleast_2d(train_params))
result = prediction
Цитата:
Посольку в ходе обсуждения стали понятны некоторые новые детали, почему бы не попробовать нечто совсем простое как начальное приближение: приводим данные к главным осям, все компоненты оставляем. Аппроксимириуем облако точек нормальным распределением (фактически тот же One Class SVM вместе с RBF, но с единственной базовой одной точкой - центром кластера). Проверка на outlier тривиальна - приводим новую точку к главным осям и проверяем likelihood, того что точка принадлежит нашему супер простому распределению. Что то мне подсказывает, если у вас "игрушечные" данные, то этого уже хватит для хорошего классификатора.
Понял, попробую с этим поработать.
Цитата:
И вообще, начинать надо с визуализации всего, что только можно визуализировать. Тогда 90% вопросов отпадет уже на это этапе.
А какие лучше использовать новичку инструменты? Я сейчас пытаюсь освоить glueviz, не знаю оптимальный ли это вариант для начального визуального анализа..