Najlepsze podejście do kompleksowego projektu uczenia maszynowego [2022]
Opublikowany: 2021-01-01Uczenie maszynowe nabiera tempa i od bardzo dawna jest kością niezgody. Niektóre bardzo dobre algorytmy i architektury w tej dziedzinie umożliwiły zastosowanie koncepcji uczenia maszynowego w praktycznym i żywym świecie.
Nie jest to już tylko pojęcie dla badań i rozprzestrzeniło się głęboko na użyteczne obszary zastosowań. A dzisiaj, bardziej niż kiedykolwiek, istnieje potrzeba opanowania sztuki kompleksowego potoku projektów uczenia maszynowego.
Wiele osób cieszy się rosnącym zainteresowaniem uczeniem maszynowym, a dostępna jest ogromna ilość zasobów, które mogą pomóc w zrozumieniu podstaw uczenia maszynowego i sztucznej inteligencji. Wiele kursów prowadzi od nauki podstawowych pojęć do budowania najnowocześniejszych modeli.
Ale czy o to chodzi? Czy naprawdę uczymy się, jak uzyskać dostęp do danych i czy naprawdę widzimy, jak wyczyścić dane, aby nasz model ML mógł z nich wyodrębnić przydatne funkcje? A co z częścią wdrożeniową? Jest tak wiele podobnych pytań, które pozostają bez odpowiedzi po ukończeniu takich kursów i programów nauczania.
Ten problem powstaje z powodu słabego zrozumienia kompletnego kompleksowego potoku uczenia maszynowego dla dowolnego projektu. W tym artykule przejdziemy przez jeden taki potok, aby zrozumieć, co dokładnie należy zrobić, aby uzyskać lepsze wyniki w rzeczywistym scenariuszu dla dowolnego projektu ML.
Jedną z książek, która najlepiej to pokazuje, jest praktyczne uczenie maszynowe ze Scikit-Learn, Keras i TensorFlow autorstwa Aureliena Gerona.

