from numpy import * import random import numpy as np from sklearn.cluster import KMeans import re import matplotlib as mpl import matplotlib.pyplot as plt import matplotlib.colors import csv import pandas as pd from sklearn.metrics import silhouette_score from scipy.spatial.distance import cdist import imp import imp #计算两个点之间的欧氏距离 def calcuDistance(vec1, vec2): return np.sqrt(np.sum(np.square(vec1 - vec2))) #根据距离质心的大小定义用户目前所处的等级 def UserRank(AC_num, ua_centroids): min = 100000 userRank = mini = -1 rows = shape(ua_centroids)[0] for i in range(rows): if calcuDistance(AC_num, ua_centroids[i][0]) < min: min = calcuDistance(AC_num, ua_centroids[i][0]) mini = i return mini+1 #统计每个用户等级的人数 def UserRank_cnt(): cntuserrank1 = 0 cntuserrank2 = 0 cntuserrank3 = 0 cntuserrank4 = 0 cntuserrank5 = 0 rows = shape(UAKMat)[0] for i in range(rows): x = UserRank(UAKarray[i][0], ua_centroids) if x == 1: cntuserrank1 += 1 elif x == 2: cntuserrank2 += 1 elif x == 3: cntuserrank3 += 1 elif x == 4: cntuserrank4 += 1 else: cntuserrank5 += 1 return cntuserrank1,cntuserrank2,cntuserrank3,cntuserrank4,cntuserrank5 #根据AC题量的多少给不同题目自定义难度等级 def ProbRank_Cnt(AKMat, pa_centroids): cntprobrank1 = 0 cntprobrank2 = 0 cntprobrank3 = 0 cntprobrank4 = 0 cntprobrank5 = 0 rows1 = shape(AKMat)[0] rows2 = shape(pa_centroids)[0] ARKMat = AKMat ARKMat = np.insert(ARKMat, 1, values=0, axis=1) for i in range(rows1): # i=0 min = 1000000 for j in range(rows2): if calcuDistance(AKMat[i], pa_centroids[j]) < min: min = calcuDistance(AKMat[i], pa_centroids[j]) minJ = j ARKMat[i, 1] = 5-minJ if minJ == 0: cntprobrank5 += 1 elif minJ == 1: cntprobrank4 += 1 elif minJ == 2: cntprobrank3 += 1 elif minJ == 3: cntprobrank2 += 1 elif minJ == 4: cntprobrank1 += 1 return ARKMat,cntprobrank1,cntprobrank2,cntprobrank3,cntprobrank4,cntprobrank5 #根据不同难度等级所带的标记不同,统计出不同难度等级的题量有多少 def showRecommend(APARKMat): ProbRank_Cnt(AKMat, pa_centroids) centroids0 = [] centroids1 = [] centroids2 = [] centroids3 = [] centroids4 = [] row = shape(APARKMat)[0] for i in range(row): if APARKMat[i, 2] == 1: centroids0.append(APARKMat[i, 0]) elif APARKMat[i, 2] == 2: centroids1.append(APARKMat[i, 0]) elif APARKMat[i, 2] == 3: centroids2.append(APARKMat[i, 0])
本科毕设题目推荐系统
最新推荐文章于 2024-06-07 12:30:24 发布