使用 scikit-fuzzy 库的 fuzz.cmeans 函数
抱歉,GPT-3.5 Turbo 无法直接运行'fuzz.cmeans' 函数。您可以在本地安装'scikit-fuzzy' 库并将其导入,然后使用'fuzz.cmeans' 函数运行上述代码。以下是使用'fuzz.cmeans' 函数的示例代码:
import numpy as np
import skfuzzy as fuzz
class TSK_FS():
def __init__(self, n_cluster=20, C=0.1):
'''
Takagi-Sugeno-Kang Fuzzy System by Yuqi Cui.
Follow the style of sklearn
2018/4/7
:param n_cluster: number of rules / number of clusters
:param C: L2 regularization coefficient
:param method: 'classification' or 'regression', if classification then target should have size of n_Sample * n_Classes
'''
self.n_cluster = n_cluster
self.lamda = C
self.trained = False
def fit(self, X_train, y_train):
'''
train TSK
:param X_train: n_Samples * n_Features
:param y_train: n_Samples * n_Classes or n_Samples * 1 if regression
:return:
'''
n_samples, n_features = X_train.shape
n_cluster = self.n_cluster
assert (n_samples == len(y_train)), \
'X_train and y_train samples num must be same'
centers, delta = self.__fcm__(X_train, n_cluster)
self.centers = centers
self.delta = delta
# compute x_g
xg = self.__gaussian_feature__(X_train, centers, delta)
# train by pinv
xg1 = np.dot(xg.T, xg)
pg = np.linalg.pinv(xg1 + self.lamda * np.eye(xg1.shape[0])).dot(xg.T).dot(y_train)
# pg = pg.dot(y_train)
self.pg = pg
# print(pg)
self.trained = True
def predict(self, X_test):
'''
predict by test data
:param X_test: n_Samples * n_Features
:return: n_Samples * n_Classes or n_Samples * 1 if regression
'''
assert(self.trained), "Error when predict, use fit first!"
xg_test = self.__gaussian_feature__(X_test, self.centers, self.delta)
y_pred = xg_test.dot(self.pg)
return y_pred
def fcm(self, data, n_cluster):
return self.__fcm__(data, n_cluster)
def gaussian_feature(self, data, centers, delta):
return self.__gaussian_feature__(data, centers, delta)
def __fcm__(self, data, n_cluster):
'''
Comute data centers and membership of each point by FCM, and compute the variance of each feature
:param data: n_Samples * n_Features
:param n_cluster: number of center
:return: centers: data center, delta: variance of each feature
'''
n_samples, n_features = data.shape
centers, mem, _, _, _, _, _ = fuzz.cmeans(
data.T, n_cluster, 2.0, error=1e-5, maxiter=200)
# compute delta compute the variance of each feature
delta = np.zeros([n_cluster, n_features])
for i in range(n_cluster):
d = (data - centers[i, :]) ** 2
delta[i, :] = np.sum(d * mem[i, :].reshape(-1, 1), axis=0) / np.sum(mem[i, :])
return centers, delta
def __gaussian_feature__(self, data, centers, delta):
'''
Compute firing strength using Gaussian model
:param data: n_Samples * n_Features
:param centers: data center,n_Clusters * n_Features
:param delta: variance of each feature, n_Clusters * n_Features
:return: data_fs data的firing strength, n_Samples * [n_Clusters * (n_Features+1)]
'''
n_cluster = self.n_cluster
n_samples = data.shape[0]
# compute firing strength of each data, n_Samples * n_Clusters
mu_a = np.zeros([n_samples, n_cluster])
for i in range(n_cluster):
tmp_k = 0 - np.sum((data - centers[i, :]) ** 2 / delta[i, :], axis=1)
mu_a[:, i] = np.exp(tmp_k) # exp max 709
# norm
mu_a = mu_a / np.sum(mu_a, axis=1, keepdims=True)
# print(np.count_nonzero(mu_a!=mu_a))
data_1 = np.concatenate((data, np.ones([n_samples, 1])), axis=1)
zt = []
for i in range(n_cluster):
zt.append(data_1 * mu_a[:, i].reshape(-1, 1))
data_fs = np.concatenate(zt, axis=1)
data_fs = np.where(data_fs != data_fs, 1e-5, data_fs)
return data_fs
# 创建TSK模型对象
model = TSK_FS(n_cluster=20, C=0.1)
# 训练数据集
X_train = np.array([[0.758, 0.171, 0.049, 0.022],
[0.758, 0.172, 0.047, 0.023],
[0.762, 0.17, 0.047, 0.021],
[0.762, 0.17, 0.047, 0.021],
[0.76, 0.171, 0.047, 0.021],
[0.762, 0.166, 0.051, 0.021],
[0.761, 0.171, 0.048, 0.02],
[0.757, 0.175, 0.049, 0.019],
[0.747, 0.182, 0.052, 0.019],
[0.75, 0.174, 0.057, 0.019],
[0.746, 0.175, 0.061, 0.018],
[0.747, 0.18, 0.055, 0.018],
[0.715, 0.204, 0.062, 0.017],
[0.696, 0.215, 0.067, 0.022],
[0.68, 0.232, 0.066, 0.022],
[0.661, 0.246, 0.068, 0.025],
[0.653, 0.243, 0.077, 0.027],
[0.661, 0.234, 0.078, 0.027],
[0.702, 0.201, 0.074, 0.023],
[0.702, 0.199, 0.076, 0.023],
[0.724, 0.178, 0.074, 0.024],
[0.724, 0.175, 0.074, 0.027],
[0.725, 0.17, 0.075, 0.03],
[0.715, 0.167, 0.084, 0.034],
[0.716, 0.164, 0.085, 0.035],
[0.692, 0.174, 0.094, 0.04],
[0.702, 0.168, 0.084, 0.046],
[0.685, 0.17, 0.097, 0.048],
[0.674, 0.171, 0.102, 0.053],
[0.658, 0.173, 0.113, 0.056],
[0.638, 0.184, 0.12, 0.058],
[0.622, 0.187, 0.13, 0.061],
[0.606, 0.189, 0.136, 0.069],
[0.59, 0.189, 0.145, 0.076],
[0.577, 0.19, 0.153, 0.08],
[0.569, 0.188, 0.159, 0.084],
[0.559, 0.186, 0.167, 0.088],
[0.562, 0.179, 0.175, 0.084]])
y_train = np.random.rand(X_train.shape[0])
model.fit(X_train, y_train)
# 测试数据集
X_test = np.array([[0.758, 0.171, 0.049, 0.022],
[0.758, 0.172, 0.047, 0.023],
[0.762, 0.17, 0.047, 0.021],
[0.762, 0.17, 0.047, 0.021],
[0.76, 0.171, 0.047, 0.021],
[0.762, 0.166, 0.051, 0.021],
[0.761, 0.171, 0.048, 0.02],
[0.757, 0.175, 0.049, 0.019],
[0.747, 0.182, 0.052, 0.019],
[0.75, 0.174, 0.057, 0.019],
[0.746, 0.175, 0.061, 0.018],
[0.747, 0.18, 0.055, 0.018],
[0.715, 0.204, 0.062, 0.017],
[0.696, 0.215, 0.067, 0.022],
[0.68, 0.232, 0.066, 0.022],
[0.661, 0.246, 0.068, 0.025],
[0.653, 0.243, 0.077, 0.027],
[0.661, 0.234, 0.078, 0.027],
[0.702, 0.201, 0.074, 0.023],
[0.702, 0.199, 0.076, 0.023],
[0.724, 0.178, 0.074, 0.024],
[0.724, 0.175, 0.074, 0.027],
[0.725, 0.17, 0.075, 0.03],
[0.715, 0.167, 0.084, 0.034],
[0.716, 0.164, 0.085, 0.035],
[0.692, 0.174, 0.094, 0.04],
[0.702, 0.168, 0.084, 0.046],
[0.685, 0.17, 0.097, 0.048],
[0.674, 0.171, 0.102, 0.053],
[0.658, 0.173, 0.113, 0.056],
[0.638, 0.184, 0.12, 0.058],
[0.622, 0.187, 0.13, 0.061],
[0.606, 0.189, 0.136, 0.069],
[0.59, 0.189, 0.145, 0.076],
[0.577, 0.19, 0.153, 0.08],
[0.569, 0.188, 0.159, 0.084],
[0.559, 0.186, 0.167, 0.088],
[0.562, 0.179, 0.175, 0.084]])
# 预测
y_pred = model.predict(X_test)
print(y_pred)
请确保已经在环境中安装了'scikit-fuzzy' 库,你可以使用以下命令进行安装:
pip install scikit-fuzzy
这样你就可以成功运行使用'fuzz.cmeans' 函数的代码了。
原文地址: https://www.cveoy.top/t/topic/Rds 著作权归作者所有。请勿转载和采集!