W celu lepszego zrozumienia ten rurociąg można podzielić na kilka kroków, a są to:
- Zrozumienie opisu problemu
- Pozyskanie wymaganych danych
- Zrozumienie danych
- Czyszczenie danych
- Wybór najlepszego modelu do treningu
- Dostrajanie hiperparametrów
- Prezentacja wyników
- Wdrażanie i utrzymanie systemu
Aby lepiej zrozumieć przebieg każdego rzeczywistego projektu uczenia maszynowego, posłużymy się popularnym przykładem problemu prognozowania cen California House. Omówimy wszystkie powyższe punkty w związku z tym stwierdzeniem problemu. Mogą wystąpić drobne zmiany w różnych projektach, ale ogólny cel pozostaje ten sam.
Spis treści
Zrozumienie opisu problemu
Aby zbudować dobre rozwiązanie, trzeba bardzo jasno zrozumieć sformułowanie problemu. Najprawdopodobniej skończysz na budowaniu i szkoleniu modelu uczenia maszynowego, ale rzeczywiste obszary aplikacji wymagają znacznie więcej niż tylko modeli. Wynik modelu powinien być dopasowany do tego, czego dokładnie potrzebuje użytkownik końcowy.
W tym konkretnym przykładzie otrzymujemy zestaw danych wszystkich wskaźników w Kalifornii, takich jak populacja, dochód, ceny domów i inne. Wymaganym wynikiem modelu jest to, aby był w stanie przewidzieć cenę domu, biorąc pod uwagę jego inne atrybuty, takie jak lokalizacja, populacja, dochód i inne.
Ważnym powodem tego kroku jest dokładne zrozumienie, co należy zrobić i jakie dokładnie rozwiązanie jest potrzebne. To tutaj odbywa się główna część burzy mózgów, dotycząca tego, jak należy podejść do zgłoszenia problemu.
Przeczytaj: Pomysły na projekty uczenia maszynowego dla początkujących
Pozyskanie wymaganych danych
Po jasnym zrozumieniu opisu problemu i podjęciu decyzji o zastosowaniu podejścia opartego na uczeniu maszynowym w celu rozwiązania problemu, należy rozpocząć wyszukiwanie odpowiednich danych. Dane są najważniejszym składnikiem każdego projektu uczenia maszynowego, dlatego musisz uważnie wyszukiwać i wybierać tylko dane wysokiej jakości. Ostateczna wydajność modeli ML zależy od danych użytych podczas uczenia.
Istnieje wiele źródeł, w których można znaleźć dane, które mogą pomóc w zrozumieniu dystrybucji danych również w rzeczywistych przykładach. W naszym przykładzie możemy pobrać zestaw danych California House Price Prediction z Kaggle. Te dane są w formacie CSV, dlatego do załadowania zestawu danych użyjemy biblioteki Pandas.
Zrozumienie danych
Bardzo ważnym aspektem rozwiązania ML jest możliwość zrozumienia danych, z którymi pracujesz. Dzięki temu możemy wybrać, które algorytmy lub architektury modeli są lepiej dopasowane do projektu. Przed przystąpieniem do szczegółowego przyglądania się danym dobrze jest najpierw podzielić zbiór danych na zbiory pociągowe i testowe. Dzięki temu zestaw testowy pozostaje nietknięty, a tym samym zmniejsza się ryzyko nadmiernego dopasowania do zestawu testowego. W ten sposób eliminujesz błąd podsłuchiwania danych z modelu.
Istnieją różne sposoby dzielenia zbiorów danych na te zestawy treningowe i testowe. Jednym z nich jest podzielenie go za pomocą zakodowanej na sztywno wartości procentowej. W większości przypadków powszechną wartością jest 90% trenowanie i 10% test.
Po podziale będziesz musiał dogłębnie zwizualizować zestaw pociągów, aby zrozumieć dane. Bieżący zestaw danych zawiera punkty szerokości i długości geograficznej, dlatego bardzo pomocne jest użycie wykresu punktowego do przyjrzenia się gęstości w zależności od lokalizacji.
Znalezienie korelacji między dwoma atrybutami w zestawie danych jest pomocne w zrozumieniu, które atrybuty są bardziej powiązane z wymaganym atrybutem. W tym przypadku musimy dowiedzieć się, który atrybut jest bardziej powiązany z cenami domów w zbiorze danych. Można to łatwo zrobić w Scikit-Learn za pomocą metody corr(). Zwraca wartość dla każdego atrybutu w odniesieniu do innego. Jeśli więc chcesz zobaczyć relacje w odniesieniu do cen domów, możesz to zrobić w taki sposób:
corr_matrix[„mediana_wartość_domu”].sort_values(rosnąco=False)
mediana_wartość_domu 1.000000mediana_dochodu 0,687170total_rooms 0.135231mediana_wieku_mieszkania 0.114220gospodarstwa domowe 0.064702total_bedrooms 0,047865populacja -0,026699długość geograficzna -0,047279szerokość geograficzna -0,142826
Tutaj widać, że median_income jest bezpośrednio związany z wartością domu, az drugiej strony wartość szerokości geograficznej jest z nią pośrednio związana.
Na koniec możesz również spróbować wykonać inżynierię funkcji, łącząc ze sobą niektóre atrybuty. Na przykład suma pokoi_na_gospodarstwo może być dużo bardziej informacyjna niż suma_pokojów lub wartości poszczególnych gospodarstw domowych .
Czyszczenie danych
W tym kroku przygotowujesz dane do projektu Machine Learning. Jest to najbardziej czasochłonny i ważny etap całego rurociągu. Wydajność modelu zależy głównie od tego, jak dobrze przygotujesz dane. Zazwyczaj dobrą praktyką jest pisanie funkcji w tym celu, ponieważ pozwoli to wykorzystać te funkcje w razie potrzeby i te same funkcje można wykorzystać na linii produkcyjnej do przygotowania nowych danych do predykcji.
Jednym z najczęściej napotykanych problemów w rzeczywistych danych są brakujące wartości kilku wpisów w zbiorze danych. Jest kilka sposobów radzenia sobie z tym. Możesz bezpośrednio usunąć cały atrybut, ale nie jest to zbyt dobre dla modelu. Możesz pozbyć się wiersza, w którym brakuje jednej wartości. Innym najczęściej używanym sposobem jest ustawienie brakującej wartości na inną wartość, taką jak zero lub średnia arytmetyczna całej kolumny, jeśli jest to wartość liczbowa.
W przypadku wartości kategorycznych lepiej jest reprezentować je za pomocą liczb i zakodować je w jednym gorącym kodowaniu, aby ułatwić modelowi pracę nad nim. Scikit-Learn udostępnia również klasę OneHotEncoder, dzięki czemu możemy łatwo konwertować wartości kategoryczne na jedno gorące wektory.
Kolejną rzeczą, o którą musisz zadbać, jest skalowanie funkcji. Mogą istnieć atrybuty, których zakresy wartości są bardzo drastyczne. Dlatego lepiej jest przeskalować je do standardowej skali, aby model mógł z łatwością pracować z tymi wartościami i działać lepiej.

