8-5 学习曲线

学习曲线:随着训练样本逐渐增多,算法训练出的模型的表现能力

import numpy as np
import matplotlib.pyplot as plt

np.random.seed(666)
x = np.random.uniform(-3.0,3.0,size=100)
X = x.reshape(-1,1)
y = 0.5 * x ** 2 + x + 2 +np.random.normal(0,1,size=100)

plt.scatter(x,y)
plt.show()

输出图片:
在这里插入图片描述
学习曲线

from sklearn.model_selection import train_test_split

X_train,X_test,y_train,y_test = train_test_split(X,y,random_state=666)
X_train.shape
输出:(75, 1)

from sklearn.linear_model import LinearRegression

from sklearn.metrics import mean_squared_error

#两个列表中记录了线性模型随着放进去的训练数据越来越多相应的得到的模型在训练数据集和测试数据集上性能的变化
train_score = []
test_score = []

for i in range(1,76):
    lin_reg = LinearRegression()
    lin_reg.fit(X_train[:i],y_train[:i])
    y_train_predict = lin_reg.predict(X_train[:i])   train_score.append(mean_squared_error(y_train[:i],y_train_predict))
    y_test_predict = lin_reg.predict(X_test)  test_score.append(mean_squared_error(y_test,y_test_predict))

plt.plot([i for i in range(1,76)],np.sqrt(train_score),label="train")
plt.plot([i for i in range(1,76)],np.sqrt(test_score),label="test")

plt.axis([0,76,0,4])
plt.legend()#加上图例
plt.show()

输出:在这里插入图片描述
我们可以将上述过程提炼成一个函数:

def plot_learning_curve(algo,X_train,X_test,y_train,y_test):
    train_score = []
    test_score = []

    for i in range(1,len(X_train)+1):
        algo.fit(X_train[:i],y_train[:i])

        y_train_predict = algo.predict(X_train[:i])
        train_score.append(mean_squared_error(y_train[:i],y_train_predict))

        y_test_predict = algo.predict(X_test)
        test_score.append(mean_squared_error(y_test,y_test_predict))
    
    plt.plot([i for i in range(1,len(X_train)+1)],np.sqrt(train_score),label="train")
    plt.plot([i for i in range(1,len(X_train)+1)],np.sqrt(test_score),label="test")
    plt.axis([0,len(X_train)+1,0,4])
    plt.legend()#加上图例
    plt.show()
    
plot_learning_curve(LinearRegression(),X_train,X_test,y_train,y_test)#误差稳定在1.6左右,欠拟合的情况

在这里插入图片描述
使用线性回归得到的结果误差稳定在1.6左右,这是欠拟合的情况

使用多项式回归

from sklearn.preprocessing import PolynomialFeatures
from sklearn.preprocessing import StandardScaler
from sklearn.pipeline import Pipeline

def PolynomialRegression(degree):
    return Pipeline([
        ("poly",PolynomialFeatures(degree=degree)),
        ("std_scaler",StandardScaler()),
        ("lin_reg",LinearRegression())
    ])
    
poly2_reg = PolynomialRegression(degree=2)
plot_learning_curve(poly2_reg,X_train,X_test,y_train,y_test)#误差稳定在1左右,最佳情况

在这里插入图片描述
使用多项式回归法,在degree = 2的情况下,误差稳定在1.0左右且训练数据集和测试数据集之间的误差接近,相对来说这是最佳的情况

poly2_reg = PolynomialRegression(degree=20)
plot_learning_curve(poly2_reg,X_train,X_test,y_train,y_test)
#过拟合的情况发生(误差情况和最佳情况差不多,都稳定在1.0左右,但是在训练数据集上表现好的时候,在测试数据集上表现不好,训练数据集和测试数据集的误差相差比较大)

在这里插入图片描述

使用多项式回归法,在degree = 20的情况下,误差稳定在1.0,但是在训练数据集上表现好的时候,在测试数据集上表现不好(比如在训练样本数在30-40这段),训练数据集和测试数据集的误差相差比较大,这是过拟合的情况

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Oracle学习曲线是指学习和掌握Oracle数据库技术所需的过程和路径。下面是Oracle学习曲线的一般步骤: 1. 基础知识学习:首先,你需要了解数据库的基本概念和原理,包括关系型数据库、SQL语言以及数据库管理系统的基本功能和特性。 2. SQL语言学习:SQL是Oracle数据库的查询语言,你需要学习SQL语法、查询、插入、更新和删除数据等基本操作。 3. 数据库设计与规范化:学习如何设计和规范化数据库模式,包括表的设计、关系建立、主键和外键的定义等。 4. 数据库管理:学习如何安装、配置和管理Oracle数据库,包括创建数据库实例、用户管理、权限控制、备份和恢复等。 5. 高级特性学习:深入学习Oracle数据库的高级特性,如索引优化、查询调优、事务管理、并发控制等。 6. 数据库开发:学习如何使用Oracle数据库进行应用程序开发,包括使用PL/SQL编程语言、存储过程、触发器等。 7. 数据库安全性:了解如何保护数据库的安全性,包括用户认证、权限管理、数据加密等。 8. 性能优化:学习如何优化数据库的性能,包括索引设计、查询优化、存储优化等。 9. 数据库扩展:学习如何扩展Oracle数据库,包括分区、集群、备份和恢复策略等。 10. 持续学习和实践:数据库技术不断发展,你需要持续学习最新的Oracle技术和趋势,并通过实践项目来巩固所学知识。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值