本文整理汇总了Python中sklearn.utils.extmath.squared_norm函数的典型用法代码示例。如果您正苦于以下问题:Python squared_norm函数的具体用法?Python squared_norm怎么用?Python squared_norm使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了squared_norm函数的20个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的Python代码示例。
示例1: objective
def objective(K, y, alpha, lamda, beta, w):
"""Objective function for lasso kernel learning."""
obj = .5 * sum(squared_norm(
alpha[j].dot(K[j].T.dot(w)) - y[j]) for j in range(len(K)))
obj += lamda * np.abs(w).sum()
obj += beta * sum(squared_norm(a) for a in alpha)
return obj
开发者ID:yvette-suyu,项目名称:about-ML,代码行数:7,代码来源:linear_model.py
示例2: objective_admm
def objective_admm(K, y, alpha, lamda, beta, w, w1, w2):
"""Objective function for lasso kernel learning."""
obj = .5 * sum(squared_norm(
np.dot(alpha[j], K[j].T.dot(w)) - y[j]) for j in range(len(K)))
obj += lamda * np.abs(w1).sum()
obj += beta * squared_norm(w2)
return obj
开发者ID:yvette-suyu,项目名称:about-ML,代码行数:7,代码来源:linear_model.py
示例3: test_norm_squared_norm
def test_norm_squared_norm():
X = np.random.RandomState(42).randn(50, 63)
X *= 100 # check stability
X += 200
assert_almost_equal(np.linalg.norm(X.ravel()), norm(X))
assert_almost_equal(norm(X) ** 2, squared_norm(X), decimal=6)
assert_almost_equal(np.linalg.norm(X), np.sqrt(squared_norm(X)), decimal=6)
开发者ID:93sam,项目名称:scikit-learn,代码行数:8,代码来源:test_extmath.py
示例4: test_norm_squared_norm
def test_norm_squared_norm():
X = np.random.RandomState(42).randn(50, 63)
X *= 100 # check stability
X += 200
assert_almost_equal(np.linalg.norm(X.ravel()), norm(X))
assert_almost_equal(norm(X) ** 2, squared_norm(X), decimal=6)
assert_almost_equal(np.linalg.norm(X), np.sqrt(squared_norm(X)), decimal=6)
# Check the warning with an int array and np.dot potential overflow
assert_warns_message(
UserWarning, 'Array type is integer, np.dot may '
'overflow. Data should be float type to avoid this issue',
squared_norm, X.astype(int))
开发者ID:BasilBeirouti,项目名称:scikit-learn,代码行数:13,代码来源:test_extmath.py
示例5: _objective_func
def _objective_func(self, w):
bias, wf = self._split_coefficents(w)
l_plus, xv_plus, l_minus, xv_minus = self._counter.calculate(wf)
xw = self._xw
val = 0.5 * squared_norm(wf)
if self._has_time:
val += 0.5 * self._regr_penalty * squared_norm(self.y_compressed - bias
- xw.compress(self.regr_mask, axis=0))
val += 0.5 * self._rank_penalty * numexpr.evaluate(
'sum(xw * ((l_plus + l_minus) * xw - xv_plus - xv_minus - 2 * (l_minus - l_plus)) + l_minus)')
return val
开发者ID:tum-camp,项目名称:survival-support-vector-machine,代码行数:15,代码来源:survival_svm.py
示例6: _beta_divergence_dense
def _beta_divergence_dense(X, W, H, beta):
"""Compute the beta-divergence of X and W.H for dense array only.
Used as a reference for testing nmf._beta_divergence.
"""
if isinstance(X, numbers.Number):
W = np.array([[W]])
H = np.array([[H]])
X = np.array([[X]])
WH = np.dot(W, H)
if beta == 2:
return squared_norm(X - WH) / 2
WH_Xnonzero = WH[X != 0]
X_nonzero = X[X != 0]
np.maximum(WH_Xnonzero, 1e-9, out=WH_Xnonzero)
if beta == 1:
res = np.sum(X_nonzero * np.log(X_nonzero / WH_Xnonzero))
res += WH.sum() - X.sum()
elif beta == 0:
div = X_nonzero / WH_Xnonzero
res = np.sum(div) - X.size - np.sum(np.log(div))
else:
res = (X_nonzero ** beta).sum()
res += (beta - 1) * (WH ** beta).sum()
res -= beta * (X_nonzero * (WH_Xnonzero ** (beta - 1))).sum()
res /= beta * (beta - 1)
return res
开发者ID:kjacks21,项目名称:scikit-learn,代码行数:33,代码来源:test_nmf.py
示例7: _kmeans_spark
def _kmeans_spark(X, n_clusters, max_iter=300, worker_nums=10, init='k-means++', random_state=None, tol=1e-4):
from pyspark import SparkContext, SparkConf
conf = SparkConf().setAppName('K-Means_Spark').setMaster('local[%d]'%worker_nums)
sc = SparkContext(conf=conf)
data = sc.parallelize(X)
data.cache()
random_state = check_random_state(random_state)
best_labels, best_inertia, best_centers = None, None, None
x_squared_norms = row_norms(X, squared=True)
# x_squared_norms = data.map(lambda x: (x*x).sum(axis=0)).collect()
# x_squared_norms = np.array(x_squared_norms, dtype='float64')
centers = _init_centroids(X, n_clusters, init, random_state, x_squared_norms=x_squared_norms)
bs = X.shape[0]/worker_nums
data_temp = []
for i in range(worker_nums-1):
data_temp.append(X[i*bs:(i+1)*bs])
data_temp.append(X[(worker_nums-1)*bs:])
data_temp = np.array(data_temp, dtype='float64')
data_temp = sc.parallelize(data_temp)
data_temp.cache()
for i in range(max_iter):
centers_old = centers.copy()
all_distances = data_temp.map(lambda x: euclidean_distances(centers, x, squared=True)).collect()
temp_all_distances = all_distances[0]
for i in range(1, worker_nums):
temp_all_distances = np.hstack((temp_all_distances, all_distances[i]))
all_distances = temp_all_distances
# all_distances = data.map(lambda x: euclidean_distances(centers, x, squared=True)).collect()
# # reshape, from (1, n_samples, k) to (k, n_samples)
# all_distances = np.asarray(all_distances, dtype="float64").T[0]
# Assignment, also called E-step of EM
labels, inertia = _labels_inertia(X, x_squared_norms, centers, all_distances=all_distances)
# re-computation of the centroids, also called M-step of EM
centers = _centers(X, labels, n_clusters)
if best_inertia is None or inertia < best_inertia:
best_labels = labels.copy()
best_centers = centers.copy()
best_inertia = inertia
shift = squared_norm(centers_old - centers)
if shift <= tol:
break
return best_centers, best_labels, best_inertia
开发者ID:cyh24,项目名称:PySparkML,代码行数:56,代码来源:k_means_.py
示例8: _fit_projected_gradient
def _fit_projected_gradient(X, W, H, tol, max_iter, nls_max_iter, alpha,
l1_ratio):
gradW = (np.dot(W, np.dot(H, H.T)) -
safe_sparse_dot(X, H.T, dense_output=True))
gradH = (np.dot(np.dot(W.T, W), H) -
safe_sparse_dot(W.T, X, dense_output=True))
init_grad = squared_norm(gradW) + squared_norm(gradH.T)
# max(0.001, tol) to force alternating minimizations of W and H
tolW = max(0.001, tol) * np.sqrt(init_grad)
tolH = tolW
for n_iter in range(1, max_iter + 1):
# stopping condition as discussed in paper
proj_grad_W = squared_norm(gradW * np.logical_or(gradW < 0, W > 0))
proj_grad_H = squared_norm(gradH * np.logical_or(gradH < 0, H > 0))
if (proj_grad_W + proj_grad_H) / init_grad < tol ** 2:
break
# update W
Wt, gradWt, iterW = _nls_subproblem(X.T, H.T, W.T, tolW, nls_max_iter,
alpha=alpha, l1_ratio=l1_ratio)
W, gradW = Wt.T, gradWt.T
if iterW == 1:
tolW = 0.1 * tolW
# update H
H, gradH, iterH = _nls_subproblem(X, W, H, tolH, nls_max_iter,
alpha=alpha, l1_ratio=l1_ratio)
if iterH == 1:
tolH = 0.1 * tolH
H[H == 0] = 0 # fix up negative zeros
if n_iter == max_iter:
Wt, _, _ = _nls_subproblem(X.T, H.T, W.T, tolW, nls_max_iter,
alpha=alpha, l1_ratio=l1_ratio)
W = Wt.T
return W, H, n_iter
开发者ID:AlexisMignon,项目名称:scikit-learn,代码行数:42,代码来源:bench_plot_nmf.py
示例9: _multinomial_loss
def _multinomial_loss(w, X, Y, alpha, sample_weight):
"""Computes multinomial loss and class probabilities.
Parameters
----------
w : ndarray, shape (n_classes * n_features,) or (n_classes * (n_features +
1),)
Coefficient vector.
X : {array-like, sparse matrix}, shape (n_samples, n_features)
Training data.
Y : ndarray, shape (n_samples, n_classes)
Transformed labels according to the output of LabelBinarizer.
alpha : float
Regularization parameter. alpha is equal to 1 / C.
sample_weight : ndarray, shape (n_samples,) optional
Array of weights that are assigned to individual samples.
If not provided, then each sample is given unit weight.
Returns
-------
loss : float
Multinomial loss.
p : ndarray, shape (n_samples, n_classes)
Estimated class probabilities.
w : ndarray, shape (n_classes, n_features)
Reshaped param vector excluding intercept terms.
"""
n_classes = Y.shape[1]
n_features = X.shape[1]
fit_intercept = w.size == (n_classes * (n_features + 1))
w = w.reshape(n_classes, -1)
sample_weight = sample_weight[:, np.newaxis]
if fit_intercept:
intercept = w[:, -1]
w = w[:, :-1]
else:
intercept = 0
p = safe_sparse_dot(X, w.T)
p += intercept
p -= logsumexp(p, axis=1)[:, np.newaxis]
loss = -(sample_weight * Y * p).sum()
loss += 0.5 * alpha * squared_norm(w)
p = np.exp(p, p)
return loss, p, w
开发者ID:cwjacklin,项目名称:Otto,代码行数:50,代码来源:CMC.py
示例10: kmeansopt
def kmeansopt(data, k ,rng, T = 50 , method = 'kmeans' , tol = 1e-4 ):
centroids = []
lable = []
if(method == 'kmeans++'):
centroids = optimize_centroids(data, centroids , k ,rng )
else:
centroids = ramdon_centroids(data, centroids , k ,rng)
# print("inital centroids")
# print(centroids)
old_centroids = []
# result_dict = {}
Iteration = 0
clusters = [[] for i in range(k)]
# while(Iteration < T and not compare(old_centroids , centroids)):
while(Iteration < T ):
clusters = [[] for i in range(k)]
clusters,lable= euclidean(data, centroids, clusters)
# print(" The %d times cluster" % Iteration)
# print(clusters)
# recalculate centriods from exist cluster
index = 0
old_centroids = list(centroids);
# print(Iteration)
for cluster in clusters:
centroids[index] = np.mean(cluster, axis = 0).tolist()
index += 1
# for num in range(0,len(clusters)):
# for ld in clusters[num]:
# result_dict[str(ld)] = num
# print(centroids)
centroids_matrix = np.matrix(centroids)
# print(centroids_matrix)
# print(old_centroids)
old_centroids_matrix = np.matrix(old_centroids)
# print(old_centroids_matrix)
shift = squared_norm(old_centroids_matrix - centroids_matrix)
if shift <= tol:
# print("Already Coverage , break")
break
Iteration += 1 # End of innerLoop
return clusters, centroids, lable
开发者ID:chialingwang,项目名称:ML_SparsingModeling,代码行数:45,代码来源:myKmeans.py
示例11: temp_log_loss
def temp_log_loss(w, X, Y, alpha):
n_classes = Y.shape[1]
w = w.reshape(n_classes, -1)
intercept = w[:, -1]
w = w[:, :-1]
z = safe_sparse_dot(X, w.T) + intercept
denom = expit(z)
#print denom
#print denom.sum()
denom = denom.sum(axis=1).reshape((denom.shape[0], -1))
#print denom
p = log_logistic(z)
loss = - (Y * p).sum()
loss += np.log(denom).sum()
loss += 0.5 * alpha * squared_norm(w)
return loss
开发者ID:ftramer,项目名称:Steal-ML,代码行数:19,代码来源:utils.py
示例12: _multinomial_loss
def _multinomial_loss(w, X, Y, alpha):
sample_weight = np.ones(len(Y))
n_classes = Y.shape[1]
n_features = X.shape[1]
fit_intercept = w.size == (n_classes * (n_features + 1))
w = w.reshape(n_classes, -1)
sample_weight = sample_weight[:, np.newaxis]
if fit_intercept:
intercept = w[:, -1]
w = w[:, :-1]
else:
intercept = 0
p = safe_sparse_dot(X, w.T)
p += intercept
p -= logsumexp(p, axis=1)[:, np.newaxis]
loss = -(sample_weight * Y * p).sum()
loss += 0.5 * alpha * squared_norm(w)
p = np.exp(p, p)
return loss, p, w
开发者ID:cwjacklin,项目名称:Otto,代码行数:19,代码来源:NonnegLogisticRegression.py
示例13: _kmeans_single
def _kmeans_single(X, n_clusters, max_iter=300, init='k-means++', random_state=None, tol=1e-4):
random_state = check_random_state(random_state)
best_labels, best_inertia, best_centers = None, None, None
# init
x_squared_norms = row_norms(X, squared=True)
centers = _init_centroids(X, n_clusters, init, random_state, x_squared_norms=x_squared_norms)
# distances = np.zeros(shape=(X.shape[0],), dtype=np.float64)
# iterations
for i in range(max_iter):
centers_old = centers.copy()
# Assignment, also called E-step of EM
labels, inertia = _labels_inertia(X, x_squared_norms, centers)
# re-computation of the centroids, also called M-step of EM
centers = _centers(X, labels, n_clusters)
if best_inertia is None or inertia < best_inertia:
best_labels = labels.copy()
best_centers = centers.copy()
best_inertia = inertia
shift = squared_norm(centers_old - centers)
if shift <= tol:
break
if shift > 0:
# rerun E-step in case of non-convergence so that predicted labels
# match cluster centers
best_labels, best_inertia = \
_labels_inertia(X, x_squared_norms, best_centers)
return best_centers, best_labels, best_inertia
开发者ID:cyh24,项目名称:PySparkML,代码行数:37,代码来源:k_means_.py
示例14: enet_kernel_learning
def enet_kernel_learning(
K, y, lamda=0.01, beta=0.01, gamma='auto', max_iter=100, verbose=0,
tol=1e-4, return_n_iter=True):
"""Elastic Net kernel learning.
Solve the following problem via alternating minimisation:
min sum_{i=1}^p 1/2 ||alpha_i * w * K_i - y_i||^2 + lamda ||w||_1 +
+ beta||w||_2^2
"""
n_patients = len(K)
n_kernels = len(K[0])
coef = np.ones(n_kernels)
alpha = [np.zeros(K[j].shape[2]) for j in range(n_patients)]
# KKT = [K[j].T.dot(K[j]) for j in range(len(K))]
# print(KKT[0].shape)
if gamma == 'auto':
lipschitz_constant = np.array([
sum(np.linalg.norm(K_j[i].dot(K_j[i].T))
for i in range(K_j.shape[0]))
for K_j in K])
gamma = 1. / (lipschitz_constant)
objective_new = 0
for iteration_ in range(max_iter):
w_old = coef.copy()
alpha_old = [a.copy() for a in alpha]
objective_old = objective_new
# update w
A = [K[j].dot(alpha[j]) for j in range(n_patients)]
alpha_coef_K = [alpha[j].dot(K[j].T.dot(coef))
for j in range(n_patients)]
gradient = sum((alpha_coef_K[j] - y[j]).dot(A[j].T)
for j in range(n_patients))
# gradient_2 = coef.dot(sum(
# np.dot(K[j].dot(alpha[j]), K[j].dot(alpha[j]).T)
# for j in range(len(K)))) - sum(
# y[j].dot(K[j].dot(alpha[j]).T) for j in range(len(K)))
# gradient = coef.dot(sum(
# alpha[j].dot(KKT[j].dot(alpha[j])) for j in range(len(K)))) - sum(
# y[j].dot(K[j].dot(alpha[j]).T) for j in range(len(K)))
# gradient += 2 * beta * coef
coef = soft_thresholding(coef - gamma * gradient, lamda=lamda * gamma)
# update alpha
# for j in range(len(K)):
# alpha[j] = _solve_cholesky_kernel(
# K[j].T.dot(coef), y[j][..., None], lamda).ravel()
A = [K[j].T.dot(coef) for j in range(n_patients)]
alpha_coef_K = [alpha[j].dot(K[j].T.dot(coef))
for j in range(n_patients)]
gradient = [(alpha_coef_K[j] - y[j]).dot(A[j].T) + 2 * beta * alpha[j]
for j in range(n_patients)]
alpha = [alpha[j] - gamma * gradient[j] for j in range(n_patients)]
objective_new = objective(K, y, alpha, lamda, beta, coef)
objective_difference = abs(objective_new - objective_old)
snorm = np.sqrt(squared_norm(coef - w_old) + sum(
squared_norm(a - a_old) for a, a_old in zip(alpha, alpha_old)))
obj = objective(K, y, alpha, lamda, beta, coef)
if verbose and iteration_ % 10 == 0:
print("obj: %.4f, snorm: %.4f" % (obj, snorm))
if snorm < tol and objective_difference < tol:
break
if np.isnan(snorm) or np.isnan(objective_difference):
raise ValueError('assdgg')
else:
warnings.warn("Objective did not converge.")
return_list = [alpha, coef]
if return_n_iter:
return_list.append(iteration_)
return return_list
开发者ID:yvette-suyu,项目名称:about-ML,代码行数:80,代码来源:linear_model.py
示例15: objective_admm2
def objective_admm2(x, y, alpha, lamda, beta, w1):
"""Objective function for lasso kernel learning."""
obj = .5 * sum(squared_norm(x[j] - y[j]) for j in range(len(x)))
obj += lamda * np.abs(w1).sum()
obj += beta * sum(squared_norm(a) for a in alpha)
return obj
开发者ID:yvette-suyu,项目名称:about-ML,代码行数:6,代码来源:linear_model.py
示例16: enet_kernel_learning_admm2
def enet_kernel_learning_admm2(
K, y, lamda=0.01, beta=0.01, rho=1., max_iter=100, verbose=0, rtol=1e-4,
tol=1e-4, return_n_iter=True, update_rho_options=None):
"""Elastic Net kernel learning.
Solve the following problem via ADMM:
min sum_{i=1}^p 1/2 ||y_i - alpha_i * sum_{k=1}^{n_k} w_k * K_{ik}||^2
+ lamda ||w||_1 + beta sum_{j=1}^{c_i}||alpha_j||_2^2
"""
n_patients = len(K)
n_kernels = len(K[0])
coef = np.ones(n_kernels)
alpha = [np.zeros(K[j].shape[2]) for j in range(n_patients)]
u = [np.zeros(K[j].shape[1]) for j in range(n_patients)]
u_1 = np.zeros(n_kernels)
w_1 = np.zeros(n_kernels)
x_old = [np.zeros(K[0].shape[1]) for j in range(n_patients)]
w_1_old = w_1.copy()
# w_2_old = w_2.copy()
checks = []
for iteration_ in range(max_iter):
# update x
A = [K[j].T.dot(coef) for j in range(n_patients)]
x = [prox_laplacian(y[j] + rho * (A[j].T.dot(alpha[j]) - u[j]), rho / 2.)
for j in range(n_patients)]
# update alpha
# solve (AtA + 2I)^-1 (Aty) with A = wK
KK = [rho * A[j].dot(A[j].T) for j in range(n_patients)]
yy = [rho * A[j].dot(x[j] + u[j]) for j in range(n_patients)]
alpha = [_solve_cholesky_kernel(
KK[j], yy[j][..., None], 2 * beta).ravel() for j in range(n_patients)]
# equivalent to alpha_dot_K
# solve (sum(AtA) + 2*rho I)^-1 (sum(Aty) + rho(w1+w2-u1-u2))
# with A = K * alpha
A = [K[j].dot(alpha[j]) for j in range(n_patients)]
KK = sum(A[j].dot(A[j].T) for j in range(n_patients))
yy = sum(A[j].dot(x[j] + u[j]) for j in range(n_patients))
yy += w_1 - u_1
coef = _solve_cholesky_kernel(KK, yy[..., None], 1).ravel()
w_1 = soft_thresholding(coef + u_1, lamda / rho)
# w_2 = prox_laplacian(coef + u_2, beta / rho)
# update residuals
alpha_coef_K = [
alpha[j].dot(K[j].T.dot(coef)) for j in range(n_patients)]
residuals = [x[j] - alpha_coef_K[j] for j in range(n_patients)]
u = [u[j] + residuals[j] for j in range(n_patients)]
u_1 += coef - w_1
# diagnostics, reporting, termination checks
rnorm = np.sqrt(
squared_norm(coef - w_1) +
sum(squared_norm(residuals[j]) for j in range(n_patients)))
snorm = rho * np.sqrt(
squared_norm(w_1 - w_1_old) +
sum(squared_norm(x[j] - x_old[j]) for j in range(n_patients)))
obj = objective_admm2(x, y, alpha, lamda, beta, w_1)
check = convergence(
obj=obj, rnorm=rnorm, snorm=snorm,
e_pri=np.sqrt(coef.size + sum(
x[j].size for j in range(n_patients))) * tol + rtol * max(
np.sqrt(squared_norm(coef) + sum(squared_norm(
alpha_coef_K[j]) for j in range(n_patients))),
np.sqrt(squared_norm(w_1) + sum(squared_norm(
x[j]) for j in range(n_patients)))),
e_dual=np.sqrt(coef.size + sum(
x[j].size for j in range(n_patients))) * tol + rtol * rho * (
np.sqrt(squared_norm(u_1) + sum(squared_norm(
u[j]) for j in range(n_patients)))))
w_1_old = w_1.copy()
x_old = [x[j].copy() for j in range(n_patients)]
if verbose:
print("obj: %.4f, rnorm: %.4f, snorm: %.4f,"
"eps_pri: %.4f, eps_dual: %.4f" % check)
checks.append(check)
if check.rnorm <= check.e_pri and check.snorm <= check.e_dual and iteration_ > 1:
break
rho_new = update_rho(rho, rnorm, snorm, iteration=iteration_,
**(update_rho_options or {}))
# scaled dual variables should be also rescaled
u = [u[j] * (rho / rho_new) for j in range(n_patients)]
u_1 *= rho / rho_new
rho = rho_new
else:
warnings.warn("Objective did not converge.")
return_list = [alpha, coef]
if return_n_iter:
return_list.append(iteration_)
return return_list
开发者ID:yvette-suyu,项目名称:about-ML,代码行数:100,代码来源:linear_model.py
示例17: enet_kernel_learning_admm
def enet_kernel_learning_admm(
K, y, lamda=0.01, beta=0.01, rho=1., max_iter=100, verbose=0, rtol=1e-4,
tol=1e-4, return_n_iter=True, update_rho_options=None):
"""Elastic Net kernel learning.
Solve the following problem via ADMM:
min sum_{i=1}^p 1/2 ||alpha_i * w * K_i - y_i||^2 + lamda ||w||_1 +
+ beta||w||_2^2
"""
n_patients = len(K)
n_kernels = len(K[0])
coef = np.ones(n_kernels)
u_1 = np.zeros(n_kernels)
u_2 = np.zeros(n_kernels)
w_1 = np.zeros(n_kernels)
w_2 = np.zeros(n_kernels)
w_1_old = w_1.copy()
w_2_old = w_2.copy()
checks = []
for iteration_ in range(max_iter):
# update alpha
# solve (AtA + 2I)^-1 (Aty) with A = wK
A = [K[j].T.dot(coef) for j in range(n_patients)]
KK = [A[j].dot(A[j].T) for j in range(n_patients)]
yy = [y[j].dot(A[j]) for j in range(n_patients)]
alpha = [_solve_cholesky_kernel(
KK[j], yy[j][..., None], 2).ravel() for j in range(n_patients)]
# alpha = [_solve_cholesky_kernel(
# K_dot_coef[j], y[j][..., None], 0).ravel() for j in range(n_patients)]
w_1 = soft_thresholding(coef + u_1, lamda / rho)
w_2 = prox_laplacian(coef + u_2, beta / rho)
# equivalent to alpha_dot_K
# solve (sum(AtA) + 2*rho I)^-1 (sum(Aty) + rho(w1+w2-u1-u2))
# with A = K * alpha
A = [K[j].dot(alpha[j]) for j in range(n_patients)]
KK = sum(A[j].dot(A[j].T) for j in range(n_patients))
yy = sum(y[j].dot(A[j].T) for j in range(n_patients))
yy += rho * (w_1 + w_2 - u_1 - u_2)
coef = _solve_cholesky_kernel(KK, yy[..., None], 2 * rho).ravel()
# update residuals
u_1 += coef - w_1
u_2 += coef - w_2
# diagnostics, reporting, termination checks
rnorm = np.sqrt(squared_norm(coef - w_1) + squared_norm(coef - w_2))
snorm = rho * np.sqrt(
squared_norm(w_1 - w_1_old) + squared_norm(w_2 - w_2_old))
obj = objective_admm(K, y, alpha, lamda, beta, coef, w_1, w_2)
check = convergence(
obj=obj, rnorm=rnorm, snorm=snorm,
e_pri=np.sqrt(2 * coef.size) * tol + rtol * max(
np.sqrt(squared_norm(coef) + squared_norm(coef)),
np.sqrt(squared_norm(w_1) + squared_norm(w_2))),
e_dual=np.sqrt(2 * coef.size) * tol + rtol * rho * (
np.sqrt(squared_norm(u_1) + squared_norm(u_2))))
w_1_old = w_1.copy()
w_2_old = w_2.copy()
if verbose:
print("obj: %.4f, rnorm: %.4f, snorm: %.4f,"
"eps_pri: %.4f, eps_dual: %.4f" % check)
checks.append(check)
if check.rnorm <= check.e_pri and check.snorm <= check.e_dual and iteration_ > 1:
break
rho_new = update_rho(rho, rnorm, snorm, iteration=iteration_,
**(update_rho_options or {}))
# scaled dual variables should be also rescaled
u_1 *= rho / rho_new
u_2 *= rho / rho_new
rho = rho_new
else:
warnings.warn("Objective did not converge.")
return_list = [alpha, coef]
if return_n_iter:
return_list.append(iteration_)
return return_list
开发者ID:yvette-suyu,项目名称:about-ML,代码行数:89,代码来源:linear_model.py
示例18: _norm
def _norm(x):
"""Dot product-based Euclidean norm implementation
See: http://fseoane.net/blog/2011/computing-the-vector-norm/
"""
return np.sqrt(squared_norm(x))
开发者ID:AlexisMignon,项目名称:scikit-learn,代码行数:5,代码来源:bench_plot_nmf.py
示例19: norm
def norm(x):
return sqrt(squared_norm(x))
开发者ID:tripleday,项目名称:sparse_NMF,代码行数:2,代码来源:SVD_test.py
示例20: _spherical_kmeans_single_lloyd
def _spherical_kmeans_single_lloyd(X, n_clusters, max_iter=300,
init='k-means++', verbose=False,
x_squared_norms=None,
random_state=None, tol=1e-4,
precompute_distances=True):
'''
Modified from sklearn.cluster.k_means_.k_means_single_lloyd.
'''
random_state = check_random_state(random_state)
best_labels, best_inertia, best_centers = None, None, None
# init
centers = _init_centroids(X, n_clusters, init, random_state=random_state,
x_squared_norms=x_squared_norms)
if verbose:
print("Initialization complete")
# Allocate memory to store the distances for each sample to its
# closer center for reallocation in case of ties
distances = np.zeros(shape=(X.shape[0],), dtype=X.dtype)
# iterations
for i in range(max_iter):
centers_old = centers.copy()
# labels assignment
# TODO: _labels_inertia should be done with cosine distance
# since ||a - b|| = 2(1 - cos(a,b)) when a,b are unit normalized
# this doesn't really matter.
labels, inertia = \
_labels_inertia(X, x_squared_norms, centers,
precompute_distances=precompute_distances,
distances=distances)
# computation of the means
if sp.issparse(X):
centers = _k_means._centers_sparse(X, labels, n_clusters,
distances)
else:
centers = _k_means._centers_dense(X, labels, n_clusters, distances)
# l2-normalize centers (this is the main contibution here)
centers = normalize(centers)
if verbose:
print("Iteration %2d, inertia %.3f" % (i, inertia))
if best_inertia is None or inertia < best_inertia:
best_labels = labels.copy()
best_centers = centers.copy()
best_inertia = inertia
center_shift_total = squared_norm(centers_old - centers)
if center_shift_total <= tol:
if verbose:
print("Converged at iteration %d: "
"center shift %e within tolerance %e"
% (i, center_shift_total, tol))
break
if center_shift_total > 0:
# rerun E-step in case of non-convergence so that predicted labels
# match cluster centers
best_labels, best_inertia = \
_labels_inertia(X, x_squared_norms, best_centers,
precompute_distances=precompute_distances,
distances=distances)
return best_labels, best_inertia, best_centers, i + 1
开发者ID:liuenda,项目名称:bigram-comparing,代码行数:70,代码来源:spherical_kmeans.py
注:本文中的sklearn.utils.extmath.squared_norm函数示例由纯净天空整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。 |
请发表评论