コード例 #1
0
def normalizeProdClusters(clusts, centroids, mats, maps, floor, ceil):
    displacement = 0
    again = False
    for i in range(0,len(clusts)):
        ratio = len(clusts[i - displacement])/len(clusts)
        if ratio < floor:
            again = True
            merge(clusts, centroids, mats, maps, i - displacement)
            displacement += 1
    mats = st.subMatrices(clusts)[0]
        
    displacement = 0
    for i in range(0,len(clusts)):
        t1 = len(clusts[i])/(0.0 + len(p.products)) > ceil
        t2 = len(clusts[i]) > 8
        if (t1 and t2):
            again = True
            dissolve(clusts, centroids, mats, maps, i - displacement)
            displacement += 1
    subs = st.subMatrices(clusts)
    if(again):
        clusts = normalizeProdClusters(clusts, centroids, subs[0], subs[1], floor, ceil)
    else:
        displacement = 0
        for i in range(0,len(clusts)):
            if not isinstance(clusts[i-displacement],list):
                clusts.pop(i - displacement)
                displacement += 1
    return clusts
コード例 #2
0
def normalizeProdClusters(clusts, centroids, mats, maps, floor, ceil):
    displacement = 0
    again = False
    for i in range(0, len(clusts)):
        ratio = len(clusts[i - displacement]) / len(clusts)
        if ratio < floor:
            again = True
            merge(clusts, centroids, mats, maps, i - displacement)
            displacement += 1
    mats = st.subMatrices(clusts)[0]

    displacement = 0
    for i in range(0, len(clusts)):
        t1 = len(clusts[i]) / (0.0 + len(p.products)) > ceil
        t2 = len(clusts[i]) > 8
        if (t1 and t2):
            again = True
            dissolve(clusts, centroids, mats, maps, i - displacement)
            displacement += 1
    subs = st.subMatrices(clusts)
    if (again):
        clusts = normalizeProdClusters(clusts, centroids, subs[0], subs[1],
                                       floor, ceil)
    else:
        displacement = 0
        for i in range(0, len(clusts)):
            if not isinstance(clusts[i - displacement], list):
                clusts.pop(i - displacement)
                displacement += 1
    return clusts
コード例 #3
0
ファイル: run.py プロジェクト: lramsey/python-recommender
def run(names):
    global products
    products = p.products
    results = [names, c.customersMap]

    global transpose
    transpose = c.matrix.transpose()
    cl.__init__(transpose, p.products)
    catNum = len(p.products)/8 + 1
    outputs = cl.kMeans(catNum,8)
    prodClusters = outputs[0]
    centroids = outputs[1]

    inputs = st.subMatrices(prodClusters)
    prodClusters = n.normalizeProdClusters(prodClusters, centroids, inputs[0], inputs[1], 0.2, 0.4)
    results.append(prodClusters)

    inputs = st.subMatrices(prodClusters)
    subMats = inputs[0]
    maps = inputs[1]
    indexMap = inputs[2]

    subClusters = []
    for i in range(0, len(subMats)):
        subCluster = st.createSubcluster(indexMap[i], subMats[i], maps[i])
        subCluster.append(r.buildRecommendations(names, [subCluster]))
        subClusters.append(subCluster)


    totCluster = st.createSubcluster(p.products, c.matrix, p.productsMap)
    totCluster.append(r.buildRecommendations(names,[totCluster]))
    powerClusters = []
    powerSil = []
    results.append('unfiltered results: ' + str(totCluster[4]))
    for i in range(0, len(subClusters)):
        if subClusters[i][4] >= totCluster[4]:
            powerClusters.append(subClusters[i])
            powerSil.append(subClusters[i][4])
    if(len(powerSil) == 0):
        return 'again'
    else:
        results.append('filtered average: ' + str(sum(powerSil)/len(powerSil)))
    
    powerClusters.append(totCluster)


    recommendationMatrix = r.buildRecommendations(names, powerClusters)
    results.append(recommendationMatrix)
    results.append(powerClusters)
    results.append(subClusters)
    return results
