一.绪论:
1.基本概念:数据集,假设空间,特征向量,偏好归纳...
2.没有万能的算法!“NFL定理”,学习算法自身的归纳偏好与问题是否相配往往起决定性作用。
3.机器学习的发展历程与应用前景
二.模型的评估与选择:
1.过拟合与欠拟合:
过拟合:当学习器把训练样本学得"太好"了的时候,很可能巳经把训练样本自身的一些特点当作了所有潜在样本都会具有的一般性质,这样就会导致泛化性能下降这种现象在机器学习中称为 "过拟合" (overfitting)
欠拟合: 指对学习器训练样本的一般性质尚未学好
2.评估方法:
2.1留出法:split(按一定比例划分数据集)
注意:
(1)要保持数据分布的一致性;
(2)一般需要多次划分后求平均值
图像数据集的split代码实现(python)
!pip install split-folders
import splitfolders
input_folder = "C:/Users/Teoh Teik Teo/OneDrive - TSS Global Pte. Ltd/TT Library/AI Model/Data/Breast Illness"
output = "C:/Users/Teoh Teik Teo/OneDrive - TSS Global Pte. Ltd/TT Library/AI Model/Data/Breast Illness (train test split)" #where you want the split datasets saved. one will be created if it does not exist or none is set
splitfolders.ratio(input_folder, output=output, seed=42, ratio=(.7, .1, .2)) # ratio of split are in order of train/val/test. You can change to whatever you want. For train/val sets only, you could do .75, .25 for example.
2.2交叉验证法:
留“1”检测法,等量的划分子集,且每次剩余的子集当测试集
2.3自助法:
m个样本的D,每次随机挑一个样本进D',重复m次,拿D'做训练集,D-D'做测试集
缺点:初始数据量足够时,由于D'中的样本是随机挑选进去的,且有些近1/3的样本永远不会出现在其中,因此改变了初始数据集的分布,可能引入估计偏差
3.性能度量:
3.1 查准率与查全率:
查准率P:判断的正例中有多少是真正正例的
查全率R:所有的正例有多少被判断出来了
注意:P与R是一对矛盾的度量,二者往往成负相关。
样例总数 = TP+FP+TN+FN
3.2 P-R曲线:
定义:按照顺序,逐个把样本作为正例进行预测,则每次可以计算出当前的查全率、查准率;以查准率为纵轴、查全率为横轴作图就得到了查准率、查全率曲线,简称“P-R线"
自己模型的PR曲线:
几个概念:
BEP、F1、FB:查准率和查全率的度量标准
(1)BEP:查准率=查全率
(2)F1:查准率和查全率的调和平均(TP在TP+FP+FN中的比重)
模型计算F1的python代码:
predictions = model.predict(x_test)
predictions=np.int64(predictions>0.5)
predictions = predictions.reshape(1,-1)[0]
predictions[:15]
print(classification_report(y_test, predictions, target_names = ['Pneumonia (Class 0)','Normal (Class 1)']))
(3)FB:F1的加权
3.3 ROC曲线:
ROC曲线的定义:以TPR(正例率)为纵轴,以TFPR(假正例率)为横轴
展示自己画的ROC曲线:
部分代码展示:
from sklearn.metrics import roc_curve, auc
fpr, tpr, thresholds = roc_curve(y_test,predictions)
roc_auc = auc(fpr, tpr)
plt.title('Receiver Operating Characteristic')
plt.plot(fpr, tpr, '#9400D3',label=u'AUC = %0.3f'% roc_auc)
plt.plot(fpr, thresholds, '#054E9F',label=u'Thresholds'% roc_auc)
plt.legend(loc='lower right')
plt.plot([0,1],[0,1],'r--')
plt.xlim([-0.1,1.1])
plt.ylim([-0.1,1.1])
plt.ylabel('True Positive Rate')
plt.xlabel('False Positive Rate')
plt.grid(linestyle='-.')
plt.grid(True)
plt.show()
print(roc_auc)