【玩点有趣的】这几篇SVM介绍是从0到1慢慢学会支持向量机,将是满满的干货,都是我亲自写的,可以随我一起从头了解SVM,并在短期内能使用SVM做到想要的分类或者预测~我也将附上自己基础训练的完整代码,可以直接跑,建议同我一样初学者们,自己从头到尾打一遍,找找手感,代码不能光看看,实践出真知! 回顾一下,上上篇,我们建立和比较了线性分类器和非线性分类器,比较了多元线性核函数和线性核函数,解决了类型数量不平衡问题,上篇,我们使用SVC做了简单的分类,话不多说,今天我们开始SVR做回归预测,原理篇和实战基础一 请参见上几篇博客,我们循序渐进慢慢贴近真实情景!解决生活问题 首先做一个比较有趣的应用,我们使用了SVR来预测:在洛杉矶棒球队进行主场比赛期间,体育场周边马路通过的汽车数量 如图: 这里一万七千条记录数据,分别表示:星期,时间,对手球队名,比赛是否正在进行,通过汽车的数量 【完整代码】上代码: 解说一下: 使用文件操作逐行读取并使用spilt通过逗号分割得出最后一列的数据(汽车通行量)append进到数组X中,构成我们的初始数据, 再通过sklearn.preprocessing.LabelEncoder()进行标准化标签,将标签值统一转换成range(标签值个数-1)范围内 ,最后使用fit_transform(X[:, i])进行fit和transform转换成计算机可读的数字(矩阵)形式: 看看结果: 可以看出:每行每列,带有英文的字符也被清洗成了数字,这其中是有逻辑含义的,可以用过查看源码明白。同样的也可以通过Pandas实现上述操作。然后我们使用切片操作分割出label和X 后续就是使用SVR构建预测器,然后“喂它数据”: 最后我们直接看结果 这是这个情况下的预测汽车数量,[‘Tuesday’, ‘13:35’, ‘San Francisco’, ‘yes’] Predicted traffic =29 [‘Thursday’, ‘23:10’, ‘Arizona’, ‘no’]下: Predicted traffic =14 我们来看一下这几个判别情况: mean squared error= 106.94 介绍一下: 建立回归器后,需要建立评价回归器拟合效果的指标模型。 平均误差(mean absolute error):这是给定数据集的所有数据点的绝对误差平均值 均方误差(mean squared error):给定数据集的所有数据点的误差的平方的平均值,最流行 中位数绝对误差(mean absolute error):给定数据集的所有数据点的误差的中位数,可以消除异常值的干扰 解释方差分(explained variance score):用于衡量我们的模型对数据集波动的解释能力,如果得分为1.0,表明我们的模型是完美的。 R方得分(R2 score):读作R方,指确定性相关系数,用于衡量模型对未知样本预测的效果,最好的得分为1.0,值也可以是负数。 通常情况下,尽量保证均方误差最低,而且解释方差分最高。 可以看到,我们使用的这个SVR回归器不是那么完美,甚至误差有一些。 昨天也跟朋友有提高过: 那么我们的SVR回归器的这个误差当然是难以容忍的,我们来分析一下原因: 一:参数误差:没有通过网格搜索或者k折交叉验证,贝叶斯优化调整超参数,svr的参数误差很大,不同的参数,差别十万八千里。 二:原始数据标准化过程:transform问题,或者未归一化, 三:SVR容易欠拟合 这些都是待改进问题。 (资料来源百度,后期我们会把常用的算法介绍,并且实战(实战是理论的体现,两者结合才会绽放绚丽光芒)) 优点:简单快速,团状效果好,O(nkt),通常局部收敛 缺点:需要指定k,初始值敏感,需要指定距离定义/中心定义,数据形状敏感(比如密度形状的用DBSCAN,比如流形学习),对outlier敏感。 这是我们的SVM第四期文章了,已经大致明白了他的原理和基本用法,我们使用了sklearn对SVM的封装,也使用了numpy对SVM的复现,还可以使用libsvm和opencv对svm的封装。接下来我们结合计算机视觉做有趣的实验,先卖个关子(关注博主,下期继续),上图! 这是帮朋友做的毕业设计,其中有一些bug需要修复,一些问题,需要优化,并且,代码不是我写的,朋友给我的。我帮助他跑起来,并且现在开始帮助他修改,优化代码,学C++,推荐算法去了,关注博主,敬请期待! 上海第二工业大学智能科学与技术大二 周小夏(CV调包侠)
估算交通流量
import numpy as np from sklearn import preprocessing from sklearn.svm import SVR input_file = 'traffic_data.txt' X = [] count = 0 with open(input_file, 'r') as f: for line in f.readlines(): data = line[:-1].split(',') X.append(data) X = np.array(X) label_encoder = [] X_encoded = np.empty(X.shape) for i, item in enumerate(X[0]): if item.isdigit(): X_encoded[:, i] = X[:, i] else: label_encoder.append(preprocessing.LabelEncoder()) X_encoded[:, i] = label_encoder[-1].fit_transform(X[:, i]) X = X_encoded[:, :-1].astype(int) y = X_encoded[:, -1].astype(int) params = {'kernel': 'rbf', 'C': 10.0, 'epsilon': 0.2} regressor = SVR(**params) regressor.fit(X, y) import sklearn.metrics as sm y_pred = regressor.predict(X) print("Mean absolute error =", round(sm.mean_absolute_error(y, y_pred), 2)) print('mean squared error=',round(sm.mean_squared_error(y, y_pred),2)) print('median absolute error=',round(sm.median_absolute_error(y, y_pred),2)) print('explained variance score=',round(sm.explained_variance_score(y, y_pred),2)) print('R2 score=',round(sm.r2_score(y, y_pred),2)) input_data = ['Tuesday', '13:35', 'San Francisco', 'yes'] input_data_encoded = [-1] * len(input_data) count = 0 for i, item in enumerate(input_data): if item.isdigit(): input_data_encoded[i] = int(input_data[i]) else: input_data_encoded[i] = int(label_encoder[count].transform([input_data[i]])) count = count + 1 input_data_encoded = np.array(input_data_encoded) print("Predicted traffic:", int(regressor.predict([input_data_encoded])[0]))
X = [] count = 0 with open(input_file, 'r') as f: for line in f.readlines(): data = line[:-1].split(',') X.append(data) X = np.array(X)
【数据预处理】代码如下label_encoder = [] X_encoded = np.empty(X.shape) for i, item in enumerate(X[0]): if item.isdigit(): X_encoded[:, i] = X[:, i] else: label_encoder.append(preprocessing.LabelEncoder()) X_encoded[:, i] = label_encoder[-1].fit_transform(X[:, i]) print('标准化操作(数据预处理)n', X_encoded) X = X_encoded[:, :-1].astype(int) y = X_encoded[:, -1].astype(int) print('影响结果的各个维度:n', X) print('Label:n', y)
params = {'kernel': 'rbf', 'C': 10.0, 'epsilon': 0.2} regressor = SVR(**params) regressor.fit(X, y) import sklearn.metrics as sm y_pred = regressor.predict(X) print("Mean absolute error =", round(sm.mean_absolute_error(y, y_pred), 2)) print('mean squared error=',round(sm.mean_squared_error(y, y_pred),2)) print('median absolute error=',round(sm.median_absolute_error(y, y_pred),2)) print('explained variance score=',round(sm.explained_variance_score(y, y_pred),2)) print('R2 score=',round(sm.r2_score(y, y_pred),2)) input_data = ['Tuesday', '13:35', 'San Francisco', 'yes'] input_data_encoded = [-1] * len(input_data) count = 0 for i, item in enumerate(input_data): if item.isdigit(): input_data_encoded[i] = int(input_data[i]) else: input_data_encoded[i] = int(label_encoder[count].transform([input_data[i]])) count = count + 1 input_data_encoded = np.array(input_data_encoded) print("Predicted traffic:", int(regressor.predict([input_data_encoded])[0]))
Mean absolute error =7.28
median absolute error= 4.91
explained variance score= 0.47
R2 score= 0.47
机器学习算法和平常的数据结构与算法的区别:通俗的说,前者注重accuracy,recall,precision,F1_score,后者注重时间复杂度和空间复杂度,下面我们比较一下常用的回归与分类算法:
一、朴素贝叶斯
二、决策树
三、logistic
四、线性拟合(LSM/Ridge/Lasso)
五、kNN
六、SVM
七、Adaboost
八、Random Forest
九、xgboost
十、k-means(属于EM思想)
下一期我们先做一个真实项目实战,后续我们遇到SVM问题,再继续补充
本网页所有视频内容由 imoviebox边看边下-网页视频下载, iurlBox网页地址收藏管理器 下载并得到。
ImovieBox网页视频下载器 下载地址: ImovieBox网页视频下载器-最新版本下载
本文章由: imapbox邮箱云存储,邮箱网盘,ImageBox 图片批量下载器,网页图片批量下载专家,网页图片批量下载器,获取到文章图片,imoviebox网页视频批量下载器,下载视频内容,为您提供.
阅读和此文章类似的: 全球云计算