От начала до освоения машинного обучения Python: практическое руководство по scikit-learn
От начала до освоения машинного обучения Python: практическое руководство по scikit-learn

введение

В области науки о данных и машинного обучения Python стал языком выбора для многих разработчиков и исследователей благодаря лаконичному синтаксису и мощной библиотечной поддержке. Среди множества библиотек машинного обучения Python scikit-learn стала одной из самых популярных библиотек благодаря простоте использования, гибкости и мощному набору алгоритмов. В этой статье будут глубоко изучены принципы и применение scikit-learn, а также продемонстрированы его мощные возможности в решении практических задач на примере проектов.

1. Введение в scikit-learn

scikit-learn — это библиотека машинного обучения с открытым исходным кодом на основе Python, созданная на основе библиотек научных вычислений, таких как NumPy, SciPy и matplotlib. Он предоставляет простые и эффективные инструменты интеллектуального анализа и анализа данных, включая алгоритмы машинного обучения, такие как классификация, регрессия, кластеризация и уменьшение размерности.

2. Введение принципа

2.1. Основа алгоритма.

scikit-learn реализует множество алгоритмов машинного обучения, включая, помимо прочего:

  • **Линейная модель**: например, линейная регрессия, логистическая регрессия и т. д.
  • **Дерево решений**: используется для задач классификации и регрессии.
  • **Машина опорных векторов** (SVM): используется для задач классификации и регрессии.
  • **Случайный лес**: метод ансамблевого обучения, состоящий из нескольких деревьев решений.
  • **Алгоритм кластеризации**: например, K-средние, иерархическая кластеризация и т. д.
  • **Методы уменьшения размерности**: такие как анализ главных компонент (PCA) и линейный дискриминантный анализ (LDA).

2.2. Обучение и оценка модели.

scikit-learnОбеспечивает унифицированный интерфейс для Модель обученияи Модель оценкипроизводительность。использоватьfitметод Модель обучения,использоватьpredictметод进行预测。также,scikit-learn также предоставляет различные показатели оценки,Например, уровень точности, уровень отзыва, оценка F1 и т. д.,и инструменты перекрестной проверки для Модель оценкиспособность к обобщению。

2.3. Разработка функций

Разработка функций — это ключевой этап в машинном обучении. scikit-learn предоставляет множество инструментов для извлечения и преобразования функций, таких как:

  • **Выбор функций**: выберите функции, которые оказывают наибольшее влияние на производительность модели.
  • **Извлечение функций**: извлечение новых функций из необработанных данных.
  • **Масштабирование функций**: стандартизируйте или нормализуйте функции для повышения производительности модели.

3. Обзор проектов

3.1. Классификация цветов ирисов.

Классификация набора данных Iris с использованием scikit-learn. Точное предсказание видов ирисов достигается с помощью таких алгоритмов, как логистическая регрессия, дерево решений или случайный лес.

3.2. Прогноз цен на жилье.

Постройте регрессионную модель для прогнозирования цен на жилье. Используя набор данных о ценах на жилье в Бостоне, повысьте точность прогнозов за счет выбора функций и настройки модели.

3.3. Сегментация клиентов.

Используйте алгоритм кластеризации K-средних для сегментации данных о клиентах, чтобы помочь компаниям лучше понять группы клиентов и добиться точного маркетинга.

4. Практические предложения

  • **Понимание данных**. Глубоко поймите характеристики и распределение набора данных, чтобы обеспечить основу для разработки функций и выбора модели.
  • **Выбор модели**: выберите подходящий алгоритм в зависимости от типа проблемы.
  • **Настройка параметров**. Используйте такие методы, как поиск по сетке (GridSearchCV), для настройки параметров и получения наилучшей производительности модели.
  • **Оценка модели**. Используйте такие методы, как перекрестная проверка, чтобы оценить способность модели к обобщению.

Давайте продемонстрируем использование scikit-learn на конкретных примерах проектов. Вот простой пример использования scikit-learn для классификации набора данных Iris.

