Ridisegnare il motore decisionale procedurale per sfruttare l'apprendimento automatico (e quale)

2

Non sono sicuro che questo sia il forum giusto, ma sto davvero cercando un consiglio su questo.

Abbiamo un motore decisionale procedurale, che è abbastanza rudimentale, per decidere il routing delle applicazioni. In pratica sono più dichiarazioni if-else (circa 30 di esse) in serie. Ad esempio:

if (application.isBlue && (!configs.isBlueAllowed)) { return 1 } ....

Inoltre, introdurremo tag e flussi diversi. Ad esempio, se un'applicazione contiene tag blah , allora dovrebbe saltare alcune delle dichiarazioni if-else e procedere al centro di elaborazione differente.

Sembra che il nostro approccio ingenuo stia raggiungendo i suoi limiti (certo possiamo più interruttori, ma non sarà elegante né carino).

Supponendo che questo sia il forum giusto, puoi commentare:

  • Questo tipo di applicazione / processo beneficia di un approccio ML come la classifica supervisionata?
  • Se # 1 è vero, quale approccio ML è più appropriato per questo?
posta Simply_me 09.09.2018 - 08:01
fonte

3 risposte

2

Questo non è il modo giusto per inquadrare questa domanda.

Sospetto che quello che vuoi veramente sapere è se Machine Learning può essere usato per migliorare la tua applicazione. Potrebbe. Potrebbe non farlo. Non posso dirlo perché non è quello che hai chiesto.

Quello che hai chiesto è se può migliorare un "motore decisionale procedurale". Questo non è un requisito. Questa è un'implementazione. Ci stai dicendo come il problema è stato risolto prima di non quale sia il problema.

Sono abbastanza sicuro che ML possa essere usato per risolvere tutti i problemi di questa classe. ML può essere utilizzato per risolvere XOR . Saresti pazzo a raggiungere per ML ogni volta che hai bisogno di un XOR.

Comprendi che la forza di Machine Learnings non è che può risolvere problemi logici. È che può capire come risolvere i problemi logici senza che la mano dell'uomo cambi il modo in cui ogni bit viene trattato.

30 affermazioni if-else potrebbero sembrare molto, e se mal organizzato è certamente. Ma sono le noccioline per l'apprendimento automatico. Tuttavia, non sono sufficienti informazioni per effettuare la chiamata.

In addition, we are going to introduce different tags and flows. For example, if an application contain tag blah, then it should skip some of the if-else statements and proceed to different processing center.

Questa affermazione mi fa pensare che è più probabile che tu possa beneficiare dell'introduzione di una buona decomposizione e di un polimorfismo vecchio stile. Guarda quali sono i predicati. Se si hanno 30 istruzioni if-else in una procedura, molte delle quali devono essere saltate, è probabile che si stia facendo molto in un unico punto. Rompere le cose Crea molte funzioni e oggetti che raccolgono solo ciò di cui hanno bisogno e non si avvicinano per imparare le cose da soli. Invitali a fare una sola cosa.

Ma prima di fare tutto questo refactoring scrivete alcuni test che dimostrano che le cose funzionano come sempre. In questo modo, quando pensi che il tuo nuovo design faccia lo stesso del vecchio design, avrai ragione.

Ora che hai alcuni test e un nuovo design è tempo di provare ad aggiungere nuovi test per i nuovi tag e flussi. Il nuovo design dovrebbe renderli più facili.

Ma se vuoi che valutiamo se ML è un buon modo per risolvere questo problema, avremo bisogno di più informazioni di come hai risolto prima. Che cosa decide in realtà?

    
risposta data 09.09.2018 - 10:30
fonte
0

L'apprendimento automatico è bello, ma spesso non applicabile - questo sembra un caso in cui può e dovrebbe scrivere codice "ordinario".

Che cos'è ML?

L'apprendimento automatico è solo una statistica. Dopo aver "appreso" le relazioni di alcuni dati di allenamento (in realtà, adattando un modello statistico ai dati di allenamento), l'algoritmo ML può prevedere gli output per i nuovi input. Per l'apprendimento supervisionato, il set di allenamento contiene input e output noti ("etichette" in caso di problemi di classificazione). Per l'apprendimento non supervisionato, il set di allenamento non è etichettato e l'algoritmo deve dedurre relazioni, strettamente correlate ai problemi di clustering.

Limitazioni di ML

