Лабораторна робота №3, Створення програм аналізу даних з використанням алгоритмів data mining – Варіант №2
Код роботи: 2497
Вид роботи: Лабораторна робота
Предмет: Інтелектуальний аналіз данних
Тема: №3, Створення програм аналізу даних з використанням алгоритмів data mining – Варіант №2
Кількість сторінок: 12
Дата виконання: 2017
Мова написання: українська
Ціна: 250 грн (+ програма)
Мета роботи: Вивчити основні принципи створення систем інтелектуального аналізу даних з використанням алгоритмів data mining.
Завдання: Реалізувати програму, що виконує аналіз даних представлених у форматі ARFF за допомогою алгоритму data mining і будуючу модель, задану варіантом завдання.
Загальні відомості
1. Введення
Системи підтримки ухвалення рішень (СППР) використовують методи data mining для аналізу даних і отримання нових знань. Одержані результати можуть носити як описовий характер, дозволяючі краще зрозуміти дані, так і передбачає, дозволяючі надалі передбачати значення яких або параметрів на підставі знайдених закономірностей. До першого вигляду відносяться методи виконуючі пошук асоціативних правил і кластеризацію. До другого методи будуючі функції класифікації і регресії.
Бібліотека Xelopes в своєму складі має алгоритми обох типів. Вона може служити основою для побудови СППР. Структура і підтримка основних стандартів бібліотекою роблять її використовування достатньо простим.
Основний підхід рішення задач data mining за допомогою бібліотеки Xelopes не залежить від вигляду або методу, що використовується.
Спочатку створюється екземпляр клас MiningInputStream для завантаження початкових даних, наприклад, з файлу формату ARFF.
MiningInputStream inputData =
new MiningArffStream("data.arff");
Потім виділяються метадані завантажених даних.
MiningDataSpecification metaData =
inputData.getMetaData();
Далі створюється екземпляр класу MiningAlgorithm. Для налагодження процесу побудови моделі створюються екземпляри класів MiningSettings і MiningAlgorithmSpecification. У даних екземплярів встановлюються необхідні параметри. Створення конкретних екземплярів класів залежать від методу і вирішуваної задачі, що використовується.
Зроблені налагодження повинні бути перевірені за допомогою методу: verifySettings():
miningSettings.verifySettings();
Необхідно помітити, що налагодження специфічні для алгоритму можуть бути виконані як безпосередньо в коді, так і завантажені з конфігураційного файлу algorithms.xml на ім'я алгоритму.
Створеному екземпляру алгоритму передаються початкові дані і налагодження.
algorithm.setMiningInputStream( inputData );
algorithm.setMiningSettings( miningSettings );
algorithm.setMiningAlgorithmSpecification(
miningAlgorithmSpecification );
Потім викликається метод buildModel() побудови моделі, який повертає побудовану модель у вигляді екземпляра класу MiningModel.
MiningModel model = algorithm.buildModel();
Будь-яка побудована модель може бути збережена у форматі PMML
FileWriter writer = new FileWriter
("example.xml");
model.writePmml(writer);
або в текстовому форматі
writer = new FileWriter("example.txt");
model.writePlainText(writer);
Якщо побудована модель є екземпляром класу SupervisedMiningModel, то отже вона може бути застосована до нові даним з мета визначення значення залежної змінної.
MiningVector vector = inputData.read();
double predicted = model.
applyModelFunction(vector);
Далі розглянемо особливості рішення задач пошуку асоціативних правил, кластеризації і класифікації.
2. Пошук асоціативних правил
Для налагодження процесу пошуку асоціативних правил створюється екземпляр класу AssociationRulesSettings.
AssociationRulesSettings miningSettings =
new AssociationRulesSettings();
Йому передаються метадані завантажених даних:
miningSettings.setDataSpecification
( metaData );
Для пошуку асоціативних правил важливо вказати які з атрибутів ідентифікують елементи, а які транзакції, в які вони входять. Наприклад,
CategoricalAttribute categoryItemId =
(CategoricalAttribute) metaData.
getMiningAttribute("itemId");
miningSettings.setItemId( categoryItemId );
CategoricalAttribute categoryTransactId =
(CategoricalAttribute)metaData.
getMiningAttribute("transactId");
miningSettings.setTransactionId
( categoryTransactId );
Також для пошуку необхідно визначити мінімальну підтримку і мінімальний ступінь довір'я для шуканих правил. Наприклад,
miningSettings.setMinimum
Confidence( 0.30 );
miningSettings.setMinimum
Support( 0.5 );
Для вирішення задачі пошуку асоціативних правил можна використовувати алгоритм Apriori. В бібліотеці Xelopes він реалізований в класі com.prudsys.pdm.Models.
AssociationRules.Algorithms.AprioriSimple.
Apriori. Для його використовування необхідно зробити специфічні для нього налагодження. Для цього створюється екземпляр класу MiningAlgorithmSpecification:
MiningAlgorithmSpecification mining
AlgorithmSpecification
= new MiningAlgorithmSpecification();
Указуються ім'я, функція, алгоритм, версія алгоритму і клас його, що використовується, реалізовуючий. Наприклад:
miningAlgorithmSpecification.setName
("AprioriSimple");
miningAlgorithmSpecification.setFunction
("AssociationRules");
miningAlgorithmSpecification.setAlgorithm
("associationRules");
miningAlgorithmSpecification.setClassname
("com.prudsys.pdm.Models.AssociationRules.
Algorithms.AprioriSimple.Apriori");
miningAlgorithmSpecification.setVersion
("1.0");
Далі встановлюється додаткові параметри за допомогою масиву екземплярів класу MiningAlgorithmParameter:
MiningAlgorithmParameter[] mining
AlgorithmParameter =
new MiningAlgorithmParameter[3];
Встановлюється мінімальний розмір набору. Наприклад,
miningAlgorithmParameter[0]= new
MiningAlgorithmParameter();
miningAlgorithmParameter[0].setName
("minimumItemSize");
miningAlgorithmParameter[0].setType("int");
miningAlgorithmParameter[0].setValue("1");
miningAlgorithmParameter[0].setMethod
("setMinimumItemSize");
miningAlgorithmParameter[0].setDescr
("Minimum size for large items");
Встановлюється мінімальний розмір набору. Наприклад,
miningAlgorithmParameter[1]=
new MiningAlgorithmParameter();
miningAlgorithmParameter[1].
setName("maximumItemSize");
miningAlgorithmParameter[1].
setType("int");
miningAlgorithmParameter[1].
setValue("-1");
miningAlgorithmParameter[1].
setMethod("setMaximumItemSize");
miningAlgorithmParameter[1].
setDescr("Maximum size for large items");
Встановлюється параметр дозволяючий генерувати асоціативні правила, а не тільки часті набори. Наприклад,
miningAlgorithmParameter[2]=
new MiningAlgorithmParameter();
miningAlgorithmParameter[2].
setName("generateRules");
miningAlgorithmParameter[2].
setType("boolean");
miningAlgorithmParameter[2].
setValue("true");
miningAlgorithmParameter[2].
setMethod("setGenerateRules");
miningAlgorithmParameter[2].
setDescr("Allow to generate
association rules");
Всі додаткові параметри повинні бути додані в специфікацію алгоритму:
miningAlgorithmSpecification.setInput
Attribute(miningAlgorithmParameter);
Далі повинен бути створений екземпляр алгоритму виконуючого побудову моделі асоціативних правил:
String className = mining
AlgorithmSpecification.getClassname();
if( className == null )
throw new MiningException(
"className attribute expected.»);
Class algorithmClass = = Class.
forName( className );
Object algorithm = algorithm
Class.newInstance();
AssociationRulesAlgorithm
miningAlgorithm
= (AssociationRulesAlgorithm)
algorithm;
Після створення необхідно викликати метод метод buildModel() для побудови моделі класу AssociationRulesMiningModel.
AssociationRulesMiningModel model =
(AssociationRulesMiningModel)
algorithm.buildModel();
Обробити побудовану модель, наприклад, для висновку асоціативних правил в консоль можна таким чином.
Одержати список асоціативних правил і частих наборів:
Vector rules = ruleModel.get
AssociationRules();
Vector LITS = ruleModel.get
LargeItemSets();
Одержати атрибути ідентифікуючі елементи і транзакції:
CategoricalAttribute itemId =
(CategoricalAttribute)((Association
RulesSettings)ruleModel.
getMiningSettings()).getItemId();
CategoricalAttribute transactId =
(CategoricalAttribute)((Association
RulesSettings)
ruleModel.getMiningSettings()).
getTransactionId();
Визначити кількість правил, частих наборів і транзакцій
int nLITS = LITS.size();
int nRules = rules.size();
int itemNumber = itemId.get
CategoriesNumber();
int transactsNumber = transactId.
getCategoriesNumber();
Вивести всі асоціативні правила
System.out.println();
System.out.println("Number
association rules found: «+ nRules);
for (int i = 0; i < nRules; i++) {
// Нове правило:
System.out.print(i + ": ");
// Показати правило:
RuleSet rs = (RuleSet) rules.
elementAt(i);
int itemSize = rs.getSize();
// умовна частина правила:
ItemSet is = rs.getPremise();
int nprem = rs.getPremise().
getSize();
for (int j = 0; j < nprem; j++) {
int pN = is.getItemAt(j);
Category cat = (Category)
itemId.getCategory(pN);
System.out.print(cat.getValue() + «");
};
System.out.print("=> ");
// Завершальна частина правила:
for (int j = nprem; j < itemSize; j++) {
int pN = rs.getConclusion().
getItemAt(j-nprem);
Category cat = (Category)
itemId.getCategory(pN);
System.out.print(cat.
getValue() + «");
}
3. Задача кластеризації
Для налагодження процесу кластеризації створюється екземпляр класу ClusteringSettings.
ClusteringSettings miningSettings =
new ClusteringSettings();
Йому передаються метадані завантажених даних:
miningSettings.setDataSpecification
( metaData );
Для кластеризації можна вказати ім'я атрибуту визначального ідентифікацію кластера. Наприклад,
miningSettings.setClusterIdAttribute
Name("ItemID");
Для вирішення задачі кластеризації можна використовувати алгоритм KMeans. В бібліотеці Xelopes він реалізований в класі com.prudsys.pdm.Models.Clustering.
CDBased.Algorithms.KMeans.KMeans.
Для його використовування необхідно виконати налагодження специфічних параметрів. Покажемо як це можна зробити за допомогою завантаження з файлу algorithms.xml.
MiningAlgorithmSpecification
miningAlgorithmSpecification =
MiningAlgorithmSpecification.
getMining
AlgorithmSpecification("KMeans");
Далі повинен бути створений екземпляр алгоритму виконуючого кластеризацію:
String className = mining
AlgorithmSpecification.getClassname();
if( className == null )
throw new MiningException(
"className attribute expected.»);
Class algorithmClass = =
Class.forName( className );
Object algorithm = algorithm
Class.newInstance();
ClusteringAlgorithm mining
Algorithm = (ClusteringAlgorithm)algorithm;
Після створення необхідно викликати метод метод buildModel() для побудови моделі класу ClusteringMiningModel.
ClusteringMiningModel model =
(ClusteringMiningModel)
algorithm.buildModel();
Обробити побудовану модель, наприклад, для висновку кластерів в консоль можна таким чином.
System.out.println("number
clusters: «+ clustModel.
getNumberOfClusters());
Cluster[] clust = clustModel.
getClusters();
for (int i = 0; i < clust.
length; i++)
System.out.println("Clust
["+i+"]: «+ clust[i].toString() );
4. Задача класифікації
Для налагодження процесу класифікації наприклад за допомогою дерев рішень створюється екземпляр класу SupervisedMiningSettings.
SupervisedMiningSettings miningSettings =
new SupervisedMiningSettings();
Йому передаються метадані завантажених даних:
miningSettings.setDataSpecification
( metaData );
Для класифікації необхідно вказати атрибут відповідний незалежної змінної. Наприклад,
MiningAttribute targetAttribute =
(MiningAttribute)metaData.
getMiningAttribute( "contact-lenses»);
miningSettings.setTarget(targetAttribute);
Для побудови дерева рішень можна використовувати алгоритм ID3. В бібліотеці Xelopes він реалізований в класі com.prudsys.pdm.Models.Classification.
DecisionTree.Algorithms.Id3.ID3Algorithm. Для його використовування необхідно виконати налагодження параметрів, які можуть бути завантажені з файлу algorithms.xml.
MiningAlgorithmSpecification
miningAlgorithmSpecification =
MiningAlgorithmSpecification.
getMiningAlgorithmSpecification
( "Decision Tree (ID3)»);
Далі повинен бути створений екземпляр алгоритму виконуючого класифікацію:
String className = mining
AlgorithmSpecification.getClassname();
if( className == null )
throw new MiningException(
"className attribute expected.»);
Class algorithmClass = =
Class.forName( className );
Object algorithm = algorithm
Class.newInstance();
DecisionTreeAlgorithm mining
Algorithm =
(DecisionTreeAlgorithm)algorithm;
Після створення необхідно викликати метод buildModel() для побудови моделі класу DecisionTreeMiningModel.
DecisionTreeMiningModel model =
(DecisionTreeMiningModel)
algorithm.buildModel();
Обробити побудовану модель, наприклад, для висновку в консоль можна за допомогою рекурсивної процедури.
private static void showTreeRecursively
(DecisionTreeNode node){
// Loop over all childs:
for (int i = 0; i < node.getChild
Count(); i++) {
DecisionTreeNode child =
(DecisionTreeNode) node.
getChildAt(i);
System.out.println( "parent:
«+ node.
toString() + «==> child:
«+ child.toString());
// Get child's childs:
showTreeRecursively(child);
};
}
Вона може бути викликана таким чином:
DecisionTreeNode root =
(DecisionTreeNode) model.getClassifier();
showTreeRecursively(root);
Дерева рішень використовуються для класифікації даних. Отже побудована модель може бути застосована до нових даних з метою їх класифікації. Покажемо, як це може бути виконано на практиці:
int i = 0;
int wrong = 0;
while (inputData.next()) {
// класифікувати вектор:
MiningVector vector = input
Data.read();
double predicted = ((Supervised
MiningModel) model).apply
(vector);
double realTarCat = vector.
getValue( targetAttribute.getName() );
Category tarCat =
((CategoricalAttribute)target
Attribute).getCategory(realTarCat);
Category predTarCat =
((CategoricalAttribute)target
Attribute).getCategory(predicted);
System.out.println(««+ ++i
+": «+ vector + «-> «+ predTarCat);
if (! predTarCat.equals( tarCat))
wrong = wrong + 1;
};
System.out.println("
classification rate = «+
(100.0 - ((double) wrong / i)
*100.0) );
Порядок виконання роботи
1. Вивчити основні принципи аналізу даних з використанням бібліотеки Xelopes.
2. Реалізувати програму виконуючу побудова моделі заданої варіантом завдання.
3. Побудувати моделі для всіх файлів з початковими даними і різними параметрами.
4. Зберегти побудовані моделі в текстовому форматі і форматі PMML.
5. Порівняти одержані моделі з моделями, побудованими за допомогою GUI Xelopes для тих же даних і тих же налагодженнях.
6. Якщо існує різниця пояснити її.
Варіанти завдання
Варіант |
Моделі |
|
1 |
StatisticsMiningModel |
|
2 |
AssociationRulesMiningModel |
|
3 |
SequentialMiningModel |
|
4 |
CustomerSequentialMiningModel |
|
5 |
ClusteringMiningModel |
|
6 |
SupportVectorMiningModel |
|
7 |
SparseGridsMiningModel |
|
8 |
DecisionTreeMiningModel |
|
Звіт по роботі
1. Титульний лист.
2. Мета роботи.
3. Блок схема програми
4. Результати вживання до початкових даних з різних файлів з різними параметрами.
6. Порівняння з моделями, побудованими за допомогою GUI Xelopes.
7. Висновки по роботі.
Контрольні питання
1. Що необхідне для побудови моделі.
2. Які параметри повинні бути встановлені для побудови асоціативних правил.
3. Які параметри повинні бути встановлені для побудови кластерів.
4. Які параметри повинні бути встановлені для побудови дерева рішень
5. Якомога класифікувати алгоритми відповідно до ієрархії прийнятої в CWM і Xelopes.
6. Що таке формат PMML.