池州市建设厅官方网站,wordpress 开发文档,做网站买空间用共享ip,网页设计素材图片怎么获取【作者主页】Francek Chen 【专栏介绍】 ⌈ ⌈ ⌈Python机器学习 ⌋ ⌋ ⌋ 机器学习是一门人工智能的分支学科#xff0c;通过算法和模型让计算机从数据中学习#xff0c;进行模型训练和优化#xff0c;做出预测、分类和决策支持。Python成为机器学习的首选语言#xff0c;… 【作者主页】Francek Chen 【专栏介绍】 ⌈ ⌈ ⌈Python机器学习 ⌋ ⌋ ⌋ 机器学习是一门人工智能的分支学科通过算法和模型让计算机从数据中学习进行模型训练和优化做出预测、分类和决策支持。Python成为机器学习的首选语言依赖于强大的开源库如Scikit-learn、TensorFlow和PyTorch。本专栏介绍机器学习的相关算法以及基于Python的算法实现。 文章目录 一、Scikit-learn概述二、Scikit-learn主要用法一基本建模流程二加载数据集三划分数据集四数据预处理五构建并拟合模型六评估模型七模型优化 三、Scikit-learn案例 一、Scikit-learn概述 Scikit-learn是基于NumPy、SciPy和Matplotlib的开源Python机器学习包它封装了一系列数据预处理、机器学习算法、模型选择等工具是数据分析师首选的机器学习工具包。 自2007年发布以来scikit-learn已经成为Python重要的机器学习库了scikit-learn简称sklearn支持包括分类回归降维和聚类四大机器学习算法。还包括了特征提取数据处理和模型评估三大模块。 二、Scikit-learn主要用法
符号标记
符号意义符号意义X_train训练数据y_train训练集标签X_test测试数据y_test测试集标签X完整数据y数据标签
一基本建模流程 总体处理流程可以分为加载数据集、数据预处理、数据集划分、模型估计器创建、模型拟合、模型性能评估
二加载数据集
1. 导入工具包
from sklearn import datasets, preprocessing
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression
from sklearn.metrics import r2_score2. 加载数据 Scikit-learn支持以NumPy的arrays对象、Pandas对象、SciPy的稀疏矩阵及其他可转换为数值型arrays的数据结构作为其输入前提是数据必须是数值型的。 sklearn.datasets模块提供了一系列加载和获取著名数据集如鸢尾花、波士顿房价、Olivetti人脸、MNIST数据集等的工具也包括了一些toy data如S型数据等的生成工具。
from sklearn.datasets import load_iris
iris load_iris()
X iris.data
y iris.target三划分数据集
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test train_test_split(X, y, random_state12, stratifyy, test_size0.3)将完整数据集的70%作为训练集30%作为测试集并使得测试集和训练集中各类别数据的比例与原始数据集比例一致stratify分层策略另外可通过设置shuffleTrue提前打乱数据。
四数据预处理
1. 数据变换
使⽤Scikit-learn进行数据标准化
# 导入数据标准化工具包
from sklearn.preprocessing import StandardScaler
# 构建转换器实例
scaler StandardScaler()
# 拟合及转换
scaler.fit_transform(X_train)Z-Score标准化 x ∗ x − μ σ σ 2 1 m ∑ i 1 m ( x ( i ) − μ ) 2 μ 1 m ∑ i 1 m x ( i ) x^*\frac{x-\mu}{\sigma} \\[2ex] \sigma^2\frac{1}{m}\sum_{i1}^m(x^{(i)}-\mu)^2\mu\frac{1}{m}\sum_{i1}^mx^{(i)} x∗σx−μσ2m1i1∑m(x(i)−μ)2μm1i1∑mx(i) 处理后的数据均值为0方差为1。
使用Scikit-learn进行数据变换 最小最大标准化MinMaxScaler 归一化最大 - 最小规范化 x ∗ x − x min x max − x min x^*\frac{x-x_{\min}}{x_{\max}-x_{\min}} x∗xmax−xminx−xmin 将数据映射到 [ 0 , 1 ] [0,1] [0,1] 区间 One-Hot编码OneHotEncoder 归一化Normalizer 二值化单个特征转换Binarizer 标签编码LabelEncoder 缺失值填补Imputer 多项式特征生成PolynomialFeatures
2. 特征选择
from sklearn import feature_selection as fs过滤式Filter保留得分排名前k的特征top k方式。
fs.SelectKBest(score_func, k)封装式Wrap- per结合交叉验证的递归特征消除法自动选择最优特征个数。
fs.RFECV(estimator, scoring“r2”)嵌入式Embedded从模型中自动选择特征任何具有coef_或者feature_importances_的基模型都可以作为estimator参数传入。
fs.SelectFromModel(estimator)五构建并拟合模型
1. 监督学习算法——回归
from sklearn.linear_model import LinearRegression
# 构建模型实例
lr LinearRegression(normalizeTrue)
# 训练模型
lr.fit(X_train, y_train)
# 作出预测
y_pred lr.predict(X_test)LASSOlinear_model.LassoRidgelinear_model.RidgeElasticNetlinear_model.ElasticNet回归树tree.DecisionTreeRegressor
2. 监督学习算法——分类
from sklearn.tree import DecisionTreeClassifier
# 构建模型实例
clf DecisionTreeClassifier(max_depth5)
# 训练模型
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.GaussianNBK近邻neighbors.NearestNeighbors
3. 监督学习算法——集成学习
sklearn.ensemble模块包含了一系列基于集成思想的分类、回归和离群值检测方法。
from sklearn.ensemble import RandomForestClassifier
# 构建模型实例
clf RandomForestClassifier(n_estimators20)
# 训练模型
clf.fit(X_train, y_train)
# 作出预测
y_pred clf.predict(X_test)
y_prob clf.predict_proba(X_test)AdaBoost适应提升算法: ensemble.AdaBoostClassifier ensemble.AdaBoostRegressorGBboost梯度提升算法 ensemble.GradientBoostingClassifier ensemble.GradientBoostingRegressor
4. 无监督学习算法——k-means
sklearn.cluster模块包含了一系列无监督聚类算法。
from sklearn.cluster import KMeans
# 构建模型实例
kmeans KMeans(n_clusters3, random_state0)
# 训练模型
kmeans.fit(X_train)
# 作出预测
kmeans.predict(X_test)DBSCANcluster.DBSCAN层次聚类cluster.AgglomerativeClustering谱聚类cluster.SpectralClustering
5. 无监督学习算法——降维
sklearn.decomposition模块包含了一系列无监督降维算法。
from sklearn.decomposition import PCA
# 导入PCA库设置主成分数量为3n_components代表主成分数量
pca PCA(n_components3)
# 训练模型
pca.fit(X)
# 投影后各个特征维度的方差比例(这里是三个主成分)
print(pca.explained_variance_ratio_)
# 投影后的特征维度的方差
print(pca.explained_variance_)六评估模型
sklearn.metrics模块包含了一系列用于评价模型的评分函数、损失函数以及成对数据的距离度量函数。
from sklearn.metrics import accuracy_score
accuracy_score(y_true, y_pred)对于测试集而言y_test即是y_true大部分函数都必须包含真实值y_true和预测值y_pred。
1. 回归模型评价
平均绝对误差MAEmetrics.mean_absolute_error()均方误差MSEmetrics.mean_squared_error()决定系数R²metrics.r2_score()
2. 分类模型评价
正确率metrics.accuracy_score()各类精确率metrics.precision_score()F1值metrics.f1_score()对数损失或交叉熵损失metrics.log_loss()混淆矩阵metrics.confusion_matrix含多种评价的分类报告metrics.classification_report
七模型优化
1. 交叉验证
from sklearn.model_selection import cross_val_score
clf DecisionTreeClassifier(max_depth5)
scores cross_val_score(clf, X_train, y_train, cv5, scoring’f1_weighted’)使用5折交叉验证对决策树模型进行评估使用的评分函数为F1值。 sklearn提供了部分带交叉验证功能的模型类如LassoCV、LogisticRegressionCV等这些类包含cv参数。 2. 超参数调优⸺网格搜索
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, cv5)
grid_search.fit(X_train, y_train)
grid_search.best_params_在参数网格上进行穷举搜索方法简单但是搜索速度慢超参数较多时且不容易找到参数空间中的局部最优。
3. 超参数调优⸺随机搜索
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_iter10)
random_search.fit(X_train, y_train)
random_search.best_params_在参数子空间中进行随机搜索选取空间中的100个点进行建模可从scipy.stats常见分布如正态分布norm、均匀分布uniform中随机采样得到时间耗费较少更容易找到局部最优。
三、Scikit-learn案例
可参考Python数据分析实验四数据分析综合应用开发
应用Scikit-Learn库中的逻辑回归对Scikit-Learn自带的乳腺癌from sklearn.datasets import load_breast_cancer数据集进行分类并分别评估每种算法的分类性能。为了进一步提升算法的分类性能能否尝试使用网格搜索和交叉验证找出每种算法较优的超参数。
#加载数据集
from sklearn.datasets import load_breast_cancer
cancerload_breast_cancer()#对数据集进行预处理实现数据标准化
from sklearn.preprocessing import StandardScaler
XStandardScaler().fit_transform(cancer.data)
ycancer.target#将数据集划分为训练集和测试集(要求测试集占25%随机状态random state设置为33)
from sklearn.model_selection import train_test_split
X_train,X_test,y_train,y_testtrain_test_split(X,y,test_size0.25,random_state33) #创建模型估计器estimator
from sklearn.linear_model import LogisticRegression
lgrLogisticRegression()#用训练集训练模型估计器estimator
lgr.fit(X_train,y_train)#用模型估计器对测试集数据做预测
y_predlgr.predict(X_test)#对模型估计器的学习效果进行评价
#最简单的评估方法就是调用估计器的score(),该方法的两个参数要求是测试集的特征矩阵和标签向量
print(测试集的分类准确率为:,lgr.score(X_test,y_test))
print( )
from sklearn import metrics
#对于多分类问题还可以使用metrics子包中的classification_report
print(metrics.classification_report(y_test,y_pred,target_namescancer.target_names)) #网格搜索与交叉验证相结合的逻辑回归算法分类
from sklearn.model_selection import GridSearchCV,KFold
params_lgr{C:[0.01,0.1,1,10,100],max_iter:[100,200,300],solver:[liblinear,lbfgs]}
kfKFold(n_splits5,shuffleFalse)grid_search_lgrGridSearchCV(lgr,params_lgr,cvkf)
grid_search_lgr.fit(X_train,y_train)
grid_search_y_predgrid_search_lgr.predict(X_test)
print(Accuracy:,grid_search_lgr.score(X_test,y_test))
print(best params:,grid_search_lgr.best_params_)另外推荐一个Scikit-learn学习网站Scikit-learn中文社区