机器学习-SVM

基础知识:

拉格朗日乘数

https://zh.wikipedia.org/wiki/%E6%8B%89%E6%A0%BC%E6%9C%97%E6%97%A5%E4%B9%98%E6%95%B0

Svm算法原理及实现:

https://blog.youkuaiyun.com/d__760/article/details/80387432

svm分类,就是求两类最近的两个点之间的最大间隔长方形。或者说使得距离这条直线最近的两类不同的点到这条直线的距离最短。

复习主要看何老师那个pdf

“分类”和“回归”问题的区别

bd-liuming

其实分类和回归的本质是一样的,都是对输入做出预测,其区别在于输出的类型。

分类问题:分类问题的输出是离散型变量(如: +1、-1),是一种定性输出。(预测明天天气是阴、晴还是雨) 
回归问题:回归问题的输出是连续型变量,是一种定量输出。(预测明天的温度是多少度)。

用sklearn的SVM预测单特征一维数据


from sklearn.svm import LinearSVR

svm_reg = LinearSVR(epsilon=1.5)

X = [[2005], [2006], [2007], [2008], [2009], [2010], [2011]]
y = [1106.7, 983.8, 930.4, 903.2, 869.9, 867.7, 876.7]

svm_reg.fit(X, y)

for i in range(2012, 2020, 1):
    a = (svm_reg.predict([[i]]))
    print(str(i) + '\t' + str(a).strip('[').strip(']'))
'''
这里这个svm_reg.predict([[i]])是array([432.424])之类数据,我先把它转换成str字符串,
它就是[432.424],然后再用strip两次把‘[’和']’去掉,最后输出的就是数字
'''
'''
单个单个地调节预测数据
2012 872.70124387
2013 873.13499183
2014 1110.16099565
2015 935.61459743
2016 987.19680765
2017 880.8201879
2018 909.20547629
2019 937.47189615
for循环来预测
2012	 870.06487527
2013	 870.49731291
2014	 870.92975054
2015	 871.36218818
2016	 871.79462581
2017	 872.22706345
2018	 872.65950108
2019	 873.09193872
for循环来预测
2012	 878.63669798
2013	 879.07339596
2014	 879.51009395
2015	 879.94679193
2016	 880.38348991
2017	 880.82018789
2018	 881.25688588
2019	 881.69358386
'''

ERROR1:

碰到ConvergenceWarning的情况

https://blog.youkuaiyun.com/a954680384/article/details/88032760

max_iter增加,默认是1000,我这里没有用到max_iter这个参数,我出错是输入数据的格式问题,

X = [[2005], [2006], [2007], [2008], [2009], [2010], [2011]],就是这个X必须以列表添加数据,

如果是两个特征就是:X = [[2005,2], [2006,4], [2007,6], [2008,7], [2009,3], [2010,7], [2011,9]]

ERROR2:读取xlsx中的数据,用openpyxl库在输出单行或单列的数据时会出错,所以要跳过下面这个网址,来用更下面的xlrd库,使用openpyxl读取单行数据会报的错:

openpyxl.utils.exceptions.CellCoordinatesException: Invalid cell coordinates (C)

使用openpyxl参考的网址:https://www.cnblogs.com/anpengapple/p/6399304.htm,这里贴出网站不是让你去这个网址走openpyxl这条路,而是记录我的Debug过程。

我的报错代码:

from openpyxl import load_workbook

wb = load_workbook("能源碳排放.xlsx")  # 打开一个xlsx文件。
print(wb.sheetnames)    # ['Sheet1', 'Sheet2', 'Sheet3'] 可以看看打开的excel表里面有哪些sheet页。
sheet = wb.get_sheet_by_name("Sheet3")
# 读取到指定的Sheet页,sheet就变得神奇了,想要的内容都在这里。比如:

print(sheet["C"])    # 这里输出单列(<Cell Sheet3.C1>, <Cell Sheet3.C2>, <Cell Sheet3.C3>, <Cell Sheet3.C4>, <Cell Sheet3.C5>, <Cell Sheet3.C6>, <Cell Sheet3.C7>, <Cell Sheet3.C8>, <Cell Sheet3.C9>, <Cell Sheet3.C10>)      <-第C列
# print(sheet["4"])    # (<Cell Sheet3.A4>, <Cell Sheet3.B4>, <Cell Sheet3.C4>, <Cell Sheet3.D4>, <Cell Sheet3.E4>)     <-第4行
print(sheet["C4"].value)    # c4     <-第C4格的值
print(sheet.max_row)    # 10     <-最大行数
print(sheet.max_column)    # 5     <-最大列数
# for i in sheet["C"]:
#   print(i.value, end=" ")    # c1 c2 c3 c4 c5 c6 c7 c8 c9 c10     <-C列中的所有值

 

看了overstackflow上的回答,用xlrd好一点

于是采用下面这个网址的xlrd库:

https://blog.youkuaiyun.com/sinat_28576553/article/details/81275650#1.4%C2%A0%E6%8C%89%E8%A1%8C%E6%88%96%E5%88%97%E6%96%B9%E5%BC%8F%E8%8E%B7%E5%BE%97%E5%B7%A5%E4%BD%9C%E8%A1%A8%E7%9A%84%E6%95%B0%E6%8D%AE

支持向量机的参数设置(实例代码过程中的一个简单解释)

https://www.cnblogs.com/Fly-lulu/p/7700088.html

sklearn.svm.SVR的参数介绍(简介的解释,并列举出所有的参数)

https://blog.youkuaiyun.com/qq_24852439/article/details/85305317

 

Question1:sklearn的SVM每次预测的结果都不同?

神经网络算法利用了随机性,比如初始化随机权重,那我觉得这个应该一样。

https://blog.youkuaiyun.com/u011001084/article/details/73526774/

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值