有没有办法查询具有多对多字段的子集或超集包含?
假设每个人都有他们想要看到的鸟类列表,每个鸟类都有一个鸟类列表.对于给定的Person实例,我如何进行查询以查找哪些Aviaries拥有该人员列表中的每只鸟?同样,对于给定的Person实例,我如何找到哪个Aviary 在该人员列表中只有鸟类(但不一定是所有鸟类).
这是我的Django 1.5型号:
class Bird(models.Model):
name = models.CharField(max_length=255, unique=True)
class Aviary(models.Model):
name = models.CharField(max_length=255, unique=True)
birds = models.ManyToManyField(Bird)
class Person(models.Model):
name = models.CharField(max_length=255, unique=True)
birds_to_see = models.ManyToManyField(Bird)
Run Code Online (Sandbox Code Playgroud)
我知道如何找到至少有一个人的鸟类的鸟舍,但我不知道我会如何适应这里.(例如,参见: django queryset for many-to-many field)
如果有一个查询可以满足我的需求,我也有兴趣知道是否/为什么更加"手动"这样做更可取.例如,我可以遍历鸟舍,提取每个鸟舍的鸟类列表,并查看该人的bird_to_see是鸟舍鸟类列表的子集或超集:
def find_aviaries(self):
person_birds = set(self.birds_to_see.all())
found_aviaries = []
for aviary in Aviary.objects.all():
aviary_birds = set(aviary.birds.all())
if person_birds.issubset(aviary_birds):
found_aviaries.append(aviary)
return found_aviaries
Run Code Online (Sandbox Code Playgroud)
任何帮助表示赞赏!
scikit-learn Ridge回归是否包括正则化项中的截距系数,如果是这样,是否有办法在没有规则化截距的情况下运行岭回归?
假设我适合岭回归:
from sklearn import linear_model
mymodel = linear_model.Ridge(alpha=0.1, fit_intercept=True).fit(X, y)
print mymodel.coef_
print mymodel.intercept_
Run Code Online (Sandbox Code Playgroud)
对于某些数据X,y,其中X不包括1的列.fit_intercept = True将自动添加一个拦截列,相应的系数由mymodel.intercept_给出.我无法弄清楚的是这个截距系数是否是优化目标中正则化求和的一部分.
根据 http://scikit-learn.org/stable/modules/linear_model.html,优化目标是最小化w:
|| X*w - y ||**2 + alpha*|| w ||**2
(使用L2规范).第二项是正则化项,问题是它是否包括在我们设置fit_intercept = True的情况下的截距系数; 若然,如何禁用此功能.