50 algorytmów, które powinien znać każdy programista. Klasyczne i nowoczesne algorytmy z dziedzin uczenia maszynowego, projektowania oprogramowania, systemów danych i kryptografii - ebook
50 algorytmów, które powinien znać każdy programista. Klasyczne i nowoczesne algorytmy z dziedzin uczenia maszynowego, projektowania oprogramowania, systemów danych i kryptografii - ebook
Wiedza o algorytmach jest niezbędna przy rozwiązywaniu problemów programistycznych i prowadzeniu złożonych obliczeń. Każdy programista powinien dobrze znać algorytmy, musi też umieć je zaprojektować, modyfikować i stosować. Niezależnie od tego, czy zajmujesz się uczeniem maszynowym, kwestiami bezpieczeństwa, czy inżynierią danych, rzetelne zrozumienie algorytmów jest Ci bardzo potrzebne.
Dzięki tej książce nauczysz się stosować algorytmy w praktycznych sytuacjach i zrozumiesz mechanizmy ich działania. Liczne przykłady pozwolą Ci się zapoznać z kilkoma sposobami ich projektowania i implementacji. Następnie poznasz algorytm określania pozycji stron w wynikach wyszukiwarek internetowych, związane z nimi grafy i algorytmy uczenia maszynowego, a także logikę. Zaznajomisz się ponadto z nowoczesnymi modelami sekwencyjnymi i ich wariantami, jak również algorytmami, metodykami i architekturami implementacji dużych modeli językowych, takich jak ChatGPT. W ostatniej części tego przewodnika znajdziesz opis technik przetwarzania równoległego, przydatnego w zadaniach wymagających dużej mocy obliczeniowej.
W książce między innymi:
- projektowanie algorytmów przeznaczonych do złożonych zadań
- sieci neuronowe i techniki uczenia głębokiego
- struktury danych i algorytmy dostępne w bibliotekach Pythona
- algorytm grafowy służący do wykrywania oszustw za pomocą analizy sieciowej
- najnowocześniejsze algorytmy przetwarzania języka naturalnego
- tworzenie systemu rekomendacji filmów
- sekwencyjne modele uczenia maszynowego i nowoczesne modele LLM
Algorytmy: klucz do sukcesu w programowaniu!
Spis treści
O autorze
O recenzentach
Przedmowa
Wprowadzenie
Część 1. Wstęp i podstawowe algorytmy
- Rozdział 1. Wprowadzenie do algorytmów
- Co to jest algorytm?
- Fazy algorytmu
- Środowisko programowania
- Pakiety w Pythonie
- Ekosystem SciPy
- Jupyter Notebook
- Techniki projektowania algorytmów
- Wymiar danych
- Wymiar obliczeniowy
- Analiza efektywności
- Analiza pamięciowej złożoności obliczeniowej
- Czasowa złożoność obliczeniowa
- Szacowanie efektywności
- Notacja dużego O
- Złożoność stała (O(1))
- Złożoność liniowa (O(n))
- Złożoność kwadratowa (O(n²))
- Złożoność logarytmiczna
- Wybór algorytmu
- Walidacja algorytmu
- Algorytmy dokładne, aproksymacyjne i randomizowane
- Możliwość wyjaśnienia
- Podsumowanie
- Co to jest algorytm?
- Rozdział 2. Struktury danych w algorytmach
- Struktury danych w Pythonie
- Lista
- Krotka
- Słowniki i zbiory
- Struktury danych Series i DataFrame
- Macierz
- Abstrakcyjne typy danych
- Wektor
- Stos
- Kolejka
- Drzewo
- Podsumowanie
- Struktury danych w Pythonie
- Rozdział 3. Algorytmy sortowania i wyszukiwania
- Wprowadzenie do algorytmów sortowania
- Zamiana wartości zmiennych w Pythonie
- Sortowanie bąbelkowe
- Sortowanie przez wstawianie
- Sortowanie przez scalanie
- Sortowanie Shella
- Sortowanie przez wybieranie
- Wybór właściwego algorytmu sortującego
- Wprowadzenie do algorytmów wyszukiwania
- Wyszukiwanie liniowe
- Wyszukiwanie binarne
- Wyszukiwanie interpolacyjne
- Praktyczne przykłady
- Podsumowanie
- Wprowadzenie do algorytmów sortowania
- Rozdział 4. Projektowanie algorytmów
- Wprowadzenie do projektowania algorytmów
- Kwestia 1: poprawność. Czy algorytm zwraca rezultat, jakiego oczekujemy?
- Kwestia 2: efektywność. Czy robi to w optymalny sposób?
- Kwestia 3: skalowalność. Jak efektywny będzie ten algorytm zastosowany do większych zbiorów danych?
- Strategie algorytmiczne
- Strategia "dziel i rządź"
- Strategia programowania dynamicznego
- Strategia algorytmu zachłannego
- Praktyczny przykład - rozwiązanie problemu komiwojażera
- Metoda siłowa
- Zastosowanie algorytmu zachłannego
- Porównanie trzech strategii
- Algorytm PageRank
- Definicja problemu
- Implementacja algorytmu PageRank
- Programowanie liniowe
- Definicja problemu w programowaniu liniowym
- Praktyczny przykład - planowanie przepustowości za pomocą programowania liniowego
- Podsumowanie
- Wprowadzenie do projektowania algorytmów
- Rozdział 5. Algorytmy grafowe
- Zwięzłe wprowadzenie do grafów
- Grafy jako szkielet nowoczesnych sieci danych
- Podstawa grafów: węzły (lub wierzchołki)
- Teoria grafów i analiza sieci
- Reprezentacja grafów
- Mechanika i typy grafów
- Sieci egocentryczne
- Wprowadzenie do teorii analizy sieciowej
- Najkrótsza ścieżka
- Wskaźnik centralności
- Obliczanie wskaźników centralności w Pythonie
- Analiza sieci społecznościowych
- Przeglądanie grafu
- Wyszukiwanie wszerz
- Wyszukiwanie w głąb
- Studium przypadku - wykrywanie oszustw za pomocą SNA
- Wprowadzenie
- Czym jest oszustwo w tym kontekście
- Prosta analiza pod kątem oszustwa
- Podejście strażnicy
- Podsumowanie
- Zwięzłe wprowadzenie do grafów
Część 2. Algorytmy uczenia maszynowego
- Rozdział 6. Algorytmy nienadzorowanego uczenia maszynowego
- Wprowadzenie do nienadzorowanego uczenia maszynowego
- Uczenie nienadzorowane w cyklu życia eksploracji danych
- Trendy badawcze w zakresie uczenia nienadzorowanego
- Praktyczne przykłady
- Algorytmy klasteryzacji
- Algorytm k-średnich (algorytm centroidów)
- Kroki grupowania hierarchicznego
- Implementacja grupowania hierarchicznego
- Algorytm DBSCAN
- Tworzenie klastrów przy użyciu algorytmu DBSCAN w Pythonie
- Ocena klastrów
- Redukcja wymiarów
- Analiza głównych składowych
- Wyszukiwanie reguł asocjacyjnych
- Rodzaje reguł
- Wskaźniki reguł
- Algorytmy analizy asocjacyjnej
- Podsumowanie
- Wprowadzenie do nienadzorowanego uczenia maszynowego
- Rozdział 7. Tradycyjne algorytmy uczenia nadzorowanego
- Nadzorowane uczenie maszynowe
- Problemy nadzorowanego uczenia maszynowego
- Warunki konieczne
- Rozróżnienie między klasyfikatorami a regresorami
- Algorytmy klasyfikujące
- Wyzwanie dla klasyfikatorów
- Tablica pomyłek
- Kompromis między czułością i precyzją
- Algorytm drzewa decyzyjnego
- Algorytm klasyfikujący drzewa decyzyjnego
- Wady i zalety klasyfikatorów opartych na drzewach decyzyjnych
- Przypadki użycia
- Metody zespolone
- Implementacja wzmacniania gradientowego
- Różnica między lasem losowym a wzmocnieniem gradientowym
- Wykorzystanie algorytmu lasu losowego do wyzwania dla klasyfikatorów
- Regresja logistyczna
- Założenia
- Określanie relacji
- Funkcje straty i kosztu
- Kiedy używać regresji logistycznej
- Wykorzystanie algorytmu regresji logistycznej do wyzwania dla klasyfikatorów
- Maszyna wektorów nośnych
- Wykorzystanie maszyny wektorów nośnych do wyzwania dla klasyfikatorów
- Naiwny klasyfikator bayesowski
- Twierdzenie Bayesa
- Wyliczanie prawdopodobieństwa
- Reguły mnożenia dla koniunkcji zdarzeń
- Ogólne zasady mnożenia
- Zasady dodawania dla alternatywy zdarzeń
- Wykorzystanie naiwnego klasyfikatora bayesowskiego do wyzwania dla klasyfikatorów
- Zwycięzcą wśród algorytmów klasyfikacji jest.
- Algorytmy regresji
- Wyzwanie dla regresji
- Definicja problemu
- Dane historyczne
- Inżynieria cech w strumieniowym przetwarzaniu danych
- Regresja liniowa
- Prosta regresja liniowa
- Ewaluacja regresorów
- Regresja wielomianowa
- Wykorzystanie algorytmu regresji liniowej do wyzwania dla regresji
- Kiedy używa się regresji liniowej?
- Wady regresji liniowej
- Algorytm drzewa regresji
- Wykorzystanie drzewa regresji do wyzwania dla regresji
- Regresyjny algorytm wzmocnienia gradientowego
- Wykorzystanie algorytmu wzmocnienia gradientowego do wyzwania dla regresji
- Zwycięzcą wśród algorytmów regresji jest.
- Praktyczny przykład: jak przewidywać pogodę
- Podsumowanie
- Rozdział 8. Algorytmy sieci neuronowych
- Wprowadzenie do sieci neuronowych
- Tło historyczne
- Początki sztucznej inteligencji
- Sieci neuronowe
- Perceptrony
- Intuicyjne rozumienie sieci neuronowych
- Warstwowe architektury uczenia głębokiego
- Trenowanie sieci neuronowej
- Anatomia sieci neuronowej
- Definicja gradientu prostego
- Funkcje aktywacji
- Funkcja kroku
- Funkcja sigmoidalna
- Jednostronnie obcięta funkcja liniowa (funkcja ReLU)
- Tangens hiperboliczny (tanh)
- Znormalizowana funkcja wykładnicza (funkcja softmax)
- Narzędzia i modele
- Keras
- Wybór pomiędzy modelem sekwencyjnym a funkcjonalnym
- TensorFlow
- Podstawowe pojęcia TensorFlow
- Matematyka tensorów
- Rodzaje sieci neuronowych
- Sieć konwolucyjna
- Generatywne sieci przeciwstawne
- Uczenie transferowe
- Studium przypadku - użycie uczenia głębokiego do wykrywania oszustw
- Metodyka
- Podsumowanie
- Wprowadzenie do sieci neuronowych
- Rozdział 9. Algorytmy nienadzorowanego języka naturalnego
- Wprowadzenie do przetwarzania języka naturalnego
- Terminologia przetwarzania języka naturalnego
- Wstępne przetwarzanie tekstu w NLP
- Czyszczenie danych przy użyciu Pythona
- Macierz słowo - dokument
- Macierz TF-IDF
- Podsumowanie i omówienie wyników
- Wprowadzenie do wektorów słów
- Implementacja osadzania słów za pomocą metody Word2Vec
- Interpretowanie wartości podobieństwa
- Zalety i wady Word2Vec
- Studium przypadku - analiza sentymentu w recenzjach restauracji
- Import potrzebnych bibliotek i załadowanie zbioru danych
- Budowa czystego korpusu - wstępne przetwarzanie danych
- Konwersja danych tekstowych na cechy numeryczne
- Analiza wyników
- Zastosowania NLP
- Podsumowanie
- Rozdział 10. Modele sekwencyjne
- Ewolucja zaawansowanych technik modelowania sekwencyjnego
- Autokodery
- Kodowanie automatycznego kodera
- Przygotowanie środowiska
- Model Seq2Seq
- Koder
- Wektor myśli
- Dekoder
- Tokeny specjalne w Seq2Seq
- Dylemat informacyjnego wąskiego gardła
- Mechanizm atencji
- Czym jest atencja w sieciach neuronowych
- Trzy kluczowe aspekty mechanizmów atencji
- Mechanizmy atencji - szczegóły
- Ograniczenia mechanizmów atencji
- Samouwaga
- Wagi atencji
- Koder - dwukierunkowe sieci RNN
- Wektor myśli
- Dekoder - zwykłe sieci RNN
- Szkolenie a inferencja
- Transformatory - kolejny po samouwadze etap ewolucji sieci neuronowych
- Jakie są największe zalety transformatorów
- Analiza kodu w Pythonie
- Interpretacja wyników
- Duże modele językowe
- Atencja w modelach LLM
- GPT i BERT - najbardziej znane modele NLP
- Tworzenie zaawansowanych modeli LLM przy użyciu głębokich i szerokich modeli
- Bottom of Form
- Podsumowanie
- Rozdział 11. Zaawansowane modelowanie sekwencyjne
- Ewolucja zaawansowanych technik modelowania sekwencyjnego
- Autokodery
- Kodowanie automatycznego kodera
- Przygotowanie środowiska
- Model Seq2Seq
- Koder
- Wektor myśli
- Dekoder
- Tokeny specjalne w Seq2Seq
- Dylemat informacyjnego wąskiego gardła
- Mechanizm atencji
- Czym jest atencja w sieciach neuronowych
- Trzy kluczowe aspekty mechanizmów atencji
- Mechanizmy atencji - szczegóły
- Ograniczenia mechanizmów atencji
- Samouwaga
- Wagi atencji
- Koder - dwukierunkowe sieci RNN
- Wektor myśli
- Dekoder - zwykłe sieci RNN
- Szkolenie a inferencja
- Transformatory - kolejny po samouwadze etap ewolucji sieci neuronowych
- Jakie są największe zalety transformatorów
- Analiza kodu w Pythonie
- Interpretacja wyników
- Duże modele językowe
- Atencja w modelach LLM
- GPT i BERT - najbardziej znane modele NLP
- Tworzenie zaawansowanych modeli LLM przy użyciu głębokich i szerokich modeli
- Bottom of Form
- Podsumowanie
Część 3. Zagadnienia zaawansowane
- Rozdział 12. Systemy rekomendacji
- Wprowadzenie do systemów rekomendacji
- Typy systemów rekomendacji
- Systemy rekomendacji oparte na treści
- Systemy rekomendacji oparte na filtrowaniu kooperacyjnym
- Hybrydowe systemy rekomendacji
- Ograniczenia systemów rekomendacji
- Zimny start
- Wymagania dotyczące metadanych
- Problem rzadkości danych
- Obosieczny miecz wpływu społecznościowego w systemach rekomendacji
- Obszary praktycznych zastosowań
- Mistrzowskie wykorzystanie rekomendacji opartych na danych przez Netfliksa
- Ewolucja systemu rekomendacji Amazona
- Przykład praktyczny - tworzenie systemu rekomendacji
- 1. Przygotowanie środowiska
- 2. Ładowanie danych - recenzji i tytułów
- 3. Połączenie danych - tworzenie kompletnego widoku
- 4. Analiza opisowa - wyciąganie wniosków na podstawie ocen
- 5. Przygotowanie do generowania rekomendacji - tworzenie macierzy
- 6. Testowanie systemu - rekomendowanie filmów
- Podsumowanie
- Rozdział 13. Algorytmiczne przetwarzanie danych
- Wprowadzenie do algorytmów danych
- Twierdzenie CAP w kontekście algorytmów danych
- Przechowywanie danych w systemach rozproszonych
- Twierdzenie CAP i kompresja danych
- Twierdzenie CAP
- Systemy CA
- Systemy AP
- Systemy CP
- Algorytmy kompresji danych
- Techniki kompresji bezstratnej
- Praktyczny przykład - zarządzenie danymi w AWS, czyli koncentracja na twierdzeniu CAP i algorytmach kompresji
- 1. Zastosowanie twierdzenia CAP
- 2. Algorytmy kompresji
- 3. Ocena korzyści
- Podsumowanie
- Wprowadzenie do algorytmów danych
- Rozdział 14. Kryptografia
- Wprowadzenie do kryptografii
- Waga najsłabszego ogniwa
- Terminologia
- Wymagania bezpieczeństwa
- Podstawy projektowania szyfrów
- Rodzaje technik kryptograficznych
- Kryptograficzna funkcja skrótu
- Szyfrowanie symetryczne
- Szyfrowanie asymetryczne
- Przykład - kwestie bezpieczeństwa we wdrażaniu modelu uczenia maszynowego
- Atak man-in-the-middle
- Obrona przed techniką masquerading
- Szyfrowanie danych i modelu
- Podsumowanie
- Wprowadzenie do kryptografii
- Rozdział 15. Algorytmy przetwarzania danych w dużej skali
- Wprowadzenie do algorytmów wielkoskalowych
- Charakterystyka wydajnej infrastruktury dla algorytmów wielkoskalowych
- Elastyczność
- Cechy dobrze zaprojektowanego algorytmu wielkoskalowego
- Strategia przetwarzania przez wiele zasobów
- Teoretyczne możliwości przetwarzania równoległego
- Prawo Amdahla
- Wyprowadzanie prawa Amdahla
- CUDA - wykorzystanie architektury GPU do przetwarzania równoległego
- Przetwarzanie klastrowe przy użyciu Apache Spark
- Jak Apache Spark wspomaga wykonywanie algorytmów wielkoskalowych
- Przetwarzanie rozproszone
- Przetwarzanie w pamięci
- Algorytmy wielkoskalowe w przetwarzaniu chmurowym
- Przykład
- Podsumowanie
- Rozdział 16. Uwagi praktyczne
- Problemy dotyczące rozwiązań algorytmicznych
- Oczekiwać nieoczekiwanego
- Porażka bota sztucznej inteligencji Twittera
- Transparentność algorytmu
- Algorytmy uczenia maszynowego i transparentność
- Etyka i algorytmy
- Problemy z algorytmami uczącymi się
- Znaczenie kwestii etycznych
- Czynniki wpływające na rozwiązania algorytmiczne
- Ograniczanie stronniczości modeli
- Kiedy używać algorytmów
- Zdarzenia według teorii czarnego łabędzia i ich wpływ na algorytmy
- Podsumowanie
- Problemy dotyczące rozwiązań algorytmicznych
Kategoria: | Programowanie |
Zabezpieczenie: |
Watermark
|
ISBN: | 978-83-289-1110-9 |
Rozmiar pliku: | 15 MB |