自学内容网 自学内容网

Python 代码实现了一个基于 Choquet 积分和支持向量回归(SVR)的模型,用于对给定的数据集进行预测,并通过优化算法来确定模型的参数

import numpy as np
import pandas as pd
import cvxpy as cp
from sklearn.metrics import mean_squared_error, r2_score
from itertools import combinations
from sklearn.model_selection import GridSearchCV, KFold
from sklearn.svm import SVR
from scipy.optimize import differential_evolution
from tqdm import tqdm

# 读取训练集数据
#想和大神交朋友或想软件开发兼职接项目,
#请通过手机端搜小#程#序: "黄页小艺"或公#众#号:"卧看星河"。
train_data = pd.read_csv('D:/danwang/Git demo/SVR_choquet/data_train.csv')  # 读取 CSV 文件,第一行为表头
f_train = train_data.iloc[:, :-1].values  # 特征矩阵,除最后一列外的所有列
y_train = train_data.iloc[:, -1].values   # 目标变量,最后一列

# 读取测试集数据
test_data = pd.read_csv('D:/danwang/Git demo/SVR_choquet/data_test.csv')  # 读取 CSV 文件,第一行为表头
f_test = test_data.iloc[:, :-1].values   # 特征矩阵,除最后一列外的所有列
y_test = test_data.iloc[:, -1].values    # 测试集的目标变量
n_attributes = f_train.shape[1]  # 特征数量,减去目标变量的列
n_samples = f_train.shape[0]
special_indices = list(range(0, 48)) + [49, 50, 54, 55, 59, 80, 96]


def get_mj_and_mjk(m_values, n_attributes):
    mj = np.array(m_values[:n_attributes])  # 单个属性权重
    mjk = np.zeros((n_attributes, n_attributes))  # 交互属性权重矩阵
    idx = n_attributes
    for i in range(n_attributes):
        for j in range(i + 1, n_attributes):
            mjk[i, j] = m_values[idx]
            mjk[j, i] = mjk[i, j]  # 对称性
            idx += 1
    mj_mjk = []
    for i in range(n_attributes):
        mj_mjk.append([mj[i], mjk[i, i + 1:]])
    return mj_mjk


def decode_solution(x, n_attributes):
    m_dist = []
    idx = 0
    for i in range(n_attributes):
        m_j = x[idx]
        idx += 1
        m_jk = x[idx:idx + n_attributes - i - 1]
        idx += len(m_jk)
        m_dist.append((m_j, m_jk))
    return m_dist


def extract_variables(x, n_attributes, n_samples):
    """
    从优化变量 x 中提取各部分的变量:
    包含 m_j, m_jk, Choquet积分正松弛变量, 负松弛变量, SVR 正松弛变量, 负松弛变量
    """
    m_j_end = n_attributes
    m_jk_end = m_j_end + (n_attributes * (n_attributes - 1)) // 2
    m_dist = decode_solution(x[:m_jk_end], n_attributes)
    choquet_pos_slacks = x[m_jk_end:m_jk_end + n_samples]
    choquet_neg_slacks = x[m_jk_end + n_samples:m_jk_end + 2 * n_samples]
    svr_pos_slacks = x[m_jk_end + 2 * n_samples:m_jk_end + 3 * n_samples]
    svr_neg_slacks = x[m_jk_end + 3 * n_samples:m_jk_end + 4 * n_samples]
    return m_dist, choquet_pos_slacks, choquet_neg_slacks, svr_pos_slacks, svr_neg_slacks


def choquet_integral(f_i

原文地址:https://blog.csdn.net/huanghm88/article/details/142993783

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!