1. sklearn基础介绍
sklearn(全名为scikit-learn)是一个建立在NumPy、SciPy和matplotlib等科学计算库的基础上,用于机器学习的Python开源库。它提供了丰富的工具和函数,用于处理各种机器学习任务,包括分类、回归、聚类、降维、模型选择、预处理等。Scikit-Learn支持多种常见的机器学习算法,如线性回归、逻辑回归、决策树、支持向量机、随机森林、K近邻、聚类算法等。此外,它还提供了各种评估指标和模型选择技术,如交叉验证、特征选择、参数调优等,以帮助用户选择和优化合适的模型。
有几个原因使Scikit-Learn成为机器学习领域最受欢迎的库之一:
-
• 简单易用:Scikit-Learn具有一致的API设计,易于上手和使用。
-
• 丰富的文档和示例:Scikit-Learn提供了详细的文档和大量的示例代码,帮助用户快速入门和理解各种机器学习算法。
-
• 高效可扩展:Scikit-Learn使用底层的NumPy和SciPy库进行高效的数值计算,并且可以无缝地与其他Python数据科学库集成。
-
• 健壮稳定:Scikit-Learn是一个经过广泛使用和测试的库,具有良好的代码质量和稳定性。
总而言之,Scikit-Learn提供了一个功能强大、易于使用和扩展的框架,使Python成为机器学习和数据科学领域的首选语言之一。
Scikit-Learn是 Python 最流行的机器学习库之一,它提供了各种工具来实现、评估和探索各种学习算法,用于各种机器学习任务。
基础用法包括:
-
• 数据预处理:探索数据清洗、缩放和编码分类变量等工具。
-
• 训练集和测试集划分:使用Scikit-Learn的train_test_split函数将数据集划分为训练集和测试集。
-
• 模型训练:应用不同的机器学习算法,如线性回归、逻辑回归、决策树和随机森林,对数据集进行训练。
-
• 模型评估:使用准确率、精确率、召回率和F1分数等评估指标评估模型性能。
在本教程中,我们将介绍 Scikit-Learn 的基础知识和一些高级用法,并提供一些实例代码来帮助我们更好地理解。
2. 安装与导入
首先,确保已经正确安装了 Scikit-Learn。您可以使用以下命令进行安装:
pip install scikit-learn
# 安装完成后,使用下面的代码导入 Scikit-Learn
import sklearn
Scikit-Learn中默认携带了Iris(鸢尾花数据集)breast-cancer(乳腺癌数据集),我们可以借助这两个数据集来进行sklearn的入门学习。本文使用Iris进行演示。
3. 数据预处理
在开始机器学习任务之前,通常需要对数据进行预处理。Scikit-Learn 提供了许多用于数据预处理的函数和类。以下是一些常用的数据预处理方法:
3.1 特征缩放:
特征缩放是指将数据集中的特征值进行标准化或归一化的过程。
特征缩放的目的是为了消除特征之间的量纲差异,使得不同特征之间的比较更加合理和准确。
例如,假设我们有一个数据集,其中包含了三个特征A、B和C。特征A的取值范围是0到100,特征B的取值范围是0到10,而特征C的取值范围是0到1000。如果我们不对这些特征进行特征缩放,那么特征A和特征C之间的比较就没有意义,因为它们的量纲不同。
因此,在机器学习中,我们通常会对数据集中的特征进行特征缩放,使得不同特征之间的比较更加合理和准确。
常用的特征缩放方法包括标准化、归一化、最大最小值缩放等。标准化是指将特征值除以其最大值和最小值,使得特征值落在0到1之间。归一化是指将特征值除以其最大值,使得特征值落在0到1之间。这两种方法都可以消除特征之间的量纲差异,使得不同特征之间的比较更加合理和准确。
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
# 加载鸢尾花数据集
iris = load_iris()
X = iris.data
y = iris.target
# 划分训练集和测试集
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)
# 进行最大最小值缩放
from sklearn.preprocessing import MinMaxScaler
# feature_range:设置缩放后的值范围默认最小0 最大值1,
scaler = MinMaxScaler(feature_range=(0,0.0000000000001))
X_train = scaler.fit_transform(X_train)
X_test = scaler.transform(X_test)
# 训练机器学习模型
from sklearn.ensemble import RandomForestClassifier
clf = RandomForestClassifier()
clf.fit(X_train, y_train)
# 预测测试集结果
y_pred = clf.predict(X_test)
# 输出模型准确率
print("模型准确率:", clf.score(X_test, y_test))
输出结果:
# 特征缩放
模型准确率: 1.0
# 最大最小值缩放
模型准确率: 0.3
3.2 缺失值处理
当数据集中存在缺失值时,我们需要进行处理以避免影响模型的性能。Scikit-Learn提供了多种填补缺失值的方法,其中最常见的是使用平均值、中位数或众数来填充数值型特征,使用最常见的类别来填充分类特征。
# 进行缺失值处理
from sklearn.preprocessing import Imputer
imputer = Imputer(missing_values='NaN', strategy='mean', fill_value=0)
X_train = imputer.fit_transform(X_train)
X_test = imputer.transform(X_test)
3.3 降维
sklearn提供了多种降维方法,包括主成分分析(PCA)、因子分析(FA)、多维标度(MDS)、主轴检验(Pca)等。
-
- 主成分分析(PCA)
主成分分析(PCA)是一种线性降维方法,它通过计算数据的协方差矩阵,并对其进行特征值分解,从而找到一个或多个主成分,将数据降维到较低维度的空间中。PCA可以消除数据中的噪声和冗余信息,从而使得机器学习模型更加稳定和准确。
-
- 因子分析(FA)
因子分析(FA)是一种非线性降维方法,它通过计算数据的相关矩阵,并对其进行特征值分解,从而找到一组或多组因子,将数据降维到较低维度的空间中。FA可以更好地保留数据中的信息和结构,从而使得机器学习模型更加稳定和准确。
-
- 多维标度(MDS)
多维标度(MDS)是一种非线性降维方法,它通过计算数据的距离矩阵,并对其进行特征值分解,从而找到一组或多组多维标度,将数据降维到较低维度的空间中。MDS可以更好地保留数据中的信息和结构,从而使得机器学习模型更加稳定和准确。
-
- 主轴检验(Pca)
主轴检验(Pca)是一种非线性降维方法,它通过计算数据的协方差矩阵,并对其进行特征值分解,从而找到一组或多组主轴,将数据降维到较低维度的空间中。Pca可以更好地保留数据中的信息和结构,从而使得机器学习模型更加稳定和准确。
以PCA为例:
from sklearn.decomposition import PCA
# 初始化一个 PCA 模型,并指定降到的目标维度
pca = PCA(n_components=2)
X_train = pca.fit_transform(X_train)
X_test = pca.transform(X_test)
3.4 分类变量编码
许多机器学习算法只能处理数值型特征,而无法直接处理分类变量。在这种情况下,我们需要将分类变量进行编码。Scikit-Learn提供了多种编码分类变量的方法,例如独热编码和标签编码。
from sklearn.preprocessing import OneHotEncoder
# 创建一个OneHotEncoder对象
encoder = OneHotEncoder()
# 假设X是一个包含分类变量的数据集,使用encoder进行独热编码
X_encoded = encoder.fit_transform(X)
以上示例介绍了Scikit-Learn中基本的数据预处理技术,涵盖了缺失值处理、特征缩放和分类变量编码。根据具体的需求和数据特点,我们可以选择适当的预处理技术来处理数据,并准备好输入机器学习模型。
4. 模型选择与训练
模型选择与训练是机器学习中的关键步骤之一,Scikit-Learn提供了丰富的功能和工具来实现这些任务。
4.1 数据集划分
数据集划分是为了使用一部分数据进行模型训练,另一部分数据进行模型测试。这样可以评估模型在新数据上的性能,并检测是否存在过拟合或欠拟合等问题。Scikit-Learn提供了train_test_split函数来帮助划分数据集。
from sklearn.model_selection import train_test_split
# 假设X是特征矩阵,y是目标变量
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
4.2 建立模型
Scikit-Learn提供了多种机器学习算法的实现,包括线性回归、逻辑回归、决策树、支持向量机等。使用这些算法之前,我们需要创建一个相应的模型对象并设置相应的参数。
from sklearn.linear_model import LinearRegression
# 创建一个线性回归模型对象
model = LinearRegression()
# 使用模型对象进行训练
model.fit(X_train, y_train)
Scikit-Learn 提供了多种用于分类和回归任务的算法和模型。以下是几个常用的算法:
-
• 支持向量机(SVM)
from sklearn.svm import SVC
初始化一个支持向量机分类器
clf = SVC()
使用分类器进行训练
clf.fit(X_train, y_train)
使用分类器进行预测
y_pred = clf.predict(X_test)
-
• 决策树
from sklearn.tree import DecisionTreeClassifier
初始化一个决策树分类器
clf = DecisionTreeClassifier()
使用分类器进行训练
clf.fit(X_train, y_train)
使用分类器进行预测
y_pred = clf.predict(X_test)
-
• 线性回归
from sklearn.linear_model import LinearRegression
初始化一个线性回归模型
reg = LinearRegression()
使用模型进行训练
reg.fit(X_train, y_train)
使用模型进行预测
y_pred = reg.predict(X_test)
4.3 模型训练与调参
模型训练:是指使用训练数据去估计模型的参数,从而使模型能够从数据中学习到模式和规律,Scikit-Learn提供了许多模型训练的方法,如fit函数。
模型调参:是调整模型超参数以达到最佳性能的过程。超参数是在模型训练之前设置的参数,如正则化参数、学习率等。Scikit-Learn提供了多种调参方法,包括GridSearchCV和RandomizedSearchCV等。
from sklearn.model_selection import GridSearchCV
from sklearn.ensemble import RandomForestClassifier
# 创建随机森林分类器对象
model = RandomForestClassifier()
# 定义参数网格
param_grid = {'n_estimators': [100, 200, 300], 'max_depth': [None, 5, 10]}
# 使用GridSearchCV进行模型调参
grid_search = GridSearchCV(model, param_grid, cv=5)
grid_search.fit(X_train, y_train)
# 获取最佳参数和得分
print("最佳参数:", grid_search.best_params_)
print("最佳得分:", grid_search.best_score_)
通过上述步骤,我们可以根据实际问题选择合适的算法并训练模型,还可以利用交叉验证和超参数调优来提高模型的性能。Scikit-Learn为模型选择和训练提供了简洁而强大的工具,使我们能够高效地实现和应用各种机器学习算法。
5. 模型评估与调优
在使用机器学习模型时,必须对模型进行评估和调优。Scikit-Learn 提供了丰富的评估指标和调优方法。
模型评估与选择是在机器学习中非常重要的步骤之一。Scikit-Learn提供了多种方法来评估模型性能、选择合适的模型,并分析模型的偏差和方差。
5.1 评估指标
评估指标用于衡量模型的性能和预测的准确性。对于分类问题,常用的评估指标包括准确率、精确率、召回率、F1分数等。对于回归问题,则使用均方误差、均方根误差、R平方等。Scikit-Learn提供了丰富的评估指标来评估模型的性能。
from sklearn.metrics import accuracy_score, precision_score, recall_score, f1_score, mean_squared_error
# 假设y_true是真实标签,y_pred是模型预测的标签
# 分类模型评估
accuracy = accuracy_score(y_true, y_pred)
precision = precision_score(y_true, y_pred)
recall = recall_score(y_true, y_pred)
f1 = f1_score(y_true, y_pred)
from sklearn.metrics import
# 回归模型评估,计算均方误差
mse = mean_squared_error(y_true, y_pred)
5.2 交叉验证
交叉验证是一种评估模型性能的方法,通过将数据集划分为多个训练集和测试集的子集,在不同的子集上训练和评估模型,并对结果进行平均。Scikit-Learn提供了交叉验证的功能,可以帮助我们更可靠地估计模型的性能。
from sklearn.model_selection import cross_val_score
from sklearn.tree import DecisionTreeClassifier
# 创建决策树分类器对象
model = DecisionTreeClassifier()
# 使用交叉验证评估模型性能
scores = cross_val_score(model, X, y, cv=5)
# 输出交叉验证的平均得分
print("平均得分:", scores.mean())
5.3 学习曲线
学习曲线是用于分析模型的偏差和方差,判断模型是否过拟合或欠拟合的工具。通过绘制不同训练集大小下的模型得分曲线,可以观察模型的学习情况。Scikit-Learn提供了plot_learning_curve函数来绘制学习曲线。
import matplotlib.pyplot as plt
from sklearn.model_selection import learning_curve
from sklearn.svm import SVC
# 创建支持向量机分类器对象
model = SVC()
# 绘制学习曲线
train_sizes, train_scores, test_scores = learning_curve(model, X, y, cv=5, train_sizes=np.linspace(0.1, 1.0, 10))
# 绘制平均训练得分和测试得分曲线
plt.plot(train_sizes, np.mean(train_scores, axis=1), 'o-', label='训练集得分')
plt.plot(train_sizes, np.mean(test_scores, axis=1), 'o-', label='测试集得分')
plt.xlabel('训练样本数')
plt.ylabel('得分')
plt.legend(loc='best')
plt.show()
通过评估指标、交叉验证和学习曲线等的分析,我们可以更全面地了解模型的性能和表现,并选择合适的模型。Scikit-Learn提供了强大的工具和方法来帮助我们评估和选择最佳的机器学习模型。
6.模型部署与预测
模型部署与预测是将训练好的模型转化为可用于实际预测的形式的重要步骤,Scikit-Learn提供了保存和加载模型以及用于对新数据进行预测的功能。
6.1 模型保存与加载:
在 Scikit-Learn 中,我们可以使用 pickle
或 joblib
来保存和加载训练好的模型。这些工具使我们能够将模型序列化为文件,并在需要时重新加载。
import pickle
# 假设 model 是训练好的模型
# 保存模型
pickle.dump(model, open('model.pkl', 'wb'))
# 加载模型
loaded_model = pickle.load(open('model.pkl', 'rb'))
from joblib import dump, load
# 保存模型
dump(model, 'model.joblib')
# 加载模型
loaded_model = load('model.joblib')
6.2 新数据预测
在训练好的模型加载后,我们可以使用它来对新数据进行预测。这涉及将新数据转换为与训练数据相同的特征表示,并将其输入到模型中进行预测。
# 假设 X_new 是新的数据样本
predictions = loaded_model.predict(X_new)
使用以上步骤,我们可以将训练好的模型保存到磁盘,并在需要时加载模型进行预测。这使我们能够轻松地部署我们的模型并将其用于实际应用。
7. 总结
对于初学者来说,入门机器学习可能并不难,因为有很多现成的工具和库可以使用。这些工具提供了丰富的接口和方法,使得我们可以快速上手并构建简单的模型。
然而,如果我们想要更深入地理解机器学习算法的原理,并优化模型的性能,就需要一定的数学和统计知识。了解线性代数、概率论和优化算法等基础知识对于理解机器学习算法的原理和调整模型非常重要。
此外,获取高质量的数据也是构建优质模型的关键。优质的数据才能构建出优质的模型,数据的质量和多样性对于机器学习模型的性能有很大的影响。因此,数据预处理、特征工程和数据清洗等技巧也是需要掌握的。
欢迎点赞收藏转发,感谢🙏