def fit(self, X):
"""Fit ranking SVM.
Parameters
----------
X : array, shape (n_samples, n_features)
Training data, sorted, highest rank first
"""
self.n_samples, self.n_features = X.shape
self.n_alpha = self.n_samples - 1
self.X = X
if self.n_samples < 2:
raise ValueError("Expected at least 2 training samples, got %d"
% self.n_samples)
random_state = check_random_state(self.random_state)
n_iter = self.n_iter
if n_iter < 0:
n_iter = int(50000 * np.sqrt(self.n_features))
K = euclidean_distances(self.X, squared=True)
# Average distance between training data
sigma = np.sqrt(K).sum() / ((self.n_samples - 1) * self.n_samples)
sigma *= self.c_sigma
self.denom = -np.maximum(2.0 * sigma ** 2, MACHINE_EPSILON)
K /= self.denom
np.exp(K, K)
# Constraint violation cost
Ci = np.linspace(self.n_alpha, 1, self.n_alpha) ** self.c_pow
Ci *= 10 ** self.c_base
# Optimize alpha parameters
self.alpha = optimize(Ci, K, 1.0, n_iter, random_state)
return self
评论列表
文章目录