11、基于多任务Lasso的联合特征选择

11、基于多任务Lasso的联合特征选择

import matplotlib.pyplot as plt

import numpy as np

from sklearn.linear_model import MultiTaskLasso, Lasso

plt.rcParams['font.sans-serif'] = ['SimHei']

plt.rcParams['axes.unicode_minus'] = False

rng = np.random.RandomState(42)

# 用随机频率和相位的正弦波生成二维系数

n_samples, n_features, n_tasks = 100, 30, 40

n_relevant_features = 5

coef = np.zeros((n_tasks, n_features))

times = np.linspace(0, 2 * np.pi, n_tasks)

for k in range(n_relevant_features):

    coef[:, k] = np.sin((1. + rng.randn(1)) * times + 3 * rng.randn(1))

X = rng.randn(n_samples, n_features)

Y = np.dot(X, coef.T) + rng.randn(n_samples, n_tasks)

coef_lasso_ = np.array([Lasso(alpha=0.5).fit(X, y).coef_ for y in Y.T])

coef_multi_task_lasso_ = MultiTaskLasso(alpha=1.).fit(X, Y).coef_

fig = plt.figure(figsize=(8, 5))

plt.subplot(1, 2, 1)

plt.spy(coef_lasso_)

plt.xlabel('Feature')

plt.ylabel('Time (or Task)')

plt.text(10, 5, 'Lasso')

plt.subplot(1, 2, 2)

plt.spy(coef_multi_task_lasso_)

plt.xlabel('Feature')

plt.ylabel('Time (or Task)')

plt.text(10, 5, 'MultiTaskLasso')

fig.suptitle('Coefficient non-zero location')

feature_to_plot = 0

plt.figure()

lw = 2

plt.plot(coef[:, feature_to_plot], color='seagreen', linewidth=lw,

        label='Ground truth')

plt.plot(coef_lasso_[:, feature_to_plot], color='cornflowerblue', linewidth=lw,

        label='Lasso')

plt.plot(coef_multi_task_lasso_[:, feature_to_plot], color='gold', linewidth=lw,

        label='MultiTaskLasso')

plt.legend(loc='upper center')

plt.axis('tight')

plt.ylim([-1.1, 1.1])

plt.title("基于多任务Lasso的联合特征选择")

plt.show()


你可能感兴趣的:(11、基于多任务Lasso的联合特征选择)