半监督学习——LabelSpreading

模型原型

class sklearn.semi_supervised.LabelSpreading(kernel=’rbf’,gamma=20,n_neighbors=7,alpha=0.2,max_iter=30,tol=0.001)
参数

  • kernel
  • gamma
  • n_neighbors
  • alpha
  • max_iter
  • tol

属性

  • X_
  • classes_
  • labeldistributions
  • transduction_
  • niter

方法

  • fit(X,y)
  • predict(X)
  • predict_proba(X)
  • score(X,y[,sample_weight])
import numpy as np
import matplotlib.pyplot as plt
from sklearn import metrics
from sklearn import datasets
from sklearn.semi_supervised import LabelSpreading

加载数据集

def load_data():
    digits=datasets.load_digits()
    #混洗样本
    rng=np.random.RandomState(0)
    indices=np.arange(len(digits.data))
    rng.shuffle(indices)
    X=digits.data[indices]
    y=digits.target[indices]
    #生成未标记样本的下标集合
    n_labeled_points=int(len(y)/10)
    unlabeled_indices=np.arange(len(y))[n_labeled_points:]
    return X,y,unlabeled_indices

使用test_LabelSpreading类

def test_LabelSpreading(*data):
    X,y,unlabeled_indices=data
    y_train=np.copy(y)
    y_train[unlabeled_indices]=-1
    clf=LabelSpreading(max_iter=100,kernel='rbf',gamma=0.1)
    clf.fit(X,y_train)

    #获取预测准确率
    predicted_labels=clf.transduction_[unlabeled_indices]
    true_labels=y[unlabeled_indices]
    print('Accuracy:%f'%metrics.accuracy_score(true_labels,
        predicted_labels))

data=load_data()
test_LabelSpreading(*data)

折中系数alpha以及gamma参数对rbf核的影响

def test_LabelSpreading_rbf(*data):
    X,y,unlabeled_indices=data
    y_train=np.copy(y)
    y_train[unlabeled_indices]=-1

    fig=plt.figure()
    ax=fig.add_subplot(1,1,1)
    alphas=np.linspace(0.01,0.99,num=10,endpoint=True)
    gammas=np.logspace(-2,2,num=50)
    colors=((1,0,0),(0,1,0),(0,0,1),(0.5,0.5,0),(0,0.5,0.5),
        (0.5,0,0.5),(0.4,0.6,0),(0.6,0.4,0),(0,0.6,0.4),(0.5,0.3,0.2),)
    #训练并绘图
    for alpha,color in zip(alphas,colors):
        scores=[]
        for gamma in gammas:
            clf=LabelSpreading(max_iter=100,gamma=gamma,
                alpha=alpha,kernel='rbf')
            clf.fit(X,y_train)
            scores.append(clf.score(X[unlabeled_indices],
                y[unlabeled_indices]))
        ax.plot(gammas,scores,label=r"$\alpha=%s$"%alpha,color=color)

    #设置图形
    ax.set_xlabel(r'$\gamma$')
    ax.set_ylabel('score')
    ax.set_xscale('log')
    ax.legend(loc='best')
    ax.set_title('LabelSpreading rbf kernel')
    plt.show()

test_LabelSpreading_rbf(*data)

折中系数alpha以及n_neighbors参数对knn核的影响

def test_LabelSpreading_knn(*data):
    X,y,unlabeled_indices=data
    y_train=np.copy(y)
    y_train[unlabeled_indices]=-1

    fig=plt.figure()
    ax=fig.add_subplot(1,1,1)
    alphas=np.linspace(0.01,0.99,num=10,endpoint=True)
    Ks=[1,2,3,4,5,8,10,15,20,25,30,35,40,50]
    colors=((1,0,0),(0,1,0),(0,0,1),(0.5,0.5,0),(0,0.5,0.5),
        (0.5,0,0.5),(0.4,0.6,0),(0.6,0.4,0),(0,0.6,0.4),(0.5,0.3,0.2),)

    #训练并绘图
    for alpha,color in zip(alphas,colors):
        scores=[]
        for K in Ks:
            clf=LabelSpreading(max_iter=100,n_neighbors=K,
                alpha=alpha,kernel='knn')
            clf.fit(X,y_train)
            scores.append(clf.score(X[unlabeled_indices],
                y[unlabeled_indices]))
        ax.plot(Ks,scores,label=r"$\alpha=%s$"%alpha,color=color)
    #设置图形
    ax.set_xlabel(r'$k$')
    ax.set_ylabel('score')
    ax.legend(loc='best')
    ax.set_title('LabelSpreading knn kernel')
    plt.show()

test_LabelSpreading_knn(*data)
  • 0
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值