Le statistiche ML / computazionali possono essere incredibilmente interessanti, ma ci sono problemi notevoli:

  • Per ottenere un buon modello, è necessario un grande set di dati di allenamento . Ottenere questo set può essere costoso e difficile.

  • Garbage-in, garbage-out : se i dati di allenamento non sono corretti, il modello sarà danneggiato e genererà previsioni errate. Devi validare il modello per testarne la qualità. La convalida appropriata richiede una certa conoscenza statistica.

  • I modelli statistici contengono ipotesi specifiche . Se queste ipotesi non si adattano al tuo caso d'uso, il modello sarà cattivo. Come semplice esempio, prova a provare ad adattare un modello di regressione lineare su un set di dati periodici. L'ipotesi del modello di una relazione lineare non regge, quindi il modello sarà inutile.

  • Errore di generalizzazione: i modelli ML tentano di generalizzare dai dati di allenamento. Ciò implica l'indovinare, e le supposizioni possono andare storte. Ad esempio, se i tuoi dati di allenamento non sono un campione rappresentativo degli input che verranno osservati in seguito, potresti ottenere un modello di parte.

  • I pronostici saranno fuzzy e inesatti (hanno qualche varianza ). Puoi ridurlo con set di allenamento più grandi, ma molti problemi reali contengono rumore inevitabile. Quindi le uscite di un algoritmo ML devono essere interpretate attentamente.

    es. il risultato di un algoritmo di classificazione delle immagini può essere comunicato in modo fuorviante come "l'immagine mostra un gatto", o più chiaramente come "l'immagine potrebbe mostrare un gatto (probabilità del 42%), tostapane (41%) o schermo del computer (39%) ”.

    Allo stesso modo, per i problemi di regressione che forniscono un intervallo credibile potrebbe essere utile. C'è una differenza tra una previsione "oggi questo cliente spenderà $ 29,21" e "c'è una probabilità del 50% che il cliente spenda tra $ 19,39 e $ 64,22 oggi".

  • Interpretabilità : un modello addestrato di solito non ha un'interpretazione significativa. In casi semplici, un modello descrive le correlazioni tra le caratteristiche di input, che possono essere interpretate e visualizzate. Ma algoritmi basati sulla simulazione o modelli con variabili latenti sono notoriamente difficili da interpretare e mettere a punto. Generalmente non è possibile spiegare all'interno del dominio del problema perché è stata fatta una previsione specifica. Questo può avere implicazioni etiche e legali.

Quando usare ML

Per quali tipi di problemi le statistiche ML / di calcolo possono essere appropriate?

Ad esempio, se una soluzione esatta è irrealizzabile e una soluzione approssimativa è tollerabile. Il modello ML deve essere permesso di essere sbagliato. I tuoi requisiti ti dicono che torto il modello può essere. È quindi possibile provare a soddisfare le prestazioni di previsione necessarie, ad es. con set di allenamento migliori e più grandi, o con tecniche come boosting.

In particolare, le soluzioni approssimate sono tollerabili se sono semplicemente utilizzate per consigliare esperti umani o quando qualsiasi azione innescata dalla previsione è reversibile. Per esempio. l'utilizzo di ML per la classificazione della posta indesiderata tramite posta elettronica è abbastanza problematico perché posso contrassegnare manualmente le e-mail come spam / non spam se la categorizzazione è errata.

Che ne dici di quelle if-statement?

Per un motore di regole o altre logiche di core business, l'apprendimento automatico probabilmente non è una buona idea.

  • Il modello ML può eseguire azioni indesiderate.
  • Il modello ML potrebbe non riuscire a eseguire le azioni desiderate.
  • Il modello ML è praticamente impossibile da eseguire il debug.
  • La formazione necessaria per ottenere prestazioni soddisfacenti sarà molto più ampia di una suite di test completa.

Scrivere software può essere difficile e i requisiti possono essere complessi. L'apprendimento automatico a volte può soddisfare questi requisiti, ma non rimuoverà magicamente tale complessità.

  • Nella migliore delle ipotesi, puoi approssimare una soluzione sufficientemente buona.
  • Nel peggiore dei casi, stai ignorando completamente i tuoi requisiti.

ML è solo un set di strumenti matematici e nessuna sostituzione per la raccolta di requisiti, la scrittura di codice, l'esecuzione di test. Devi ancora fare ingegneria del software.

    
risposta data 09.09.2018 - 15:30
fonte
0

It seems that our naive approach is reaching its bounds (sure we can more switches, but it won't be elegant nor pretty).

Puoi usare le tecniche ML? Sì.

Penso che il tuo problema sia quando hai inserito {P} e il motore di calcolo C è diventato troppo complesso ("non elegante né bello"). È possibile utilizzare la tecnica ML per ottenere C "gratuitamente" quando si dispone di un input ben definito {P} e di un output {Q}.

Fondamentalmente, ciò che devi fare è tradurre la tua "applicazione", "configs" in un set di dati con valori numerici, ad es. booleani per "isBlue", "isBlueAllowed", ecc. e il desiderato "risultato". Devi creare questi set di dati per tutte le possibili configurazioni e risultati. Questo è necessario per ottenere dati di fitting stretti, quindi il risultato sarà deterministico.

A questo punto, quando si ha quel tipo di set di dati, il motore di calcolo non ha bisogno di essere complesso, cioè può essere semplice come il calcolo logico tra il set di dati e alcuni filtri, o se è più complesso può essere alcune operazioni che coinvolgono le matrici. Probabilmente non ci preoccupiamo molto di quanto questo calcolo sia lungo quanto l'output corrisponde {Q}.

Il tuo prossimo lavoro è decidere come ottenere il motore di calcolo C. Per essere onesti, ce ne saranno parecchi e dovrai metterli alla prova per decidere. A questo punto la velocità è probabilmente la più grande considerazione.

Il problema che hai è che hai un albero delle decisioni e vuoi essere in grado di generarlo, invece di aggiornare il codice. Uno dei più popolari generatori di alberi decisionali è C4.5

Quando in futuro dovrai aggiungere un'altra proprietà di configurazione, aggiorna il set di dati e aggiorna il modello di qualsiasi algoritmo tu abbia scelto.

L'intero processo è come applichi ML, non è difficile. Se vuoi confrontare, sarebbe tra il mantenimento del set di dati di allenamento {P} vs sviluppo e amp; mantenere un pezzo di software.

    
risposta data 09.09.2018 - 17:00
fonte

Leggi altre domande sui tag