Часть 2: LDA и PLS
Мы видели в предыдущей части, что PCA помогает нам уменьшить размерность нашего набора данных. Это также легко позволяет нам разделять классы, чтобы работать как алгоритм кластеризации или как этап обучения без учителя в нашем проекте. Теперь нас интересует другой пакет, LDA.
Импортируем стандартные библиотеки для задачи:
Наш датафрейм такой же, как предыдущий:
Чтобы применить LDA, нам нужно отличать наши переменные от нашей цели. Да, правильно, это больше не обучение без учителя!
X = df.iloc[:,:3].copy() #Selecting the variables target = ddf['Sex_male'].copy() #the target
Как и в большинстве методов sklearn, мы используем fit_transform для наших данных:
LDA = LinearDiscriminantAnalysis(n_components=3) scaler = StandardScaler() scaled_data = scaler.fit_transform(X) data_projected = LDA.fit_transform(scaled_data,target)
Ключевое слово n_components в LDA дает нам проекцию на n наиболее важных направлений в наборе данных. Мы устанавливаем для этого параметра значение два, чтобы получить преобразование в двухмерном пространстве.
Чтобы понять, что делает наша модель, мы применяем метод LDA fit_transform к нашим данным и цели.
Теперь мы можем построить график наших результатов:
# Plot the transformed data markers = ['s','x'] colors = ['r','b'] fig = plt.figure(figsize=(8,6)) ax0 = fig.add_subplot(111) for l,m,c in zip(np.unique(target),markers,colors): if l==1: lab = 'Male' else: lab= 'Female' ax0.scatter(data_projected[:,0][target==l],data_projected[:,0][target==l],c=c,marker=m, label=lab) plt.title('LDA Height,Weight,Sex') plt.legend(fontsize=14)
Из приведенного выше графика мы видим, что мы удалили большую часть суперпозиции между двумя классами. Однако некоторая неопределенность все же остается.
Есть пара точек для каждого класса, который, похоже, относится к другой категории, что неудивительно, поскольку мы сгенерировали случайный набор данных с сильно перекрывающимися функциями!
А как насчет PLS?
PLS - еще один мощный метод, особенно если мы хотим использовать его как инструмент регрессии.
X = df[['Weight','Height','Age']] y = df.Sex_male regr_pls = PLSRegression(n_components=3) PLS_score=regr_pls.fit_transform(X,y) PLS_loads=regr_pls.x_loadings_
Разница между PCA и PLS заключается в том, что PCA вращает ось, чтобы максимизировать дисперсию переменной. PLS вращает их, чтобы максимизировать выходную мощность цели.
Все эти 3 метода можно использовать в этом наборе данных, чтобы лучше идентифицировать класс человека с учетом возраста, веса и роста.