В области науки о данных и машинного обучения Python стал языком выбора для многих разработчиков и исследователей благодаря лаконичному синтаксису и мощной библиотечной поддержке. Среди множества библиотек машинного обучения Python scikit-learn стала одной из самых популярных библиотек благодаря простоте использования, гибкости и мощному набору алгоритмов. В этой статье будут глубоко изучены принципы и применение scikit-learn, а также продемонстрированы его мощные возможности в решении практических задач на примере проектов.
scikit-learn — это библиотека машинного обучения с открытым исходным кодом на основе Python, созданная на основе библиотек научных вычислений, таких как NumPy, SciPy и matplotlib. Он предоставляет простые и эффективные инструменты интеллектуального анализа и анализа данных, включая алгоритмы машинного обучения, такие как классификация, регрессия, кластеризация и уменьшение размерности.
scikit-learn реализует множество алгоритмов машинного обучения, включая, помимо прочего:
scikit-learnОбеспечивает унифицированный интерфейс для Модель обученияи Модель оценкипроизводительность。использоватьfit
метод Модель обучения,использоватьpredict
метод进行预测。также,scikit-learn также предоставляет различные показатели оценки,Например, уровень точности, уровень отзыва, оценка F1 и т. д.,и инструменты перекрестной проверки для Модель оценкиспособность к обобщению。
Разработка функций — это ключевой этап в машинном обучении. scikit-learn предоставляет множество инструментов для извлечения и преобразования функций, таких как:
Классификация набора данных Iris с использованием scikit-learn. Точное предсказание видов ирисов достигается с помощью таких алгоритмов, как логистическая регрессия, дерево решений или случайный лес.
Постройте регрессионную модель для прогнозирования цен на жилье. Используя набор данных о ценах на жилье в Бостоне, повысьте точность прогнозов за счет выбора функций и настройки модели.
Используйте алгоритм кластеризации K-средних для сегментации данных о клиентах, чтобы помочь компаниям лучше понять группы клиентов и добиться точного маркетинга.
Давайте продемонстрируем использование scikit-learn на конкретных примерах проектов. Вот простой пример использования scikit-learn для классификации набора данных Iris.
Сначала нам нужно загрузить набор данных радужной оболочки глаза. scikit-learn предоставляет встроенную функцию загрузки набора данных.
from sklearn.datasets import load\_iris
iris = load\_iris()
X, y = iris.data, iris.target
Прежде чем приступить к обучению модели, полезно понять основную статистику набора данных.
print("Feature names:", iris.feature\_names)
print("Target names:", iris.target\_names)
print("Shape of the data:", X.shape)
Разделите набор данных на обучающий набор и тестовый набор.
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)
Выберите классификатор, здесь мы используем классификатор дерева решений.
from sklearn.tree import DecisionTreeClassifier
clf = DecisionTreeClassifier(random\_state=42)
Обучите модель, используя данные обучающего набора.
clf.fit(X\_train, y\_train)
Оцените производительность модели на тестовом наборе.
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))
Просмотрите важность отдельных функций в классификаторе дерева решений.
importances = clf.feature\_importances\_
feature\_names = iris.feature\_names
print("Feature importances:")
for name, importance in zip(feature\_names, importances):
print(f"{name}: {importance}")
использоватьplot\_tree
функция Визуальное дерево решений。
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. Если вы еще не установили его, вы можете установить его с помощью следующей команды:
pip install scikit-learn matplotlib
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 на более сложном примере проекта: использовании машинного обучения для прогнозирования цен на жилье. Этот случай будет включать предварительную обработку данных, разработку функций, выбор модели, настройку параметров и оценку модели.
Загрузите набор данных о ценах на жилье в Бостоне и проведите предварительное исследование данных.
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())
Обработайте пропущенные значения и выбросы и при необходимости выполните нормализацию данных.
# Проверьте наличие пропущенных значений
print(df.isnull().sum())
# стандартизированные функции
from sklearn.preprocessing import StandardScaler
scaler = StandardScaler()
features = df.columns[:-1] # Предположим, что последний столбец является целевой переменной.
df[features] = scaler.fit\_transform(df[features])
Создавайте новые функции или преобразуйте существующие функции, чтобы улучшить производительность модели.
# Предположим, мы создаем новый признак, например среднее количество комнат в доме.
df['AveRooms'] = df['RM'] / df['TAX']
Разделите набор данных на обучающий набор и тестовый набор.
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)
Выберите несколько моделей и используйте поиск по сетке для настройки параметров.
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\_)
Обучите модель, используя оптимальные параметры, и оцените производительность на тестовом наборе.
best\_model = grid\_search.best\_estimator\_
y\_pred = best\_model.predict(X\_test)
# Модель оценки
print("Mean squared error:", mean\_squared\_error(y\_test, y\_pred))
Анализируйте результаты прогнозирования модели, такие как графики остатков и т. д.
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()
На основе результатов оценки модели рассмотрите возможность ее дальнейшей оптимизации, например, выбора функций, объединения моделей и т. д.
Наконец, обученная модель развертывается в производственной среде для прогнозирования в реальном времени.
Этот случай демонстрирует более сложный процесс проекта машинного обучения, включая предварительную обработку данных, разработку функций, выбор и настройку модели, оценку и анализ результатов. В реальных проектах также может потребоваться рассмотрение таких вопросов, как интерпретируемость модели, онлайн-обновление модели и крупномасштабная обработка данных.
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()
Эти два примера показывают, как использовать scikit-learn для основных задач машинного обучения. Первый пример — это задача классификации набора данных радужной оболочки глаза, а второй пример — задача регрессии набора данных о ценах на жилье в Бостоне. Надеюсь, эти примеры помогут вам лучше понять использование scikit-learn.
scikit-learn — одна из наиболее полных и широко используемых библиотек машинного обучения в Python. Простота использования и мощный набор алгоритмов делают ее лучшим выбором для начала работы и практики машинного обучения. Я надеюсь, что благодаря этой статье вы сможете глубже понять scikit-learn и использовать его мощные функции в реальных проектах.