sklearn使用总结

目录

1.1加载数据

1.2特征工程

1.3训练集与验证集分类

1.4模型训练

1.5验证集预测

1.6模型评估

1.7模型参数调整

1.8模型保存与调用


1.1加载数据

sklearn的实现使用了numpyarrays,所以需要使用numpy来读入数据

# -*- coding: utf-8 -*-

import numpy as np

import urllib.request

#直接从网络上读取数据,该数据有767个样本,每个样本有9列,最后一列为标签列

url="http://archive.ics.uci.edu/ml/machine-learning-databases/pima-indians-diabetes/pima-indians-diabetes.data"

rawdata=urllib.request.urlopen(url)

#利用numpy.loadtxt从网络地址上读数据

dataset=np.loadtxt(rawdata,delimiter=',')#也可以先将数据下载到本地,然后从本地路径上下载数据,只要将rawdata换成本地路径就可以了

X=dataset[:,0:8]

y=dataset[:,8]

train= pd.read_csv('E:\\database\\cfst\\lincacfst.csv')
dem=train[["D (mm)","t (mm)","Le (mm)","fy (MPa)","fc (MPa)"]].values
object=train[["N Test (kN)"]].values

1.2特征工程

有这么一句话在业界广泛流传:数据和特征决定了机器学习的上限,而模型和算法只是逼近这个上限而已。那特征工程到底是什么呢?顾名思义,其本质是一项工程活动,目的是最大限度地从原始数据中提取特征以供算法和模型使用。通过总结和归纳,人们认为特征工程包括以下方面:

  特征处理是特征工程的核心部分sklearn提供了较为完整的特征处理方法,包括数据预处理,特征选择,降维等。首次接触到sklearn,通常会被其丰富且方便的算法模型库吸引,但是这里介绍的特征处理库也十分强大!

1.2.1标准化与区间放缩法

无量纲化使不同规格的数据转换到同一规格。常见的无量纲化方法有标准化和区间缩放法。标准化的前提是特征值服从正态分布,标准化后,其转换成标准正态分布。区间缩放法利用了边界值信息,将特征的取值区间缩放到某个特点的范围,例如[0, 1]等。

标准化

from sklearn.preprocessing import StandardScaler

 

#标准化,返回值为标准化后的数据

StandardScaler().fit_transform(iris.data)

区间放缩法

from sklearn.preprocessing import MinMaxScaler

 

#区间缩放,返回值为缩放到[0, 1]区间的数据

MinMaxScaler().fit_transform(iris.data)

1.2.2 归一化与正则化区别

 简单来说,标准化是依照特征矩阵的列处理数据,其通过求z-score的方法,将样本的特征值转换到同一量纲下。正则化是依照特征矩阵的行处理数据,其目的在于样本向量在点乘运算或其他核函数计算相似性时,拥有统一的标准,也就是说都转化为单位向量

1.3训练集与验证集分类

from sklearn.model_selection import train_test_split
x_train,x_test,y_trian,y_test=train_test_split(dem,object,test_size=0.3,shuffle=True)

1.4模型训练

RLR=RandomForestRegressor()#引入模型
RLR.fit(X_train,Y_train)#模型训练

In [4]: from sklearn import linear_model

In [5]: linear_reg = linear_model.LinearRegression()

from sklearn import tree

tree_reg = tree.DecisionTreeRegressor()

In [7]: from sklearn import svm

In [8]: svr = svm.SVR()

In [11]: from sklearn import neighbors

In [12]: knn = neighbors.KNeighborsRegressor()

In [14]: from sklearn import ensemble

In [16]: rf =ensemble.RandomForestRegressor(n_estimators=20)#这里使用20个决策树

In [18]: ada = ensemble.AdaBoostRegressor(n_estimators=50)

In [20]: gbrt = ensemble.GradientBoostingRegressor(n_estimators=100)

lgbmRLR=lgb.LGBMRegressor()

1.5验证集预测

y_pred = RLR.predict(X_test)

1.6模型评估

from sklearn.metrics import mean_squared_error

RSM=np.sqrt(mean_squared_error(Y_test,((y_pred))))

包:sklearn.metrics

包含评分方法、性能度量、成对度量和距离计算

评估的方式可通过传入y_true,y_pred给metrics的相关接口,得到计算结果;也可以在交叉验证的时候指标评估标准。

分类结果度量

输入大多为y_true,y_pred

具体评价指标如下:

**metrics.confusion_matrix(y_true, y_pred[, …])**分类混淆矩阵

accuracy_score: 分类准确度

正确分类的样本数与检测样本总数(S)的比值

分类准确率这一衡量分类器的标准比较容易理解,但是它不能告诉你响应值的潜在分布,并且它也不能告诉你分类器犯错的类型。

metrics.precision_score(y_true, y_pred[, …])

**metrics.average_precision_score(y_true, y_score) **

metrics.recall_score(y_true, y_pred[, …])

metrics.f1_score(y_true, y_pred[, labels, …])

precision_recall_fscore_support: 计算精确度、召回率、f、支持度

metrics.roc_curve(y_true, y_score[, …])

metrics.auc

metrics.roc_auc_score(y_true, y_score[, …])

metrics.precision_recall_curve(y_true, …)

metrics.brier_score_loss(y_true, y_prob[, …])

jaccard_similarity_score: 计算jaccard相似度

杰卡德相似系数:两个集合A和B的交集元素在A,B的并集中所占的比例,称为两个集合的杰卡德相似系数,用符号J(A,B)表示。​

metrics.matthews_corrcoef(y_true, y_pred[, …])

metrics.cohen_kappa_score(y1, y2[, labels, …])

