[文献精汇]使用PyCaret预测 Apple 股价

介绍

开发一个机器学习模型来尝试通过线性回归分析来预测 Apple 股票的价格会很有趣。PyCaret 的库,这是一个开源的 Python 低代码机器学习库,可以自动化机器学习工作流程,非常适合像我这样的机器学习初学者。

线性回归分析

线性回归分析用于根据另一个变量的值预测变量的值,例如股票的收盘价。

在这个项目中使用了机器学习,通过 PyCaret 的回归库为数据集创建、测试和确定最佳回归模型。为了获得有关机器学习及其如何影响我们日常生活的更多信息,请单击此处访问麻省理工学院斯隆学院网站上发布的文章,该文章深入探讨了该主题。

获取数据

# Obtaining data 
aapl = pd.read_csv('./data/aapl.csv') # Last 10 years
aapl = aapl.set_index('Date')
# See dataframe
aapl.head(10)

Open

High

Low

Close

Volume

Dividends

Stock Splits

Date

2015-01-07 00:00:00-05:00

23.872833

24.095527

23.761486

23.995316

160423600

0.0

0.0

2015-01-08 00:00:00-05:00

24.324901

24.975168

24.206871

24.917267

237458000

0.0

0.0

2015-01-09 00:00:00-05:00

25.090962

25.220125

24.543135

24.943985

214798000

0.0

0.0

2015-01-12 00:00:00-05:00

25.075387

25.082067

24.229149

24.329361

198603200

0.0

0.0

2015-01-13 00:00:00-05:00

24.814830

25.119922

24.253641

24.545370

268367600

0.0

0.0

2015-01-14 00:00:00-05:00

24.282595

24.605501

24.162340

24.451843

195826400

0.0

0.0

2015-01-15 00:00:00-05:00

24.496380

24.509741

23.752582

23.788212

240056000

0.0

0.0

2015-01-16 00:00:00-05:00

23.834977

23.957459

23.427446

23.603374

314053200

0.0

0.0

2015-01-20 00:00:00-05:00

24.015355

24.267000

23.716945

24.211327

199599600

0.0

0.0

2015-01-21 00:00:00-05:00

24.262544

24.732429

24.111112

24.396162

194303600

0.0

0.0

探索性分析

# Using Pandas Profiling to generate a report on our dataframe
Profile_1 = pp.ProfileReport(aapl)
Profile_1.to_file("Report1.html")

删除列

# Removing 'Dividends' and 'Stock Splits' columns
aapl = aapl.drop(['Dividends','Stock Splits'], axis = 1)
# See results
aapl.head(10)

Open

High

Low

Close

Volume

Date

2015-01-07 00:00:00-05:00

23.872833

24.095527

23.761486

23.995316

160423600

2015-01-08 00:00:00-05:00

24.324901

24.975168

24.206871

24.917267

237458000

2015-01-09 00:00:00-05:00

25.090962

25.220125

24.543135

24.943985

214798000

2015-01-12 00:00:00-05:00

25.075387

25.082067

24.229149

24.329361

198603200

2015-01-13 00:00:00-05:00

24.814830

25.119922

24.253641

24.545370

268367600

2015-01-14 00:00:00-05:00

24.282595

24.605501

24.162340

24.451843

195826400

2015-01-15 00:00:00-05:00

24.496380

24.509741

23.752582

23.788212

240056000

2015-01-16 00:00:00-05:00

23.834977

23.957459

23.427446

23.603374

314053200

2015-01-20 00:00:00-05:00

24.015355

24.267000

23.716945

24.211327

199599600

2015-01-21 00:00:00-05:00

24.262544

24.732429

24.111112

24.396162

194303600

添加简单移动平均线

为了增加 PyCaret 回归模型要分析的特征数量,我将为目标变量(即收盘价)添加两个简单的移动平均线,期望它能提高我们模型的准确性值。

# Adding two simple moving averages in order to increase the number of features to be analyzed by PyCaret Regression models
aapl['SMA7'] = aapl.Close.rolling(window=7).mean().round(2)
aapl['SMA30'] = aapl.Close.rolling(window=30).mean().round(2)
# See results
aapl.head(10)

Open

High

Low

Close

Volume

SMA7

SMA30

Date

2015-01-07 00:00:00-05:00

23.872833

