性能公式
均方根误差 RMSE ‖·‖2
RMSE = √[ (1/n) × Σ(y_i - ŷ_i)² ]
- y_i = 第 i 个实际值
- ŷ_i = 第 i 个预测值
- n = 样本数量
- Σ = 求和符号(对所有样本 i=1 到 n)
计算步骤
- 计算每个预测的误差:e_i = y_i - ŷ_i
- 计算误差的平方:e_i²
- 计算平方和:SSE = Σ e_i²
- 计算平均值:MSE = SSE / n
- 取平方根:RMSE = √(MSE)
import numpy as np
def rmse(actual, predicted):
return np.sqrt(np.mean((np.array(actual) - np.array(predicted))**2))
# 使用示例
actual = [3, -0.5, 2, 7]
predicted = [2.5, 0.0, 2, 8]
print(f"RMSE: {rmse(actual, predicted):.3f}")
平均绝对误差(MAE)公式 ‖·‖1
MAE = (1/n) × Σ|y_i - ŷ_i|
- y_i = 第 i 个实际值
- ŷ_i = 第 i 个预测值
- n = 样本数量
- | | = 绝对值符号
- Σ = 求和符号(对所有样本 i=1 到 n)
计算步骤
- 计算每个预测的误差:e_i = y_i - ŷ_i
- 取绝对值:|e_i|
- 计算绝对误差的和:SAE = Σ|e_i|
- 计算平均值:MAE = SAE / n
import numpy as np
def mae(actual, predicted):
return np.mean(np.abs(np.array(actual) - np.array(predicted)))
actual = [3, -0.5, 2, 7]
predicted = [2.5, 0.0, 2, 8]
print(f"mae: {mae(actual, predicted):.3f}")
移动平均线(均线,MA)
基本概念
移动平均线是趋势指标,用于平滑价格数据,识别趋势方向。
简单移动平均线(sma)
SMA = (P1 + P2 + ... + PN) / N
SMA = (P1 + P2 + ... + PN) / N
# 其中,P为收盘价,N为周期数。
指数移动平均线(EMA)
EMA_today = (Price_today * (2/(N+1))) + (EMA_yesterday * (1 - 2/(N+1)))
import numpy as np
import pandas as pd
# 简单移动平均线
def calculate_sma(prices, period):
return prices.rolling(window=period).mean()
# 指数移动平均线
def calculate_ema(prices, period):
return prices.ewm(span=period, adjust=False).mean()
# 示例
# 假设我们有一个包含收盘价的Series:close_prices
# sma_10 = SMA(close_prices, 10)
# ema_10 = EMA(close_prices, 10)
# 示例数据
dates = pd.date_range('2023-01-01', periods=100, freq='D')
np.random.seed(42)
close_prices = 100 + np.cumsum(np.random.randn(100)) # 模拟价格数据
# 转换为Series
price_series = pd.Series(close_prices, index=dates)
# 计算不同周期的移动平均线
sma_10 = calculate_sma(price_series, 10)
sma_20 = calculate_sma(price_series, 20)
ema_10 = calculate_ema(price_series, 10)
print(f"SMA 10日: {sma_10.iloc[-1]:.2f}")
print(f"SMA 20日: {sma_20.iloc[-1]:.2f}")
print(f"EMA 10日: {ema_10.iloc[-1]:.2f}")