目录
01 学习目标
理解特征工程的概念、应用
理解多项式回归的概念、应用
02 实现工具
(1)代码运行环境
Python语言,Jupyter notebook平台
(2)所需模块
numpy,matplotlib,lab_utils_multi
03 概念
(1)特征工程
特征:能够用于描述、区分或识别事物或个体的显著属性或表现,可理解为因果关系的因。
(例:影响房屋单价的因素有地段、面积、房龄及楼层等,这些因素就是特征。)
特征工程:对原始数据中特征进行处理的方法统称。
特征工程的方法包括:提取、选择、转换和创建特征等等。
特征工程的目的:通过对特征的处理,使得数据集更加适合机器学习算法的训练和预测,提高模型的性能和准确度。
(2)多项式回归
多项式:包含变量为多元多次的式子,如下:
多项式回归:多项式回归可以在一定程度上拟合非常复杂的模型,但不是可以拟合任意复杂的模型。
(随着多项式阶数的增加,模型的复杂度也会急剧增加,这可能导致过拟合问题。在实际应用中需要谨慎选择模型的复杂度,并结合数据的实际情况进行选择和优化。)
04 应用示例
下面,以股票价格为例,采用多项式进行拟合,构建非线性回归模型。
(1)首先,从同花顺软件下载“科大讯飞”的股票数据,文件为data.txt,如下:
(下载后手动将制表符替换为了空格,也可不替换,但后续分割符号需采用制表符)
(2)数据预处理(文件中有空行,且数据太长,本文选取最近100个交易日进行建模)
a. 导入所需模块
import numpy as np
import matplotlib.pyplot as plt
from lab_utils_multi import zscore_normalize_features, run_gradient_descent_feng
b. 从文件中提取最近100个交易日(2023.12.28-2024.5.31)的收盘价
with open('./data/data.txt') as f:
# 删除空行
lines = [line.strip() for line in f if line.strip()]
data_list = []
# 逐行分割后存入列表
for line in lines:
data_list.append(line.split(' '))
stock =[]
# 提取最近100个交易日的第6列存入列表
for i in data_list[len(data_list)-100:]:
stock.append(float(i[5]))
print(stock)
运行以上代码,结果如下:
(3)归一化数据、梯度下降法拟合多项式
x =np.arange(len(stock))
X = np.c_[x, x**2, x**3,x**4, x**5, x**6, x**7, x**8, x**9, x**10]
X = zscore_normalize_features(X)
model_w,model_b = run_gradient_descent_feng(X, stock, iterations=1000000, alpha = 1e-1)
运行以上代码,结果如下:
(4)将股票收盘价真实值和预测值绘于同一图中
plt.plot(x,stock, c='r', linewidth=1, label="True value")
plt.plot(x,X@model_w + model_b, c='b', linewidth=2, label="Predicted value")
plt.xlabel("x"); plt.ylabel("Stock price predict"); plt.legend(); plt.show()
运行以上代码,结果如下:
05 总结
(1)数据特征较多时可都予以保留,最终模型中会赋予各特征不同的权重表现每个特征的贡献程度。
(2)多项式回归建模,不是次数越高、项数越多就越好,可能出现过拟合问题。