Уменьшение размерности матрицы документов-терминов - PullRequest
0 голосов
/ 24 февраля 2020

Я работаю с кластеризацией текстовых документов, используя подход иерархической кластеризации, в Python.

У меня есть корпус из 10 тыс. Документов, и я построил матрицу терминов документов по словарю на основе коллекции терминов, классифицированных как «ключевое слово» для всего корпуса. Матрица имеет форму: [10000 x 2000] и очень разреженная. (давайте назовем это DTM )

id    0    1    2    4    ...    1998    1999
 0    0    0    0    1    ...       0       0
 1    0    1    0    0    ...       0       1
 2    1    0    0    0    ...       1       0
 ..    ..      ...        ...      ..      ..
9999  0    0    0    0    ...       0       0

Я думаю, что применение некоторых методов уменьшения размерности может привести к повышению точности кластеризации. Я попытался использовать некоторый подход MDS, подобный этому

def select_n_components(var_ratio, goal_var: float) -> int:
# Set initial variance explained so far
total_variance = 0.0

# Set initial number of features
n_components = 0

# For the explained variance of each feature:
for explained_variance in var_ratio:

    # Add the explained variance to the total
    total_variance += explained_variance

    # Add one to the number of components
    n_components += 1

    # If we reach our goal level of explained variance
    if total_variance >= goal_var:
        # End the loop
        break

# Return the number of components
return n_components


def do_MDS(dtm):
    # scale dtm in range [0:1] to better variance maximization
    scl = MinMaxScaler(feature_range=[0, 1])
    data_rescaled = scl.fit_transform(dtm)

    tsvd = TruncatedSVD(n_components=data_rescaled.shape[1] - 1)
    X_tsvd = tsvd.fit(data_rescaled)

    # List of explained variances
    tsvd_var_ratios = tsvd.explained_variance_ratio_

    optimal_components = select_n_components(tsvd_var_ratios, 0.95)

    from sklearn.manifold import MDS
    mds = MDS(n_components=optimal_components, dissimilarity="euclidean", random_state=1)
    pos = mds.fit_transform(dtm.values)

    U_df = pd.DataFrame(pos)
    U_df_transposed = U_df.T  # for consistency with pipeline workflow, export tdm matrix
    return U_df_transposed

Цель - автоматически определить оптимальное количество компонентов и применить уменьшение размерности. Но результаты не показали ощутимого улучшения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...