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)