人工智能知识分享第三天-机器学习中交叉验证和网格搜索

交叉验证和网格搜索

  • 交叉验证解释:

    • 概述:
      它是一种更加完善的, 可信度更高的模型预估方式, 思路是: 把数据集分成n份, 每次都取1份当做测试集, 其它的当做训练集, 然后计算模型的: 评分.
      然后再用下1份当做测试集, 其它当做训练集, 计算模型评分, 分成几份, 就进行几次计算, 最后计算: 所有评分的均值, 当做模型的最终评分.
      好处:
      交叉验证的结果 比 单一切分训练集和测试集 获取评分结果, 可信度要高.
      细节:
      1.把数据集分成N份, 就叫: N折交叉验证, 例如: 分成4份, 就叫4折交叉验证.
      2.交叉验证一般不会单独使用, 而是结合网格搜索一起使用.
  • 网格搜索:

    • 概述:
      它是机器学习内置的API, 一般结合交叉验证一起使用, 指的是: GridSearchCV, 目的是: 寻找最优超参.
      格式:
      GridSearchCV(estimator模型对象, params = 超参可能出现的值1, 值2, 值3..., cv=折数)
      超参解释:
      模型中需要用户(程序员)手动传入的参数 -> 统称为: 超参.
      目的:
      网格搜索 + 交叉验证 目的都是为了 寻找模型的 最优的解决方案, 追求较高的效率.
      代码演示:
python 复制代码
# 导入工具包
from sklearn.datasets import load_iris  # 加载鸢尾花测试集的.
from sklearn.model_selection import train_test_split, GridSearchCV  # 分割训练集和测试集的,  网格搜索 + 交叉验证.
from sklearn.preprocessing import StandardScaler  # 数据标准化的
from sklearn.neighbors import KNeighborsClassifier  # KNN算法 分类对象
from sklearn.metrics import accuracy_score  # 模型评估的, 计算模型预测的准确率

# 1. 加载鸢尾花数据集.
iris_data = load_iris()
# 2. 数据预处理.
x_train, x_test, y_train, y_test = train_test_split(iris_data.data, iris_data.target, test_size=0.2, random_state=22)
# 3. 特征工程, 数据标准化(特征预处理)
transfer = StandardScaler()
# 分别对训练集 和 测试集进行标准化处理.
x_train = transfer.fit_transform(x_train)  # 训练(拟合) + 转换
x_test = transfer.transform(x_test)  # 只进行转换, 不进行拟合.

# 4. 模型训练.
# 4.1 创建KNN 分类器对象 -> 模型对象.
estimator = KNeighborsClassifier()  # 注意: 不要传入超参, 即: K的数值.
# 4.2 定义字典, 记录: 超参可能出现的值.
param_dict = {'n_neighbors': list(range(1, 21))}    # K的范围: 1 ~ 21 包左不包右
# 4.3 创建网格搜索对象.
# 参1: 模型对象, 参2: 超参字典, 参3: 交叉验证的折数.
# 处理完之后, 会返回1个功能更加强大的模型对象.
estimator = GridSearchCV(estimator, param_dict, cv=4)

# 4.4 模型训练.
estimator.fit(x_train, y_train)

# 5. 模型预测.
y_predict = estimator.predict(x_test)
print(f'预测结果是: {y_predict}')

# 6. 打印下 网格搜索 和 交叉验证的结果.
print(estimator.best_score_)        # 最优组合的 平均分,    0.9666666666666666
print(estimator.best_estimator_)    # 最优组合的 模型对象
print(estimator.best_params_)       # 最优组合的 超参数(供参考) {'n_neighbors': 3}
print(estimator.cv_results_)        # 所有组合的 评分结果(过程)
print('-' * 22)

# 7. 结合上述的结果, 最模型再次做评估.
estimator = KNeighborsClassifier(n_neighbors=3)
estimator.fit(x_train, y_train)
y_predict = estimator.predict(x_test)
print(f'模型准确率为: {accuracy_score(y_test, y_predict)}')   # 0.9666666666666667

坚持分享 共同进步 如有错误 欢迎指出

相关推荐
FII工业富联科技服务38 分钟前
从人机共舞到工业精密操作:机器人如何突破动作控制与场景适应?
人工智能·机器人·机器翻译模型
serdes211 小时前
56G PAM4 SerDes RX 32 路时间交织 SAR ADC 顶层与采样前端
人工智能
小和尚同志6 小时前
小黑插图 Skill:从 11.7k star 的 Codex 专属,到 Claude Code 能用的平替
人工智能·aigc
高洁016 小时前
孪生不止在工厂:能源、医疗与农业
人工智能·深度学习·transformer·知识图谱·tornado
外域速览6 小时前
智谱50亿美元押注AI自训练
大数据·人工智能
人工智能培训6 小时前
孪生不止在工厂:能源、医疗与农业
大数据·人工智能
米小虾7 小时前
让模型说"我不知道",比让它答对更难:放弃文本生成能换来什么
人工智能
新新学长搞科研7 小时前
【SPIE出版】2026年人工智能、新材料与新能源国际学术会议(AINMNE 2026)
人工智能·新能源·新材料
野生技术架构师7 小时前
2026 Java 面试全套总结,八股 + 场景 + AI 相关面试考点
java·人工智能·面试
米小虾7 小时前
不写出来的思考:把 Transformer 的层循环起来,是第三条 scaling 轴还是省错了地方?
人工智能