请选择 进入手机版 | 继续访问电脑版
MSIPO技术圈 首页 IT技术 查看内容

机器学习技术(五)——特征工程与模型评估

2023-07-13

机器学习技术(五)——特征工程与模型评估(2️⃣)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-qVCUO6E1-1689121051195)(D:\文件\CSDN\华为实训\机器学习基础\特征工程与模型调优\特征工程与模型调优.png)]

🚀机器学习技术(四)包含了十二种特征工程的应用方法,主要包括标准化,特征缩放,缩放有离群的值的数据,非线性转换,样本归一化,特征二值化,one-hot编码,缺失值插补以及生成多项式特征等步骤。

🚢通过这些步骤可以显著提高数据的质量。同时,实验包含了基于Python代码的对特征集进行筛选的多种方法。一个典型的机器学习任务,是通过样本的特征来预测样本所对应的值。而现实中的情况往往是特征太多了,需要减少一些特征。

🚢减少特征具有重要的现实意义,不仅减少过拟合、减少特征数量(降维)、提高模型泛化能力,而且还可以使模型获得更好的解释性,增强对特征和特征值之间的理解,加快模型的训练速度,一般的,还会获得更好的性能。基于sklearn自带数据集iris,应用多种特征筛选方法进行特征选择。

🚀包含关于几个评估模型指标的参数计算及其原理。在日常业务有中,当我们训练模型时常常需要在多个模型中选择出最优模型,因此本实验中precision, recall rate等参数就成为评判的依据,帮助我们选择和评价模型表现。

二、模型评估

1、Accuracy score

预测准确率 = 预测正确的样本数 总样本数 预测准确率=\frac{预测正确的样本数}{总样本数} 预测准确率=总样本数预测正确的样本数

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

import numpy as np
from sklearn.metrics import accuracy_score
#定义y的预测集和y的真实集,进行比较
y_pred = [0, 2, 1, 3]
y_true = [0, 1, 2, 3]

计算accuracy score

accuracy_score(y_true, y_pred)

由数据可见,只有两个样本被预测正确,分别为第一个和第四个,所以正确率为0.5

0.5

输出共有几个样本被预测正确

accuracy_score(y_true, y_pred, normalize=False)  

结果如下所示。

2

2、Confusion matrix混淆矩阵

混淆矩阵就是分别统计分类模型归错类,归对类的观测值个数,然后把结果放在一个表里展示出来。这个表就是混淆矩阵。该章节中针对数据的特征类型计算混淆矩阵。

1、多值

该数据标签数量为3大于2

#导入计算方法
from sklearn.metrics import confusion_matrix
#自定义真实值以及预测值
y_true = [2, 0, 2, 2, 0, 1]
y_pred = [0, 0, 2, 2, 0, 2]
#计算混淆矩阵
confusion_matrix(y_true, y_pred)

输出结果如下,列表示预测值,行表示真实值。所以第[1,1]=2代表真实值为0,也同时被预测为0的有2个;[2,1]=0表示真实值为1但被预测为0的有0个。

array([[2, 0, 0],
       [0, 0, 1],
       [1, 0, 2]])

2、二值

该数据中只有两个标签0和1

#定义预测数据以及真实数据
y_true = [0, 0, 0, 1, 1, 1, 1, 1]
y_pred = [0, 1, 0, 1, 0, 1, 0, 1]

输入:

confusion_matrix(y_true, y_pred)

左上,左下,右上,右下分别为true positive(预测为1,真实为1),false negative(真实为1,预测为0),false positive(真实为0,预测为1),true negative(真实为0,实际为0)

array([[2, 1],
       [2, 3]])
#查看四个值
tn, fp, fn, tp = confusion_matrix(y_true, y_pred).ravel()
tn, fp, fn, tp
(2, 1, 2, 3)

3、Hamming loss

汉明损失 = 预测错误的样本数 样本总数 汉明损失=\frac{预测错误的样本数}{样本总数} 汉明损失=样本总数预测错误的样本数

预测标签与真实标签的异或关系。汉明损失显然是越小越好

输入:

#定义预测值以及真实值
from sklearn.metrics import hamming_loss
y_pred = [1, 2, 3, 4]
y_true = [2, 2, 3, 4]

输出汉明损失

hamming_loss(y_true, y_pred)

只有一个预测错误,错误率0.25

0.25

4、Precision, recall and F-measures

三个指标基于模型预测混淆矩阵进行计算

P r e c i s i o n = T P F P + T P Precision=\frac{TP}{FP+TP} Precision=FP+TPTP

R e c a l l = T P T P + F N Recall=\frac{TP}{TP+FN} Recall=TP+FNTP

F − m e a s u r e = 2 ∗ p r e c i s i o n ∗ R e c a l l p r e c i s i o n + R e c a l l F-measure=\frac{2*precision*Recall}{precision+Recall} Fmeasure=precision+Recall2precisionRecall