24.095527

23.761486

23.995316

160423600

NaN

NaN

2015-01-08 00:00:00-05:00

24.324901

24.975168

24.206871

24.917267

237458000

NaN

NaN

2015-01-09 00:00:00-05:00

25.090962

25.220125

24.543135

24.943985

214798000

NaN

NaN

2015-01-12 00:00:00-05:00

25.075387

25.082067

24.229149

24.329361

198603200

NaN

NaN

2015-01-13 00:00:00-05:00

24.814830

25.119922

24.253641

24.545370

268367600

NaN

NaN

2015-01-14 00:00:00-05:00

24.282595

24.605501

24.162340

24.451843

195826400

NaN

NaN

2015-01-15 00:00:00-05:00

24.496380

24.509741

23.752582

23.788212

240056000

24.42

NaN

2015-01-16 00:00:00-05:00

23.834977

23.957459

23.427446

23.603374

314053200

24.37

NaN

2015-01-20 00:00:00-05:00

24.015355

24.267000

23.716945

24.211327

199599600

24.27

NaN

2015-01-21 00:00:00-05:00

24.262544

24.732429

24.111112

24.396162

194303600

24.19

NaN

# Generating new report with pandas_profiling
Profile_2 = pp.ProfileReport(aapl)
Profile_2.to_file("Report2.html")

可以观察到 SMA7 列有 6 个缺失值,SMA30 列有 29 个缺失值,考虑到这些列的数据只够分别在第 7 天和第 30 天显示其移动平均值,这是正常的。

通过相关矩阵,可以观察到添加的两个移动平均线都与开盘价、最低价、最高价和收盘价具有高水平的相关性。

图片

image.png

绘制过去 10 年的 K 线图

# Using plotly to plot a candlestick chart of the last 20 years
fig = go.Figure(data=[go.Candlestick(x = aapl.index,open = aapl.Open,high = aapl.High,low = aapl.Low,close = aapl.Close),go.Scatter(x=aapl.index, y = aapl.SMA7, line=dict(color='orange',width=1),name='SMA7'),go.Scatter(x=aapl.index, y = aapl.SMA30, line=dict(color='green',width=1.5),name='SMA30')])
fig.update_layout(title = 'Apple stocks from June 11th, 2015 to June 10th, 2025')
fig.update_layout(autosize=False,width=1200,height=800,)
fig.show()

图片

svg

创建新 DataFrame

将创建一个包含过去 2 年数据的新 DataFrame,并使用这些数据来测试我们的预测模型预测过去 2 个交易年的收盘价的能力。

# Creating a new dataframe containing the last 2 years data to later test how well our predicting model will compare to the closing prices
aapl_predict = aapl.tail(506)
# See results
aapl_predict

Open

High

Low

Close

Volume

SMA7

SMA30

Date

2022-12-30 00:00:00-05:00

127.073710

128.597677

126.103905

128.577881

77034200

129.38

139.47

2023-01-03 00:00:00-05:00

128.924229

129.537772

122.877812

123.768448

112117500

127.91

138.63

2023-01-04 00:00:00-05:00

125.569520

127.321104

123.778358

125.045036

89113600

127.08

137.81

2023-01-05 00:00:00-05:00

125.807014

126.440353

123.461682

123.718971

80962700

126.11

137.05

2023-01-06 00:00:00-05:00

124.698677

128.934129

123.590330

128.271103

87754700

126.05

136.37

...

...

...

...

...

...

...

...

2024-12-30 00:00:00-05:00

252.229996

253.500000

250.750000

252.199997

35557500

254.94

243.14

2024-12-31 00:00:00-05:00

252.440002

253.279999

249.429993

250.419998

39480700

255.03

243.99

2025-01-02 00:00:00-05:00

248.929993

249.100006

241.820007

243.850006

55740700

253.51

244.52

2025-01-03 00:00:00-05:00

243.360001

244.179993

241.889999

243.360001

40244100

251.81

245.02

2025-01-06 00:00:00-05:00

244.309998

247.330002

243.199997

245.000000

45007100

249.92

245.55

506 rows × 7 columns

aapl_predict 包含 2022 年 12 月 30 日至 2025 年 1 月 06 日的数据

# Removing last 2 years from the original dataframe
aapl.drop(aapl_predict.index,inplace = True)
# See results
aapl.head(10)

