机器学习之——过拟合欠拟合(实战)

一.任务

酶活性预测实战task:
1、基于T-R-train.csv数据,建立线性回归模型,计算其在T-R-test.csv数据上的r2分数,可视化模型预测结果
2、加入多项式特征(2次、5次),建立回归模型
3、计算多项式回归模型对测试数据进行预测的r2分数,判断哪个模型预测更准确
4、可视化多项式回归模型数据预测结果,判断哪个模型预测更准确

二.实战

在上一篇介绍欠拟合和过拟合的文章中,我们谈到了不同的模型对数据的拟合结果不同,本次实战将通过普通线性回归建立的模型以及以及加入多项式特征后建立的模型进行了对比,以便更好地理解不同复杂程度的模型对预测结果的影响。

#加载数据
import pandas as pd
import numpy as np
data_train = pd.read_csv('T-R-train.csv')
data_train #数据预览

在这里插入图片描述

#define X_train and y_train
X_train = data_train.loc[:,'T']
y_train = data_train.loc[:,'rate']
#可视化数据
%matplotlib inline
from matplotlib import pyplot as plt
fig1 = plt.figure(figsize=(5,5))
plt.scatter(X_train,y_train)
plt.title('raw data')
plt.xlabel('temperature')
plt.ylabel('rate')
plt.show()

在这里插入图片描述

#将X_train转换为一维数组(若不转换会因为维度问题而无法建立下面的线性回归模型)
X_train = np.array(X_train).reshape(-1,1)
#建立线性回归模型并对该模型进行预测
from sklearn.linear_model import LinearRegression
lr1 = LinearRegression()
lr1.fit(X_train,y_train)

在这里插入图片描述

#加载测试数据
data_test = pd.read_csv('T-R-test.csv')
X_test = data_test.loc[:,'T']
y_test = data_test.loc[:,'rate']
data_test

在这里插入图片描述

#这里测试数据也要转换成一维数组
X_test = np.array(X_test).reshape(-1,1)
#make prediction on the training and testing data
y_train_predict = lr1.predict(X_train)
y_test_predict = lr1.predict(X_test)
from sklearn.metrics import r2_score
r2_train = r2_score(y_train,y_train_predict)
r2_test = r2_score(y_test,y_test_predict)
print('training r2:',r2_train)
print('test r2:',r2_test)

在这里插入图片描述

#生成新数据
X_range = np.linspace(40,90,300).reshape(-1,1)#新数据X的范围是40-90,然后共有300个点
y_range_predict = lr1.predict(X_range)
#可视化数据
fig2 = plt.figure(figsize=(10,10))
plt.plot(X_range,y_range_predict)
plt.scatter(X_train,y_train)
plt.title('prediction data')
plt.xlabel('temperature')
plt.ylabel('rate')
plt.show()

在这里插入图片描述
之前我们提到过,r2越接近1模型效果越好,可以看到此时用相对简单的线性回归模型无论是训练数据还是测试数据预测效果都不好,然后我们生成新数据并将其预测结果可视化出来,也可以明显看出该模型效果不太好,这就是欠拟合的表现。下面我们加入多项式特征,让模型复杂一点看看效果。

#多项式模型
#加入多项式特征
from sklearn.preprocessing import PolynomialFeatures
poly2 = PolynomialFeatures(degree=2)#这里degree=2代表的是2次,相应的degree=3代表的就是3次,以此类推
X_2_train = poly2.fit_transform(X_train) #将原来的数据进行转换
X_2_test = poly2.fit_transform(X_test)
poly5 = PolynomialFeatures(degree=5)
X_5_train = poly5.fit_transform(X_train)
X_5_test = poly5.fit_transform(X_test)
print(X_2_train.shape)
print(X_5_train.shape)

在这里插入图片描述
这里我们看到加入不同的多项式特征,维度会有不同的变化

#训练以及评估模型
lr2 = LinearRegression()
lr2.fit(X_2_train,y_train)
y_2_train_predict = lr2.predict(X_2_train)
y_2_test_predict = lr2.predict(X_2_test)
r2_2_train = r2_score(y_train,y_2_train_predict)
r2_2_test = r2_score(y_test,y_2_test_predict)


lr5 = LinearRegression()
lr5.fit(X_5_train,y_train)
y_5_train_predict = lr5.predict(X_5_train)
y_5_test_predict = lr5.predict(X_5_test)
r2_5_train = r2_score(y_test,y_5_test_predict)
r2_5_test = r2_score(y_test,y_5_test_predict)

print('training r2_2:',r2_2_train)
print('test r2_2:',r2_2_test)
print('training r2_5:',r2_5_train)
print('test r2_5:',r2_5_test)

在这里插入图片描述
从模型评估中可看出,当多项式为2阶时,训练数据和测试数据效果都很好。当多项式为5阶时,训练数据效果很好但测试数据效果很一般,这时因为模型过于复杂,出现了过拟合的情况。下面生成新数据并对其进行预测,最后进行可视化看看效果。

#生成新数据
X_2_range = np.linspace(40,90,300).reshape(-1,1)
X_2_range = poly2.transform(X_2_range)
y_2_range_predict = lr2.predict(X_2_range)

X_5_range = np.linspace(40,90,300).reshape(-1,1)
X_5_range = poly5.transform(X_5_range)
y_5_range_predict = lr5.predict(X_5_range)
#可视化数据
fig3 = plt.figure(figsize=(10,10))
plt.plot(X_range,y_2_range_predict)#这里画图用X_range是因为X_2_range和X_5_range的维度过高,无法将图形展示出来。
plt.scatter(X_train,y_train)
plt.scatter(X_test,y_test)

plt.title('polynomial prediction result (2)')
plt.xlabel('temperature')
plt.ylabel('rate')
plt.show()

在这里插入图片描述

fig4 = plt.figure(figsize=(10,10))
plt.plot(X_range,y_5_range_predict)
plt.scatter(X_train,y_train)
plt.scatter(X_test,y_test)

plt.title('polynomial prediction result (5)')
plt.xlabel('temperature')
plt.ylabel('rate')
plt.show()

在这里插入图片描述
当多项式为5阶时,模型过于复杂,出现过拟合现象。

三.总结

酶活性预测实战summary:
1、通过建立二阶多项式回归模型,对酶活性实现了一个较好的预测,无论针对训练或测试数据都得到一个高的r2分数;
2、通过建立线性回归、五阶多项式回归模型,发现存在过拟合或欠拟合情况。过拟合情况下,对于训练数据r2分数高(预测准确),但对于预测数据r2分数低(预测不准确);
3、无论时通过r2分数,或是可视化模型结果,都可以发现二阶多项式回归模型效果最好
4、核心算法参考链接:https://scikit-learn.org/stable/modules/generated/sklearn.linear_model.LinearRegression.html#sklearn.linear_model.LinearRegression

链接: T-R-test.
提取码:g2ym

链接: T-R-train.
提取码:re7s

  • 5
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 9
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值