用C#分类数据集 - 怎么做?

时间:2013-08-15 11:42:18

标签: c# ienumerable design-patterns classification flags

我对数据分类有疑问。我想这就像谷歌的PageRank的目标:如何对查询进行分类,以便我们返回最佳匹配结果?

我简化了一个场景来说明我的业务问题。

假设我在市场上有一些房子,并假设我使用Enums作为“标志”或“选项”来分配给我的房屋对象。 这个例子不是关于好的设计,而是关于根据客户的需求使一个房子优于另一个房子的程序化解决方案。

正如您在底部所看到的,客户通常会混合/匹配许多相同的愿望。所以我需要找出哪个房子是最好的匹配,而不是诉诸于千if / else或switch语句。

有可能吗?

标志/选项:

enum RoomTypes
{
    Bathroom,
    Bedroom,
    Livingroom,
    Study
}

enum Nearby
{
    School,
    Hospital,
    ShoppingMall,
    Park,
    Trainstation
}

enum Features
{
    Airconditioning,
    Garage,
    Garden,
    Storage,
    Basement
}

课程:

class House
{
    public IEnumerable<RoomTypes> RoomTypes {get; set;}
    public IEnumerable<Nearby> Nearby {get; set;}
    public IEnumerable<Features> Features {get; set;}
}

==============

我们有2个可用房屋:

var bigHouse = new House 
{ 
    RoomTypes = new IEnumerable<RoomTypes>{ RoomTypes.Bathroom, RoomTypes.Bedroom, RoomTypes.Study };
    Nearby = new IEnumerable<Nearby>{ Nearby.School, Nearby.Park, Nearby.ShoppingMall };
    Features = new IEnumerable<Features>{ Features.Airconditioning, Features.Storage, Features.Garden };
}

var smallHouse = new House 
{ 
    RoomTypes = new IEnumerable<RoomTypes>{ RoomTypes.Livingroom, RoomTypes.Bedroom };
    Nearby = new IEnumerable<Nearby>{ Nearby.Trainstation };
    Features = new IEnumerable<Features>{ Features.Airconditioning };
}

==============

使用案例 客户根据选项申请住房。

客户A:

  • RoomTypes :浴室,卧室
  • 附近:Park,ShoppingMall,School
  • 功能:空调,地下室,花园

客户B:

  • RoomTypes :卧室,浴室
  • 附近:ShoppingMall,Trainstation
  • 功能:空调,车库

现在的问题是,我如何根据可用房屋评估申请?

1 个答案:

答案 0 :(得分:1)

在如此短的空间里,这是一个很难解释的问题。你需要做的是一点线性代数。

对于所有这些功能,创建一个代表您可用房屋的向量

House = [1,0,1,0..........] {attributes are bed room, bathroom, Near park, Airconditioning etc }

为客户需求创建一个熟悉的向量。

在客户需求的向量和可用的房屋向量之间获取Dot产品。拥有最大点积的房子是最接近您房屋要求的房子。

你能说出原因:)

为什么应该选择具有最大值的点数产品?正如您所看到的,当属性匹配时,乘法将为1,否则为0。