5. Подробное объяснение случая 1: Классификация набора данных радужной оболочки глаза.

5.1. Загрузка данных.

Сначала нам нужно загрузить набор данных радужной оболочки глаза. scikit-learn предоставляет встроенную функцию загрузки набора данных.

Язык кода:python
кодКоличество запусков:0
копировать
from sklearn.datasets import load\_iris

iris = load\_iris()

X, y = iris.data, iris.target

5.2. Исследование данных.

Прежде чем приступить к обучению модели, полезно понять основную статистику набора данных.

Язык кода:python
кодКоличество запусков:0
копировать
print("Feature names:", iris.feature\_names)

print("Target names:", iris.target\_names)

print("Shape of the data:", X.shape)

5.3. Разделение данных.

Разделите набор данных на обучающий набор и тестовый набор.

Язык кода:python
кодКоличество запусков:0
копировать
from sklearn.model\_selection import train\_test\_split



X\_train, X\_test, y\_train, y\_test = train\_test\_split(X, y, test\_size=0.3, random\_state=42)

5.4. Выбор модели.

Выберите классификатор, здесь мы используем классификатор дерева решений.

Язык кода:python
кодКоличество запусков:0
копировать
from sklearn.tree import DecisionTreeClassifier



clf = DecisionTreeClassifier(random\_state=42)

5.5. Модельное обучение.

Обучите модель, используя данные обучающего набора.

Язык кода:python
кодКоличество запусков:0
копировать
clf.fit(X\_train, y\_train)

5.6. Оценка модели.

Оцените производительность модели на тестовом наборе.

Язык кода:python
кодКоличество запусков:0
копировать
from sklearn.metrics import classification\_report, accuracy\_score



y\_pred = clf.predict(X\_test)

print("Accuracy:", accuracy\_score(y\_test, y\_pred))

print(classification\_report(y\_test, y\_pred))

5.7 Важность функции

Просмотрите важность отдельных функций в классификаторе дерева решений.

Язык кода:python
кодКоличество запусков:0
копировать
importances = clf.feature\_importances\_

feature\_names = iris.feature\_names



print("Feature importances:")

for name, importance in zip(feature\_names, importances):

    print(f"{name}: {importance}")

5.8 Визуальное дерево решений

использоватьplot\_treeфункция Визуальное дерево решений。

Язык кода:python
кодКоличество запусков:0
копировать
from sklearn.tree import plot\_tree

import matplotlib.pyplot as plt



plt.figure(figsize=(12, 8))

plot\_tree(clf, filled=True, feature\_names=feature\_names, class\_names=iris.target\_names)

plt.show()

В этом примере показано, как использовать scikit-learn для реализации простого проекта машинного обучения, от загрузки данных до обучения модели, оценки и визуализации. В реальных приложениях вам может потребоваться выполнить дополнительные этапы предварительной обработки данных, разработки функций, настройки модели и проверки.

Обратите внимание: для запуска приведенного выше кода вам необходимо установить библиотеки scikit-learn и matplotlib. Если вы еще не установили его, вы можете установить его с помощью следующей команды:

Язык кода:bash
копировать
pip install scikit-learn matplotlib

5.9 Полный код

Язык кода:python
кодКоличество запусков:0
копировать
import numpy as np

import pandas as pd

from sklearn.datasets import load\_iris

from sklearn.model\_selection import train\_test\_split

from sklearn.tree import DecisionTreeClassifier

from sklearn.metrics import classification\_report, accuracy\_score

from sklearn.tree import plot\_tree

import matplotlib.pyplot as plt



# Загрузить данные

iris = load\_iris()

X, y = iris.data, iris.target



# Преобразование данных в Pandas DataFrame

df = pd.DataFrame(X, columns=iris.feature\_names)

df['target'] = y



# Раздел данных

X\_train, X\_test, y\_train, y\_test = train\_test\_split(df.iloc[:, :-1], df['target'], test\_size=0.3, random\_state=42)



