我想检查一个数据集是否可以线性分离。我正在使用此link中提到的方法。这是我想用纸浆实现的约束方程式:
-h ^ T a + B <= -1
h ^ T b - B <= -1
在上述等式中,'a'表示属于一个类的数据,'b'表示属于另一个类的数据。 存储在变量A中的数据有11列。最后一列包含值-1或1,具体取决于行是属于第一个等式还是第二个等式。类似地,其余列包含所有负值或正值,具体取决于行是属于第一个等式还是第二个等式。以下是我正在使用的代码:
try:
import os
#import random
import traceback
import datetime
#import numpy as np
import scipy.io as sio
import pulp
os.system('cls')
dicA = sio.loadmat('A1.mat')
A = dicA.get('A1')
var = pulp.LpVariable.dicts("var",range(11),cat =pulp.LpContinuous)
model = pulp.LpProblem("Data linearly seaparable", pulp.LpMinimize)
print(datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S'))
for i in range(len(A)):
expr = pulp.LpAffineExpression()
for j in range(len(A[i])):
expr += var[j]*A[i][j]
expr = expr <= -1
model+= expr
print(datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S'))
model.solve()
print(pulp.LpStatus[model.status])
print(datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S'))
except:
print('exception')
tb = traceback.format_exc()
print(tb)
finally:
print('reached finally')
而且,我得到以下输出:
2017-08-31 07:28:30
2017-08-31 07:28:36
Infeasible
2017-08-31 07:28:42
reached finally
根据纸浆文档,我们添加到模型中的第一个方程应该是目标函数,但在这种情况下没有目标函数,所以我只在模型中添加约束。这是正确的,还是有办法指明没有目标函数。
答案 0 :(得分:0)
根据纸浆文档,我们添加到模型中的第一个方程应该是目标函数,但是在这种情况下没有目标函数
添加到“模型”(问题)的第一件事不是方程而是公式,它是目标函数。
如果没有目标函数,则添加任意一个。这是文档中的示例:
# The arbitrary objective function is added
prob += 0, "Arbitrary Objective Function"