1、定义数据

#定义数据
from sklearn import metrics
y_pred = [0, 1, 0, 0]
y_true = [0, 1, 0, 1]

2、计算Precision

# precision=tp/tp+fp
metrics.precision_score(y_true, y_pred)

输出:

1.0

3、计算Recall

# recall=tp/fn+tp
metrics.recall_score(y_true, y_pred)

输出:

0.5

4、计算F-score

输入:

# F_beta = (1+beta^2)*(precision*recall/beta^2*precision+recall)
metrics.f1_score(y_true, y_pred)  

输出:

0.6666666666666666

输入:

#调整beta的值以获得不同标准的fbeta score 
print(metrics.fbeta_score(y_true, y_pred, beta=0.5))
print(metrics.fbeta_score(y_true, y_pred, beta=1))  
print(metrics.fbeta_score(y_true, y_pred, beta=2))  

输出:

0.8333333333333334
0.6666666666666666
0.5555555555555556

5、Classification report:分类结果统计报告

sklearn中的classification_report函数用于显示主要分类指标的文本报告.在报告中显示每个类的精确度,召回率,F1值等信息。

from sklearn.metrics import classification_report
y_true = [0, 1, 2, 2, 0]
y_pred = [0, 0, 2, 1, 0]
target_names = ['class 0', 'class 1', 'class 2']
print(classification_report(y_true, y_pred, target_names=target_names))

输出结果如下,是一个综合统计,其中support表示真实类别的次数,avg / total 表示各列的均值。

输出:

             precision    recall  f1-score   support

     class 0       0.67      1.00      0.80         2
     class 1       0.00      0.00      0.00         1
     class 2       1.00      0.50      0.67         2

    accuracy                           0.60         5
   macro avg       0.56      0.50      0.49         5
weighted avg       0.67      0.60      0.59         5

6、⭐️⭐️⭐️模型验证相关的公式及使用

1、加入正则化项后的代价函数

1 2 ∑ j = 1 N { y i − w T σ ( x j ) } 2 + λ 2 ∑ j = 1 N ∣ w j ∣ q \frac{1}{2}\sum_{j=1}^N\{y_i-w^T\sigma(x_j)\}^2+\frac{\lambda}{2}\sum_{j=1}^N|w_j|_q 21j=1N{yiwTσ(xj)}2+2λj=1Nwjq

2、L1正则化

J = J 0 + α ∑ ∣ w ∣ J=J_0+\alpha\sum |w| J=J0+αw

poly = PolynomialFeatures(3)
train_data_poly = poly.fit_transform(train_data)
test_data_poly = poly.transform(test_data)
clf = SGDRegressor(max_iter=1000, tol=1e-3, penalty= 'L1', alpha=0.00001) 
clf.fit(train_data_poly, train_target)
score_train = mean_squared_error(train_target, clf.predict(train_data_poly))
score_test = mean_squared_error(test_target, clf.predict(test_data_poly))
print("SGDRegressor train MSE:   ", score_train)
print("SGDRegressor test MSE:   ", score_test)
#
SGDRegressor train MSE:    0.13511036183307598
SGDRegressor test MSE:    0.14332864452241414

3、L2正则化

J = J 0 + α ∑ w 2 J=J_0+\alpha\sum w^2 J=J0+αw2

poly = PolynomialFeatures(3)
train_data_poly = poly.fit_transform(train_data)
test_data_poly = poly.transform(test_data)
clf = SGDRegressor(max_iter=1000, tol=1e-3, penalty= 'L2', alpha=0.0001) 
clf.fit(train_data_poly, train_target)
score_train = mean_squared_error(train_target, clf.predict(train_data_poly))
score_test = mean_squared_error(test_target, clf.predict(test_data_poly))
print("SGDRegressor train MSE:   ", score_train)
print("SGDRegressor test MSE:   ", score_test)
SGDRegressor train MSE:    0.13323787756476335
SGDRegressor test MSE:    0.14187259762046708

4、LASSO回归

J ( θ ) = M S E ( y , y ^ ; θ ) + α ∑ i = 1 n ∣ θ i ∣ J(\theta)=MSE(y,\hat{y};\theta)+\alpha\sum_{i=1}^n|\theta_i| J(θ)=MSE(y,y^;θ)+αi=1nθi

5、平均绝对误差MAE公式、代码

M A E = 1 n ∑ i = 1 n ∣ f i − y i ∣ = 1 n ∑ i = 1 n ∣ e i ∣ MAE=\frac{1}{n}\sum_{i=1}^n|f_i-y_i|=\frac{1}{n}\sum_{i=1}^n|e_i| MAE=n1i=1nfi

相关阅读

热门文章

    手机版|MSIPO技术圈 皖ICP备19022944号-2

    Copyright © 2024, msipo.com

    返回顶部