Open

High

Low

Close

Volume

SMA7

SMA30

Date

2015-01-07 00:00:00-05:00

23.872833

24.095527

23.761486

23.995316

160423600

NaN

NaN

2015-01-08 00:00:00-05:00

24.324901

24.975168

24.206871

24.917267

237458000

NaN

NaN

2015-01-09 00:00:00-05:00

25.090962

25.220125

24.543135

24.943985

214798000

NaN

NaN

2015-01-12 00:00:00-05:00

25.075387

25.082067

24.229149

24.329361

198603200

NaN

NaN

2015-01-13 00:00:00-05:00

24.814830

25.119922

24.253641

24.545370

268367600

NaN

NaN

2015-01-14 00:00:00-05:00

24.282595

24.605501

24.162340

24.451843

195826400

NaN

NaN

2015-01-15 00:00:00-05:00

24.496380

24.509741

23.752582

23.788212

240056000

24.42

NaN

2015-01-16 00:00:00-05:00

23.834977

23.957459

23.427446

23.603374

314053200

24.37

NaN

2015-01-20 00:00:00-05:00

24.015355

24.267000

23.716945

24.211327

199599600

24.27

NaN

2015-01-21 00:00:00-05:00

24.262544

24.732429

24.111112

24.396162

194303600

24.19

NaN

我们将用于创建预测模型的原始数据帧现在包含从 2022-12-29 到 2015-01-07的数据

# Removing NaN
aapl.dropna(inplace=True)
# See Results
aapl.head(10)

Open

High

Low

Close

Volume

SMA7

SMA30

Date

2015-02-19 00:00:00-05:00

28.724684

28.847650

28.691150

28.717978

149449600

28.28

25.96

2015-02-20 00:00:00-05:00

28.755990

28.952736

28.628555

28.952736

195793600

28.52

26.12

2015-02-23 00:00:00-05:00

29.068984

29.735231

28.988498

29.735231

283896400

28.78

26.28

2015-02-24 00:00:00-05:00

29.721825

29.869385

29.326100

29.549673

276912400

28.96

26.44

2015-02-25 00:00:00-05:00

29.413290

29.422235

28.650904

28.793991

298846800

29.02

26.59

2015-02-26 00:00:00-05:00

28.793997

29.259030

28.306609

29.158422

365150000

29.10

26.74

2015-02-27 00:00:00-05:00

29.064518

29.191956

28.671030

28.720217

248059200

29.09

26.88

2015-03-02 00:00:00-05:00

28.896841

29.127121

28.684447

28.861069

192386800

29.11

27.05

2015-03-03 00:00:00-05:00

28.832006

28.957207

28.637495

28.921434

151265200

29.11

27.23

2015-03-04 00:00:00-05:00

28.863306

28.966148

28.688919

28.738102

126665200

28.96

27.38

使用 PyCaret 创建预测模型

# Importing regression lib from PyCaret
from pycaret.regression import *setup(data=aapl,target='Close',session_id=123, remove_multicollinearity=True,multicollinearity_threshold=0.9)

Description

Value

0

Session id

123

1

Target

Close

2

Target type

Regression

3

Original data shape

(1981, 7)

4

Transformed data shape

(1981, 3)

5

Transformed train set shape

(1386, 3)

6

Transformed test set shape

(595, 3)

7

Numeric features

6

8

Preprocess

True

9

Imputation type

simple

10

Numeric imputation

mean

11

Categorical imputation

mode

12

Remove multicollinearity

True

13

Multicollinearity threshold

0.900000

14

Fold Generator

KFold

15

Fold Number

10

16

CPU Jobs

-1

17

Use GPU

False

18

Log Experiment

False

19

Experiment Name

reg-default-name

20

USI

bff1

<pycaret.regression.oop.RegressionExperiment at 0x14fc6f430>
# Obtaining top 3 best models
top3 = compare_models(n_select = 3)

Model

MAE

MSE

RMSE

R2

RMSLE

MAPE

TT (Sec)

lr

Linear Regression

0.5492

0.9135

0.9472

0.9996

0.0100

0.0072

0.8300

en

Elastic Net

0.5479

0.9128

0.9469

0.9996

0.0100

0.0071

0.0090

lar

Least Angle Regression

0.5492