metrics.fbeta_score(y_true, y_pred, beta[, …])

hamming_loss: 计算汉明损失

zero_one_loss: 计算0-1损失

hinge_loss: 计算hinge损失

可参考机器学习中的损失函数 (着重比较:hinge loss vs softmax loss)

log_loss: 计算log损失

更多,可参考sklearn中的损失函数

classification_report: 分类报告

回归结果度量

mean_absolute_error: 平均绝对误差

mean_squared_erro 均方误差

metrics.mean_squared_log_error(y_true, y_pred):

metrics.median_absolute_error(y_true, y_pred):

explained_variance_score: 可解释方差的回归评分,与决定系数相比,这里是1-残差平方和/y的方差,而决定系数是1-残差的方差/比上y 的方差。总体上两者的趋势是一致的,但有细微差别,结果上一般决定系数的更接近1.

metrics.r2_score(y_true, y_pred[, …]): 也就通过说的决定系数r 2 r^2r

2

相关计算公式可参考:scikit-learn中拟合结果的评价指标

多标签的度量

当有多列标签时,实际上还没生成多列标签处理过,不知道这样处理有什么优势

coverage_error: 涵盖误差

label_ranking_average_precision_score: 基于排名的平均精度

metrics.label_ranking_loss(y_true, y_score)

聚类结果度量

adjusted_mutual_info_score: 调整的互信息得分

silhouette_score: 所有样本轮廓系数的平均值

silhouette_sample: 所有样本轮廓系数

官网上有更多指标

1.7模型参数调整

1.7.1交叉验证

包:sklearn.cross_validation

http://scikit-learn.org/stable/modules/classes.html#module-sklearn.model_selection

KFold(): 交叉验证迭代器,接收元素个数、fold数、是否清洗

LeaveOneOut(): 交叉验证迭代器

LeavePOut(): 交叉验证迭代器

LeaveOneLableOut(): 交叉验证迭代器

LeavePLableOut(): 交叉验证迭代器

交叉验证是利用训练集本身来测试模型精度,思路是将训练集分成n份,然后按一定比例取其中的几份(大头)作为真正的训练集来训练模型,其中的几份(少数)不参与训练来验证模型精度。然后循环这个过程,得到多组测试精度。所以在交叉验证器里就涉及到抽取测试集的比例问题。

LeaveOneOut()就是从n份(全校样本)里抽1份作为测试集,LeavePOut()就是从n份(全校样本)里抽p份作为测试集。

LeaveOneOut(n) 相当于 KFold(n_folds=n) ,当n等于全体样本数时(KFold的n_folds参数指的是将全体样本分成几份,每次拿其中的1份或几份做为测试集,而且它多次操作,会让测试覆盖整个数据集);相当于LeavePOut(n, p=1)(LeavePOut中p参数指p个样本)。三者均会重复,让测试集覆盖全体样本。

而LeaveOneLableOut()和LeavePLableOut()与上面的区别在于,这里可以直接加入第三方的标签作为数据集的区分,也就是第三方标签已经把数据分成n份了。们的数据是一些季度的数据。那么很自然的一个想法就是把1,2,3个季度的数据当做训练集,第4个季度的数据当做测试集。这个时候只要输入每个样本对应的季度Label,就可以实现这样的功能。

from sklearn.model_selection import KFold
kf=KFold(n_splits=30)
rmse=[]




for train_indices,test_indices in kf.split(dem):
    X_train,X_test=dem[train_indices],dem[test_indices]
    Y_train, Y_test = object[train_indices], object[test_indices]
    lgbmRLR=lgb.LGBMRegressor()
    lgbmRLR.fit(X_train,Y_train)
    y_pred = lgbmRLR.predict(X_test)
    RSM=np.sqrt(mean_squared_error(np.log(Y_test),np.log((y_pred))))
    rmse.append(RSM)

1.7.2网格搜索

包:sklearn.grid_search

网络搜索是用来寻找最佳参数的。

GridSearchCV: 搜索指定参数网格中的最佳参数

ParameterGrid: 参数网络

ParameterSampler: 用给定分布生成参数的生成器

RandomizedSearchCV: 超参的随机搜索

通过best_estimator_get_params() 方法获取最佳参数

1.8模型保存与调用

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
要安装并使用sklearn,你需要按照以下步骤进行操作: 1. 首先,确保你的计算机中已经安装了Python(版本大于等于2.6或大于等于3.3)、Numpy(版本大于等于1.6.1)和Scipy(版本大于等于0.9)这三个库。 2. 接下来,你可以使用pip工具来安装sklearn。在终端或命令行中输入以下命令来安装sklearn: ``` pip install scikit-learn ``` 3. 在安装过程中,pip将会自动处理sklearn所依赖的其他库,如numpy和scipy。 4. 安装完成后,你可以在Python代码中导入sklearn库并开始使用它。例如,你可以使用以下代码导入sklearn的线性回归模型: ```python from sklearn.linear_model import LinearRegression ``` 然后,你就可以使用LinearRegression类来训练和预测线性回归模型了。 总结起来,要安装和使用sklearn,你需要先确认Python、Numpy和Scipy已经安装好,然后使用pip工具来安装sklearn。安装完成后,你就可以在Python代码中导入sklearn库并使用其中的模型和功能了。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [Sklearn安装(简明教程)](https://blog.csdn.net/Xingchen0101/article/details/126332660)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [初学者安装Sklearn详细步骤(有详细步骤截图,亲测完成)](https://blog.csdn.net/cz_include/article/details/123459537)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [sklearn安装,pip install sklearn](https://download.csdn.net/download/ALiLiLiYa/87109901)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值