public static void computePsz()
	{
		for(int i = 0; i < DataInfo.numItems; i++)
		{
			int numrate = DataInfo.itemInfo[i].length;
			double[] temp1 = new double[DataInfo.hidVariables];
			double[] temp2 = new double[DataInfo.hidVariables];
			double[] temp3 = new double[DataInfo.hidVariables];
			
			for(int k = 0; k < DataInfo.hidVariables; k++) {
				temp1[k] = 0;
				temp2[k] = 0;
				temp3[k] = 0;
			}
			
			for(int j = 0; j < numrate; j++)
			{
				int user = DataInfo.itemInfo[i][j] / 10;
				int rate = DataInfo.itemInfo[i][j] % 10;
				
				double norm = 0;
				for(int k = 0; k < DataInfo.hidVariables; k++)
				{
					double part = Pvyz(rate, i, k) * tPuz[user][k];
					norm += Math.pow(part, DataInfo.beta);
				}
				
				for(int k = 0; k < DataInfo.hidVariables; k++)
				{
					double part = Pvyz(rate, i, k) * tPuz[user][k];
					if(norm != 0) {
						temp1[k] += part / norm;
						temp2[k] += rate * part / norm;
						temp3[k] += (rate - tPuz[user][k]) * (rate - tPuz[user][k]) * part / norm ;
					}
				}
			}
			
			for(int k = 0; k < DataInfo.hidVariables; k++)
			{
				if(temp1[k] != 0) {
					DataInfo.Psz[i][k][0] = temp2[k] / temp1[k];
					DataInfo.Psz[i][k][1] = temp3[k] / temp1[k];
				}
			}
				
		}
	}