Membuat Sparse Matrix

Code pada tutorial ini adalah bagian dari code pada modul Persiapan Proyek Naive Bayes Classfier.

Pada modul ini kita akan membuat dataframe sparse matrix untuk training dan testing data.

Bentuk sparse matrix adalah dataframe yang menunjukan frekuensi sebuah kata pada email dengan frekuensi lebih besar dari nol. (lihat gambar dibawah untuk perbandingan full vs sparse matrix).

Perbedaan Full Matrix dan Sparse Matrix

Kita akan membuat sparse matrix untuk training data dengan kolom

  • DOC_ID : diambil dari x_train.index[0]
  • WORD_ID : diambil dari word_index.get_loc[‘text yang dicari ‘]
  • LABEL : diambil dari y_train.at[DOC_ID]
  • OCCURENCE : masukan angka 1

Lalu kita juga akan membuat sparse matrix untuk testing data. Kolom sama dengan diatas, namun menggunakan testing dataset.

  • DOC_ID : diambil dari x_test.index[0]
  • WORD_ID : diambil dari word_index.get_loc[‘text yang dicari ‘]
  • LABEL : diambil dari y_test.at[DOC_ID]
  • OCCURENCE : masukan angka 1

Berikut contoh mengambail x_train dataset untuk membuat sparse metrix training dataset. Kita akan membaca semua kolom dari x_train dataset, membaca data doc_id, lalu label dari y_train dataset, lalu cari word_id dari word_index dataset, masukan ke sparse matrix training dataset.

Sparse Matrix Training Data

word_index = pd.Index(vocab.VOCAB_WORD)

def make_sparse_matrix(df, indexed_words, labels):
    """
    Returns sparse matrix as dataframe.
    
    df: A dataframe with words in the columns with a document id as an index (X_train or X_test)
    indexed_words: index of words ordered by word id
    labels: category as a series (y_train or y_test)
    """
    
    nr_rows = df.shape[0]
    nr_cols = df.shape[1]
    word_set = set(indexed_words)
    dict_list = []
    
    for i in range(nr_rows):
        for j in range(nr_cols):
            
            word = df.iat[i, j]
            if word in word_set:
                doc_id = df.index[i]
                word_id = indexed_words.get_loc(word)
                category = labels.at[doc_id]
                
                item = {'LABEL': category, 'DOC_ID': doc_id,
                       'OCCURENCE': 1, 'WORD_ID': word_id}
                
                dict_list.append(item)
    
    return pd.DataFrame(dict_list)

sparse_train_df = make_sparse_matrix(X_train, word_index, y_train)

train_grouped = sparse_train_df.groupby(['DOC_ID', 'WORD_ID', 'LABEL']).sum()
train_grouped = train_grouped.reset_index()

Sparse matrix test data

sparse_test_df = make_sparse_matrix(X_test, word_index, y_test)
test_grouped = sparse_test_df.groupby(['DOC_ID', 'WORD_ID', 'LABEL']).sum().reset_index()

Simpan Training dan testing data

Setelah proses pembuatan training dan testing dataset selesai, kita simpan ke file text. Agar bisa digunakan di modul berikutnya tanpa perlu melakukan proses persiapan data lagi.

np.savetxt(TRAININGDATA_FILE, train_grouped, fmt='%d')
np.savetxt(TESTDATA_FILE, test_grouped, fmt='%d')

Sharing is caring:

Leave a Comment