0.9135

0.9472

0.9996

0.0100

0.0072

0.2030

llar

Lasso Least Angle Regression

0.5479

0.9128

0.9469

0.9996

0.0100

0.0071

0.2100

br

Bayesian Ridge

0.5491

0.9135

0.9472

0.9996

0.0100

0.0072

0.0090

lasso

Lasso Regression

0.5479

0.9128

0.9469

0.9996

0.0100

0.0071

0.2210

ridge

Ridge Regression

0.5491

0.9135

0.9472

0.9996

0.0100

0.0072

0.0090

rf

Random Forest Regressor

0.6098

1.1406

1.0606

0.9995

0.0104

0.0075

0.0530

et

Extra Trees Regressor

0.6197

1.2088

1.0921

0.9995

0.0104

0.0075

0.0420

gbr

Gradient Boosting Regressor

0.6332

1.1324

1.0585

0.9995

0.0110

0.0083

0.0290

lightgbm

Light Gradient Boosting Machine

0.6249

1.1827

1.0797

0.9995

0.0109

0.0080

0.7900

xgboost

Extreme Gradient Boosting

0.7092

1.5144

1.2141

0.9994

0.0126

0.0091

0.0200

catboost

CatBoost Regressor

0.7079

1.5438

1.2157

0.9994

0.0130

0.0095

0.2650

dt

Decision Tree Regressor

0.7477

1.7109

1.3031

0.9993

0.0131

0.0094

0.0080

ada

AdaBoost Regressor

1.9198

5.8222

2.4085

0.9976

0.0616

0.0440

0.0240

omp

Orthogonal Matching Pursuit

40.9516

2098.7460

45.7906

0.1216

0.6953

0.8042

0.0100

dummy

Dummy Regressor

43.5007

2398.9002

48.9572

-0.0028

0.7055

0.8631

0.0110

knn

K Neighbors Regressor

40.2368

2399.9460

48.9487

-0.0047

0.6900

0.7649

0.0170

huber

Huber Regressor

49.0278

4457.0476

66.7169

-0.8638

1.0082

0.6933

0.0090

par

Passive Aggressive Regressor

84.8315

13155.8677

108.9942

-4.5973

1.1798

2.0757

0.0080

创建模型

ridge = create_model('ridge',fold = 10)

MAE

MSE

RMSE

R2

RMSLE

MAPE

Fold

0

0.6455

1.2438

1.1153

0.9995

0.0108

0.0079

1

0.5131

0.6515

0.8072

0.9997

0.0094

0.0072

2

0.5559

0.8599

0.9273

0.9997

0.0107

0.0074

3

0.5645

1.1979

1.0945

0.9995

0.0104

0.0071

4

0.5961

1.2698

1.1269

0.9995

0.0113

0.0078

5

0.4975

0.5994

0.7742

0.9998

0.0081

0.0064

6

0.5088

0.6393

0.7996

0.9997

0.0092

0.0066

7

0.5078

0.8698

0.9326

0.9996

0.0087

0.0065

8

0.5362

1.0269

1.0134

0.9995

0.0109

0.0068

9

0.5661

0.7767

0.8813

0.9997

0.0111

0.0081

Mean

0.5491

0.9135

0.9472

0.9996

0.0100

0.0072

Std

0.0442

0.2441

0.1276

0.0001

0.0011

0.0006

br = create_model('br',fold=10)

MAE

MSE

RMSE

R2

RMSLE

MAPE

Fold

0

0.6455

1.2438

1.1153

0.9995

0.0108

0.0079

1

0.5131

0.6515

0.8072

0.9997

0.0094

0.0072

2

0.5559

0.8599

0.9273

0.9997

0.0107

0.0074

3

0.5645

1.1979

1.0945

0.9995

0.0104

0.0071

4

0.5961

1.2698

1.1269

0.9995

0.0113

0.0078

5

0.4975

0.5994

0.7742

0.9998

0.0081

0.0064

6

0.5088

0.6393

0.7996

0.9997

0.0092

0.0066

7

0.5078

0.8698

0.9326

0.9996

0.0087

0.0065

8

0.5362

1.0269

1.0134

0.9995

0.0109

0.0068

9

0.5661

0.7767

0.8813

0.9997

0.0111

0.0081

Mean

0.5491

0.9135

