用的数据集是uci机器学习库的数据 ‘iris.data’
from sklearn import svm
import csv
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score
from sklearn.metrics import confusion_matrix
from sklearn.metrics import classification_report
from sklearn.preprocessing import StandardScaler
import numpy as np
def change(s):
#就是这一句话。。。。哎,以后发现类型判断错误,可以看看type的类别
bs = str(s, encoding="utf8")
if(bs=='Iris-virginica'):
return 2
elif (bs == 'Iris-setosa'):
return 0
elif (bs == 'Iris-versicolor'):
return 1
tezheng=[]#用来存放特征的东西
cate=[]#用来存放结果
path = 'iris.data'
data=np.loadtxt(path, dtype=float, delimiter=',',converters={4: change})
#遍历
for content in data:
#这句话非常的重要,将content转为list,才能正确放入到数据中
content=list(content)
#将前四个特征存入tezheng中,最后一列的=存入cate结果集中
tezheng.append(content[0:4])
cate.append(content[-1])
#建立xvm的模型
# 标准化sca转换
scaler = StandardScaler()
# 训练标准化对象
scaler.fit(tezheng)
# 转换数据集,一般是归一化处理
traffic_feature= scaler.transform(tezheng)
#分割测试集和训练集
feature_train, feature_test, target_train, target_test = train_test_split(traffic_feature, cate, test_size=0.4,random_state=1)
#svc分类器进行一个参数的设置
clf = svm.SVC(C=1, kernel='rbf', gamma=20, decision_function_shape='ovr')
# clf = svm.SVC(C=0.1, kernel='linear', decision_function_shape='ovr')
#将训练数据放到里面,到这一步的时候 suv已经完成了
clf.fit(feature_train,target_train)
#这边是开始预测了,输入的测试集
predict_results=clf.predict(feature_test)
#预测结果和原来结果进行的一个对比
print(accuracy_score(predict_results, target_test))
#参数结果 包括准确率 召回率 f1
print(classification_report(target_test, predict_results))
0.8
precision recall f1-score support
0.0 1.00 0.68 0.81 19
1.0 0.94 0.76 0.84 21
2.0 0.63 0.95 0.76 20
micro avg 0.80 0.80 0.80 60
macro avg 0.86 0.80 0.80 60
weighted avg 0.86 0.80 0.81 60
Process finished with exit code 0