通过 python 求解 QP 问题
From 李航《统计学习方法》Ver.2 例7.1
1:二次规划问题的标准形式
2:问题描述
3:按照线性可分支持向量机算法分析问题
3.1:SMO算法
3.2:根据三个实例构造约束最优化问题
min w , b 1 / 2 ( w 1 2 + w 2 2 ) s . t . 3 w 1 + 3 w 2 + b ≥ 1 4 w 1 + 3 w 2 + b ≥ 1 − 1 w 1 − 1 w 2 − b ≥ 1 \min\limits_{w, b} \quad1/2(w_1^2 + w_2^2)\\ s.t. \quad 3w_1 + 3w_2 + b \geq 1\\ \quad 4w_1 + 3w_2 + b \geq 1\\ \quad -1w_1 - 1w_2 - b \geq 1\\ w,bmin1/2(w12+w22)s.t.3w1+3w2+b≥14w1+3w2+b≥1−1w1−1w2−b≥1
3.:3:写成矩阵乘法的形式有
min
w
,
b
1
2
(
w
1
w
2
b
)
T
(
1
0
0
0
1
0
0
0
0
)
(
w
1
w
2
b
)
\min \limits_{w, b} \quad \frac{1}{2} \left(\begin{array}{cccc} w_1 \\ w_2 \\ b \\ \end{array} \right) ^T \left(\begin{array}{cccc} 1 & 0 & 0 \\ 0 & 1 & 0 \\ 0 & 0 & 0 \\ \end{array} \right) \left(\begin{array}{cccc} w_1 \\ w_2 \\ b \\ \end{array} \right)
w,bmin21⎝⎛w1w2b⎠⎞T⎝⎛100010000⎠⎞⎝⎛w1w2b⎠⎞
s
.
t
.
(
−
3
−
3
−
1
−
4
−
3
−
1
1
1
1
)
(
w
1
w
2
b
)
≤
(
−
1
−
1
−
1
)
s.t. \quad \left(\begin{array}{cccc} -3 & -3 & -1 \\ -4 & -3 & -1 \\ 1 & 1 & 1 \\ \end{array} \right) \left(\begin{array}{cccc} w_1 \\ w_2 \\ b \\ \end{array} \right) \leq \left(\begin{array}{cccc} -1 \\ -1 \\ -1 \\ \end{array} \right)
s.t.⎝⎛−3−41−3−31−1−11⎠⎞⎝⎛w1w2b⎠⎞≤⎝⎛−1−1−1⎠⎞
4:代码分析
'''
Objects : 对SVM支持向量机基本型的算法,用现成的优化计算包求解二次规则(Convex Quadratic Programming)问题
举例,将形式转换为二次规划的标准形式
调用优化函数:solvers.qp(P,q,G,h,A,b)
Version : V1.0
Name : 7.1.py
Author : Haoger
Date : 2020/12/12
Location : Long Room
'''
from cvxopt import solvers, matrix
# matrix里区分int和double,所以数字后面都需要加小数点
# 注意录入数据时,以列向量的形式录入
P = matrix([[1.0, 0.0, 0.0], [0.0, 1.0, 0.0], [0.0, 0.0, 0.0]])
q = matrix([0.0, 0.0, 0.0])
G = matrix([[-3.0, -4.0, 1.0], [-3.0, -3.0, 1.0], [-1.0, -1.0, 1.0]])
h = matrix([-1.0, -1.0, -1.0])
sol = solvers.qp(P,q,G,h)
print(sol['x'])
5:结果分析
pcost dcost gap pres dres
0: 1.4507e-01 7.1106e-01 4e+00 1e+00 8e+00
1: 5.9278e-01 1.4232e-01 5e-01 3e-16 2e-15
2: 2.7513e-01 2.3773e-01 4e-02 0e+00 4e-16
3: 2.5037e-01 2.4959e-01 8e-04 4e-16 4e-16
4: 2.5000e-01 2.5000e-01 8e-06 4e-16 4e-16
5: 2.5000e-01 2.5000e-01 8e-08 0e+00 2e-15
Optimal solution found.
[ 5.00e-01]
[ 5.00e-01]
[-2.00e+00]
即所求方程为: 1 / 2 x 1 + 1 / 2 x 2 − 2 = 0 1/2x_1 + 1/2x_2 -2 = 0 1/2x1+1/2x2−2=0
本文地址:https://blog.csdn.net/whaoger/article/details/111084045
推荐阅读
-
【Python实践-3】汉诺塔问题递归求解(打印移动步骤及计算移动步数)
-
解决python通过cx_Oracle模块连接Oracle乱码的问题
-
python求解带约束目标优化问题(非线性规划,粒子群,遗传,差分进化)
-
python中通过pip安装库文件时出现“EnvironmentError: [WinError 5] 拒绝访问”的问题及解决方案
-
Python实现求解括号匹配问题的方法
-
回归问题(附篇1):当目标函数为一元一次函数,即其最小二乘的损失函数为二元二次函数时,在python中采用全量梯度下降、随机梯度下降、批量梯度下降求解损失函数。
-
使用Python求解整数规划问题
-
Python编程求解第1天1分钱之后每天两倍持续一个月的等比数列问题
-
Python使用Dijkstra算法实现求解图中最短路径距离问题详解
-
Python基于Floyd算法求解最短路径距离问题实例详解