# Создайте классификатор дерева решений

clf = DecisionTreeClassifier(random\_state=42)



# Модель обучения

clf.fit(X\_train, y\_train)



# Прогнозировать набор тестов

y\_pred = clf.predict(X\_test)



# Модель оценки

print("Accuracy:", accuracy\_score(y\_test, y\_pred))

print(classification\_report(y\_test, y\_pred))



# Важность функции

importances = clf.feature\_importances\_

feature\_names = iris.feature\_names



print("Feature importances:")

for name, importance in zip(feature\_names, importances):

    print(f"{name}: {importance}")



# Визуальное дерево решений

plt.figure(figsize=(12, 8))

plot\_tree(clf, filled=True, feature\_names=feature\_names, class\_names=iris.target\_names)

plt.show()

В этом случае предоставляется только базовая структура, которую, возможно, придется корректировать и оптимизировать в соответствии с конкретными потребностями реальных проектов.

Давайте продемонстрируем применение scikit-learn на более сложном примере проекта: использовании машинного обучения для прогнозирования цен на жилье. Этот случай будет включать предварительную обработку данных, разработку функций, выбор модели, настройку параметров и оценку модели.

6. Вариант проекта 2: Прогноз цен на жилье

6.1 Загрузка данных и предварительное исследование

Загрузите набор данных о ценах на жилье в Бостоне и проведите предварительное исследование данных.

Язык кода:python
кодКоличество запусков:0
копировать
from sklearn.datasets import load\_boston

import pandas as pd



boston = load\_boston()

df = pd.DataFrame(boston.data, columns=boston.feature\_names)

df['MEDV'] = boston.target



print(df.head())

print(df.describe())

6.2 Предварительная обработка данных

Обработайте пропущенные значения и выбросы и при необходимости выполните нормализацию данных.

Язык кода:python
кодКоличество запусков:0
копировать
# Проверьте наличие пропущенных значений

print(df.isnull().sum())



# стандартизированные функции

from sklearn.preprocessing import StandardScaler



scaler = StandardScaler()

features = df.columns[:-1]  # Предположим, что последний столбец является целевой переменной.

df[features] = scaler.fit\_transform(df[features])

6.3 Разработка функций

Создавайте новые функции или преобразуйте существующие функции, чтобы улучшить производительность модели.

Язык кода:python
кодКоличество запусков:0
копировать
# Предположим, мы создаем новый признак, например среднее количество комнат в доме.

df['AveRooms'] = df['RM'] / df['TAX']

6.4 Разделение данных

Разделите набор данных на обучающий набор и тестовый набор.

Язык кода:python
кодКоличество запусков:0
копировать
from sklearn.model\_selection import train\_test\_split



X = df[features]

y = df['MEDV']

X\_train, X\_test, y\_train, y\_test = train\_test\_split(X, y, test\_size=0.2, random\_state=42)

6.5 Выбор модели и настройка параметров

Выберите несколько моделей и используйте поиск по сетке для настройки параметров.

Язык кода:python
кодКоличество запусков:0
копировать
from sklearn.model\_selection import GridSearchCV

from sklearn.ensemble import RandomForestRegressor

from sklearn.metrics import mean\_squared\_error



# Определите модель и сетку параметров

model = RandomForestRegressor(random\_state=42)

param\_grid = {

    'n\_estimators': [50, 100, 200],

    'max\_depth': [None, 10, 20, 30],

    'min\_samples\_split': [2, 5, 10]

}



# поиск по сетке

grid\_search = GridSearchCV(estimator=model, param\_grid=param\_grid, cv=5, scoring='neg\_mean\_squared\_error')

grid\_search.fit(X\_train, y\_train)



# лучшие параметры

print("Best parameters:", grid\_search.best\_params\_)

6.6 Обучение и оценка модели

Обучите модель, используя оптимальные параметры, и оцените производительность на тестовом наборе.

