理论教育 使用scikit-learn库实现智能车辆理论与应用

使用scikit-learn库实现智能车辆理论与应用

时间:2023-10-02 理论教育 版权反馈
【摘要】:下面介绍logistic回归模型代码中引用的几个scikit-learn库函数。下面介绍在logistic回归的基础上进行网格搜索法参数整定代码中的几个scikit-learn库函数。1)GridSearchCV函数代码的第6行调用了scikit-learn库model_selec

使用scikit-learn库实现智能车辆理论与应用

1.scikit-learn简介

scikit-learn是一个开源的Python库,通过统一的接口实现机器学习、预处理、交叉验证方法,具有易于安装、易于使用的特点。

导入scikit-learn库中常用模块的方法为:

2.特征提取代码

通过前面设计的特征提取方法,将正样本点和负样本点进行特征提取,得到一个data_train.txt文件,每一行包括4个特征值以及标签值。下面是读取数据的代码:

数据读取的结果如下所示,其中“negative obstacle”列中1代表该点为负障碍,0代表该点不是负障碍。

3.logistic回归模型

首先将特征提取的数据分为测试样本和训练样本,用于模型的训练与测试,代码如下:

代码的第3行调用了scikit-learn库model_selection模块的train_test_split函数,model_selection模块主要用于数据划分相关的操作,train_test_split函数用于将数据集划分为训练集和测试集,函数接口形式为:

其中部分参量:

train_data:待划分的样本数据;

train_target:待划分的对应样本数据的样本标签;

test_size:可以为:①在0~1之间的浮点数,表示样本占比(若test_size=0.3,则样本数据中有30%的数据作为测试数据,记入X_test,其余70%数据记入X_train,同时适用于样本标签);②整数,表示样本数据中有多少样本记入X_test中,其余样本记入X_train;

random_state:随机数种子,种子不同,每次采集的样本不一样;种子相同,采集的样本不变;

shuffle:是否打乱样本数据顺序,类型为bool,当shuffle=False时,不打乱样本数据顺序;当shuffle=True时,打乱样本数据顺序。

然后引入logistic回归模型,代码如下所示:

打印输出的结果如下所示:

其中,0表示非负障碍类别,1表示负障碍类别。非负障碍类别的精确度(precision)为0.98,召回率(recall)为0.96,F1分数(F1-score)为0.97,样本数(support)有815个;负障碍类别的精确度为0.83,召回率为0.91,F1分数为0.87,样本数有166个;整个分类器的准确率(accuracy)为0.95。

下面介绍logistic回归模型代码中引用的几个scikit-learn库函数。

1)LogisticRegression函数

代码的第2行调用了scikit-learn库linear_model模块的LogisticRegression函数,linear_model模块实现了各种线性模型,LogisticRegression函数为linear_model模块的一个常用函数,用来构建logistic回归分类器,使用样式如下:

其中,参量solver为一个字符串,指定了求解最优化问题的算法,可以为如下值:

'newton-cg':使用牛顿法;

'lbfgs':使用L-BFGS拟牛顿法;

'liblinear':使用liblinear方法;

'sag':使用Stochastic Average Gradient descent算法。

2)StratifiedKFold函数

代码的第4行调用了scikit-learn库model_selection模块的StratifiedKFold函数,用于构建k折交叉验证分层采样的子集,使用样式如下:

其中部分参量:

n_splits:k折交叉验证的折数,即k的大小,类型为int,默认=5,至少为2;

shuffle:类型为bool,表示在拆分成批次之前是否对每个类的样本进行打乱顺序,默认为False;

random_state:类型为int或RandomState实例,默认为None;当shuffle为True时,random_state会影响采样的顺序,从而控制每个类别的每个子集的随机性;否则,保留random_state为None,为多个函数调用传递可重复输出的int值。

3)cross_val_predict函数

