Машинно обучение с Python и Scikit-learn: Въведение в основни алгоритми

09.05.2025 Admin 164

Машинното обучение (МО) е завладяваща област на изкуствения интелект, която позволява на компютрите да се учат от данни, без да бъдат изрично програмирани. Python, с богатата си екосистема от библиотеки, е един от най-популярните езици за МО. Сред тези библиотеки, Scikit-learn се откроява като мощен и лесен за използване инструмент, предоставящ имплементации на много класически и съвременни алгоритми за машинно обучение.

Тази статия ще ви въведе в основните концепции на машинното обучение и ще ви покаже как да използвате Scikit-learn за имплементиране на някои от най-фундаменталните алгоритми за класификация и регресия.

Основни концепции в машинното обучение:

Преди да се потопим в кода, нека разгледаме някои ключови термини:

  • Данни (Data): Основата на всяка задача за машинно обучение. Обикновено се представят като таблици, където редовете са примери (samples) или инстанции, а колоните са признаци (features).
  • Целева променлива (Target Variable) / Етикет (Label): Това е променливата, която искаме да предскажем. При задачи за класификация това са категории (например "котка" или "куче"), а при задачи за регресия това са непрекъснати стойности (например цена на къща).
  • Обучение (Training): Процесът, при който алгоритъмът за машинно обучение се "учи" от тренировъчни данни, за да намери връзки между признаците и целевата променлива.
  • Модел (Model): Резултатът от процеса на обучение. Това е функция или структура, която може да прави предсказания върху нови, невиждани данни.
  • Предсказание (Prediction): Резултатът, генериран от обучен модел върху нови данни.
  • Оценка (Evaluation): Процесът на измерване на ефективността на обучен модел върху тестови данни. Използват се различни метрики в зависимост от типа на задачата (например точност, прецизност, recall, F1-score за класификация; средна квадратична грешка, средна абсолютна грешка за регресия).

Scikit-learn: Вашият приятел в машинното обучение с Python:

Scikit-learn е библиотека за машинно обучение с отворен код за езика за програмиране Python. Тя предоставя ефективни инструменти за анализ на данни и машинно обучение, включително:

  • Разнообразие от алгоритми за класификация, регресия, клъстериране, намаляване на размерността и други.
  • Инструменти за предварителна обработка на данни (например скалиране, кодиране на категорийни признаци).
  • Инструменти за разделяне на данни на тренировъчни и тестови множества.
  • Метрики за оценка на модели.
  • Инструменти за избор на модел и настройка на хиперпараметри.

Основни алгоритми за класификация:

Класификацията е задача за предсказване на категорийни етикети за дадени данни. Ето някои от основните алгоритми, имплементирани в Scikit-learn:

  1. Логистична регресия (Logistic Regression): Въпреки името си, това е линеен модел за класификация, който използва логистическа функция за предсказване на вероятността даден пример да принадлежи към определена класа.

    Python
    from sklearn.linear_model import LogisticRegression
    from sklearn.model_selection import train_test_split
    from sklearn.metrics import accuracy_score
    from sklearn.datasets import load_iris
    
    # Зареждане на Iris dataset (класификационен проблем)
    iris = load_iris()
    X, y = iris.data, iris.target
    
    # Разделяне на данните на тренировъчни и тестови множества
    X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)
    
    # Създаване и обучение на модел на логистична регресия
    model = LogisticRegression(solver='liblinear', multi_class='ovr')
    model.fit(X_train, y_train)
    
    # Правене на предсказания върху тестовите данни
    y_pred = model.predict(X_test)
    
    # Оценка на точността
    accuracy = accuracy_score(y_test, y_pred)
    print(f"Точност на логистична регресия: {accuracy:.2f}")
    
  2. Метод на k-най-близките съседи (K-Nearest Neighbors - KNN): Непараметричен алгоритъм, който класифицира нова точка от данни въз основа на класовете на k-те най-близки точки в тренировъчните данни (според определена метрика за разстояние).

    Python
    from sklearn.neighbors import KNeighborsClassifier
    
    # Създаване и обучение на KNN модел (k=3)
    knn_model = KNeighborsClassifier(n_neighbors=3)
    knn_model.fit(X_train, y_train)
    
    # Правене на предсказания
    knn_y_pred = knn_model.predict(X_test)
    
    # Оценка на точността
    knn_accuracy = accuracy_score(y_test, knn_y_pred)
    print(f"Точност на KNN: {knn_accuracy:.2f}")
    
  3. Дървета на решенията (Decision Trees): Дървовидна структура, която разделя данните въз основа на поредица от въпроси (правила), докато се достигне до крайно решение (клас).

    Python
    from sklearn.tree import DecisionTreeClassifier
    
    # Създаване и обучение на модел на дърво на решенията
    tree_model = DecisionTreeClassifier(random_state=42)
    tree_model.fit(X_train, y_train)
    
    # Правене на предсказания
    tree_y_pred = tree_model.predict(X_test)
    
    # Оценка на точността
    tree_accuracy = accuracy_score(y_test, tree_y_pred)
    print(f"Точност на дърво на решенията: {tree_accuracy:.2f}")
    