0.9472

0.9996

0.0100

0.0072

Std

0.0442

0.2441

0.1276

0.0001

0.0011

0.0006

lar = create_model('lar',fold=10)

MAE

MSE

RMSE

R2

RMSLE

MAPE

Fold

0

0.6455

1.2438

1.1153

0.9995

0.0108

0.0079

1

0.5131

0.6515

0.8072

0.9997

0.0094

0.0072

2

0.5559

0.8599

0.9273

0.9997

0.0107

0.0074

3

0.5645

1.1979

1.0945

0.9995

0.0104

0.0071

4

0.5961

1.2698

1.1269

0.9995

0.0113

0.0078

5

0.4975

0.5994

0.7742

0.9998

0.0081

0.0064

6

0.5089

0.6394

0.7996

0.9997

0.0092

0.0066

7

0.5078

0.8698

0.9326

0.9996

0.0087

0.0065

8

0.5362

1.0269

1.0134

0.9995

0.0109

0.0068

9

0.5661

0.7767

0.8813

0.9997

0.0111

0.0081

Mean

0.5492

0.9135

0.9472

0.9996

0.0100

0.0072

Std

0.0442

0.2441

0.1276

0.0001

0.0011

0.0006

优化模型

为了改进我们每个模型的回归误差指标,我们可以使用 PyCaret 的 tune_model( ) 来查看我们可以做出的改进。

# Tuning ridge
ridge_params = {'alpha' : [0.02,0.024,0.025,0.025,0.026,0.03]}
tune_ridge = tune_model(ridge, n_iter=1000, optimize='RMSE',custom_grid = ridge_params)

MAE

MSE

RMSE

R2

RMSLE

MAPE

Fold

0

0.6455

1.2438

1.1153

0.9995

0.0108

0.0079

1

0.5131

0.6515

0.8072

0.9997

0.0094

0.0072

2

0.5559

0.8599

0.9273

0.9997

0.0107

0.0074

3

0.5645

1.1979

1.0945

0.9995

0.0104

0.0071

4

0.5961

1.2698

1.1269

0.9995

0.0113

0.0078

5

0.4975

0.5994

0.7742

0.9998

0.0081

0.0064

6

0.5089

0.6394

0.7996

0.9997

0.0092

0.0066

7

0.5078

0.8698

0.9326

0.9996

0.0087

0.0065

8

0.5362

1.0269

1.0134

0.9995

0.0109

0.0068

9

0.5661

0.7767

0.8813

0.9997

0.0111

0.0081

Mean

0.5492

0.9135

0.9472

0.9996

0.0100

0.0072

Std

0.0442

0.2441

0.1276

0.0001

0.0011

0.0006

MAE 指标值实现的改进

# Tuning Bayesian Ridge
tune_br = tune_model(br,n_iter=1000, optimize='RMSE')

MAE

MSE

RMSE

R2

RMSLE

MAPE

Fold

0

0.6455

1.2438

1.1153

0.9995

0.0108

0.0079

1

0.5131

0.6515

0.8072

0.9997

0.0094

0.0072

2

0.5559

0.8599

0.9273

0.9997

0.0107

0.0074

3

0.5645

1.1979

1.0945

0.9995

0.0104

0.0071

4

0.5961

1.2698

1.1269

0.9995

0.0113

0.0078

5

0.4975

0.5994

0.7742

0.9998

0.0081

0.0064

6

0.5088

0.6393

0.7996

0.9997

0.0092

0.0066

7

0.5077

0.8698

0.9326

0.9996

0.0087

0.0065

8

0.5362

1.0269

1.0134

0.9995

0.0109

0.0068

9

0.5661

0.7767

0.8813

0.9997

0.0111

0.0081

Mean

0.5491

0.9135

0.9472

0.9996

0.0100

0.0072

Std

0.0442

0.2441

0.1276

0.0001

0.0011

0.0006

MAE 指标值进行了改进

# Tuning Least Angle Regression 
tune_lar = tune_model(lar,n_iter=1000, optimize='RMSE')

MAE

MSE

RMSE

R2

RMSLE

MAPE

Fold

0

0.6455

1.2438

1.1153

0.9995

0.0108

0.0079

1

0.5131

0.6515

0.8072

0.9997

0.0094

0.0072

2

0.5559

0.8599

