분석해야하는 데이터셋이 랜덤 난수라 당연한 결과
public void patternRecognition(String date) throws Exception {
double[] instanceValue = new double[data.numAttributes()];
instanceValue[data.numAttributes() - 1] = Double.parseDouble(date.replaceAll("-", ""));
for (int i = 0; i < data.numAttributes() - 1; i++) {
instanceValue[i] = 0.0;
}
Instance newInstance = new DenseInstance(1.0, instanceValue);
newInstance.setDataset(data);
double[] predictedValues = mlp.distributionForInstance(newInstance);
double minPredictedValue = Arrays.stream(predictedValues).min().orElse(0.0);
double maxPredictedValue = Arrays.stream(predictedValues).max().orElse(1.0);
int[] predictedNumbers;
if (minPredictedValue == maxPredictedValue) {
// 예측 값이 동일한 경우 기본적인 분포를 기반으로 숫자를 생성
predictedNumbers = generateFallbackLottoNumbers();
} else {
predictedNumbers = Arrays.stream(predictedValues)
.map(d -> 1 + ((d - minPredictedValue) / (maxPredictedValue - minPredictedValue)) * (MAX_LOTTO_NUMBER - 1))
.mapToInt(d -> (int) Math.round(d))
.filter(num -> num >= 1 && num <= MAX_LOTTO_NUMBER)
.distinct()
.limit(NUMBER_OF_LOTTO_NUMBERS)
.sorted()
.toArray();
// 필요한 숫자의 개수가 부족할 경우 추가 숫자를 무작위로 채움
Set<Integer> numberSet = new HashSet<>();
for (int num : predictedNumbers) {
numberSet.add(num);
}
while (numberSet.size() < NUMBER_OF_LOTTO_NUMBERS) {
int randomNum = random.nextInt(MAX_LOTTO_NUMBER) + 1;
numberSet.add(randomNum);
}
predictedNumbers = numberSet.stream().mapToInt(Integer::intValue).sorted().toArray();
}
System.out.println(Arrays.toString(predictedNumbers));
}

Normalize normalize = new Normalize();
normalize.setInputFormat(data);
Instances normalizedData = Filter.useFilter(data, normalize);
MLPClassifier mlp = new MLPClassifier();
mlp.setLearningRate(0.1);
mlp.setHiddenLayers("5");
mlp.buildClassifier(data);
Evaluation eval = new Evaluation(data);
eval.crossValidateModel(mlp, data, 10, new Random(1));
System.out.println(eval.toSummaryString());