Abstract
Utility pattern mining is a technique that finds valuable patterns from large-sized databases with each item’s importance and quantity information associated with it. The representative utility pattern mining technique, high utility pattern mining (HUPM), calculates the utilities of patterns by summating all of the item utilities in the patterns. However, such utility measures for patterns in HUPM have a drawback in whichpatterns with long lengths tend to have utilities sufficient to become high utility patterns. For these reasons, high average utility pattern mining (HAUPM) employing different utility measures has been studied in order to consider such pattern length factors. Recently, techniques for handling stream data are necessary because many data sources, e.g. sensors and POS devices, produce data in real time. However, all the existing HAUPM algorithms are unable to find up-to-date, meaningful patterns over data streams. We thus propose the first sliding window based HAUPM algorithm discovering recent high average utility patterns over data streams. Based on the sliding window model, our algorithm divides stream data into numerous batches, and keeps only recent batches in its window. Thereby, the algorithm can mine recent, important patterns over data streams. We also introduce a new strategy that enhances the performance of our algorithm by minimizing the overestimated average utilities stored in the proposed data structure. The experimental results show that our algorithm outperforms the competitors.
Introduction
In a variety of business areas, data mining has been utilized in order to discover and analyze valuable information hidden in large-sized databases. Association rule mining [1, 15–17] is one of the data mining approaches that finds sets of items, i.e. patterns, with relevant relationships between items. From the beginning of association rule mining, frequent pattern mining (FPM) [11, 32] that finds frequently occurring patterns from a given database has played an important role in many data mining applications. However, FPM cannot sufficiently consider all the characteristics of the real world because it has several limitations: First, the transactional databases used in FPM represent information of items in a binary form, which is either presence or absence. However, in the real world, items can occur multiple times in one transaction. Second, the importance of items can be different from each other. Therefore, if corporations want to know which set of products creates the highest revenue in their databases through data mining applications, the quantity and profit information of each item should be considered in mining processes.
In order to overcome such limitations of FDM, utility pattern mining that considers utility information of each itemhas been widely studied in recent years. In particular, high utility pattern mining (HUPM) [19, 31] has been researched actively in order to find patterns with utilities no less than a user-specified minimum utility. In HUPM, the utility of a pattern is defined as the summation of item utilities in the pattern. Accordingly, as the length of a pattern becomes longer, the utility of the pattern is more likely to become higher regardless of individual item utilities in the pattern. In this regard, the mining results of HUPM algorithms may include a large amount of patterns composed of numerous items with low utilities. Such patterns can be redundant information in certain business areas. This is with the assumption that we have mined two different patterns from a market database, which have equal total prices (pattern utilities) and consist of few expansive home appliances (high utility items) and many cheap daily supplies (low utility items), respectively. In the view of marketing strategies, a pattern with a small number of purchased items can be more useful information to easily maximize the revenue of a corporation compared to a pattern with a large number of items. Therefore, high average utility pattern mining (HAUPM) algorithms [13, 23] have been devised in order to find high average utility patterns (HAUPs) by considering the length factors of patterns. HAUPM defines the utility of a pattern as the summation of item utilities divided by its pattern length, which is called average utility. Through such consideration of patterns’ lengths, patterns with a large number of low utility items are less likely to be mined by HAUPM algorithms.
Influenced by developments of various real time systems in recent years, data mining in stream environments has emerged as an important issue. Therefore, researches on data mining methods for dealing with stream data have been conducted in many data mining sub-fields such as classification [8], time series data mining [22], and association rule mining. In particular, discovering only up-to-date information by focusing recent stream data can be useful in certain areas. In this regard, since the previous HAUPM algorithms are not suitable for mining recent, interesting patterns from data stream, we devise a novel HAUPM algorithm that can find only recent HAUPs from stream data. On the basis of the sliding window model, the proposed algorithm divides stream data into numerous batches according to their generation time, and considers only the recent batches in its mining process.
The major contributions of this paper can be summarized as follows. In this paper, we introduce the new HAUPM algorithm, named SHAU (Sliding window based High Average Utility pattern mining), adopting the sliding window model in order to consider only recent stream data in its pattern mining process. In addition, we use a tree-based data structure, called SHAU-Tree (Sliding window based High Average Utility pattern Tree), that each node has an additional data structure, named batch-list, for storing average utility information of recent stream data batch by batch. In order to decrease the number of generated candidates, we propose a new strategy named RUG (Reducing average utility Upper bound in the Global SHAU-Tree), which minimizes the values of overestimated average utilities stored in the global SHAU-Tree during the accumulation of stream data. By investigating the experimental results of various experiments performed on real datasets, we show that SHAU has better performance compared to other algorithms in stream environments.
The rest of this paper is organized as follows. Related studies are introduced in section 2. The details of the proposed data structure and the mining process of the proposed algorithm are described in section 3. The performance evaluation of the proposed algorithm is provided in section 4. Finally, in section 5, the paper is concluded with a brief summary and suggestions of the directions for our future studies.
Related work
Utility pattern mining
Numerous high utility pattern mining (HUPM) mining algorithms, such as Two-phase [21], IHUP [2], UP-Growth [29], have been devised in order to find patterns with utilities greater than or equal to a minimum utility from databases. The apriori-like HUPM algorithm, Two-phase, first proposed the concept of transaction weighted utilization (TWU) to maintain the downward closure property in HUPM because the traditional downward closure property [1] in FPM does not hold in HUPM. Two-phase performs the generate-and-test approach based mining process, which generates all of the potential high utility patterns, i.e. candidates, level-by-level through the multiple database scans. When the generation of candidates (phase-1) is finished, Two-phase calculates the actual utilities of candidates through a database scan (phase-2). Thereafter, the tree-based HUPM algorithms, such as IHUP and UP-Growth, were devised in order to improve the mining performance of Two-phase by reducing the number of database scans significantly. These algorithms store TWU information of transactions in their tree-based data structure within one or two database scans. Then, they generate candidate patterns by performing mining processes on the data stored in the trees. Through an additional database scan, they determine actual high utility patterns from candidates.
The concept of high average utility pattern mining (HAUPM) was proposed to overcome the limitations of the utility measure for patterns in HUPM. The first devised HAUPM algorithm, TPAU (Two-Phase Average Utility mining) [9], performs its mining process in the way similar with that of Two-phase. However, TPAU employs the overestimated average utilities of patterns, called average utility upper bounds, to maintain the downward closure property instead of TWU. Through the property, TPAU can achieve the efficient mining performance by excluding the patterns with average utility upper bounds less than a given minimum average utility from sets of candidates. However, TPAU suffers from excessive computational time and huge memory usage caused by its mining process based on the generate-and-test approach. After that, improved HAUPM algorithms, such as PBAU (Projection-Based high Average Utility mining) [12] employing a projection-based data structure and an additional hash table, and ITPAU (Incremental TPAU) [10] designed based on the FUP algorithm [7] for mining HAUPs from incremental databases, have been devised. However, any research on HAUPM methods for mining recent HAUPs over data streams has not yet been conducted.
Mining recent interesting patterns from stream data
Mining valuable patterns from recent stream data has been an interesting topic in the stream pattern mining area. To achieve that goal, the following representative stream pattern mining techniques have been primarily exploited. 1) Landmark window model 2) Damped window model 3) Sliding window model. The characteristics of these models can be summarized as follows. The algorithms based on the landmark model [18, 20] only consider the transactions generated after a user-specified time period in their mining processes. Meanwhile, the algorithms based on the damped window model [4, 6] progressively decays importance of transactions, i.e. frequency in FDM, utility in HUPM, according to their age. Therefore, it can mine patterns that have high importance in recent data by deemphasizing importance of old data. In the algorithms based on the sliding window model [3, 28], stream data are split into multiple chunks, which are called batches. Stream data in the sliding window model can be illustrated as shown in Fig. 1. Among all the stream data, the recently generated batches are included in the range of recent stream data, called a window. Before stream data are processed, a user specifies the number of transactions contained in each batch and the number of batches contained in a window. Whenever a new batch is inputted, the window slides, and the oldest batch is excluded from the window. When an algorithm based on the model receives a mining task, the mining process is performed on only the data included in the current window, and the patterns that have high importance in the window are mined as recent patterns.
Preliminaries
In the case of a market database, each transaction in the database is information of a customer, and each item is a product purchased by the customer. In the transaction, each product has its own quantity information, called internal utility. In Table 1, the left table, Table 1(a), shows example stream data consisting of eight transactions. On the other hand, the right table, Table 1(b), shows the profit information of each item, called external utility. In Table 1(a), each transaction has a unique identifier, called TID. As mentioned earlier, in the sliding window model, stream data are divided into multiple batches. Assume that the sizes of each batch and window are set as 2 and 3 by a user, respectively. The stream data in Table 1(a) can be split into four different batches from B1 to B4. The initial window, W1, contains three batches from B1 to B3. When B4 is inputted as new data, the oldest batch, B1, is replaced with B4. Then, the currentwindow becomes W2, which includes only B2, B3, and B4.
Let D = {T1, T2, …, T n } be stream data, T ={i1, i2, …, i k } be a transaction, I = {i1, i2, …, i l } be a set of distinct items existing in D, and X be an itemset (or pattern) generated from D where T ∈ D, T ⊆ I, and X ⊆ I.
The following definitions are used in HAUPM.
For example, in Table 1, the utility of Ain T1 is u (A, T1) =1 × 2 =2.
For example, in Table 1, the average utility of the pattern, AB, in T1 is
For example, in Table 1, the average utility of AB in D is au (AB) = au (AB, T1)+ au (AB, T3) + au (AB, T5) + au (AB, T6) + au (AB, T8) =2.5 +1.5 + 1.5 + 2.5 + 1.5 = 9.5.
For example, in Table 1, the maximal utility of T1 is mu (T1) = max(2, 3, 4) =4.
For example, in Table 1, the average utility upper bound of AB in D is ub (AB) = mu (T1) + mu (T3) + mu (T5) + mu (T6) + mu (T8) =4 + 12 + 12 + 9 +6 = 43.
If the average utility of a pattern is greater than or equal to the minimum average utility, the pattern is a HAUP. If the average utility upper bound of a pattern is less than a minimum average utility, all of the supersets of the pattern are not HAUPs. Therefore, the downward closure property can be maintained in HAUPM.
Mining high average utility patterns from recent stream data
In this section, we propose a novel algorithm, SHAU, and a tree-based data structure, SHAU-Tree, both of which are designed to mine recent HAUPs over data streams. In subsection 3.1, we provide a detailed explanation of the elements in the proposed data structure and how recent stream data can be stored in the data structure. Our algorithm differs from the previous HAUP algorithms in that old data can be deleted from the proposed data structure by performing updating processes on the data structure. These updating processes are also explained in this subsection. Then, the mining process of our algorithm is described in subsection 3.2. Various examples are also provided in the subsections in order to help understanding. Finally, we analyze the proposed algorithm in subsection 3.3. Figure 2 shows the overall process of SHAU.
Storing recent stream data by constructing the global SHAU-Tree
In order to store information of recent stream data in the global SHAU-Tree, we insert the transactions into the global SHAU-Tree arranging items in a lexicographic order. By inserting a transaction into the tree, its information can be represented as one of the paths in the tree. Each node in the tree has several elements in order to efficiently maintain information of the transactions.
In traditional tree-based pattern mining algorithms, transactions with the same items can be inserted into the tree by simply sharing the same path. In the sliding window model, however, since transactions with the same items can simultaneously exist in different batches, we should store information of batches individually in order to delete only the data that belongs to the oldest batch from the tree when new data are inputted. Therefore, each node in the global SHAU-Tree has an additional data structure, called batch-list, for storing information of transactions batch by batch.
Furthermore, the global SHAU-Tree has a header table that maintains average utility upper bounds of the distinct items in stream data. Each entry in the header table has the identifier of an item and the average utility upper bound of the item in the current window. The entries in header table are sorted in a lexicographic order according to the item identifiers. Meanwhile, each entry in the header table is linked with a node that has the same item as that of the entry. Since each node in the tree is also linked with another node that has the same item, the traversal of the nodes with the same item can be conducted efficiently through the link information in the corresponding entry and nodes.
Reducing average utility upper bounds in the global SHAU-tree
When a transaction is inserted into SHAU-Tree, the average utility upper bound information of patterns can be stored in the global SHAU-Tree by increasing the average utility upper bounds of the corresponding nodes by the maximal utility of the transaction. However, since average utility upper bounds of patterns are overestimated average utilities that can be much greater than actual average utilities of the patterns, a huge number of unnecessary candidates can be generated in the mining process. In this regard, the number of generated candidates can be dramatically reduced by minimizing average utility upper bounds in such a way that any loss of a HAUP does not occur. Through the reduction of the number of generated candidates, the performance of the proposed algorithm can be enhanced because the process for calculating the actualaverageutilities of candidates consumes enormous time. Hence, in order to minimize average utility upper bounds in the global SHAU-Tree, we employ the RUG (Reducing average utility Upper bound in the Global SHAU-Tree) strategy.
Subsequently, we insert other batches B2 and B3 into the global SHAU-Tree. The CMUs of the items in T3 and T4 can be gained as follows: cmu (A, T3) =2, cmu (B, T3) =2, cmu (D, T3) =12, cmu (E, T3) = 12, cmu (B, T4) =2, cmu (E, T4)= 3, cmu (F, T4) =4. Since the path, <A, B>, already exists under the root node, A and B in T3 are inserted by sharing the existing nodes. The rest of the items in T3 are inserted under the path <A, B>by creating new nodes. Since information of B1 is stored in the first elements of batch-lists, the items are inserted by increasing the second elements of batch-lists. After T4 is inserted in the same manner of the insertion of T3, we obtain the global SHAU-Tree in Fig. 3(b). After T5 and T6 in B3 are also inserted in the same manner, we can construct the global SHAU-Tree shown in Fig. 3(c), which maintains the information of W1. As indicated in the figures, three batch-list elements in each node store the ub values of B1, B2, and B3, respectively.
Updating the global SHAU-Tree
If new data is generated from a data stream and the current window is full, we need to replace the data of the oldest batch with the new data in order to make the global SHAU-Tree maintain only the recent stream data. Hence, we should perform an updating process on the global SHAU-Tree whenever the new batch is inputted. This process can be performed via the following steps. First,the information of the oldest batch is removed from all of the nodes in the global SHAU-Tree through the traversal of the tree. If any batch information does not remain in a certain node after the oldest batch is removed, the node is pruned from the tree in order to minimize the memory usage for maintaining the tree. These processes are performed by following the links in the header table in the bottom-up sequence. Since the header table is sorted in a lexicographic order, the processes are performed from the bottommost entry to the uppermost entry. During the updating processes, if a certain node is not pruned from the tree, all of its ancestors are also not pruned from the tree. Accordingly, we do not need to perform any process for merging duplicated nodes after obsoletes nodes are pruned because there are no cases in which the multiple child nodes with the same item exist under a node.
Mining recent high average utility patterns from stored data
To mine recent HAUPs from the data stored in the global SHAU-Tree, the mining process is performed on the basis of the pattern growth approach [11], which employs the divide-and-conquer approach and the recursive call manner. First, we select a prefix item from the header table of the global SHAU-Tree in the bottom-up sequence. Recall that the average utility upper bounds of the items in the header table signify the maximum average utilities of the patterns extended from the items. Therefore, if the average utility upper bound of the selected item in the header table is less than a minimum average utility, we do not perform any pattern growth operations for the item because any pattern extended from the item obviously has an average utility less than a minimum average utility. Otherwise, the item becomes a new prefix, and it is added to a set of candidate patterns. Thereafter, we construct the conditional tree for the prefix. To construct the conditional tree, the conditional pattern base of the prefix is first extracted from the global SHAU-Tree by traveling all of the nodes with the item. For each visited node, the path from the root node to the node is extracted and added to the conditional pattern base. Here, the maximum utility of the extracted path is set as the summation of the average utility upper bounds in the batch-list of the node. After the conditional pattern base is extracted, by summating all of the maximum utilities of the paths in the conditional pattern base for each item, we can obtain the average utility upper bound of each item. On the basis of these values, we remove the items with average utility upper bounds less than the minimum average utility from the conditional pattern base because they cannot generate any HAUP in further pattern growth operations. Based on the remaining items, the conditional tree can be constructed by inserting the paths in the conditional pattern base into the empty conditional tree. In the insertion of a certain path, average utility upper bounds of nodes are increased by the maximum utility of the path. Note that the nodes in conditional trees do not have batch-lists because we do not need to process information of batches individually in the conditional trees. After that, we recursively perform the same process for the next prefix obtained by combining the previous prefix and a new prefix item selected from the header table of the constructed conditional tree.
Description of SHAU algorithm
In this subsection, we describe the procedure of the SHAU algorithm. Fig. 6 shows the overall procedure of the SHAU algorithm. The procedure receives four parameters as follows, S (stream data),δ (a minimum average utility threshold), ws (a window size), and bs (a batch size). In the beginning of the procedure, the global SHAU–Tree, SHAU - Tree, and a set of generated HAUPs, P, are initialized. The variables, b and tn, indicate the current batch number in the window and the current transaction number, respectively. They are initialized to 1. For each transaction in S, the procedure sorts it in a lexicographic order according to the item identifiers, inserts it into SHAU–Tree through the InsertBatch sub-procedure. Then, the value of tn is increased by 1. If the value of tn becomes equal to that of bs, in the other words, the current batch is full with transactions, b is increased by 1. Then, if the value of b becomes greater than that of ws, b is set as 1 because the first batch becomes the oldest batch in the window. When the first transaction of the new batch is inserted, the oldest batch is deleted from SHAU–Tree by calling the DeleteBatch sub-procedure. These processes are repeated by a loop condition until the procedure receives a mining request.
If a mining request occurs, the minimum average utility in the current window, minutil, is calculated on the basis of the current total utility U W and the minimum average utility threshold δ given as a parameter. Thereafter, a set of generated candidates, C, is initialized to an empty set. It is used to store candidates generated in the mining process. For each item in the header table of SHAU–Tree, if the item has an average utility upper bound (denoted as ub) greater than or equal to minutil, the item is added to aset of prefix items p. Then, p is added to C as a new candidate pattern. Then, the conditional tree for the selected item is constructed. After that, by calling the mining procedure, Growth, the pattern growth operations for the prefix are performed. After all the pattern growth operations are finished, actual average utilities of candidates in C are computed in order to determine whether the candidates are HAUPs. Finally, the mined HAUPs are provided to users as mining results, and the procedure continues to process streamdata.
Figures 7 and 8 show the InsertBatch and DeleteBatch sub-procedures. InsertBatch receives a transaction t and the current batch number b as parameters. The procedure inserts the items in the transaction into SHAU-Tree one by one. In order to insert items from the root node, parent initially points to the root node. For each item in the transaction, its CMU is first calculated. Then, the header table is updated by increasing the average utility upper bound of the item by the CMU. If the node with the item does not exist under parent, a new node n is created. Then, n.item is set as the item and n.batchlist is increased by the CMU. Otherwise, the existing node n is updated by increasing n.batchlist[b]. These processes are repeated by a loop condition until there is no next item to be inserted. Figure 8 presents the DeleteBatch sub-procedure. It receives a parameter b, which is the batch number of the batch to be deleted from SHAU-Tree. In order to delete the information of the oldest batch from SHAU-Tree, the links in the header table of SHAU-Tree are traced. The b elementof each visited node n, n.batch-list[b], is set as 0. If all of the elements in the batch-list have 0, this node is pruned from the tree.
The sub-procedure for performing pattern growth operations, Growth, is shown in Fig. 9. For each item in the header table of the given conditional tree ctree, the item is checked whether its average utility upper bound is no less than minutil. If it is, any operation for the item is not performed. Otherwise, the item is selected as the next prefix item, and it is added to the previous prefix, p. Subsequently, the p is added to a set of candidates. Then, the conditional tree for the new prefix, ctree’, is constructed, and Growth is recursively called. If there is no remaining item in the header table, then the procedure is terminated.
Performance evaluation
Environmental settings
In order to evaluate the performance of the SHAU algorithm, several experiments on real datasets have been conducted under various experimental settings. We compared SHAU with ITPAU [10] and STPAU algorithms. As mentioned in section 2, ITPAU is the HAUPM algorithm for mining HAUPs from incremental databases. Meanwhile, STPAU is a naïve sliding window based HAUPM algorithm modified from TPAU [9]. The algorithms were made by the C++ program language. We conducted the experiments on a PC with the 3.30 GHz CPU, 8GB RAM, and Windows 7 64 bit operating system. We implemented SHAU and STPAU to perform their mining processes at each window. ITPAU was implemented to perform the first mining process on the original database containing the same data as those of the first windows of SHAU and STAU. Then, ITPAU continually increases the size of the database by the size of a batch. The real datasets, Chain-store, Retail, Mushroom, and Chess, were used to evaluate the runtime and memory usage performances of the algorithms. Chain-store was gained from NU-Minebench 2.0 (http://cucis.ece.northwestern.edu/projects/DMS/MineBench.html), and the rest of datasets were obtained from the FIMI repository (http://fimi.cs.helsinki.fi). Chain-store and Retail are the datasets containing retail market basket data. Mushroom is a dataset contains information about 23 species of mushrooms. Chess contains the data collected from a number of chess games. The information of each real dataset, the number of transactions in a dataset (|D|), the average length of transactions (|T|), and the number of distinct items (|I|), are shown in Table 3.
Performance comparison under different minimum average utility thresholds
First, we compare the performances of the algorithms under different minimum average utility thresholds. In order to show the effects on the performances of the compared algorithms caused by the changes of minimum average utility thresholds, experiments were conducted where the sizes of each batch and a window were fixed. Figures 10 and 11 present the experimental results of runtime and memory usage tests under different minimum average utility thresholds, respectively. In the figures, the values of ws and bs indicate the sizes of each batch and a window, respectively. In Fig. 10, they-axis shows the changes of the algorithms’runtimes, and the x axis signifies the decrease of a minimum average utility threshold. We determine the total runtimes of the algorithms as the summations of runtimes for mining processes at all windows. However, in the experiments on Chain-store, the algorithms only perform their mining processes at the first windows because enormous runtimes are required to finish the mining processes for the entire data of Chain-store. Moreover, since the runtimes of the apriori-like algorithms, STPAU and ITPAU, can significantly increase, if total runtimes exceed 10000 seconds during the experiments, we terminate the mining processes considering they do not normally work. Through the observation on the experimental results in Fig. 10, we can determine that the runtime performances of the compared algorithms generally become worse at low minimum average utility thresholds because the number of generated candidates is increased along with the decrease of the threshold. However, we can observe that SHAU has the highest runtime performance in all cases. Moreover, the runtimes of STPAU and ITPAU rise much faster than that of SHAU. In the experimental results, we also see that the mining processes of SHAU are completed within 50 seconds, while the mining processes of ITPAU and STPAU spend at least 150 seconds to be completed. Since the mining processes of STPAU spend over 10000 seconds at the minimum average utility thresholds lower than 0.41 % , the processes are terminated before being completed. Overall, both STPAU and ITPAU have the runtime performances much worse than that of SHAU. Meanwhile, since ITPAU utilizes the concept of the FUP algorithm in order to reduce the number of database scans in each mining process, it generally has runtime performances slightly better than those of STAPU except for the performance in Fig. 10(d).
Next, we compare the memory performances of the algorithms. Figure 11 shows the experimental results of the memory usage test under different minimum average utility thresholds. These experiments have been conducted with the same conditions as those of the runtime test in Fig. 10. However, the y-axis indicates the change of memory usage instead of the change of runtime. The memory performances of the algorithms were measured in their peak memory usage during their entire mining processes. Since the algorithms use large memory to generate a large number of candidates at low thresholds, we can observe that the memory performances of the algorithms generally worsen as the minimum average utility threshold is decreased. However, we can know that SHAU consumes much lower memory than those ITPAU and STPAU in all cases. The reason is that ITPAU and STPAU generate a huge number of potential candidates because they follow the generate-and-test approach. At the low threshold settings, ITPAU and STPAU consume memories, which are almost two times of that of SHAU. Meanwhile, ITPAU has memory performance somewhat worse than that of STPAU because ITPAU is designed to store the information of a set of HAUPs generated from the mining process in the main memory in order to utilize them in the next incremental mining process.
Conclusions
In this paper, we proposed the first HAUPM algorithm considering the time factors of transactions in order to find recent, important HAUPs over data streams. We devised SHAU-Tree to efficiently maintain recent stream data consisting of multiple batches. Each batch can be handled individually by employing batch-lists of nodes in the global SHAU-Tree. In addition, we suggested the RUG strategy, which minimizes the average utility upper bounds in the global SHAU-Tree. However, since stream data are rapidly generated from various applications, processing them within minimum runtimes is an important issue. Moreover, maintaining memory usage within minimum sizes is also a primary challenge because the sizes of the stream data are typically very large. Therefore, in order to achievemore efficient mining processes in stream environments, runtime and memory performances of the algorithm should be improved. In this respect, we are planning to conduct research for enhancing the performance of our algorithm in our upcoming studies.
Footnotes
Acknowledgments
This research was supported by the National Research Foundation of Korea (NRF) funded by the Ministry of Education, Science and Technology (NRF No. 20152062051, and NRF No. 20155054624), and the Business for Academic-industrial Cooperative establishments funded Korea Small and Medium Business Administration in 2015 (Grants No. C0261068).