Przeczytaj także: Wynagrodzenie inżyniera uczenia maszynowego w Indiach
Wybór najlepszego modelu do treningu
Po zakończeniu całego czyszczenia danych i inżynierii funkcji następny krok staje się dość łatwy. Teraz wszystko, co musisz zrobić, to wytrenować kilka obiecujących modeli na danych i znaleźć model, który daje najlepsze prognozy. Jest kilka sposobów, które pomogą nam wybrać najlepszy model.
Nasz przykład przewidywania ceny domu w Kalifornii to problem regresji. Oznacza to, że musimy przewidzieć wartość z zakresu liczb, który w tym przypadku jest ceną domu.
Pierwszym krokiem jest przeszkolenie kilku modeli i przetestowanie ich na zestawie walidacyjnym. Nie powinieneś tutaj używać zestawu testowego, ponieważ doprowadzi to do nadmiernego dopasowania zestawu testowego i ostatecznie model będzie miał bardzo niską regularyzację. Z tych modeli w większości przypadków należy wybierać model o dobrej dokładności uczenia i dokładności walidacji. Może to również zależeć od przypadku użycia, ponieważ niektóre zadania wymagają innej konfiguracji niż inne.
Ponieważ już oczyściliśmy dane, a funkcje przetwarzania wstępnego są gotowe, bardzo łatwo jest wytrenować różne modele w trzech do czterech wierszach kodu przy użyciu niektórych frameworków, takich jak Scikit-Learn lub Keras. W Scikit-Learn mamy również opcję walidacji krzyżowej, która bardzo pomaga znaleźć dobre hiperparametry dla modeli, takich jak drzewa decyzyjne.
Dostrajanie hiperparametrów
Po kilku modelach na krótkiej liście pojawia się potrzeba dostrojenia hiperparametrów, aby uwolnić ich prawdziwy potencjał. Istnieje wiele sposobów, aby to osiągnąć. Jednym z nich jest to, że możesz ręcznie zmieniać hiperparametry i trenować modele raz za razem, aż uzyskasz zadowalający wynik. Tutaj wyraźnie widać problem, że nie można sprawdzić tylu kombinacji, ile zrobiłoby to zadanie automatyczne. Oto kilka dobrych metod automatyzacji tych rzeczy.
Grid Search to wspaniała funkcja dostarczana przez Scikit-Learn w formie klasy GridSearchCV, w której samodzielnie przeprowadza walidację krzyżową i znajduje idealne wartości hiperparametrów w celu uzyskania lepszych wyników. Wszystko, co musimy zrobić, to wspomnieć, z jakimi hiperparametrami musi on poeksperymentować. Jest to prosta, ale bardzo potężna funkcja.
Wyszukiwanie zrandomizowane to kolejne podejście, które można wykorzystać w podobnym celu. Wyszukiwanie siatki działa dobrze, gdy istnieje niewielka przestrzeń hiperparametrów do eksperymentowania, ale gdy jest duża liczba hiperparametrów, lepiej jest użyć RandomizedSearchCV. Próbuje losowych hiperparametrów i podaje najlepsze wartości, jakie widział w całym tekście.
Ostatnie, ale nie mniej ważne, jest podejście Ensemble Learning . Tutaj możemy użyć wielu modeli, aby podać ich odpowiednie prognozy i wreszcie możemy wybrać ostateczną prognozę jako średnią ze wszystkich. Jest to bardzo obiecująca metoda i wygrywa wiele konkursów na Kaggle.
Po dostrojeniu wszystkich hiperparametrów do ostatecznego modelu można użyć modelu do prognozowania zestawu testowego. Tutaj możemy ocenić, jak dobrze model radzi sobie na zestawie testowym. Pamiętaj, że po tym nie powinieneś dostrajać swojego modelu, aby zwiększyć dokładność zestawu testowego, ponieważ doprowadzi to do nadmiernego dopasowania próbek zestawu testowego.
Prezentacja wyników
Po wybraniu najlepszego modelu i dokonaniu oceny istnieje potrzeba odpowiedniego wyświetlenia wyników. Wizualizacja jest kluczem do tworzenia lepszych projektów uczenia maszynowego, ponieważ chodzi o dane i zrozumienie stojących za nimi wzorców. Surowe wyniki liczbowe mogą brzmieć dobrze dla osób już zaznajomionych z tą dziedziną, ale bardzo ważne jest, aby wizualizować je na wykresach i wykresach, ponieważ sprawia to, że projekt jest atrakcyjny i każdy może uzyskać jasny obraz tego, co faktycznie dzieje się w naszym rozwiązaniu.
Wdrażanie i utrzymanie systemu
Większość uczniów dociera do tego etapu procesu i napotyka ogromne problemy podczas próby wdrożenia projektu do zastosowania w rzeczywistym scenariuszu. Budowanie i trenowanie modeli w notatniku Jupyter jest dość łatwe, ale ważną częścią jest pomyślne zapisanie modelu, a następnie użycie go w środowisku na żywo.
Jednym z najczęstszych problemów, z jakimi borykają się inżynierowie ML, jest różnica między danymi odbieranymi na żywo a danymi, na których trenowali model. Tutaj możemy użyć funkcji wstępnego przetwarzania, które zbudowaliśmy podczas tworzenia potoku do uczenia naszych modeli.
Istnieją dwa typy modeli uczenia maszynowego, które można wdrożyć: model online i model offline. Model online to taki, który uczy się na podstawie danych, które otrzymuje w czasie rzeczywistym. Modele offline nie uczą się na nowych próbkach i muszą być odpowiednio aktualizowane i utrzymywane, jeśli nastąpi zmiana rodzaju otrzymywanych przez nie danych. Tak więc musi być odpowiednia konserwacja dla obu typów modeli.
Podczas wdrażania modeli uczenia maszynowego muszą one być opakowane w platformę, aby użytkownicy mieli łatwość w interakcji z nimi. Opcje są szerokie, możemy zapakować je w aplikację internetową, aplikację na Androida, Restful API i wiele innych. Podstawowa wiedza na temat budowania takich aplikacji lub interfejsów API jest ogromnym plusem. Powinieneś być w stanie wdrażać aplikacje NodeJS lub Python w usługach w chmurze, takich jak Google Cloud Platforms, Amazon Web Services lub Microsoft Azure.