代码的第6行调用了scikit-learn库model_selection模块的cross_val_predict函数,用于为每个输入数据生成在交叉验证数据集上的预测值,使用样式如下:

其中部分参量:

estimator:用来“预测”的分类器对象;

X:输入给分类器的数据,类型为数组,如列表或二维数组;

y:与输入给分类器的数据对应的标签真值,类型为数组,默认值为None;

cv:默认值为None,用于确定交叉验证子集分割策略。(www.daowen.com)

4)classification_report函数

代码的第11行调用了scikit-learn库metrics模块的classification_report函数,metrics模块包括评分功能、性能指标以及成对指标和距离计算,classification_report函数用于建立一个显示主要分类指标的文本报告,使用样式为:

其中部分参量:

y_true:一维数组,为实际标签值;

y_pred:一维数组,为分类器输出的估计值。

4.网格搜索法

接着采用网格搜索法进行参数整定,根据经验将初始参数选定在一定的范围内,GridSearchCV存在的意义就是自动调参,只要把参数输进去,就能给出最优化的结果和参数,代码如下所示:

在logistic回归的基础上进行网格搜索法参数整定的代码如下:

打印输出的结果如下所示:

相比较仅使用logistic回归而言,加上网格搜索进行参数整定后,精确度、召回率、准确率均有所提升,其中准确率从0.95提升至0.96,这说明加入网格搜索进行参数整定后,模型分类准确率提高。但是网格搜索也具有其局限性,可能会因为步长太大而错过最优化的数据组合的取值,导致分类准确率降低。

下面介绍在logistic回归的基础上进行网格搜索法参数整定代码中的几个scikit-learn库函数。

1)GridSearchCV函数

代码的第6行调用了scikit-learn库model_selection模块的GridSearchCV函数,用于进行网格搜索,作用是找到使得机器学习算法效果达到最好的各类参数的集合,使用样式如下:

其中部分参量:

estimator:选择使用的分类器,并且传入除需要确定最佳的超参数之外的其他参数;

param_grid:需要最优化的超参数的取值,值为字典或者列表。字典里面的键代表estimator模型中可以设置的参数。

2)precision_score函数

代码的第21行调用了scikit-learn库metrics模块的precision_score函数,precision_score函数用于计算精确度(precision),使用样式为:

其中部分参量:

y_true、y_pred:同上述classification_report函数中介绍;

pos_label:当average='binary'和数据为二进制的类时,类型为str或int,默认为1,如果数据是多类或多标签的,则将被忽略,设置labels=[pos_label],并将仅报告该标签的分数;

average:对于多类/多标签目标,此参数是必需的;如果为None,则返回每个类型的分数,否则将确定对数据执行的“average”类型:binary、micro、macro、weighted或是samples。

5.另外两种算法代码和结果的简单介绍

SVM和随机森林模型用于上述数据的分类,代码及运算结果介绍如下。

1)SVM模型

SVM模型仅有以下代码语句与logistic回归模型不同,其他代码类似。

运行后,输出结果为:

代码的第2行调用了scikit-learn库svm模块的SVC函数,用于构建支持向量机分类器,使用样式为:

其中部分参量:

gamma:为“rbf”“poly”和“sigmoid”的核函数参数,可取scale,auto或者float数据,默认为“scale”;如果gamma='scale'(默认)被传递,则它将1/(n_features*X.var())用作gamma值,如果为'auto',则使用1/n_features。

2)随机森林模型

随机森林模型仅有以下代码语句与logistic回归模型不同,其他代码类似。

运行后,输出结果为:

代码的第2行调用了scikit-learn库ensemble模块的RandomForestClassifier函数,ensemble模块包括基于集成的分类、回归和异常检测方法,RandomForestClassifier函数用于构建随机森林分类器,使用样式为:

其中部分参量:

n_estimators:类型为int,默认=100,随机森林中决策树的数量;

criterion:随机森林中构建决策树时的特征评估标准,可选“gini”或“entropy”,默认值为“gini”。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