【机器学习笔记】 6 机器学习库Scikit-learn

Scikit-learn概述

Scikit-learn是基于NumPy、 SciPy和 Matplotlib的开源Python机器学习包,它封装了一系列数据预处理、机器学习算法、模型选择等工具,是数据分析师首选的机器学习工具包。

自2007年发布以来,scikit-learn已经成为Python重要的机器学习库了,scikit-learn简称sklearn,支持包括分类,回归,降维和聚类 四大机器学习算法。还包括了特征提取,数据处理和模型评估三大模块

Scikit-learn 主要用法

符号标记

基本建模流程

  • 导入工具包
python 复制代码
from sklearn import datasets, preprocessing
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression
from sklearn.metrics import r2_score
  • 加载数据
    ✓Scikit-learn支持以NumPy的arrays对象、Pandas对象、SciPy的稀疏矩阵及其他可转换为数值型arrays的数据结构作为其输入,前提是数据必须是数值型的
    ✓sklearn.datasets模块提供了一系列加载和获取著名数据集如鸢尾花、波士顿房价、Olivetti人脸、MNIST数据集等的工具,也包括了一些toy data如S型数据等的生成工具
python 复制代码
from sklearn.datasets import load_iris
iris = load_iris()
X = iris.data
y = iris.target
  • 数据划分

将完整数据集的70%作为训练集,30%作为测试集,并使得测试集和训练集中各类别数据的比例与原始数据集比例一致(stratify分层策略),另外可通过设置 shuffle=True 提前打乱数据

python 复制代码
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=12, stratify=y, test_size=0.3)
  • 数据预处理
python 复制代码
#使⽤Scikit-learn进⾏数据标准化
from sklearn.preprocessing import StandardScaler
#构建转换器实例
scaler = StandardScaler()
#拟合及转换
scaler.fit_transform(X_train)


  • 特征选择
python 复制代码
from sklearn import feature_selection as fs
fs.SelectKBest(score_func, k)
#过滤式(Filter),保留得分排名前k的特征(top k方式)
fs.RFECV(estimator, scoring="r2")
#封装式(Wrap- per),结合交叉验证的递归特征消除法,自动选择最优特征个数
fs.SelectFromModel(estimator)
#嵌入式(Embedded),从 模型中自动选择特征,任何具有coef_或者feature_importances_的 基模型都可以作为estimator参数传入

监督学习算法

  • 回归
python 复制代码
from sklearn.linear_model import LinearRegression
#构建模型实例
lr = LinearRegression(normalize=True)
训练模型
lr.fit(X_train, y_train)
#作出预测
y_pred = lr.predict(X_test)
#LASSO linear_model.Lasso
#Ridge linear_model.Ridge
#ElasticNet linear_model.ElasticNet
#回归树 tree.DecisionTreeRegressor
  • 分类
python 复制代码
from sklearn.tree import DecisionTreeClassifier
clf = DecisionTreeClassifier(max_depth=5) 
clf.fit(X_train, y_train)
y_pred = clf.predict(X_test) 
y_prob = clf.predict_proba(X_test)

使用决策树分类算法解决二分类问题, y_prob 为每个样本预测为"0"和"1"类的概率

逻辑回归 linear_model.LogisticRegression

支持向量机 svm.SVC

朴素贝叶斯 naive_bayes.GaussianNB

K近邻 neighbors.NearestNeighbors

  • 集成学习
    sklearn.ensemble模块包含了一系列基于集成思想的分类、回归和离群值检测方法.
python 复制代码
from sklearn.ensemble import RandomForestClassifier
clf = RandomForestClassifier(n_estimators=20) 
clf.fit(X_train, y_train)
y_pred = clf.predict(X_test) 
y_prob = clf.predict_proba(X_test)

无监督学习算法

  • sklearn.cluster模块包含了一系列无监督聚类算法.
