PCA e medie K per i dati sul traffico in Python |  di Beth Ou Yang |  Maggio 2024

 | Intelligenza-Artificiale

1. Quali trucchi fa PCA

In breve, PCA riassume i dati trovando combinazioni lineari di caratteristiche, che possono essere pensate come se si scattassero diverse foto di un oggetto 3D, e ordinerà naturalmente le immagini dalla più rappresentativa alla meno prima di consegnarle.

Dato che l'input è costituito dai nostri dati originali, ci sarebbero 2 output utili di PCA: Z E W. Moltiplicandoli, possiamo ottenere i dati di ricostruzione, che sono i dati originali ma con una certa perdita di informazioni tollerabile (poiché abbiamo ridotto la dimensionalità).

Spiegheremo queste 2 matrici di output con i nostri dati nella pratica seguente.

2. Cosa possiamo fare dopo aver applicato l'APC

Dopo aver applicato la PCA ai nostri dati per ridurre la dimensionalità, possiamo utilizzarla per altre attività di machine learning, come clustering, classificazione e regressione.

Nel caso della MRT di Taipei, più avanti in questo articolo, eseguiremo il clustering sui dati dimensionali inferiori, dove alcune dimensioni possono essere interpretate come proporzioni di passeggeri in diverse parti della giornata, come mattina, mezzogiorno e sera. Quelle stazioni che condividono proporzioni simili di passeggeri durante il giorno sarebbero considerate nello stesso cluster (i loro modelli sono simili!).

3. Dai un'occhiata il nostro set di dati sul traffico!

Il datast che usiamo qui è Sistema di transito rapido della metropolitana di Taipei, dati sul traffico orariocon colonne: date, hour, origin, destination, passenger_count.

Nel nostro caso, terrò solo i dati dei giorni feriali, poiché ci sono modelli più interessanti tra le diverse stazioni durante i giorni feriali, ad esempio le stazioni nelle aree residenziali potrebbero avere più pendolari che entrano durante il giorno, mentre di sera, quelle nelle aree commerciali potrebbero avere più pendolari in entrata durante il giorno. gente che entra.

Nelle stazioni nelle aree residenziali potrebbero entrare più pendolari durante il giorno.

Il grafico sopra rappresenta l'andamento del traffico orario di 4 diverse stazioni (il numero di passeggeri che entrano nella stazione). Le 2 linee in rosso sono Xinpu e Yongan Market, che in realtà si trovano nelle zone super affollate di New Taipei City. D'altro canto, le 2 linee in blu sono il municipio di Taipei e Zhongxiao Fuxing, dove hanno sede la maggior parte delle aziende e si svolgono le attività commerciali.

Le tendenze riflettono sia la natura di queste aree che delle stazioni, e possiamo notare che la differenza è più evidente quando si confrontano le loro tendenze durante le ore di spostamento (dalle 7 alle 9 e dalle 17 alle 19).

4. Utilizzo della PCA sui dati di traffico orari

Perché ridurre la dimensionalità prima di svolgere ulteriori attività di machine learning?

Ci sono 2 ragioni principali:

  1. Man mano che il numero di dimensioni aumentala distanza tra due punti dati qualsiasi diventa più vicina e quindi più simili e meno significativiche verrebbe definita “la maledizione della dimensionalità”.
  2. Dovuto al ad alta dimensionalità natura dei dati sul traffico, lo è difficile da visualizzare e interpretare.

Applicando la PCA possiamo individuare gli orari in cui gli andamenti del traffico delle diverse stazioni sono più evidenti e rappresentativi. Intuitivamente, dal grafico mostrato in precedenza, possiamo supporre che le ore intorno alle 8 e alle 18 possano essere sufficientemente rappresentative per raggruppare le stazioni.

Ricorda che abbiamo menzionato le utili matrici di output, Z e W, di PCA nel file sezione precedente? Qui li interpreteremo con il nostro caso MRT.

Dati originali, X

  • Indice: starioni
  • Colonna: ore
  • Valori: la percentuale di passeggeri in ingresso nell'ora specifica (#passeggeri / #passeggeri totali)

Con tale X, possiamo applicare PCA con il seguente codice:

from sklearn.decomposition import PCA

n_components = 3
pca = PCA(n_components=n_components)

X_tran = StandardScaler().fit_transform(X)

pca = PCA(n_components=n_components, whiten=True, random_state=0)
pca.fit(X_tran)

Qui specifichiamo il parametro n_componenti essere 3, il che implica che PCA estrarrà i 3 componenti più significativi per noi.

Tieni presente che è come “scattare diverse foto di un oggetto 3D e ordinerà le immagini dalla più rappresentativa alla meno,” e scegliamo le prime 3 foto. Quindi, se impostiamo n_componenti per essere 5, riceveremo altre 2 foto, ma la nostra top 3 rimarrà la stessa!

Uscita PCA, matrice W

W possono essere pensati come i pesi su ciascuna funzionalità (cioè le ore) rispetto alle nostre “immagini”, o più specificamente, componenti principali.

pd.set_option('precision', 2)

