CFAFitter类用于对数据进行曲线拟合,主要应用于:
pip install FreeAeon-ML
或手动安装依赖包:
pip install numpy pandas matplotlib scipy
CFAFitter类提供三种拟合方式: - linear: 线性拟合 y = ax + b - polynomial: 多项式拟合 y = a₀ + a₁x + a₂x² + ... + aₙxⁿ - exponential: 指数拟合 y = a·e^(bx)
| 参数名 | 类型 | 默认值 | 说明 |
|---|---|---|---|
| fitter | str | 'polynomial' | 拟合方式: 'linear', 'polynomial', 'exponential' |
| degree | int | 2 | 多项式阶数(仅polynomial模式有效) |
对给定数据进行曲线拟合,计算最优参数。
| 参数名 | 类型 | 说明 |
|---|---|---|
| x_data | array-like | 自变量数据 |
| y_data | array-like | 因变量数据 |
返回拟合参数数组: - linear模式: [a, b] 表示 y = ax + b - polynomial模式: [a₀, a₁, ..., aₙ] 表示 y = a₀ + a₁x + ... + aₙxⁿ - exponential模式: [a, b] 表示 y = a·e^(bx)
import numpy as np
from FreeAeonML.FADataEDA import CFAFitter
# 生成带噪声的线性数据
np.random.seed(42)
x_data = np.linspace(0, 10, 100)
y_data = 2 * x_data + 1 + np.random.normal(size=x_data.size)
# 线性拟合
fitter = CFAFitter(fitter='linear')
params = fitter.fit(x_data, y_data)
print(f"拟合参数: a={params[0]:.4f}, b={params[1]:.4f}")
# 输出: 拟合参数: a=2.0123, b=0.9876
绘制原始数据和拟合曲线的对比图。
| 参数名 | 类型 | 默认值 | 说明 |
|---|---|---|---|
| x_data | array-like | - | 自变量数据 |
| y_data | array-like | - | 因变量数据 |
| params | array-like | None | 拟合参数,为None时使用fit()的结果 |
无返回值,直接显示图形。
import numpy as np
import matplotlib.pyplot as plt
from FreeAeonML.FADataEDA import CFAFitter
# 生成数据
np.random.seed(42)
x_data = np.linspace(0, 10, 100)
y_data = 2 * x_data + 1 + np.random.normal(size=x_data.size)
# 拟合并可视化
fitter = CFAFitter(fitter='linear')
fitter.fit(x_data, y_data)
fitter.plot(x_data, y_data)
plt.show()
获取最近一次拟合的参数。
无参数。
返回拟合参数数组。
from FreeAeonML.FADataEDA import CFAFitter
import numpy as np
x = np.array([1, 2, 3, 4, 5])
y = np.array([2.1, 4.0, 5.9, 8.1, 10.0])
fitter = CFAFitter(fitter='linear')
fitter.fit(x, y)
params = fitter.get_fit_param()
print(f"拟合参数: {params}")
根据给定参数计算拟合的y值。
| 参数名 | 类型 | 说明 |
|---|---|---|
| x_data | array-like | 自变量数据 |
| params | array-like | 拟合参数 |
返回计算得到的y值数组。
from FreeAeonML.FADataEDA import CFAFitter
import numpy as np
x_train = np.array([1, 2, 3, 4, 5])
y_train = np.array([2.1, 4.0, 5.9, 8.1, 10.0])
# 训练拟合模型
fitter = CFAFitter(fitter='linear')
params = fitter.fit(x_train, y_train)
# 预测新数据
x_test = np.array([6, 7, 8])
y_pred = fitter.get_fit_data(x_test, params)
print(f"预测值: {y_pred}")
import numpy as np
import matplotlib.pyplot as plt
from FreeAeonML.FADataEDA import CFAFitter
# 生成线性数据
np.random.seed(0)
x_data = np.linspace(0, 10, 100)
y_data_linear = 2 * x_data + 1 + np.random.normal(size=x_data.size)
# 线性拟合
linear_fitter = CFAFitter(fitter='linear')
linear_params = linear_fitter.fit(x_data, y_data_linear)
print("线性拟合参数:", linear_params)
# 可视化
linear_fitter.plot(x_data, y_data_linear)
plt.title('Linear Fitting: y = ax + b')
plt.show()
import numpy as np
import matplotlib.pyplot as plt
from FreeAeonML.FADataEDA import CFAFitter
# 生成抛物线数据
np.random.seed(0)
x_data = np.linspace(0, 10, 100)
y_data_polynomial = 1 * x_data**2 - 2 * x_data + 1 + np.random.normal(size=x_data.size)
# 多项式拟合(2阶)
poly_fitter = CFAFitter(fitter='polynomial', degree=2)
poly_params = poly_fitter.fit(x_data, y_data_polynomial)
print("多项式拟合参数:", poly_params)
# 可视化
poly_fitter.plot(x_data, y_data_polynomial)
plt.title('Polynomial Fitting: y = a₀ + a₁x + a₂x²')
plt.show()
import numpy as np
import matplotlib.pyplot as plt
from FreeAeonML.FADataEDA import CFAFitter
# 生成指数增长数据
np.random.seed(0)
x_data = np.linspace(0, 10, 100)
y_data_exponential = 2 * np.exp(0.5 * x_data) + np.random.normal(size=x_data.size)
# 指数拟合
exp_fitter = CFAFitter(fitter='exponential')
exp_params = exp_fitter.fit(x_data, y_data_exponential)
print("指数拟合参数:", exp_params)
# 可视化
exp_fitter.plot(x_data, y_data_exponential)
plt.title('Exponential Fitting: y = a·e^(bx)')
plt.show()
import numpy as np
import matplotlib.pyplot as plt
from FreeAeonML.FADataEDA import CFAFitter
# 生成数据
np.random.seed(42)
x_data = np.linspace(0, 5, 50)
y_data = 3 * x_data**2 - 2 * x_data + 1 + np.random.normal(0, 2, size=x_data.size)
# 创建子图
fig, axes = plt.subplots(1, 3, figsize=(15, 4))
# 线性拟合
linear_fitter = CFAFitter(fitter='linear')
linear_fitter.fit(x_data, y_data)
plt.sca(axes[0])
linear_fitter.plot(x_data, y_data)
axes[0].set_title('Linear Fit')
# 多项式拟合(2阶)
poly_fitter = CFAFitter(fitter='polynomial', degree=2)
poly_fitter.fit(x_data, y_data)
plt.sca(axes[1])
poly_fitter.plot(x_data, y_data)
axes[1].set_title('Polynomial Fit (degree=2)')
# 多项式拟合(3阶)
poly3_fitter = CFAFitter(fitter='polynomial', degree=3)
poly3_fitter.fit(x_data, y_data)
plt.sca(axes[2])
poly3_fitter.plot(x_data, y_data)
axes[2].set_title('Polynomial Fit (degree=3)')
plt.tight_layout()
plt.show()
import numpy as np
import matplotlib.pyplot as plt
from FreeAeonML.FADataEDA import CFAFitter
# 历史数据(例如销售数据)
months = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
sales = np.array([100, 120, 135, 158, 185, 210, 245, 280, 320, 365])
# 拟合趋势
fitter = CFAFitter(fitter='polynomial', degree=2)
params = fitter.fit(months, sales)
# 预测未来3个月
future_months = np.array([11, 12, 13])
future_sales = fitter.get_fit_data(future_months, params)
# 可视化
plt.figure(figsize=(10, 6))
plt.scatter(months, sales, color='blue', label='Historical Data', s=50)
plt.plot(months, fitter.get_fit_data(months, params),
color='red', label='Fitted Trend', linewidth=2)
plt.scatter(future_months, future_sales,
color='green', label='Forecast', s=50, marker='^')
plt.xlabel('Month')
plt.ylabel('Sales')
plt.title('Sales Trend Analysis and Forecast')
plt.legend()
plt.grid(True, alpha=0.3)
plt.show()
print(f"预测第11-13月销售额: {future_sales}")