python 复制代码
from sklearn.cluster import KMeans
#构建聚类实例
kmeans = KMeans(n_clusters=3, random_state=0)
#拟合
kmeans.fit(X_train)
#预测
kmeans.predict(X_test)
  • sklearn.decomposition 模块包含了一系列无监督降维算法
python 复制代码
from sklearn.decomposition import PCA
#导入PCA库,设置主成分数量为3,n_components代表主成分数量
pca = PCA(n_components=3) 
#训练模型
pca.fit(X) 
#投影后各个特征维度的方差比例(这里是三个主成分) 
print(pca.explained_variance_ratio_) 
#投影后的特征维度的方差
print(pca.explained_variance_) 

评价指标

sklearn.metrics模块包含了一系列用于评价模型的评分函数、损失函数以及成对数据的距离度量函数.

python 复制代码
from sklearn.metrics import accuracy_score
accuracy_score(y_true, y_pred)
#对于测试集而言,y_test即是y_true,大部分函数都必须包含真实值y_true和预测值y_pred


交叉验证及参数调优

sklearn提供了部分带交叉验证功能的模型类如LassoCV、LogisticRegressionCV等,这些类包含cv参数

python 复制代码
from sklearn.model_selection import cross_val_score
clf = DecisionTreeClassifier(max_depth=5)
scores = cross_val_score(clf, X_train, y_train, cv=5, scoring='f1_weighted')
#使用5折交叉验证对决策树模型进行评估,使用的评分函数为F1值
python 复制代码
#超参数调优⸺网格搜索
from sklearn.model_selection import GridSearchCV
from sklearn import svm
svc = svm.SVC()
params = {'kernel':['linear', 'rbf'], 'C':[1, 10]} 
grid_search = GridSearchCV(svc, params, cv=5) grid_search.fit(X_train, y_train) 
grid_search.best_params_
#在参数网格上进行穷举搜索,方法简单但是搜索速度慢(超参数较多时),且不容易找到参数空间中的局部最


#超参数调优⸺随机搜索
from sklearn.model_selection import RandomizedSearchCV
from scipy.stats import randint
svc = svm.SVC()
param_dist = {'kernel':['linear', 'rbf'], 'C':randint(1, 20)} 
random_search = RandomizedSearchCV(svc, param_dist, n_iter=10) 
random_search.fit(X_train, y_train) 
random_search.best_params_
#在参数子空间中进行随机搜索,选取空间中的100个点进行建模(可从scipy.stats常见分布如正态分布norm、均匀分布uniform中随机采样得到),时间耗费较少,更容易找到局部最优
相关推荐
熙曦Sakura2 分钟前
完全竞争市场
笔记
机器人虎哥31 分钟前
【8210A-TX2】Ubuntu18.04 + ROS_ Melodic + TM-16多线激光 雷达评测
人工智能·机器学习
dr李四维1 小时前
iOS构建版本以及Hbuilder打iOS的ipa包全流程
前端·笔记·ios·产品运营·产品经理·xcode
罗小罗同学3 小时前
医工交叉入门书籍分享:Transformer模型在机器学习领域的应用|个人观点·24-11-22
深度学习·机器学习·transformer
孤独且没人爱的纸鹤3 小时前
【深度学习】:从人工神经网络的基础原理到循环神经网络的先进技术,跨越智能算法的关键发展阶段及其未来趋势,探索技术进步与应用挑战
人工智能·python·深度学习·机器学习·ai
羊小猪~~3 小时前
tensorflow案例7--数据增强与测试集, 训练集, 验证集的构建
人工智能·python·深度学习·机器学习·cnn·tensorflow·neo4j
Komorebi.py5 小时前
【Linux】-学习笔记05
linux·笔记·学习
不去幼儿园5 小时前
【MARL】深入理解多智能体近端策略优化(MAPPO)算法与调参
人工智能·python·算法·机器学习·强化学习
亦枫Leonlew5 小时前
微积分复习笔记 Calculus Volume 1 - 6.5 Physical Applications
笔记·数学·微积分
无脑敲代码,bug漫天飞6 小时前
COR 损失函数
人工智能·机器学习