0.9273

0.9997

0.0107

0.0074

3

0.5645

1.1979

1.0945

0.9995

0.0104

0.0071

4

0.5961

1.2698

1.1269

0.9995

0.0113

0.0078

5

0.4975

0.5994

0.7742

0.9998

0.0081

0.0064

6

0.5089

0.6394

0.7996

0.9997

0.0092

0.0066

7

0.5078

0.8698

0.9326

0.9996

0.0087

0.0065

8

0.5362

1.0269

1.0134

0.9995

0.0109

0.0068

9

0.5661

0.7767

0.8813

0.9997

0.0111

0.0081

Mean

0.5492

0.9135

0.9472

0.9996

0.0100

0.0072

Std

0.0442

0.2441

0.1276

0.0001

0.0011

0.0006

可视化数据

PyCaret 的另一个重要功能是可以绘制相关图形以可视化有关我们模型的信息。

# Error plot
plot_model(tune_br, plot = 'error')

图片

png

BayesianRidge 的预测误差绘制了一个 R² 图形,显示了模型对数据的适应程度。R² 为 0.9999 表示我们的模型可以很好地适应 99.99% 的数据,这很好!

# Importance Feature Plot
plot_model(tune_br, plot = 'feature')

图片

png

特征重要性图帮助我们了解模型如何处理数据集的每个特征。例如,我们可以看到,对于我们的模型预测来说,最有用的特征是每个交易日协商的较低价格,而交易量和 30 个周期的简单移动平均线根本没有使用。

定型模型

# Finalizing model
final_br_model = finalize_model(tune_br)
# Predicting last 2 years
prediction = predict_model(final_br_model,data = aapl_predict)
prediction

Model

MAE

MSE

RMSE

R2

RMSLE

MAPE

0

Bayesian Ridge

1.1944

2.3733

1.5405

0.9971

0.0081

0.0064

Open

High

Low

Volume

SMA7

SMA30

Close

prediction_label

Date

2022-12-30 00:00:00-05:00

127.073708

128.597672

126.103905

77034200

129.380005

139.470001

128.577881

127.606610

2023-01-03 00:00:00-05:00

128.924225

129.537766

122.877815

112117500

127.910004

138.630005

123.768448

124.459987

2023-01-04 00:00:00-05:00

125.569519

127.321106

123.778358

89113600

127.080002

137.809998

125.045036

125.289650

2023-01-05 00:00:00-05:00

125.807014

126.440353

123.461685

80962700

126.110001

137.050003

123.718971

124.938037

2023-01-06 00:00:00-05:00

124.698677

128.934128

123.590332

87754700

126.050003

136.369995

128.271103

125.093709

...

...

...

...

...

...

...

...

...

2024-12-30 00:00:00-05:00

252.229996

253.500000

250.750000

35557500

254.940002

243.139999

252.199997

254.026220

2024-12-31 00:00:00-05:00

252.440002

253.279999

249.429993

39480700

255.029999

243.990005

250.419998

252.700273

2025-01-02 00:00:00-05:00

248.929993

249.100006

241.820007

55740700

253.509995

244.520004

243.850006

245.032614

2025-01-03 00:00:00-05:00

243.360001

244.179993

241.889999

40244100

251.809998

245.020004

243.360001

245.046563

2025-01-06 00:00:00-05:00

244.309998

247.330002

243.199997

45007100

249.919998

245.550003

245.000000

246.394365

506 rows × 8 columns

绘制 Apple 股票的收盘价和预测价格

对于每个日期,我们现在有 Open、High、Low、Close 、Volume、SMA7、SMA30 和 Label,它代表 AAPL 在数据帧中包含的每一天的预测收盘价。

fig = px.line(round(prediction,2), x = prediction.index, y = ['Close','prediction_label'],title = 'AAPL close price x predicted price from June 10th, 2020 to June 10th, 2022')
newnames = {'Close':'Closing Price', 'prediction_label': 'Predicted Price'}
fig.for_each_trace(lambda t: t.update(name = newnames[t.name],legendgroup = newnames[t.name],hovertemplate = t.hovertemplate.replace(t.name, newnames[t.name])))
fig.update_traces(line=dict(width=2.5))
fig.update_layout(autosize=False,width=1200,height=800,title='AAPL Closing Price X Predicted Price from June 10th, 2020 to June 10th, 2022',margin=dict(l=0, r=0, t=80, b=0),font=dict(size=14)
)
fig.show("png")

