机器学习——交叉验证

交叉验证定义

交叉验证(Cross Validation),有的时候也称作循环估计(Rotation Estimation),是一种统计学上将数据样本切割成较小子集的实用方法,该理论是由Seymour Geisser提出的。
在给定的建模样本中,拿出大部分样本进行建模型,留小部分样本用刚建立的模型进行预报,并求这小部分样本的预报误差,记录它们的平方加和。这个过程一直进行,直到所有的样本都被预报了一次而且仅被预报一次。把每个样本的预报误差平方加和,称为PRESS(predicted Error Sum of Squares)。

交叉验证解释

交叉验证(Cross-validation)主要用于建模应用中,例如PCR 、PLS 回归建模中。在给定的建模样本中,拿出大部分样本进行建模型,留小部分样本用刚建立的模型进行预报,并求这小部分样本的预报误差,记录它们的平方加和。

交叉验证的原理

常用的精度测试方法主要是交叉验证,例如10折交叉验证(10-fold cross validation),将数据集分成十份,轮流将其中9份做训练1份做验证,10次的结果的均值作为对算法精度的估计,一般还需要进行多次10折交叉验证求均值,例如:10次10折交叉验证,以求更精确一点。
交叉验证有时也称为交叉比对,如:10折交叉比对

代码实现

import pandas as pd
import matplotlib.pyplot as plt
from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import cross_val_score
from sklearn.tree import DecisionTreeClassifier

plt.rcParams["font.sans-serif"] = ["SimHei"]
plt.rcParams["axes.unicode_minus"] = False

# 读取数据并设置MEMBER_NO为索引列
data = pd.read_excel('../../datas/aviation.xls', index_col='MEMBER_NO')
# 处理数据(去重,删除空值)
data.drop_duplicates(inplace=True)
data.dropna(inplace=True)
# 抽取500个样本,并切出XY
data = data.sample(500)
X = data.iloc[:, :-1]
Y = data.iloc[:, -1]
# 使用交叉验证方法
# 比较逻辑回归、决策树的性能并用f1指标验证
# 逻辑回归
Log = LogisticRegression()
# 决策树
Dc = DecisionTreeClassifier()

Logmodel = cross_val_score(Log, X, Y, scoring='f1', cv=2)
print(Logmodel)
Dcmodel = cross_val_score(Dc, X, Y, scoring='f1', cv=2)
print(Dcmodel)

效果展示

[ 0.96296296  0.94680851]
[ 0.95238095  0.92553191]

总结

通过效果可以看出逻辑回归的效果比决策树的要好一些,因为打印出的精确率较高,所以模型可以选择逻辑回归为合适的算法

你可能感兴趣的:(机器学习,机器学习,交叉验证,定义,原理,代码实现)