У меня есть датафрейм, который выглядит как ниже. u1 - идентификатор пользователя, а p1 - идентификатор элемента. Итак, если пользователю нравится itemID p1, то он равен 1. В противном случае он равен 0. Мой первый шаг - очистка данных для удаления выбросов.
Для удаления выбросов мой код ниже рассчитывает среднее значение для каждого столбца и установил порог 0,1 . Поэтому, если среднее значение меньше 0,1, удалите этот столбец или строку. На самом деле я имею в виду, что если пользователю понравились только 1 или 2 элемента из многих, то мы можем просто удалить таких пользователей. Аналогично для столбцов.
df = df.drop(meanColums[meanColums< 0.1].index, axis=1)
rows = df.select_dtypes([np.number]).index
mean = df.mean(axis = 1)
indexNames = rows[mean<0.1]
df = df.drop(indexNames)
Но это пороговое значение может варьироваться в зависимости от количества пользователей и элементов. И это не очень хороший способ.
Я только что попробовал PCA, но достаточно ли это для двоичных данных?
from sklearn.decomposition import PCA
pcaup= PCA(n_components=2)
principalComponents = pcaup.fit_transform(pivot_table)
principalComponents
principal_Df = pd.DataFrame(data = principalComponents, columns = ['principal component 1', 'principal component 2'])
principal_Df
print('Explained variation per principal component: {}'.format(pca_up.explained_variance_ratio_))
output : [0.33565108 0.20232585]
Может кто-нибудь предложить лучшую технику очистки для такого рода проблемы.?