CFASample类提供了机器学习中常用的样本数据生成和数据集处理功能,适用于:
pip install pandas numpy scikit-learn imbalanced-learn
样本生成与数据处理工具类,提供多种数据生成和处理的静态方法。
功能:生成随机回归数据集,包含2个特征和1个目标变量。
调用参数:
- n_sample (int, 默认=100): 样本数量
返回值: - DataFrame: 包含x1, x2特征列和y目标列的数据集
示例代码:
from FreeAeonML.FASample import CFASample
# 生成100个回归样本
df_regression = CFASample.get_random_regression(n_sample=100)
print(df_regression.head())
功能:生成随机分类数据集,支持多分类任务。
调用参数:
- n_sample (int, 默认=100): 样本数量
- n_feature (int, 默认=2): 特征数量
- n_class (int, 默认=2): 类别数量
返回值: - DataFrame: 包含x0, x1, ..., xn特征列和y目标列的数据集
示例代码:
from FreeAeonML.FASample import CFASample
# 生成1000个样本,10个特征,2分类
df_classification = CFASample.get_random_classification(
n_sample=1000,
n_feature=10,
n_class=2
)
print(df_classification.shape)
print(df_classification['y'].value_counts())
功能:生成随机聚类数据集,包含2个簇。
调用参数:
- n_sample (int, 默认=100): 样本数量
返回值: - DataFrame: 包含x1, x2特征列和y簇标签列的数据集
示例代码:
from FreeAeonML.FASample import CFASample
# 生成100个聚类样本
df_cluster = CFASample.get_random_cluster(n_sample=100)
print(df_cluster.head())
功能:将数据集划分为训练集和测试集。
调用参数:
- df (DataFrame): 待划分的数据集
- test_ratio (float, 默认=0.2): 测试集比例
返回值: - tuple: (df_train, df_test) 训练集和测试集
示例代码:
from FreeAeonML.FASample import CFASample
# 生成数据并划分
df_sample = CFASample.get_random_classification(1000, n_feature=10, n_class=2)
df_train, df_test = CFASample.split_dataset(df_sample, test_ratio=0.2)
print(f"训练集大小: {df_train.shape}")
print(f"测试集大小: {df_test.shape}")
功能:使用SMOTE算法对不平衡数据进行过采样,支持分类特征。
调用参数:
- df_sample (DataFrame): 待重采样的数据集
- x_columns (list, 默认=[]): 特征列名列表,为空则自动推断
- y_column (str, 默认='label'): 目标列名
- random_state (int, 默认=42): 随机种子
返回值: - DataFrame: 重采样后的平衡数据集
示例代码:
from FreeAeonML.FASample import CFASample
# 生成不平衡数据
df_imbalanced = CFASample.get_random_classification(1000, n_feature=10, n_class=2)
# SMOTE重采样
df_balanced = CFASample.resample_smote(df_imbalanced, y_column='y')
print("原始数据分布:")
print(df_imbalanced['y'].value_counts())
print("\n重采样后数据分布:")
print(df_balanced['y'].value_counts())
功能:通过上采样少数类来平衡数据集。
调用参数:
- df_data (DataFrame): 待平衡的数据集
- max_count(int): 每个类别的样本数量(默认为None,表示类别中的最多样本)
- y_column (str, 默认='labels'): 目标列名
返回值: - DataFrame: 平衡后的数据集
示例代码:
from FreeAeonML.FASample import CFASample
df_sample = CFASample.get_random_classification(1000, n_feature=10, n_class=2)
df_balanced = CFASample.resample_balance(df_sample, y_column='y')
print(df_balanced['y'].value_counts())
功能:在时序数据中找到值发生变化的索引位置。
调用参数:
- ds (Series): 时序数据序列
返回值: - ndarray: 变化点的索引数组
示例代码:
from FreeAeonML.FASample import CFASample
import pandas as pd
# 创建时序数据
ds = pd.Series([1, 1, 1, 2, 2, 3, 3, 3, 1])
# 查找变化点
changed_indices = CFASample.find_changed_index(ds)
print(f"变化发生在索引: {changed_indices}")
功能:将DataFrame按批次大小划分为多个小的DataFrame。
调用参数:
- df_sample (DataFrame): 待划分的数据集
- batch_size (int, 默认=10): 每批的大小
返回值: - list: DataFrame列表,每个元素是一个批次
示例代码:
from FreeAeonML.FASample import CFASample
df_sample = CFASample.get_random_classification(100, n_feature=5, n_class=2)
# 划分为批次,每批10条
batches = CFASample.split_dataframe(df_sample, batch_size=10)
print(f"总批次数: {len(batches)}")
print(f"第一批大小: {len(batches[0])}")
from FreeAeonML.FASample import CFASample
# 1. 生成不同类型的样本数据
df_classification = CFASample.get_random_classification(1000, n_feature=10, n_class=4)
df_regression = CFASample.get_random_regression(500)
df_cluster = CFASample.get_random_cluster(300)
print("分类数据:", df_classification.shape)
print("回归数据:", df_regression.shape)
print("聚类数据:", df_cluster.shape)
# 2. 数据集划分
df_train, df_test = CFASample.split_dataset(df_regression, test_ratio=0.2)
print(f"\n训练集: {df_train.shape}, 测试集: {df_test.shape}")
# 3. 处理不平衡数据
df_balanced = CFASample.resample_smote(df_classification, y_column='y')
print("\n重采样前分布:", df_classification['y'].value_counts().to_dict())
print("重采样后分布:", df_balanced['y'].value_counts().to_dict())
# 4. 批量处理
batches = CFASample.split_dataframe(df_train, batch_size=50)
print(f"\n数据被划分为 {len(batches)} 个批次")