图片

png

Conclusion 结论

PyCaret 库提供了一种简单的方法来探索和测试机器学习的不同回归模型,并选择其中哪一个最适合所使用的数据集。

通过这项研究,有可能找到一个模型,它与我们的数据进行了很好的调整,并且能够高度准确地预测过去 2 年的收盘价,成功地表明了该时期 APPL 股票的走向。

参考

什么是线性回归?

[教程:了解 Python 中的回归误差指标](

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/503406.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【51单片机】02LED流水灯实验

点亮你的LED 一、点亮第一个LED1.GPIO介绍2.P1、P2、P3端口 二、LED实验2.尝试点亮LED3.LED流水灯 一、点亮第一个LED 1.GPIO介绍 这块内容这里可以做简单的了解&#xff0c;与数电知识强相关。后续可以再回过头来学习 GPIO (general purpose input output) 通用输入输出端口…

「Mac畅玩鸿蒙与硬件53」UI互动应用篇30 - 打卡提醒小应用

本篇教程将实现一个打卡提醒小应用&#xff0c;通过用户输入时间进行提醒设置&#xff0c;并展示实时提醒状态&#xff0c;实现提醒设置和取消等功能。 关键词 打卡提醒状态管理定时任务输入校验UI交互 一、功能说明 打卡提醒小应用包含以下功能&#xff1a; 提醒时间输入与…

Python递归(汉诺塔问题)

递归分析 递归&#xff1a;通过自我调用来解决问题的函数 递归通常把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解。 递归要注意&#xff1a; 1.递归出口 2.当前问题如何变成子问题 利用递归写一个阶乘函数&#xff0c;F(n)&#xff0c;求n的阶乘…

VS2022 C#创建Com组件和调用

生成一个类库项目 这里创建了一个.net 4.8的项目&#xff0c;添加了一个ComAIFaceTest类 如下图&#xff1a; ComAIFaceTest代码如下&#xff1a; [ComVisible(true)][Guid("12345678-ABCD-1234-EF00-0123456789AB")][ClassInterface(ClassInterfaceType.AutoDual)…

【GOOD】A Survey of Deep Graph Learning under Distribution Shifts

深度图学习在分布偏移下的综述&#xff1a;从图的分布外泛化到自适应 Northwestern University, USA Repository Abstract 图上的分布变化——训练和使用图机器学习模型之间的数据分布差异——在现实世界中普遍存在&#xff0c;并且通常不可避免。这些变化可能会严重恶化模…

ARM发布Armv9.5架构:迈向更强性能与灵活性的新时代

2024年11月30日&#xff0c;ARM正式发布了其最新的Armv9.5架构&#xff0c;这是Arm技术发展的又一重要里程碑。从表中信息来看&#xff0c;Armv9.5架构的发布标志着该公司的架构系列在性能、灵活性和可扩展性方面取得了进一步突破。本次发布不仅是技术上的提升&#xff0c;更是…

RAFT:随机退火森林

RAFT:随机退火森林 RAFT(Randomized Annealed Forests)是一种机器学习算法,主要用于分类和回归任务。以下是对它的介绍及原理举例说明: 一、RAFT简介 RAFT是一种基于随机森林的集成学习方法,它结合了随机森林的优点和退火算法的思想。随机森林通过构建多个决策树并综…

“AI智慧语言训练系统:让语言学习变得更简单有趣

大家好&#xff0c;我是你们的老朋友&#xff0c;一个热衷于探讨科技与教育结合的产品经理。今天&#xff0c;我想和大家聊聊一个让语言学习变得不再头疼的话题——AI智慧语言训练系统。这个系统可是我们语言学习者的福音&#xff0c;让我们一起来揭开它的神秘面纱吧&#xff0…

自动驾驶相关知识学习笔记

一、概要 因为想知道SIL、HIL是什么仿真工具&#xff0c;故而浏览了自动驾驶相关的知识。 资料来源《自动驾驶——人工智能理论与实践》胡波 林青 陈强 著&#xff1b;出版时间&#xff1a;2023年3月 二、图像的分类、分割与检测任务区别 如图所示&#xff0c;这些更高阶的…

1/7距离放假一周加1

要求在堆区连续申请5个int的大小空间用于存储5名学生的成绩&#xff0c;分别完成空间的申请、成绩的录入、升序排序、成绩输出函数以及空间释放函数&#xff0c;并在主程序中完成测试 要求使用new和delete完成 #include <iostream> #include<algorithm> using nam…

解锁编程智慧:23种设计模式案例分享

为什么要学习设计模式&#xff1f;你可以把设计模式想象成一些做饭的菜谱。当我们需要做一道菜&#xff08;开发一个功能&#xff09;时&#xff0c;如果按照自己的想法随意添加调料&#xff08;编写代码&#xff09;&#xff0c;很可能做出的菜味道不好&#xff08;功能不稳定…

UWB实操:用信号分析仪(频谱分析仪)抓取UWB频域的图像

连接好UWB设备和信号分析仪&#xff08;频谱分析仪&#xff09;&#xff0c;让UWB设备持续发送信号。我来演示如何一步一步获得下面的图像&#xff1a; 设置频率&#xff0c;FREQ&#xff0c;Center Freq 7987.2MHz 设置X轴&#xff0c;宽度&#xff0c;SPAN 2GHz设置Y轴&…

Kali系统(Debian 10.3) 遇到的问题

目录 问题一&#xff1a;非问题 kali 基础官网与安装 问题二&#xff1a; 问题三&#xff1a; Kali系统 MySQL问题Cant connect to local MySQL server through socket /run/mysqld/mysqld.sock (2) 问题四&#xff1a;重新安装MySQL 也就是MariaDB(MariaDB 含 MySQL相关…

2025最新版Visual Studio Code安装使用指南

2025最新版Visual Studio Code安装使用指南 Installation and Usage Guide for the Latest Visual Studio Code in 2024 By JacksonML 2025-1-7 1. Visual Studio Code背景 早在二十年前&#xff0c;通用的集成开发环境&#xff08;Integrated Deveopment Environment, 简称…

opencv 学习(1)

文章目录 opencv导学部分opencv的作用ffmpeg和 opencv的关系opencv的未来 计算机视觉是什么&#xff1f; opencv导学部分 opencv的作用 1 : 目标识别 人脸识别 车辆识别 2 : 自动驾驶技术 – 计算机视觉 进行车道的检测 3 : 医学图像分析 通过分析光片 来分析人到底得了什么病…

C/C++编程安全标准GJB-8114解读——初始化类

软件测试实验室在申请CMA测试认证时&#xff0c;需要根据相应的标准确定检测方法。GJB-8114是一部嵌入式软件安全测试相关的国家标准&#xff0c;本系列文章我们针对GJB-8114《C/C语言编程安全子集》的具体内容进行解读。GJB-8114标准规则中一共有124条强制性规则&#xff0c; …

Excel 做数据分析的好与不好

日常工作中&#xff0c;涉及到数据的计算分析&#xff0c;Excel 一定是使用最多的。但是也有不少小伙伴困惑于 Excel 的深入学习难度大&#xff0c;复杂问题不好做&#xff0c;相同问题重复烦&#xff0c;大数据跑不了等问题。这里我们就来聊一聊 Excel 做数据分的好与不好&…

ollama安装及本地部署开源大模型

Ollama官网&#xff1a;https://ollama.com/&#xff0c;官方网站的介绍就一句话&#xff1a;Get up and running with large language models. &#xff08;开始使用大语言模型。&#xff09; Ollama是一个开源的 LLM&#xff08;大型语言模型&#xff09;服务工具&#xff0c…

Vue3 + Vite + Electron + Ts 项目快速创建

一、创建 Vue 项目 1. 创建项目 pnpm create vite 2. 安装依赖 cd excel-electron pnpm install 3. 运行项目 pnpm dev 二、添加 Electron 1. 安装 electron pnpm add electron -D 2. 修改 package.json 添加入口 js 和执行命令。 {"main": "dist-ele…

网页数据如何正确copy到postman中

复制后&#xff0c;粘贴到postman就可以&#xff0c;相关的token及参数都会带过去的 postman怎么copy出地址及参数&#xff0c;给git bash使用&#xff1f; 右边有个两个反向箭头&#xff0c;copy就可以&#xff0c;选项中有java等各种程序语言