Язык кода:python
кодКоличество запусков:0
копировать
best\_model = grid\_search.best\_estimator\_

y\_pred = best\_model.predict(X\_test)



# Модель оценки

print("Mean squared error:", mean\_squared\_error(y\_test, y\_pred))

6.7 Анализ результатов

Анализируйте результаты прогнозирования модели, такие как графики остатков и т. д.

Язык кода:python
кодКоличество запусков:0
копировать
import numpy as np

import matplotlib.pyplot as plt



residuals = y\_test - y\_pred

plt.scatter(y\_test, residuals)

plt.axhline(y=0, color='r', linestyle='--')

plt.xlabel('Observed')

plt.ylabel('Residuals')

plt.title('Residual Plot')

plt.show()

6.8 Оптимизация модели

На основе результатов оценки модели рассмотрите возможность ее дальнейшей оптимизации, например, выбора функций, объединения моделей и т. д.

6.9 Развертывание

Наконец, обученная модель развертывается в производственной среде для прогнозирования в реальном времени.

Этот случай демонстрирует более сложный процесс проекта машинного обучения, включая предварительную обработку данных, разработку функций, выбор и настройку модели, оценку и анализ результатов. В реальных проектах также может потребоваться рассмотрение таких вопросов, как интерпретируемость модели, онлайн-обновление модели и крупномасштабная обработка данных.

6.10 Полный код

Язык кода:python
кодКоличество запусков:0
копировать
import numpy as np

import pandas as pd

from sklearn.datasets import load\_boston

from sklearn.model\_selection import train\_test\_split, GridSearchCV

from sklearn.ensemble import RandomForestRegressor

from sklearn.preprocessing import StandardScaler

from sklearn.metrics import mean\_squared\_error

import matplotlib.pyplot as plt



# Загрузить данные

boston = load\_boston()

df = pd.DataFrame(boston.data, columns=boston.feature\_names)

df['MEDV'] = boston.target



# Предварительная обработка данных

# стандартизированные функции

scaler = StandardScaler()

features = df.columns[:-1]  # Предположим, что последний столбец является целевой переменной.

df[features] = scaler.fit\_transform(df[features])



# Раздел данных

X = df[features]

y = df['MEDV']

X\_train, X\_test, y\_train, y\_test = train\_test\_split(X, y, test\_size=0.2, random\_state=42)



# Создайте случайный лесной регрессор

model = RandomForestRegressor(random\_state=42)



# параметрическая сетка

param\_grid = {

    'n\_estimators': [50, 100, 200],

    'max\_depth': [None, 10, 20, 30],

    'min\_samples\_split': [2, 5, 10]

}



# поиск по сетке

grid\_search = GridSearchCV(estimator=model, param\_grid=param\_grid, cv=5, scoring='neg\_mean\_squared\_error')

grid\_search.fit(X\_train, y\_train)



# лучшие параметры

print("Best parameters:", grid\_search.best\_params\_)



# использоватьлучшие параметры Модель обучения

best\_model = grid\_search.best\_estimator\_



# Прогнозировать набор тестов

y\_pred = best\_model.predict(X\_test)



# Модель оценки

print("Mean squared error:", mean\_squared\_error(y\_test, y\_pred))



# остаточный участок

residuals = y\_test - y\_pred

plt.scatter(y\_test, residuals)

plt.axhline(y=0, color='r', linestyle='--')

plt.xlabel('Observed')

plt.ylabel('Residuals')

plt.title('Residual Plot')

plt.show()

7. Заключение

Эти два примера показывают, как использовать scikit-learn для основных задач машинного обучения. Первый пример — это задача классификации набора данных радужной оболочки глаза, а второй пример — задача регрессии набора данных о ценах на жилье в Бостоне. Надеюсь, эти примеры помогут вам лучше понять использование scikit-learn.

scikit-learn — одна из наиболее полных и широко используемых библиотек машинного обучения в Python. Простота использования и мощный набор алгоритмов делают ее лучшим выбором для начала работы и практики машинного обучения. Я надеюсь, что благодаря этой статье вы сможете глубже понять scikit-learn и использовать его мощные функции в реальных проектах.

