SVM对鸢尾花数据集分类

import numpy as np
from sklearn import svm, datasets #svm 数据集
from sklearn.model_selection import train_test_split #划分数据集

from sklearn.multiclass import OneVsRestClassifier
# 将最后概率输出变换成one_hot
def y_handle(r_y):
    j = 0
    for i in np.argmax(r_y, axis=1):
        r_y[j, :] = 0
        r_y[j, i] = 1
        j += 1
    return r_y
# 求出精确度
def accuracy(acts, pres):
    acc = 0
    for i in range(acts.shape[0]):
        for j in range(acts.shape[1]):
            if acts[i, j] == pres[i, j]:
                if j == (acts.shape[1] - 1):
                    acc += 1
            else:
                break

    acc = acc / acts.shape[0]

    return acc
# 对y进行二值化处理
def y_init(y):
    Y = y
    y_set = set(y)
    y = np.array([y] * len(y_set))
    j = 0
    for i in y_set:
        y[j][np.where(Y == i)] = 1
        y[j][np.where(Y != i)] = 0
        j += 1
        pass
    y = y.T
    return y

iris = datasets.load_iris()
X = iris.data
y = iris.target
# 将标签二值化

y = y_init(y)

# 设置种类
n_classes = y.shape[1]

# 训练模型并预测
random_state = np.random.RandomState(0)
n_samples, n_features = X.shape

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3,random_state=random_state)


classifier = OneVsRestClassifier(svm.SVC(kernel='linear', probability=True,
                                 random_state=random_state))            #一对多
y_score = classifier.fit(X_train, y_train).decision_function(X_test)
pre_y = y_handle(y_score)
acc = accuracy(y_test,y_score)
print("精确度:",acc)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值