Scikit-learn 是一个用于机器学习的 Python 库,它提供了简单而高效的工具来进行数据挖掘和数据分析。以下是 Scikit-learn 的基础教程,包括安装、基本操作和一些常见的机器学习任务。
安装 Scikit-learn
在安装 Scikit-learn 之前,需要确保已经安装了 Python 和 pip。然后,可以通过以下命令安装 Scikit-learn:
pip install scikit-learn
导入 Scikit-learn
在使用 Scikit-learn 之前,需要导入相应的模块:
import numpy as np
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.linear_model import LinearRegression
from sklearn.metrics import mean_squared_error, accuracy_score
数据准备
在进行机器学习任务之前,首先需要准备数据。以下是使用 Pandas 导入和处理数据的示例:
# 使用 Pandas 导入数据
data = pd.read_csv('data.csv')
# 查看数据集的信息
print(data.head())
print(data.info())
# 分割特征和标签
X = data.iloc[:, :-1].values # 特征
y = data.iloc[:, -1].values # 标签
数据分割
将数据分割为训练集和测试集:
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
数据预处理
标准化特征:
scaler = StandardScaler()
X_train = scaler.fit_transform(X_train)
X_test = scaler.transform(X_test)
模型训练与预测
以下是训练线性回归模型的示例:
# 创建线性回归模型
model = LinearRegression()
# 训练模型
model.fit(X_train, y_train)
# 预测
y_pred = model.predict(X_test)
评估模型
使用均方误差(MSE)评估线性回归模型:
mse = mean_squared_error(y_test, y_pred)
print(f'Mean Squared Error: {mse}')
如果是分类任务,可以使用准确率评估:
accuracy = accuracy_score(y_test, y_pred)
print(f'Accuracy: {accuracy}')
深入 Scikit-learn
数据预处理
Scikit-learn 提供了多种数据预处理的方法,包括特征缩放、编码和缺失值处理等。
特征缩放
使用 StandardScaler 进行标准化:
from sklearn.preprocessing import StandardScaler
scaler = StandardScaler()
X_scaled = scaler.fit_transform(X)
编码分类特征
使用 LabelEncoder 或 OneHotEncoder 进行编码:
from sklearn.preprocessing import LabelEncoder, OneHotEncoder
# Label Encoding
label_encoder = LabelEncoder()
y_encoded = label_encoder.fit_transform(y)
# One-Hot Encoding
one_hot_encoder = OneHotEncoder()
X_encoded = one_hot_encoder.fit_transform(X_categorical)
处理缺失值
使用 SimpleImputer 填充缺失值:
from sklearn.impute import SimpleImputer
imputer = SimpleImputer(strategy='mean')
X_imputed = imputer.fit_transform(X)
模型选择
Scikit-learn 提供了多种模型,包括线性模型、决策树、支持向量机、集成模型等。
线性模型
from sklearn.linear_model import LinearRegression, LogisticRegression
# 线性回归
lin_reg = LinearRegression()
lin_reg.fit(X_train, y_train)
# 逻辑回归
log_reg = LogisticRegression()
log_reg.fit(X_train, y_train)
决策树
from sklearn.tree import DecisionTreeClassifier, DecisionTreeRegressor
# 决策树分类
tree_clf = DecisionTreeClassifier()
tree_clf.fit(X_train, y_train)
# 决策树回归
tree_reg = DecisionTreeRegressor()
tree_reg.fit(X_train, y_train)
支持向量机
from sklearn.svm import SVC, SVR
# 支持向量分类
svc = SVC()
svc.fit(X_train, y_train)
# 支持向量回归
svr = SVR()
svr.fit(X_train, y_train)
集成模型
from sklearn.ensemble import RandomForestClassifier, RandomForestRegressor, GradientBoostingClassifier, GradientBoostingRegressor
# 随机森林分类
rf_clf = RandomForestClassifier()
rf_clf.fit(X_train, y_train)
# 随机森林回归
rf_reg = RandomForestRegressor()
rf_reg.fit(X_train, y_train)
# 梯度提升分类
gb_clf = GradientBoostingClassifier()
gb_clf.fit(X_train, y_train)
# 梯度提升回归
gb_reg = GradientBoostingRegressor()
gb_reg.fit(X_train, y_train)
模型评估
Scikit-learn 提供了多种评估指标和方法,包括交叉验证、网格搜索等。
交叉验证
使用 cross_val_score 进行交叉验证:
from sklearn.model_selection import cross_val_score
scores = cross_val_score(model, X, y, cv=5)
print(f'Cross-Validation Scores: {scores}')
print(f'Mean Score: {scores.mean()}')
网格搜索
使用 GridSearchCV 进行超参数调优:
from sklearn.model_selection import GridSearchCV
param_grid = {
'n_estimators': [50, 100, 200],
'max_depth': [None, 10, 20, 30]
}
grid_search = GridSearchCV(RandomForestClassifier(), param_grid, cv=5)
grid_search.fit(X_train, y_train)
print(f'Best Parameters: {grid_search.best_params_}')
print(f'Best Score: {grid_search.best_score_}')
总结
Scikit-learn 是一个功能强大的机器学习库,提供了丰富的工具和模块来处理数据预处理、模型训练、评估和调优等任务。通过本教程的学习,希望你能掌握 Scikit-learn 的基本使用方法,并能够在实际项目中应用。