CoolFace
Apppublic

Muhamamad/Clustering

sourceHugging Faceupdated 2y agoView on Hugging Face
0likes
app.py83 linesDownload Raw Back to root
1from flask import Flask, render_template, request2import numpy as np3import pandas as pd4from sklearn.decomposition import TruncatedSVD5from skfuzzy.cluster import cmeans6from sklearn.preprocessing import LabelEncoder7from sklearn.metrics import accuracy_score8import matplotlib.pyplot as plt9import base6410from io import BytesIO11 12app = Flask(__name__)13 14@app.route('/', methods=['GET', 'POST'])15def index():16    accuracy = None  # Placeholder untuk akurasi17 18    if request.method == 'POST':19        # Ambil jumlah cluster dari inputan20        num_clusters = int(request.form['num_clusters'])21 22        # 1. Membaca dataset23        file_path = "dataset/berita_vsm_new.csv"  # Ganti dengan path file Anda24        data = pd.read_csv(file_path)25 26        # 2. Pisahkan label dan data fitur27        labels = data['Category']28        features = data.drop('Category', axis=1).values29 30        # Encode label kategori menjadi numerik untuk evaluasi akurasi31        label_encoder = LabelEncoder()32        encoded_labels = label_encoder.fit_transform(labels)33 34        # 3. Reduksi dimensi dengan SVD35        svd = TruncatedSVD(n_components=100)  # Gunakan 2 dimensi untuk visualisasi36        reduced_features = svd.fit_transform(features)37 38        # 4. Fuzzy C-Means Clustering39        cntr, u, u0, d, jm, p, fpc = cmeans(40            data=reduced_features.T,41            c=num_clusters,  # Jumlah cluster dari input42            m=2.0,           # Tingkat fuzziness43            error=0.005,     # Toleransi error44            maxiter=1000     # Iterasi maksimum45        )46 47        # Keanggotaan cluster48        cluster_membership = np.argmax(u, axis=0)49 50        # Hitung akurasi berdasarkan label asli51        accuracy = max(52            accuracy_score(encoded_labels, cluster_membership),53            accuracy_score(encoded_labels, 1 - cluster_membership)  # Cek inversi cluster54        )55 56        # Menyimpan hasil visualisasi57        fig = plt.figure(figsize=(8, 6))58        colors = ['red', 'blue']59        for i in range(num_clusters):60            cluster_points = reduced_features[cluster_membership == i]61            plt.scatter(cluster_points[:, 0], cluster_points[:, 1], c=colors[i % len(colors)], label=f'Cluster {i}', alpha=0.6)62 63        # Tambahkan centroid64        plt.scatter(cntr[:, 0], cntr[:, 1], c='black', marker='x', s=100, label='Centroid')65        plt.title(f"Fuzzy C-Means Clustering - Akurasi: {accuracy:.2f}")66        plt.xlabel("Komponen 1")67        plt.ylabel("Komponen 2")68        plt.legend()69        plt.grid()70 71        # Simpan gambar ke dalam buffer72        img_buf = BytesIO()73        plt.savefig(img_buf, format='png')74        img_buf.seek(0)75        img_str = base64.b64encode(img_buf.getvalue()).decode('utf-8')76 77        return render_template('index.html', accuracy=accuracy, image=img_str)78 79    return render_template('index.html', accuracy=accuracy)80 81if __name__ == '__main__':82    app.run(port=5002)83