[关闭]
@cww97 2017-10-30T16:07:07.000000Z 字数 1974 阅读 906

assignment5: svm & ktt条件

机器学习


陈伟文 10152510217

于从秦皇岛回上海的高铁上

svm

这次作业第一部分,import一个svm,然后弄个数据,test一下svm的性能

使用了前几次作业一直用的红酒数据,按照惯例,原数据quality是$[0,10)\$的,为了偷懒方便,把他二值化一下,然后直接sum(abs)一通操作求准确率,很方便。前面11维度是数据,后面是酒的quality

听说彭先生安装sklearn费了老大功夫,诶,现成的anoconda不用实在是太妙chun了太妙chun了。

这次作业相对于上次的码量,简直是天堂地狱好吗,几行解决战斗,不知该干嘛分几个核函数试试效果

前面四分之三当训练数据,后面四分之一为测试数据

  1. # the first 11 dimesion is data, then is label
  2. ATTR_DIM = 11
  3. def svm_go():
  4. clf_rbf = svm.SVC(kernel='rbf')
  5. clf_lin = svm.SVC(kernel='linear')
  6. clf_sig = svm.SVC(kernel='sigmoid')
  7. lines = open('wine.csv').readlines()
  8. raw = np.zeros([len(lines), ATTR_DIM + 1])
  9. for idx, line in enumerate(lines):
  10. this_line = np.array(line.split(';'), np.float32)
  11. raw[idx] = this_line
  12. raw[idx][ATTR_DIM] = 1 if raw[idx][ATTR_DIM] > 5 else 0 # 二值化
  13. print(raw)
  14. np.random.shuffle(raw)
  15. train_count = len(lines) * 3 // 4
  16. train, test = np.transpose(raw[0:train_count]), np.transpose(raw[train_count:])
  17. data_train, label_train = np.transpose(train[0:ATTR_DIM]), np.array(train[ATTR_DIM], np.int32)
  18. data_test, label_test = np.transpose(test[0:ATTR_DIM]), np.array(test[ATTR_DIM], np.int32)
  19. clf_rbf.fit(data_train, label_train)
  20. res_rbf = int(np.sum(np.abs(label_test - clf_rbf.predict(data_test))))
  21. clf_lin.fit(data_train, label_train)
  22. res_lin = int(np.sum(np.abs(label_test - clf_lin.predict(data_test))))
  23. clf_sig.fit(data_train, label_train)
  24. res_sig = int(np.sum(np.abs(label_test - clf_sig.predict(data_test))))
  25. total = len(label_test)
  26. print('with kernel function RBF : accuracy = %.2f%%' % ((total - res_rbf) * 100 / total))
  27. print('with kernel function linear: accuracy = %.2f%%' % ((total - res_lin) * 100 / total))
  28. print('with kernel function Sigmoid:accuracy = %.2f%%' % ((total - res_sig) * 100 / total))

output

with kernel function RBF :   accuracy = 70.25%
with kernel function linear: accuracy = 76.25%
with kernel function Sigmoid:accuracy = 56.50%

心态崩了,心态崩了,正确率很难令人满意

2017年10月30日

ktt条件

(本段几wan乎quan看不懂,看了大量ktt条件的blog,依然有些懵逼)

非等式约束写成拉格朗日乘子式,取最优解要满足两个条件

所以得到完整KT条件

对所有的i

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注