目录
Scikit-learn是Python中一个专门用于机器学习的开源框架,基于SciPy工具包发展而来,由David Cournapeau于2007年发起。它依赖于NumPy和SciPy等库,专注于机器学习领域,不扩展其他功能,且仅采用经过广泛验证的算法。Scikit-learn提供了六大核心功能:分类、回归、聚类、数据降维、模型选择和数据预处理,涵盖了从数据准备到模型评估的完整机器学习流程。其分类功能包括支持向量机、K-近邻、逻辑回归等算法,回归功能则涵盖支持向量回归、岭回归等。此外,Scikit-learn还提供了丰富的代码实例和详细的文档,帮助用户快速上手。通过加载数据集、拆分数据、特征工程、建立模型、拟合模型及预测评价等步骤,用户可以轻松实现机器学习任务。
3.1 Scikit-learn介绍
Scikit-learn介绍
对Python语言有所了解的科研人员可能都知道SciPy——一个开源的基于Python的科学计算工具包。
基于SciPy,目前开发者们针对不同的应用领域已经发展出了为数众多的分支版本,它们被统一称为Scikits,即SciPy工具包的意思。
而在这些分支版本中,最有名,也是专门面向机器学习的一个就是Scikit-learn。
Scikit-learn项目最早由数据科学家 David Cournapeau 在 2007 年发起,需要NumPy和SciPy等其他包的支持,是Python语言中专门针对机器学习应用而发展起来的一款开源框架。
和其他众多的开源项目一样,Scikit-learn目前主要由社区成员自发进行维护。可能是由于维护成本的限制,Scikit-learn相比其他项目要显得更为保守。
- Scikit-learn从来不做除机器学习领域之外的其他扩展
- Scikit-learn从来不采用未经广泛验证的算法
Scikit-learn六大功能
- 分类
- 回归
- 聚类
- 数据降维
- 模型选择
- 数据预处理
3.2 Scikit-learn功能:分类
Scikit-learn功能:分类
分类是指识别给定对象的所属类别,属于监督学习的范畴,最常见的应用场景包括垃圾邮件检测和图像识别等。
目前Scikit-learn已经实现的算法包括:
- 支持向量机(SVM)
- K-近邻
- 逻辑回归
- 决策树
- 随机森林
- 多层感知器(MLP)神经网络
Scikit-learn针对每个算法和模块都提供了丰富的参考样例和详细的说明文档。
Scikit-learn功能:回归
回归是指预测与给定对象相关联的连续值属性,最常见的应用场景包括预测药物反应和预测股票价格等。
目前Scikit-learn已经实现的算法包括:
- 支持向量回归(SVR)
- 岭回归
- 套索回归
- 弹性网络(弹性网络)
- 最小角回归(LARS)
- 贝叶斯回归
- 各种不同的鲁棒回归算法等
可以看到,这里实现的回归算法几乎涵盖了所有开发者的需求范围,而且更重要的是,Scikit-learn还针对每种算法都提供了简单明了的用例参考。
Scikit-learn功能:聚类
聚类是指自动识别具有相似属性的给定对象,并将其分组为集合,属于无监督学习的范畴,最常见的应用场景包括顾客细分和试验结果分组。
目前Scikit-learn已经实现的算法包括:
- K-均值聚类
- 谱聚类
- 均值偏移
- 分层聚类
- DBSCAN聚类等
Scikit-learn功能:数据降维
数据降维是指使用主成分分析(PCA)、非负矩阵分解(NMF)或特征选择等降维技术来减少要考虑的随机变量的个数,其主要应用场景包括可视化处理和效率提升。
Scikit-learn功能:模型选择
模型选择是指对于给定参数和模型的比较、验证和选择,其主要目的是通过参数调整来提升精度。
目前Scikit-learn实现的模块包括:
- 网格搜索
- 交叉验证
- 各种针对预测误差评估的度量函数
Scikit-learn功能:数据预处理
数据预处理是指数据的特征提取和归一化,是机器学习过程中的第一个也是最重要的一个环节。
- 归一化是指将输入数据转换为具有零均值和单位权方差的新变量,但因为大多数时候都做不到精确等于零,因此会设置一个可接受的范围,一般都要求落在0-1之间。
- 特征提取是指将文本或图像数据转换为可用于机器学习的数字变量。
3.3 机器学习代码实例(1)
代码实例
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.neighbors import KNeighborsClassifier
from sklearn import metrics
iris = load_iris()
X, y = iris.data[:,:2],iris.target
X_train,X_test,y_train,y_test = train_test_split(
X,y,test_size=0.3,random_state=42)
scaler = StandardScaler().fit(X_train)
X_train = scaler.transform(X_train)
X_test = scaler.transform(X_test)
knn = KNeighborsClassifier(n_neighbors=5)
knn.fit(X_train,y_train)
y_pred = knn.predict(X_test)
metrics.accuracy_score(y_test,y_pred)
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.naive_bayes import GaussianNB
from sklearn import metrics
iris = load_iris()
X, y = iris.data[:,:2],iris.target
X_train,X_test,y_train,y_test = train_test_split(
X,y,test_size=0.3,random_state=42)
scaler = StandardScaler().fit(X_train)
X_train = scaler.transform(X_train)
X_test = scaler.transform(X_test)
gnb = GaussianNB()
gnb.fit(X_train,y_train)
y_pred = gnb.predict(X_test)
metrics.accuracy_score(y_test,y_pred)
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.svm import SVC
from sklearn import metrics
iris = load_iris()
X, y = iris.data[:,:2],iris.target
X_train,X_test,y_train,y_test = train_test_split(
X,y,test_size=0.3,random_state=42)
scaler = StandardScaler().fit(X_train)
X_train = scaler.transform(X_train)
X_test = scaler.transform(X_test)
svc = SVC(kernel='linear',C=0.1)
svc.fit(X_train,y_train)
y_pred = svc.predict(X_test)
metrics.accuracy_score(y_test,y_pred)
3.4 机器学习代码实例(2)
加载数据集
from sklearn.datasets import load_iris
iris = load_iris()
X = iris.data
y = iris.target
或者
from sklearn.datasets import load_iris
X, y = load_iris(return_X_y=True)
函数 | 描述 | 问题类别 |
load_boston() | 波士顿房价数据集 | 回归 |
load_breast_cancer() | 威斯康辛州乳腺癌数据集 | 分类 |
load_diabetes() | 糖尿病数据集 | 回归 |
load_digits() | 数字数据集 | 分类 |
load_iris() | 鸢尾花数据集 | 分类 |
load_linnerud() | linnerud 数据集 | 多变量回归 |
load_wine() | 红酒数据集 | 分类 |
拆分数据集
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)
- test_size:测试集大小
- train_size:训练集大小
- random_state:随机种子
特征工程
from sklearn.preprocessing import StandardScaler
scaler = StandardScaler().fit(X_train)
X_train = scaler.transform(X_train)
X_test = scaler.transform(X_test)
特征工程是指从原始数据转换为特征向量的过程。
特征工程是机器学习中最重要的起始步骤,会直接影响机器学习的效果,并通常需要大量的时间。
典型的特征工程包括数据清理、特征提取、特征选择等过程。
建立模型
from sklearn.neighbors import KNeighborsClassifier
knn = KNeighborsClassifier(n_neighbors=5)
from sklearn.naive_bayes import GaussianNB
gnb = GaussianNB()
from sklearn.svm import SVC
svc = SVC(kernel='linear',C=0.1)
拟合模型
knn.fit(X_train,y_train)
gnb.fit(X_train,y_train)
svc.fit(X_train,y_train)
3.5 机器学习预测并评价模型
进行预测并评价模型
y_pred = knn.predict(X_test)
metrics.accuracy_score(y_test,y_pred)
y_pred = gnb.predict(X_test)
metrics.accuracy_score(y_test,y_pred)
y_pred = svc.predict(X_test)
metrics.accuracy_score(y_test,y_pred)