头歌实践平台:机器学习——支持向量回归
头歌实践平台:机器学习——支持向量回归
第1关:线性可分支持向量机
第2关:线性支持向量机
第3关:非线性支持向量机
第4关:序列最小优化算法
第5关:支持向量回归
提示:以下答案可供参考
第1关
1. B、黑线
2. B、0.4
3. C、3x+2y=0
4. B、样本y到超平面的距离为3
5. D、-x+y+1=0
6. AC
第2关
线性支持向量机:
#encoding=utf8 from sklearn.svm import LinearSVC def linearsvc_predict(train_data,train_label,test_data): ''' input:train_data(ndarray):训练数据 train_label(ndarray):训练标签 output:predict(ndarray):测试集预测标签 ''' #********* Begin *********# clf = LinearSVC(dual=False) clf.fit(train_data,train_label) predict = clf.predict(test_data) #********* End *********# return predict
c
运行
123456789101112131415第3关
非线性支持向量机:
#encoding=utf8 from sklearn.svm import SVC def svc_predict(train_data,train_label,test_data,kernel): ''' input:train_data(ndarray):训练数据 train_label(ndarray):训练标签 kernel(str):使用核函数类型: 'linear':线性核函数 'poly':多项式核函数 'rbf':径像核函数/高斯核 output:predict(ndarray):测试集预测标签 ''' #********* Begin *********# clf =SVC(kernel=kernel) clf.fit(train_data,train_label) predict = clf.predict(test_data) #********* End *********# return predict
c
运行
12345678910111213141516171819第4关
序列最小优化算法:
#encoding=utf8 import numpy as np class smo: def __init__(self, max_iter=100, kernel='linear'): ''' input:max_iter(int):最大训练轮数 kernel(str):核函数,等于'linear'表示线性,等于'poly'表示多项式 ''' self.max_iter = max_iter self._kernel = kernel #初始化模型 def init_args(self, features, labels): self.m, self.n = features.shape self.X = features self.Y = labels self.b = 0.0 # 将Ei保存在一个列表里 self.alpha = np.ones(self.m) self.E = [self._E(i) for i in range(self.m)] # 错误惩罚参数 self.C = 1.0 #********* Begin *********# #kkt条件 def _KKT(self, i): y_g = self._g(i)*self.Y[i] if self.alpha[i] == 0: return y_g >= 1 elif 0 < self.alpha[i] < self.C: return y_g == 1 else: return y_g <= 1 # g(x)预测值,输入xi(X[i]) def _g(self, i): r = self.b for j in range(self.m): r += self.alpha[j]*self.Y[j]*self.kernel(self.X[i], self.X[j]) return r # 核函数,多项式添加二次项即可 def kernel(self, x1, x2): if self._kernel == 'linear': return sum([x1[k]*x2[k] for k in range(self.n)]) elif self._kernel == 'poly': return (sum([x1[k]*x2[k] for k in range(self.n)]) + 1)**2 return 0 # E(x)为g(x)对输入x的预测值和y的差 def _E(self, i): return self._g(i) - self.Y[i] #初始alpha def _init_alpha(self): # 外层循环首先遍历所有满足0<a<C的样本点,检验是否满足KKT index_list = [i for i in range(self.m) if 0 < self.alpha[i] < self.C] # 否则遍历整个训练集 non_satisfy_list = [i for i in range(self.m) if i not in index_list] index_list.extend(non_satisfy_list) for i in index_list: if self._KKT(i): continue E1 = self.E[i] # 如果E2是+,选择最小的;如果E2是负的,选择最大的 if E1 >= 0: j = min(range(self.m), key=lambda x: self.E[x]) else: j = max(range(self.m), key=lambda x: self.E[x]) return i, j #选择alpha参数 def _compare(self, _alpha, L, H): if _alpha > H: return H elif _alpha < L: return L else: return _alpha #训练 def fit(self, features, labels): ''' input:features(ndarray):特征 label(ndarray):标签 ''' self.init_args(features, labels) for t in range(self.max_iter): i1, i2 = self._init_alpha() # 边界 if self.Y[i1] == self.Y[i2]: L = max(0, self.alpha[i1]+self.alpha[i2]-self.C) H = min(self.C, self.alpha[i1]+self.alpha[i2]) else: L = max(0, self.alpha[i2]-self.alpha[i1]) H = min(self.C, self.C+self.alpha[i2]-self.alpha[i1]) E1 = self.E[i1] E2 = self.E[i2] # eta=K11+K22-2K12 eta = self.kernel(self.X[i1], self.X[i1]) + self.kernel(self.X[i2], self.X[i2]) - 2*self.kernel(self.X[i1], self.X[i2]) if eta <= 0: continue alpha2_new_unc = self.alpha[i2] + self.Y[i2] * (E2 - E1) / eta alpha2_new = self._compare(alpha2_new_unc, L, H) alpha1_new = self.alpha[i1] + self.Y[i1] * self.Y[i2] * (self.alpha[i2] - alpha2_new) b1_new = -E1 - self.Y[i1] * self.kernel(self.X[i1], self.X[i1]) * (alpha1_new-self.alpha[i1]) - self.Y[i2] * self.kernel(self.X[i2], self.X[i1]) * (alpha2_new-self.alpha[i2])+ self.b b2_new = -E2 - self.Y[i1] * self.kernel(self.X[i1], self.X[i2]) * (alpha1_new-self.alpha[i1]) - self.Y[i2] * self.kernel(self.X[i2], self.X[i2]) * (alpha2_new-self.alpha[i2])+ self.b if 0 < alpha1_new < self.C: b_new = b1_new elif 0 < alpha2_new < self.C: b_new = b2_new else: # 选择中点 b_new = (b1_new + b2_new) / 2 # 更新参数 self.alpha[i1] = alpha1_new self.alpha[i2] = alpha2_new self.b = b_new self.E[i1] = self._E(i1) self.E[i2] = self._E(i2) def predict(self, data): ''' input:data(ndarray):单个样本 output:预测为正样本返回+1,负样本返回-1 ''' r = self.b for i in range(self.m): r += self.alpha[i] * self.Y[i] * self.kernel(data, self.X[i]) return 1 if r > 0 else -1 #********* End *********#
c
运行
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122第5关
支持向量回归:
#encoding=utf8 from sklearn.svm import SVR def svr_predict(train_data,train_label,test_data): ''' input:train_data(ndarray):训练数据 train_label(ndarray):训练标签 output:predict(ndarray):测试集预测标签 ''' #********* Begin *********# svr = SVR(kernel='rbf',C=100,gamma= 0.001,epsilon=0.1) svr.fit(train_data,train_label) predict = svr.predict(test_data) #********* End *********# return predict
c
运行
1234567891011121314151617相关知识
机器学习实践:基于支持向量机算法对鸢尾花进行分类
鸢尾花数据集深度分析:机器学习的入门实践
SVM支持向量机分类鸢尾花数据集iris及代码:精准分类,助力机器学习入门
sklearn机器学习支持向量机案例解析
【CDA干货】鸢尾花判别分析:机器学习中的经典实践案例
MATLAB实现鸢尾花数据集的支持向量机(SVM)分类
机器学习术语表
推进土壤健康监测:利用基于微生物组的机器学习提升农业可持续性
探索MATLAB支持向量机分类:从入门到精通
程序员面试、算法研究、机器学习、大模型/ChatGPT/AIGC、论文审稿、具身智能、RAG等11大系列集锦
网址: 头歌实践平台:机器学习——支持向量回归 https://www.huajiangbk.com/newsview2508862.html
| 上一篇: 基于SVM的鸢尾花数据集回归分析 |
下一篇: 利用随机森林,斯朴素贝叶斯,支持 |
推荐分享
- 1君子兰什么品种最名贵 十大名 4012
- 2世界上最名贵的10种兰花图片 3364
- 3花圈挽联怎么写? 3286
- 4迷信说家里不能放假花 家里摆 1878
- 5香山红叶什么时候红 1493
- 6花的意思,花的解释,花的拼音 1210
- 7教师节送什么花最合适 1167
- 8勿忘我花图片 1103
- 9橄榄枝的象征意义 1093
- 10洛阳的市花 1039