Jeśli nie czujesz się dobrze z niektórymi frameworkami, takimi jak Django lub Flask, możesz wypróbować Streamlit, który pozwala wdrożyć kod Pythona w postaci aplikacji internetowej w zaledwie kilku linijkach dodatkowego kodu. Istnieje wiele takich bibliotek i frameworków, które można zbadać.
Wniosek
Kończąc cały ten artykuł, powiedziałbym, że projekty uczenia maszynowego różnią się znacznie od innych tradycyjnych projektów pod względem potoku i jeśli uda ci się opanować ten potok, wszystko inne staje się znacznie łatwiejsze.
Niektóre z najważniejszych kroków tego kompleksowego potoku, które wielu początkujących ma tendencję do zaniedbywania, to czyszczenie danych i wdrażanie modelu. Jeśli te kroki zostaną podjęte, reszta części będzie jak każdy inny projekt.
Wykonanie tych kroków i ustawienie potoku dla projektów pomaga mieć jasną wizję zadań, a debugowanie problemów staje się łatwiejsze w zarządzaniu. Dlatego sugeruję, abyś wykonał te kroki i spróbował wdrożyć własny projekt uczenia maszynowego, korzystając z tej listy kontrolnej. Wybierz opis problemu, znajdź zestaw danych i przejdź do zabawy w swoim projekcie!
Jeśli chcesz dowiedzieć się więcej o uczeniu maszynowym, sprawdź dyplom PG IIIT-B i upGrad w uczeniu maszynowym i sztucznej inteligencji, który jest przeznaczony dla pracujących profesjonalistów i oferuje ponad 450 godzin rygorystycznego szkolenia, ponad 30 studiów przypadków i zadań, IIIT- Status absolwenta B, ponad 5 praktycznych, praktycznych projektów zwieńczenia i pomoc w pracy z najlepszymi firmami.
Co to jest uczenie maszynowe lub ML?
Zdolność systemu do uczenia się zadania bez wyraźnego programowania na podstawie dostarczonych danych jest określana jako uczenie maszynowe. Ta dziedzina koncentruje się na rozwoju programów komputerowych, które mogą uzyskiwać dostęp do danych i samodzielnie się uczyć. Jest to poddziedzina rozległego tematu sztucznej inteligencji (AI). Uczenie maszynowe jest wdrażane w prawie wszystkich sektorach w celu zwiększenia produktywności, marketingu, sprzedaży, zadowolenia klientów i zysków firmy. Zainteresowało się tym wielu ekspertów IT, którzy zastanawiają się nad zmianą kariery.
Czym są kompleksowe projekty ML?
Kompleksowe projekty uczenia maszynowego obejmują takie kroki, jak przygotowanie danych, trenowanie modelu na nim i wdrożenie tego modelu. Składa się z potoków, które są sposobem na napisanie kodu i zautomatyzowanie procesu pracy. Po prawidłowym skompilowaniu te potoki prowadzą do utworzenia udanego projektu uczenia maszynowego. Zrozumienie opisu problemu, uzyskanie odpowiednich danych, zrozumienie danych, wyczyszczenie danych, wybór optymalnego modelu do szkolenia, dostrojenie hiperparametrów i przedstawienie wyników to tylko niektóre z etapów.
Czym są hiperparametry w uczeniu maszynowym?
Hiperparametr to parametr w uczeniu maszynowym, którego wartość jest używana do wpływania na proces uczenia. Można je podzielić na dwie części: hiperparametry modelu i hiperparametry algorytmu. Nie można zakładać hiperparametrów modelu podczas obsługi maszyny w zestawie uczącym, ponieważ kierują one do zadania wyboru modelu. Natomiast hiperparametry algorytmu nie mają wpływu na wydajność modelu, ale wpływają na szybkość i jakość procesu uczenia. Różne techniki uczenia modeli wymagają różnych hiperparametrów, ale istnieją pewne podstawowe algorytmy, które nie wymagają żadnych hiperparametrów.