boy illustration
Неразрушающее увеличение изображений одним щелчком мыши, чтобы сделать их более четкими артефактами искусственного интеллекта, включая руководства по установке и использованию.
boy illustration
Копикодер: этот инструмент отлично работает с Cursor, Bolt и V0! Предоставьте более качественные подсказки для разработки интерфейса (создание навигационного веб-сайта с использованием искусственного интеллекта).
boy illustration
Новый бесплатный RooCline превосходит Cline v3.1? ! Быстрее, умнее и лучше вилка Cline! (Независимое программирование AI, порог 0)
boy illustration
Разработав более 10 проектов с помощью Cursor, я собрал 10 примеров и 60 подсказок.
boy illustration
Я потратил 72 часа на изучение курсорных агентов, и вот неоспоримые факты, которыми я должен поделиться!
boy illustration
Идеальная интеграция Cursor и DeepSeek API
boy illustration
DeepSeek V3 снижает затраты на обучение больших моделей
boy illustration
Артефакт, увеличивающий количество очков: на основе улучшения характеристик препятствия малым целям Yolov8 (SEAM, MultiSEAM).
boy illustration
DeepSeek V3 раскручивался уже три дня. Сегодня я попробовал самопровозглашенную модель «ChatGPT».
boy illustration
Open Devin — инженер-программист искусственного интеллекта с открытым исходным кодом, который меньше программирует и больше создает.
boy illustration
Эксклюзивное оригинальное улучшение YOLOv8: собственная разработка SPPF | SPPF сочетается с воспринимаемой большой сверткой ядра UniRepLK, а свертка с большим ядром + без расширения улучшает восприимчивое поле
boy illustration
Популярное и подробное объяснение DeepSeek-V3: от его появления до преимуществ и сравнения с GPT-4o.
boy illustration
9 основных словесных инструкций по доработке академических работ с помощью ChatGPT, эффективных и практичных, которые стоит собрать
boy illustration
Вызовите deepseek в vscode для реализации программирования с помощью искусственного интеллекта.
boy illustration
Познакомьтесь с принципами сверточных нейронных сетей (CNN) в одной статье (суперподробно)
boy illustration
50,3 тыс. звезд! Immich: автономное решение для резервного копирования фотографий и видео, которое экономит деньги и избавляет от беспокойства.
boy illustration
Cloud Native|Практика: установка Dashbaord для K8s, графика неплохая
boy illustration
Краткий обзор статьи — использование синтетических данных при обучении больших моделей и оптимизации производительности
boy illustration
MiniPerplx: новая поисковая система искусственного интеллекта с открытым исходным кодом, спонсируемая xAI и Vercel.
boy illustration
Конструкция сервиса Synology Drive сочетает проникновение в интрасеть и синхронизацию папок заметок Obsidian в облаке.
boy illustration
Центр конфигурации————Накос
boy illustration
Начинаем с нуля при разработке в облаке Copilot: начать разработку с минимальным использованием кода стало проще
boy illustration
[Серия Docker] Docker создает мультиплатформенные образы: практика архитектуры Arm64
boy illustration
Обновление новых возможностей coze | Я использовал coze для создания апплета помощника по исправлению домашних заданий по математике
boy illustration
Советы по развертыванию Nginx: практическое создание статических веб-сайтов на облачных серверах
boy illustration
Feiniu fnos использует Docker для развертывания личного блокнота Notepad
boy illustration
Сверточная нейронная сеть VGG реализует классификацию изображений Cifar10 — практический опыт Pytorch
boy illustration
Начало работы с EdgeonePages — новым недорогим решением для хостинга веб-сайтов
boy illustration
[Зона легкого облачного игрового сервера] Управление игровыми архивами
boy illustration
Развертывание SpringCloud-проекта на базе Docker и Docker-Compose