Основни алгоритми за регресия:

Регресията е задача за предсказване на непрекъснати стойности. Ето някои основни алгоритми за регресия в Scikit-learn:

  1. Линейна регресия (Linear Regression): Линеен модел, който се опитва да намери най-добрата права линия (или хиперравнина в многомерното пространство), която описва връзката между признаците и целевата променлива.

from sklearn.linear_model import LinearRegression from sklearn.model_selection import train_test_split from sklearn.metrics 1 import mean_squared_error from sklearn.datasets import 2 load_diabetes   

diabetes = load_diabetes()
X_reg, y_reg = diabetes.data, diabetes.target

# Разделяне на данните
X_reg_train, X_reg_test, y_reg_train, y_reg_test = train_test_split(X_reg, y_reg, test_size=0.3, random_state=42)

# Създаване и обучение на модел на линейна регресия
reg_model = LinearRegression()
reg_model.fit(X_reg_train, y_reg_train)

# Правене на предсказания
y_reg_pred = reg_model.predict(X_reg_test)

# Оценка на средната квадратична грешка
mse = mean_squared_error(y_reg_test, y_reg_pred)
print(f"Средна квадратична грешка на линейна регресия: {mse:.2f}")
```
  1. Полиномна регресия (Polynomial Regression): Разширение на линейната регресия, което моделира нелинейни връзки между признаците и целевата променлива чрез добавяне на полиномни характеристики.

    Python
    from sklearn.preprocessing import PolynomialFeatures
    from sklearn.pipeline import Pipeline
    
    # Създаване на pipeline за полиномна регресия (степен 2)
    poly_pipeline = Pipeline([
        ('poly', PolynomialFeatures(degree=2)),
        ('linear', LinearRegression())
    ])
    poly_pipeline.fit(X_reg_train, y_reg_train)
    
    # Правене на предсказания
    poly_y_pred = poly_pipeline.predict(X_reg_test)
    
    # Оценка на средната квадратична грешка
    poly_mse = mean_squared_error(y_reg_test, poly_y_pred)
    print(f"Средна квадратична грешка на полиномна регресия: {poly_mse:.2f}")
    
  2. Регресионни дървета на решенията (Decision Tree Regressors): Аналогично на класификационните дървета, но предсказват непрекъснати стойности, като разделят данните въз основа на правила и предсказват средната стойност на целевата променлива в листата на дървото.

    Python
    from sklearn.tree import DecisionTreeRegressor
    
    # Създаване и обучение на модел на регресионно дърво на решенията
    tree_reg_model = DecisionTreeRegressor(random_state=42)
    tree_reg_model.fit(X_reg_train, y_reg_train)
    
    # Правене на предсказания
    tree_reg_y_pred = tree_reg_model.predict(X_reg_test)
    
    # Оценка на средната квадратична грешка
    tree_reg_mse = mean_squared_error(y_reg_test, tree_reg_y_pred)
    print(f"Средна квадратична грешка на регресионно дърво на решенията: {tree_reg_mse:.2f}")
    

Следващи стъпки:

Това е само въведение в основните алгоритми за машинно обучение, имплементирани в Scikit-learn. За да продължите своето пътешествие в тази вълнуваща област, ви препоръчваме да изследвате:

  • Други алгоритми: Scikit-learn предлага много повече алгоритми за класификация (например Support Vector Machines, Naive Bayes, Random Forests), регресия (например Random Forests, Gradient Boosting) и други задачи (например клъстериране с K-Means).
  • Предварителна обработка на данни: Научете как да почиствате, трансформирате и скалирате данните си, за да подобрите ефективността на моделите.
  • Оценка на модели: Запознайте се с различни метрики за оценка и как да ги интерпретирате.
  • Избор на модел и настройка на хиперпараметри: Разберете как да избирате най-подходящия модел за вашата задача и как да настройвате неговите параметри за оптимална производителност.
  • Pipeline-и: Използвайте Pipeline-и в Scikit-learn за организиране и автоматизиране на работния процес на машинно обучение.

Машинното обучение е динамична и бързо развиваща се област. Python и Scikit-learn предоставят мощна и достъпна платформа за навлизане в този свят. С постоянна практика и учене ще можете да прилагате тези алгоритми за решаване на реални проблеми и създаване на интелигентни системи.

Последни новини

15 Apr 2026

Безплатни обучения от топ експерти — ако работодателят ви е партньор на Нет Ит

.article-wrap { width: 100%; margin: 0; padding: 2.5rem 0; } .article-tag { display: inline-block; font-size: 11px; font-weight: 500; letter-spacing: 0.12em; text-transform: uppercase; color: #185FA5; background: #E6F1FB; padding: 4px 12px; border-radius: 4px; margin-bottom: 1.25rem; } .article-wrap h1 { font-size: clamp(24px, 5vw, 38px);...
30 Jan 2026

Как да изградим силна общност около играта

Силната игрова общност е един от най-важните фактори за успеха на съвременните видеоигри. Тя не само увеличава ангажираността на играчите, но и удължава живота на играта, стимулира маркетинг...