W = pca.components_
W_df = pd.DataFrame(W, columns=hour_mapper.keys(), index=(f'PC_{i}' for i in range(1, n_components+1)))
W_df.round(2).style.background_gradient(cmap='Blues')

Per i nostri 3 componenti principali, possiamo vedere che PC_1 pesa di più nelle ore notturne, mentre PC_2 pesa di più a mezzogiorno e PC_3 riguarda l'orario mattutino.

Uscita PCA, matrice Z

Possiamo interpretare Z matrice come rappresentazioni delle stazioni.

Z = pca.fit_transform(X)

# Name the PCs according to the insights on W matrix
Z_df = pd.DataFrame(Z, index=origin_mapper.keys(), columns=('Night', 'Noon', 'Morning'))

# Look at the stations we demonstrated earlier
Z_df = Z_df.loc(('Zhongxiao_Fuxing', 'Taipei_City_Hall', 'Xinpu', 'Yongan_Market'), :)
Z_df.style.background_gradient(cmap='Blues', axis=1)

Nel nostro caso, una volta interpretata la matrice W e compreso il significato latente di ciascun componente, possiamo assegnare nomi ai PC.

La matrice Z per queste 4 stazioni indica che le prime 2 stazioni hanno una percentuale maggiore di ore notturne, mentre le altre 2 ne hanno di più al mattino. Questa distribuzione concorda anche con i risultati della nostra EDA (ricordiamo il grafico a linee di queste 4 stazioni nella parte precedente).

5. Clustering sul risultato PCA con K-Means

Dopo aver ottenuto il risultato della PCA, raggruppiamo ulteriormente le stazioni di transito in base ai loro modelli di traffico, rappresentati da 3 componenti principali.

Nell'ultima sezione, la matrice Z presenta rappresentazioni delle stazioni rispetto alla notte, al mezzogiorno e al mattino.

Raggrupperemo le stazioni in base a queste rappresentazioni, in modo tale che le stazioni nello stesso gruppo abbiano distribuzioni di passeggeri simili tra questi 3 periodi.

Esistono molti metodi di clustering, come K-Means, DBSCAN, clustering gerarchico, ecc. Poiché l'argomento principale qui è vedere la comodità di PCA, salteremo il processo di sperimentazione di quale metodo è più adatto e andremo con K-Mezzi.

from sklearn.cluster import KMeans

# Fit Z matrix to K-Means model
kmeans = KMeans(n_clusters=3)
kmeans.fit(Z)

Dopo aver adattato il modello K-Means, visualizziamo i cluster con il grafico a dispersione 3D per trama.

import plotly.express as px

cluster_df = pd.DataFrame(Z, columns=('PC1', 'PC2', 'PC3')).reset_index()

# Turn the labels from integers to strings,
# such that it can be treated as discrete numbers in the plot.
cluster_df('label') = kmeans.labels_
cluster_df('label') = cluster_df('label').astype(str)

fig = px.scatter_3d(cluster_df, x='PC1', y='PC2', z='PC3',
color='label',
hover_data={"origin": (pca_df('index'))},
labels={
"PC1": "Night",
"PC2": "Noon",
"PC3": "Morning",
},
opacity=0.7,
size_max=1,
width = 800, height = 500
).update_layout(margin=dict(l=0, r=0, b=0, t=0)
).update_traces(marker_size = 5)

6. Approfondimenti sul traffico MRT di Taipei: risultati del clustering

  • Gruppo 0 : Più passeggeri durante il giorno, e quindi potrebbe essere il gruppo “zona giorno”.
  • Gruppo 2 : Più passeggeri la sera, e quindi potrebbe trattarsi del gruppo “area business”.
  • Gruppo 1 : Sia le ore diurne che quelle notturne sono piene di persone che entrano nelle stazioni, ed è più complicato spiegare la natura di queste stazioni, poiché potrebbero esserci ragioni diverse per le diverse stazioni. Di seguito, daremo uno sguardo a 2 casi estremi in questo cluster.

Ad esempio, nel Gruppo 1la stazione con il maggior numero di passeggeri, la stazione principale di Taipei, è un enorme snodo di transito a Taipei, dove i pendolari possono trasferirsi da autobus e sistemi ferroviari alla MRT. Pertanto, lo schema di traffico elevato durante la mattina e la sera è chiaro.

Al contrario, anche la stazione dello Zoo di Taipei si trova nel Cluster 1, ma non è il caso che “sia di giorno che di notte siano piene di gente”. Invece, non c'è molta gente in nessuno dei periodi perché pochi residenti vivono in quella zona e la maggior parte dei cittadini visita raramente lo zoo di Taipei nei giorni feriali.

Gli schemi di queste due stazioni non sono molto simili, pur essendo nello stesso cluster. Cioè, il Cluster 1 potrebbe contenere troppe stazioni che in realtà non sono simili. Pertanto, in futuro, dovremmo mettere a punto gli iperparametri delle K-Means, come il numero di cluster, e metodi come punteggio della sagoma E metodo del gomito sarebbe utile.

Fonte: towardsdatascience.com

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *