특성 선택의 도구로 활용되는 L1 규제는 결과적으로 데이터셋에 관련이 적은 특성이 있더라도 견고한 모델을 만들어 줍니다. 엄밀히 말하면 앞 예제에서 가중치 벡터는 0이 아닌 원소가 더 많기 때문에 꼭 희소하지 않습니다. 규제 강도를 높여 희소성을 더 강하게 할 수 있습니다(0인 원소가 더 많아집니다). 다시 말하면 매개변수 C 값을 낮춥니다.

    규제에 관한 이 장 마지막 예제로 규제 강도를 달리하여 특성의 가중치 변화를 그래프로 그려 보겠습니다.

    >>> import matplotlib.pyplot as plt
    
    >>> fig = plt.figure()
    >>> ax = plt.subplot(111)
    
    >>> colors = ['blue', 'green', 'red', 'cyan',
    ...           'magenta', 'yellow', 'black',
    ...           'pink', 'lightgreen', 'lightblue',
    ...           'gray', 'indigo', 'orange']
    >>> weights, params = [], []
    >>> for c in np.arange(-4., 6.):
    ...     lr = LogisticRegression(solver='liblinear',
    ...                             penalty='l1', C=10.**c,
    ...                             random_state=0)
    ...     lr.fit(X_train_std, y_train)
    ...     weights.append(lr.coef_[1])
    ...     params.append(10**c)
    
    >>> weights = np.array(weights)
    
    >>> for column, color in zip(range(weights.shape[1]), colors):
    ...     plt.plot(params, weights[:, column],
    ...              label=df_wine.columns[column + 1],
    ...              color=color)
    >>> plt.axhline(0, color='black', linestyle='--', linewidth=3)
    >>> plt.xlim([10**(-5), 10**5])
    >>> plt.ylabel('weight coefficient')
    >>> plt.xlabel('C')
    >>> plt.xscale('log')
    >>> plt.legend(loc='upper left')
    >>> ax.legend(loc='upper center',
    ...           bbox_to_anchor=(1.38, 1.03),
    ...           ncol=1, fancybox=True)
    >>> plt.show()
    신간 소식 구독하기
    뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.