コード例 #4
0
def run(nameList, matrix):
    global products
    products = p.products
    global names
    names = nameList
    
    outputs = buildProductClusters()
    productClusters = outputs[0]
    centroids = outputs[1]

    inputs = st.subMatrices(productClusters)
    productClusters = n.normalizeProdClusters(productClusters, centroids, inputs[0], inputs[1], 0.2, 0.4)

    inputs = st.subMatrices(productClusters)
    subMats = inputs[0]
    maps = inputs[1]
    indexMap = inputs[2]


    customerClustersHelpers = buildCustomerHelpers()
    subClustersHelpers = buildSubHelpers(indexMap, subMats, maps)

    powerups = buildPowerHelpers(subClustersHelpers,customerClustersHelpers)
    powerClustersHelpers = powerups[0]
    productClusterLocator = powerups[1]

    powerRecMatrix = r.buildRecommendations(names, powerClustersHelpers)
    productClustersMap = st.createClusterMap(productClusters)
    
    customerMatrix = c.customerMatrixiser()
    productMatrix  = p.productMatrixiser()
    
    hasPurchased = matrix
    if(len(powerClustersHelpers) == 0):
        return 'again'
    else:
        results = []
        # index 0
        results.append(names) 
        # index 1
        results.append(c.customersMap)
        # index 2
        results.append(productClusters)
        # index 3
        results.append(p.productsMap)
        # index 4
        results.append(products)
        # index 5
        results.append(powerRecMatrix)
        # index 6
        results.append([customerClustersHelpers])
        # index 7
        results.append(subClustersHelpers)
        # index 8
        results.append(powerClustersHelpers)
        # index 9
        results.append(c.matrix)
        # index 10
        results.append(productClustersMap)
        # index 11
        results.append(productClusterLocator)
        # index 12
        results.append(customerMatrix)
        # index 13
        results.append(productMatrix)
        # index 14
        results.append(hasPurchased)
        
        return results
コード例 #5
0
ファイル: run.py プロジェクト: agchou/product-recommender
def run(names):
    global products
    products = p.products
    # indexes 0 and 1
    results = [names, c.customersMap]

    global transpose
    transpose = c.matrix.transpose()
    cl.__init__(transpose, p.products)
    catNum = len(p.products)/8 + 1
    outputs = cl.kMeans(catNum,8)
    productClusters = outputs[0]
    centroids = outputs[1]

    inputs = st.subMatrices(productClusters)
    productClusters = n.normalizeProdClusters(productClusters, centroids, inputs[0], inputs[1], 0.2, 0.4)
    # index 2
    results.append(productClusters)
    # index 3
    results.append(p.productsMap)
    # index 4
    results.append(products)

    inputs = st.subMatrices(productClusters)
    subMats = inputs[0]
    maps = inputs[1]
    indexMap = inputs[2]

    subClustersHelpers = []
    for i in range(0, len(subMats)):
        subCluster = st.createSubclustersHelpers(indexMap[i], subMats[i], maps[i])
        subCluster.append(r.buildRecommendations(names, [subCluster]))
        subClustersHelpers.append(subCluster)


    customerClustersHelpers = st.createSubclustersHelpers(p.products, c.matrix, p.productsMap)
    customerClustersHelpers.append(r.buildRecommendations(names,[customerClustersHelpers]))
    powerClustersHelpers = []
    powerI = []
    powerCount = 0
    productClusterLocator = []
    for i in range(0, len(subClustersHelpers)):
        if subClustersHelpers[i][5] >= customerClustersHelpers[5]:
            powerClustersHelpers.append(subClustersHelpers[i])
            powerI.append(i)
            productClusterLocator.append(['power', powerCount])
            powerCount += 1
        else:
            productClusterLocator.append(['sub', i - powerCount])
    if(len(powerClustersHelpers) == 0):
        return 'again'
    displacement = 0
    for i in range(0,len(powerI)):
        subClustersHelpers.pop(powerI[i]-displacement)
        displacement += 1

    powerRecMatrix = r.buildRecommendations(names, powerClustersHelpers)
    # index 5
    results.append(powerRecMatrix)
    # index 6
    results.append([customerClustersHelpers])
    # index 7
    results.append(subClustersHelpers)
    # index 8
    results.append(powerClustersHelpers)
    # index 9
    results.append(c.matrix)
    # index 10
    productClustersMap = st.createClusterMap(productClusters)
    results.append(productClustersMap)
    results.append(productClusterLocator)
    
    return results