Часть 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 метода можно использовать в этом наборе данных, чтобы лучше идентифицировать класс человека с учетом возраста, веса и роста.