<?xml version="1.0" encoding="utf-8"?><?xml-stylesheet type='text/xsl' href='http://tangl99.spaces.live.com/mmm2008-07-24_12.50/rsspretty.aspx?rssquery=en-US;http%3a%2f%2ftangl99.spaces.live.com%2fcategory%2f%e6%95%b0%e6%8d%ae%e5%ba%93%e4%b8%8e%e7%9f%a5%e8%af%86%e5%b7%a5%e7%a8%8b%2ffeed.rss' version='1.0'?><rss version="2.0" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:msn="http://schemas.microsoft.com/msn/spaces/2005/rss" xmlns:live="http://schemas.microsoft.com/live/spaces/2006/rss" xmlns:dcterms="http://purl.org/dc/terms/" xmlns:cf="http://www.microsoft.com/schemas/rss/core/2005" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>Tang Liang's notebook: 数据库与知识工程</title><description /><link>http://tangl99.spaces.live.com/?_c11_BlogPart_BlogPart=blogview&amp;_c=BlogPart&amp;partqs=cat%25E6%2595%25B0%25E6%258D%25AE%25E5%25BA%2593%25E4%25B8%258E%25E7%259F%25A5%25E8%25AF%2586%25E5%25B7%25A5%25E7%25A8%258B</link><language>en-US</language><pubDate>Mon, 18 Aug 2008 14:23:05 GMT</pubDate><lastBuildDate>Mon, 18 Aug 2008 14:23:05 GMT</lastBuildDate><generator>Microsoft Spaces v1.1</generator><docs>http://www.rssboard.org/rss-specification</docs><ttl>60</ttl><cf:parentRSS>http://tangl99.spaces.live.com/blog/feed.rss</cf:parentRSS><live:type>blogcategory</live:type><live:identity><live:id>-508484562895931526</live:id><live:alias>tangl99</live:alias></live:identity><cf:listinfo><cf:group ns="http://schemas.microsoft.com/live/spaces/2006/rss" element="typelabel" label="Type" /><cf:group ns="http://schemas.microsoft.com/live/spaces/2006/rss" element="tag" label="Tag" /><cf:group element="category" label="Category" /><cf:sort element="pubDate" label="Date" data-type="date" default="true" /><cf:sort element="title" label="Title" data-type="string" /><cf:sort ns="http://purl.org/rss/1.0/modules/slash/" element="comments" label="Comments" data-type="number" /></cf:listinfo><item><title>Introduction to Fuzzy System</title><link>http://tangl99.spaces.live.com/Blog/cns!F8F17FFBEED1777A!669.entry</link><description>&lt;p&gt; &lt;p&gt;&lt;b&gt;Introduction to Fuzzy System&lt;/b&gt; &lt;p&gt;Writer ：&lt;i&gt;unkonwn&lt;/i&gt; , Publication Date： &lt;i&gt;2004-12-12&lt;/i&gt;&lt;i&gt; &lt;/i&gt; &lt;p&gt;&lt;b&gt;Fuzzy Logic - a powerful new technology&lt;/b&gt; &lt;p&gt;Fuzzy Logic has emerged as a a profitable tool for the controlling of subway systems and complex industrial processes, as well as for household and entertainment electronics, diagnosis systems and other expert systems. Although, Fuzzy Logic was invented in the United States the rapid growth of this technology has started from Japan and has now again reached the USA and Europe also. Fuzzy Logic is still booming in Japan, the number of letters patent applied for increases exponentially. The main part deals with rather simple applications of Fuzzy Control. Fuzzy has become a key-word for marketing. Electronic articles without Fuzzy-component gradually turn out to be dead stock. As a gag, that shows the popularity of Fuzzy Logic, there even exists a toiletpaper with &amp;quot;Fuzzy Logic&amp;quot; printed on it. &lt;p&gt;In Japan Fuzzy-research is widely supported with a huge budget. In Europe and the USA efforts are being made to catch up with the tremendous japanese success. For instance, the NASA space agency is engaged in applying Fuzzy Logic for complex docking-maneuvers. Fuzzy Logic is basically a multivalued logic that allows intermediate values to be defined between conventional evaluations like yes/no, true/false, black/white, etc. Notions like rather warm or pretty cold can be formulated mathematically and processed by computers. In this way an attempt is made to apply a more human-like way of thinking in the programming of computers. &lt;p&gt;Fuzzy Logic was initiated in 1965 by Lotfi A. Zadeh, professor for computer science at the University of California in Berkeley. &lt;p&gt;&lt;b&gt;What is a Fuzzy Set?&lt;/b&gt; &lt;p&gt;The very basic notion of fuzzy systems is a Fuzzy (sub)set. In classical mathematics we are familiar with what we call crisp sets. &lt;p&gt;Here is an example: &lt;p&gt;First we consider a set X of all real numbers between 0 and 10 which we call the universe of discourse. Now, let′s define a subset A of X of all real-numbers in the range between 5 and 8. &lt;p&gt;A = [5,8] &lt;p&gt;We now show the set A by its characteristic function, i.e. this function assigns a number 1 or 0 to each element in X, depending on whether the element is in the subset A or not. This results in the following figure:&lt;br&gt;&lt;img height=206 src="http://tk3.storage.msn.com/x1pxOYwqu4SjF6L_Nq00vjHQnTpxhqiYdHm2HGf5DRDxnjtucvdCKjpEaBS_67SvrbBy8TCDfKXov294DoUDMhYEm6qp2vPWL9I4MuiBUM27kGw4L90PJUSIYo9BX5ad2nmmCdmYMmWeNk5C29dOHfIcA" width=437&gt; &lt;p&gt;We can interpret the elements which have assigned the number 1 as The elements are in the set A and the elements which have assigned the number 0 as The elements are not in the set A. This concept is sufficient for many areas of applications. But we can easily find situations where it lacks in flexibility. In order to show this consider the following example on the next page: &lt;p&gt;In this example we want to describe the set of young people. More formally we can denote &lt;p&gt;B = {set of young people} &lt;p&gt;Since - in general - age starts at 0 the lower range of this set ought to be clear. The upper range, on the other hand, is rather hard to define. As a first attempt we set the upper range to, say, 20 years. Therefore we get B as a crisp interval, namely: &lt;p&gt;B = [0,20] &lt;p&gt;Now the question arises: why is somebody on his 20th birthday young and right on the next day not young? Obviously, this is a structural problem, for if we move the upper bound of the range from 20 to an arbitrary point we can pose the same question. &lt;p&gt;A more natural way to construct the set B would be to relax the strict separation between young and not young. We will do this by allowing not only the (crisp) decision YES he/she is in the set of young people or NO he/she is not in the set of young people but more flexible phrases like Well, he/she belongs a little bit more to the set of young people or NO, he/she belongs nearly not to the set of young people. &lt;p&gt;The next page shows how a fuzzy set allows us to define such a notion as s/he is a little young. &lt;p&gt;As stated in the introduction we want to use fuzzy sets to make computers smarter, we now have to code the above idea more formally. In our example. we coded all the elements of the Universe of Discourse with 0 or 1. A straight way to generalize this concept is to allow more values between 0 and 1. In fact, we even allow infinite many alternatives between 0 and 1, namely the unit interval I = [0, 1]. The interpretation of the numbers now assigned to all elements of the Universe of Discourse is much more difficult. Of course, again the number 1 assigned to an element means that the element is in the set B and 0 means that the element is definitely not in the set B. All other values mean a gradual membership to the set B. To be more concrete we now show the set of young people similar to our first example graphically by its characteristic function.&lt;br&gt;&lt;img height=226 src="http://tk3.storage.msn.com/x1pxOYwqu4SjF6L_Nq00vjHQnTpxhqiYdHm2HGf5DRDxnhJ8Y4_u6gozcxPkVt4NFui_PTYBbGjlfVsaeIJlYABspFxn4NGZoqSoKsAaAWf0PPXjWcgd6PFQWtnUsuPtSGhF4mTBvXf21HB4avkuRtqyg" width=427&gt; &lt;p&gt;This way a 25 years old would still be young to a degree of 50 percent. &lt;p&gt;Now you know what a fuzzy set is. But what can you do with it? &lt;p&gt;&lt;b&gt;Operations on Fuzzy Sets&lt;/b&gt; &lt;p&gt;Now that we have an idea of what fuzzy sets are, we can introduce basic operations on fuzzy sets. Similar to the operations on crisp sets we also want to intersect, unify, negate fuzzy sets. In his very first paper about fuzzy sets, L. A. Zadeh suggested the minimum operator for the intersection and the maximum operator for the union of two fuzzy sets. It is easy to see that these operators coincide with the crisp unification, and intersection if we only consider the membership degrees 0 and 1. In order to clarify this, we give a few examples. Let A be a fuzzy interval between 5 and 8 and B be a fuzzy number about 4. The corresponding figures are shown below. &lt;p&gt;&lt;img height=179 src="http://tk3.storage.msn.com/x1pxOYwqu4SjF6L_Nq00vjHQnTpxhqiYdHm2HGf5DRDxnh0EBJ3GTDRkWRi7iyGvFt2TyWdsYizKvzdKbf2tvjDQwj7B67VbqxZpajS5iHDgHmtBkJtP1aeT_5Wqpaz4CvrOS_SGAWlTRwAxY6rd-RAuA" width=308&gt;&lt;br&gt;&lt;img height=179 src="http://tk3.storage.msn.com/x1pxOYwqu4SjF6L_Nq00vjHQnTpxhqiYdHm2HGf5DRDxngWmDeQIj-4bOQoQdOLDm1O0Xd6zvO5PMFIWkvhyPj4sN5_eYfM3Hrxse5drFofkk_iHByM9tsvkXJs8Lc5vUISYitnqmdrL2f6c_Dj_HgxVw" width=309&gt;&lt;br&gt;The following figure shows the fuzzy set between 5 and 8 AND about 4 (notice the blue line).&lt;br&gt;&lt;img height=179 src="http://tk3.storage.msn.com/x1pxOYwqu4SjF6L_Nq00vjHQnTpxhqiYdHm2HGf5DRDxniEGiM6O1x7QerqQIv45nKZ7iCCu0nov3xL1UFzqV8davQYZYvsr2wc9Ud-Us0IlKiWfRInfnVFbDOU_7yGjYwRC_mo5a33BoZYnp9J-22f1g" width=329&gt; &lt;p&gt;The Fuzzy set between 5 and 8 OR about 4 is shown in the next figure (again, it is the blue line).&lt;br&gt;&lt;img height=179 src="http://tk3.storage.msn.com/x1pxOYwqu4SjF6L_Nq00vjHQnTpxhqiYdHm2HGf5DRDxniBZ9-OOGuQf2YdzTII9lDE3ld_sJb4MNRia4KWH4EOxh_47JaM_1RYLDsPsNK-gtOQL9Tctk2zJyu6SGPkz2j2IH-PSeOGN1rVxnubEXU-Sw" width=329&gt; &lt;p&gt;This figure gives an example for a negation. The blue line is the NEGATION of the fuzzy set A.&lt;br&gt;&lt;img height=179 src="http://tk3.storage.msn.com/x1pxOYwqu4SjF6L_Nq00vjHQnTpxhqiYdHm2HGf5DRDxnhhVNZQdYliQ4sePQBYxe2kFAEXKL7Po7B2fmKSKWYhGrHETy5w2uM18pAHQcPkb-mLKeYeuEyvXDL0-yQLHl0Gz_BRvPx2MVOGxOhga2sXAQ" width=309&gt; &lt;p&gt;&lt;b&gt;Applications for Fuzzy Logic&lt;/b&gt; &lt;p&gt;Here are some examples of how Fuzzy Logic has been applied in reality: &lt;ul&gt; &lt;li&gt;Automatic control of dam gates for hydroelectric-powerplants (Tokio Electric Pow.) &lt;li&gt;Simplified control of robots (Hirota, Fuji Electric, Toshiba, Omron) &lt;li&gt;Camera aiming for the telecast of sporting events (Omron) &lt;li&gt;Substitution of an expert for the assessment of stock exchange activities (Yamaichi, Hitachi) &lt;li&gt;Preventing unwanted temperature fluctuations in air-conditioning systems (Mitsubishi, Sharp) &lt;li&gt;Efficient and stable control of car-engines (Nissan) &lt;li&gt;Cruise-control for automobiles (Nissan, Subaru) &lt;li&gt;Improved efficiency and optimized function of industrial control applications (Aptronix, Omron, Meiden, Sha, Micom, Mitsubishi, Nisshin-Denki, Oku-Electronics) &lt;li&gt;Positioning of wafer-steppers in the production of semiconductors (Canon) &lt;li&gt;Optimized planning of bus time-tables (Toshiba, Nippon-System, Keihan-Express) &lt;li&gt;Archiving system for documents (Mitsubishi Elec.) &lt;li&gt;Prediction system for early recognition of earthquakes (Inst. of Seismology Bureau of Metrology, Japan) &lt;li&gt;Medicine technology: cancer diagnosis (Kawasaki Medical School) &lt;li&gt;Combination of Fuzzy Logic and Neural Nets (Matsushita) &lt;li&gt;Recognition of handwritten symbols with pocket computers (Sony) &lt;li&gt;Recognition of motives in pictures with video cameras (Canon, Minolta) &lt;li&gt;Automatic motor-control for vacuum cleaners with recognition of surface condition and degree of soiling (Matsushita) &lt;li&gt;Back light control for camcorders (Sanyo) &lt;li&gt;Compensation against vibrations in camcorders (Matsushita) &lt;li&gt;Single button control for washing-machines (Matsushita, Hitatchi) &lt;li&gt;Recognition of handwriting, objects, voice (CSK, Hitachi, Hosai Univ., Ricoh) &lt;li&gt;Flight aid for helicopters (Sugeno) &lt;li&gt;Simulation for legal proceedings (Meihi Gakuin Univ, Nagoy Univ.) &lt;li&gt;Software-design for industrial processes (Aptronix, Harima, Ishikawajima-OC Engeneering) &lt;li&gt;Controlling of machinery speed and temperature for steel-works (Kawasaki Steel, New-Nippon Steel, NKK) &lt;li&gt;Controlling of subway systems in order to improve driving comfort, precision of halting and power economy (Hitachi) &lt;li&gt;Improved fuel-consumption for automobiles (NOK, Nippon Denki Tools) &lt;li&gt;Improved sensitiveness and efficiency for elevator control (Fujitec, Hitachi, Toshiba) &lt;li&gt;Improved savety for nuklear reactors (Hitachi, Bernard, Nuclear Fuel div.) &lt;/ul&gt; &lt;p&gt;&lt;b&gt;Reference of Fuzzy System&lt;/b&gt; &lt;p&gt;&lt;b&gt;Books&lt;/b&gt; &lt;ol&gt; &lt;li&gt;Kaufmann, Arnold and Gupta, Madan M., Introduction to Fuzzy Arithmetic: Theory and Applications, New York: Van Nostrand Reinhold Company Ltd., 1985. 350 pp. &lt;li&gt;&lt;br&gt;Klir, George J. and Folger, Tina A., Fuzzy Sets, Uncertainty, and Information, Englewood Cliffs, NJ: Prentice Hall, 1988. 355 pp. &lt;li&gt;Kosko, Bart A., Neural Networks and Fuzzy Systems, Prentice-Hall, 1990. &lt;li&gt;Mamdani, E.H. and Gaines, B.R., Fuzzy Reasoning and its Applications, New York: Academic Press, 1981. 380 pp. &lt;li&gt;Negoita, Constantin Virgil, Fuzzy Systems, Cybernetics and Systems Series, Abacus Press, 1981. 120 pp. &lt;li&gt;Sugeno, Michio, Industrial Applications of Fuzzy Control, New York: North-Holland, 1985. 270 pp. &lt;li&gt;Togai, M., Reasoning with Uncertainty for Rule-based Expert Systems, John Wiley &amp;amp; Sons, in progress. &lt;li&gt;Zimmermann, Hans J., Fuzzy Set Theory and its Applications, Boston MA: Kluwer-Nijhoff Publishing, 1985. 360 pp. &lt;/ol&gt; &lt;p&gt;&lt;b&gt;Papers&lt;/b&gt; &lt;ol&gt; &lt;li&gt;Asai, K. and Tanaka, H., &amp;quot;Applications of Fuzzy Sets Theory to Decision-Making and Control,&amp;quot; J. JAACE, 19, 235-242, 1975. &lt;li&gt;&lt;br&gt;Bezdek, J.C., &amp;quot;Fuzzy Mathematics in Pattern Classification,&amp;quot; Ph.D. Dissertation, Center for Applied Mathematics, Cornell University, 1973. &lt;li&gt;Blin, J.M., &amp;quot;Fuzzy Relations in Group Decision Theory,&amp;quot; Journal of Cybernetics, 4, 17-22, 1974. &lt;li&gt;Kosko, Bart A., &amp;quot;Foundations of Fuzzy Estimation Theory,&amp;quot; Ph.D. Dissertation, University of California, Irvine, 1987. &lt;li&gt;Larkin, Lawrence I., &amp;quot;A Fuzzy Controller for Aircraft Flight Control,&amp;quot; Proceedings of the 23rd Conference on Decision and Control, Las Vegas, NV, December 1984. &lt;li&gt;Togai, M., &amp;quot;Principles and Applications of Fuzzy Inference: A New Approach for Decision-making in an Ill-defined System,&amp;quot; Ph.D. Dissertation, Duke University, 1982. &lt;li&gt;Togai, M. and Watanabe, H., &amp;quot;An Inference Engine for Real-Time Approximate Reasoning: Toward an Expert System on a Chip,&amp;quot; IEEE Expert, August 1986. &lt;li&gt;Yasunobu S., Miyamoto S., and Ihara H., &amp;quot;Fuzzy Control for Automatic Train Operation System,&amp;quot; IFAC-CISSS, 4th IFAC/IFIP/IFORS Conference on Control in Transportation Systems, Baden-Baden, F.R.G., April 1983. &lt;li&gt;Zadeh, L.A., &amp;quot;Fuzzy Sets,&amp;quot; Information and Control, 8, 338-353, 1965. &lt;li&gt;Zadeh, L.A., &amp;quot;A Rationale for Fuzzy Control,&amp;quot; Journal of Dynamic Systems, Measurement and Control, G94, 3-4, 1972. &lt;li&gt;Zadeh, L.A., &amp;quot;Fuzzy Logic and Approximate Reasoning,&amp;quot; Synthese, 30, 407-428, 1975. &lt;/ol&gt;&lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=-508484562895931526&amp;page=RSS%3a+Introduction+to+Fuzzy+System&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=tangl99.spaces.live.com&amp;amp;GT1=tangl99"&gt;</description><comments>http://tangl99.spaces.live.com/Blog/cns!F8F17FFBEED1777A!669.entry#comment</comments><guid isPermaLink="true">http://tangl99.spaces.live.com/Blog/cns!F8F17FFBEED1777A!669.entry</guid><pubDate>Fri, 23 Feb 2007 03:56:05 GMT</pubDate><slash:comments>2</slash:comments><msn:type>blogentry</msn:type><live:type>blogentry</live:type><live:typelabel>Blog entry</live:typelabel><wfw:commentRss>http://tangl99.spaces.live.com/blog/cns!F8F17FFBEED1777A!669/comments/feed.rss</wfw:commentRss><wfw:comment>http://tangl99.spaces.live.com/Blog/cns!F8F17FFBEED1777A!669.entry#comment</wfw:comment><dcterms:modified>2007-02-23T03:56:05Z</dcterms:modified></item><item><title>对OpenMiner进行了一系列手术</title><link>http://tangl99.spaces.live.com/Blog/cns!F8F17FFBEED1777A!513.entry</link><description>&lt;div&gt;     &lt;span style="font-size:9pt"&gt;&lt;a href="http://openminer.sourceforge.net/"&gt;&lt;u&gt;&lt;font color="#800080"&gt;OpenMiner&lt;/font&gt;&lt;/u&gt;&lt;/a&gt;&lt;/span&gt;&lt;span style="font-size:9pt"&gt;已经成为了&lt;/span&gt;&lt;span style="font-size:9pt"&gt;&lt;a href="http://www.sourceforge.net/"&gt;&lt;u&gt;&lt;font color="#0000ff"&gt;sourceforge&lt;/font&gt;&lt;/u&gt;&lt;/a&gt;&lt;/span&gt;&lt;span style="font-size:9pt"&gt;的&lt;/span&gt;&lt;span style="font-size:9pt"&gt;approval&lt;/span&gt;&lt;span style="font-size:9pt"&gt;项目。与此同时，我们也开始紧张地对&lt;/span&gt;&lt;span style="font-size:9pt"&gt;OpenMiner&lt;/span&gt;&lt;span style="font-size:9pt"&gt;进行了一系列的外科手术。我现在做的主要是服务器部分的裁剪，尽量把&lt;/span&gt;&lt;span style="font-size:9pt"&gt;OpenMiner&lt;/span&gt;&lt;span style="font-size:9pt"&gt;的核心做得更加简单，更加具有扩展性。而&lt;/span&gt;&lt;span style="font-size:9pt"&gt;OpenMiner&lt;/span&gt;&lt;span style="font-size:9pt"&gt;现在还没有可视化的客户端，另外一个同学&lt;/span&gt;&lt;span style="font-size:9pt"&gt;grand&lt;/span&gt;&lt;span style="font-size:9pt"&gt;现在也开始加紧赶制&lt;/span&gt;&lt;span style="font-size:9pt"&gt;OpenMiner&lt;/span&gt;&lt;span style="font-size:9pt"&gt;的客户端，我们的客户端打算仿造&lt;/span&gt;&lt;span style="font-size:9pt"&gt;&lt;a href="http://rapid-i.com/"&gt;&lt;u&gt;&lt;font color="#800080"&gt;Yale&lt;/font&gt;&lt;/u&gt;&lt;/a&gt;&lt;/span&gt;&lt;span style="font-size:9pt"&gt;。&lt;/span&gt;
&lt;div style="text-indent:21pt"&gt;&lt;span style="font-size:9pt"&gt;首先的第一个手术就是减掉阑尾。&lt;/span&gt; &lt;span style="font-size:9pt"&gt;之前在给教务处做决策系统的时候，为了赶进度，&lt;/span&gt;&lt;span style="font-size:9pt"&gt;OpenMiner&lt;/span&gt;&lt;span style="font-size:9pt"&gt;过于依赖了&lt;/span&gt;&lt;span style="font-size:9pt"&gt;Oracle&lt;/span&gt;&lt;span style="font-size:9pt"&gt;数据库，各种数据集的提取，以及挖掘模型的存取，都是基于&lt;/span&gt;&lt;span style="font-size:9pt"&gt;Oracle&lt;/span&gt;&lt;span style="font-size:9pt"&gt;的&lt;/span&gt;&lt;span style="font-size:9pt"&gt;JDBC&lt;/span&gt;&lt;span style="font-size:9pt"&gt;来访问的。而&lt;/span&gt;&lt;span style="font-size:9pt"&gt;Oracle&lt;/span&gt;&lt;span style="font-size:9pt"&gt;的&lt;/span&gt;&lt;span style="font-size:9pt"&gt;JDBC&lt;/span&gt;&lt;span style="font-size:9pt"&gt;特别是在处理&lt;/span&gt;&lt;span style="font-size:9pt"&gt;BLOB&lt;/span&gt;&lt;span style="font-size:9pt"&gt;数据块的时候，又和标准的&lt;/span&gt;&lt;span style="font-size:9pt"&gt;JDBC&lt;/span&gt;&lt;span style="font-size:9pt"&gt;不兼容，于是搞得代码很不具备通用性。现在的&lt;/span&gt;&lt;span style="font-size:9pt"&gt;OpenMiner&lt;/span&gt;&lt;span style="font-size:9pt"&gt;，不仅是需要对&lt;/span&gt;&lt;span style="font-size:9pt"&gt;ORACLE&lt;/span&gt;&lt;span style="font-size:9pt"&gt;的很好支持，同时还要能够对各个方面的数据集进行很好的访问，当然，训练数据集都是只读，也就是&lt;/span&gt;&lt;span style="font-size:9pt"&gt;OLAP&lt;/span&gt;&lt;span style="font-size:9pt"&gt;。作为一个数据分析，我希望设计处理的服务程序不仅能够从数据库中提取数据，还希望能够从各种文件格式&lt;/span&gt;&lt;span style="font-size:9pt"&gt;(excel, xml,&lt;/span&gt;&lt;span style="font-size:9pt"&gt;等&lt;/span&gt;&lt;span style="font-size:9pt"&gt;)&lt;/span&gt;&lt;span style="font-size:9pt"&gt;，以及远程的&lt;/span&gt;&lt;span style="font-size:9pt"&gt;Socket&lt;/span&gt;&lt;span style="font-size:9pt"&gt;输入流来获取训练数据集。减掉了旧的&lt;/span&gt;&lt;span style="font-size:9pt"&gt;Oracle&lt;/span&gt;&lt;span style="font-size:9pt"&gt;处理模块后，需要新增加的就是一个比较齐全的输入数据抽象层了。采用设计模式中的抽象工厂&lt;/span&gt;&lt;span style="font-size:9pt"&gt;Abstract Factory&lt;/span&gt;&lt;span style="font-size:9pt"&gt;的方式来实现。这样，对于数据挖掘的算法模块来说，就只有一个&lt;/span&gt;&lt;span style="font-size:9pt"&gt;InputDataSet&lt;/span&gt;&lt;span style="font-size:9pt"&gt;输入数据集的接口，训练数据就只能从这里面来提取，根本不用去理会这个&lt;/span&gt;&lt;span style="font-size:9pt"&gt;InputDataSet&lt;/span&gt;&lt;span style="font-size:9pt"&gt;是一个什么样的数据来源和怎么样创建的。于是乎，文件数据，数据库数据，&lt;/span&gt;&lt;span style="font-size:9pt"&gt;Socket&lt;/span&gt;&lt;span style="font-size:9pt"&gt;流输入数据，就能很好地统一到&lt;/span&gt;&lt;span style="font-size:9pt"&gt;InputDataSet&lt;/span&gt;&lt;span style="font-size:9pt"&gt;接口下了。&lt;/span&gt;&lt;/div&gt;
&lt;div style="text-indent:21pt"&gt;&lt;span style="font-size:9pt"&gt;其次，关于使用挖掘模型的接口函数，统统从&lt;/span&gt;&lt;span style="font-size:9pt"&gt;Miner&lt;/span&gt;&lt;span style="font-size:9pt"&gt;类删除。因为如何使用一个挖掘完成的模型，是根据应用程序&lt;/span&gt;&lt;span style="font-size:9pt"&gt;Application&lt;/span&gt;&lt;span style="font-size:9pt"&gt;来决定的。如果&lt;/span&gt;&lt;span style="font-size:9pt"&gt;OpenMiner&lt;/span&gt;&lt;span style="font-size:9pt"&gt;来做，并不见得做得能用，而且，使用一个模型的方法千变万化，&lt;/span&gt;&lt;span style="font-size:9pt"&gt;OpenMiner&lt;/span&gt;&lt;span style="font-size:9pt"&gt;做起来也麻烦，于是，最好的办法就是，不做，统统删除！&lt;/span&gt;&lt;/div&gt;
&lt;div style="text-indent:21pt"&gt;&lt;span style="font-size:9pt"&gt;最后，我考虑将挖掘模型的存储访问管理，放在客户端来进行。原因很简单，&lt;/span&gt;&lt;span style="font-size:9pt"&gt;OpenMiner&lt;/span&gt;&lt;span style="font-size:9pt"&gt;就只做&lt;/span&gt;&lt;span style="font-size:9pt"&gt;Data Mining&lt;/span&gt;&lt;span style="font-size:9pt"&gt;的工作，不做&lt;/span&gt;&lt;span style="font-size:9pt"&gt;Data Mining&lt;/span&gt;&lt;span style="font-size:9pt"&gt;以外的任何工作。这里所谓的客户端，并不一定就是用户实用的客户端，也可能是应用系统，只是从&lt;/span&gt;&lt;span style="font-size:9pt"&gt;OpenMiner&lt;/span&gt;&lt;span style="font-size:9pt"&gt;服务提供者来说的客户端的意思。如何管理挖掘模型&lt;/span&gt;&lt;span style="font-size:9pt"&gt;Model&lt;/span&gt;&lt;span style="font-size:9pt"&gt;这个问题，本身并不能轻率，因为现实企业应用系统中，可能挖掘模型数量成百上千，如此庞大的挖掘结果模型，一般的文件系统并不见得高效，而应该放在数据库的，针对各种数据库的访问，那么就成了一个问题。同时，挖掘模型也可能存在安全性的问题。要让&lt;/span&gt;&lt;span style="font-size:9pt"&gt;OpenMiner&lt;/span&gt;&lt;span style="font-size:9pt"&gt;去这样复杂的一项工作，很难做得好。既然做不好，最好的办法就是，不做，统统删除。&lt;/span&gt;&lt;/div&gt;
&lt;div style="text-indent:21pt"&gt;&lt;span style="font-size:9pt"&gt;做了这些过后，&lt;/span&gt;&lt;span style="font-size:9pt"&gt;OpenMiner&lt;/span&gt;&lt;span style="font-size:9pt"&gt;的核心服务器的手术基本上可以算完成了。剩下的就是客户端的事情了。我们现在的这个客户端功能很大，把以前本该是服务器做的模型管理的工作都移交到了客户端来做，于是&lt;/span&gt;&lt;span style="font-size:9pt"&gt;grand&lt;/span&gt;&lt;span style="font-size:9pt"&gt;现在也忙起来。关于客户端的开发，我推荐使用&lt;/span&gt;&lt;span style="font-size:9pt"&gt;&lt;a href="http://www.netbeans.org/"&gt;&lt;u&gt;&lt;font color="#800080"&gt;NetBeans 5.5RC1&lt;/font&gt;&lt;/u&gt;&lt;/a&gt;&lt;/span&gt;&lt;span style="font-size:9pt"&gt;来开发。因为&lt;/span&gt;&lt;span style="font-size:9pt"&gt;Eclipse&lt;/span&gt;&lt;span style="font-size:9pt"&gt;的&lt;/span&gt;&lt;span style="font-size:9pt"&gt;VE&lt;/span&gt;&lt;span style="font-size:9pt"&gt;插件做得太老火了，经常出问题，而且又慢又兼容性也不好（&lt;/span&gt;&lt;span style="font-size:9pt"&gt;3.1&lt;/span&gt;&lt;span style="font-size:9pt"&gt;和&lt;/span&gt;&lt;span style="font-size:9pt"&gt;3.2&lt;/span&gt;&lt;span style="font-size:9pt"&gt;的&lt;/span&gt;&lt;span style="font-size:9pt"&gt;VE&lt;/span&gt;&lt;span style="font-size:9pt"&gt;都不兼容）。而&lt;/span&gt;&lt;span style="font-size:9pt"&gt;NetBeans&lt;/span&gt;&lt;span style="font-size:9pt"&gt;本身就自带了可视化的界面开发功能，速度和稳定性都比&lt;/span&gt;&lt;span style="font-size:9pt"&gt;Eclipse&lt;/span&gt;&lt;span style="font-size:9pt"&gt;那种外部插件的好。虽然&lt;/span&gt;&lt;span style="font-size:9pt"&gt;Eclipse&lt;/span&gt;&lt;span style="font-size:9pt"&gt;一度成为&lt;/span&gt;&lt;span style="font-size:9pt"&gt;IDE&lt;/span&gt;&lt;span style="font-size:9pt"&gt;的典范，但是&lt;/span&gt;&lt;span style="font-size:9pt"&gt;SUN&lt;/span&gt;&lt;span style="font-size:9pt"&gt;的新秀&lt;/span&gt;&lt;span style="font-size:9pt"&gt;NetBeans&lt;/span&gt;&lt;span style="font-size:9pt"&gt;也有它不错的有点。随便说一下，&lt;/span&gt;&lt;span style="font-size:9pt"&gt;NetBeans&lt;/span&gt;&lt;span style="font-size:9pt"&gt;也是免费开源的，可以随便下载。&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=-508484562895931526&amp;page=RSS%3a+%e5%af%b9OpenMiner%e8%bf%9b%e8%a1%8c%e4%ba%86%e4%b8%80%e7%b3%bb%e5%88%97%e6%89%8b%e6%9c%af&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=tangl99.spaces.live.com&amp;amp;GT1=tangl99"&gt;</description><comments>http://tangl99.spaces.live.com/Blog/cns!F8F17FFBEED1777A!513.entry#comment</comments><guid isPermaLink="true">http://tangl99.spaces.live.com/Blog/cns!F8F17FFBEED1777A!513.entry</guid><pubDate>Sat, 21 Oct 2006 16:21:38 GMT</pubDate><slash:comments>0</slash:comments><msn:type>blogentry</msn:type><live:type>blogentry</live:type><live:typelabel>Blog entry</live:typelabel><wfw:commentRss>http://tangl99.spaces.live.com/blog/cns!F8F17FFBEED1777A!513/comments/feed.rss</wfw:commentRss><wfw:comment>http://tangl99.spaces.live.com/Blog/cns!F8F17FFBEED1777A!513.entry#comment</wfw:comment><dcterms:modified>2006-10-21T16:21:38Z</dcterms:modified></item><item><title>开始筹划第一篇paper了</title><link>http://tangl99.spaces.live.com/Blog/cns!F8F17FFBEED1777A!505.entry</link><description>&lt;div&gt;   国庆的假期就这样完了。昨天总算和师兄讨论了一下我的论文的想法，师兄一来就提出,在real-time data stream情况下，GEP根本不可能做到多好，于是，这一句话，就让我剩下讨论的所有为了让GEP快速适应data stream的所有方法都显得没有价值了。交流总是有效果的，当初做一篇paper是为了解决一个问题，但是实际讨论过程中，又会产生新的问题，于是，最后的paper可能就变成解决新的问题了。于是，最后讨论的结果，就是把整个论文的主题细化，总之，就是解决一个问题，在一个关键点上做文章，而不要从大范围上提出一套方案出来。回来的路上一想，的确，自己在思考问题的时候，还是不够深入，不够细化，还是本科时候的思维方式，这一点以后一定要改进。&lt;/div&gt;
&lt;div&gt;   今天下午又和数学学院的老同学聚会了一下，探讨了做学术，出国等很多问题，谈到的都是现在和将来，而没有谈及从前。想当初我们是从小学就在一起学习数学奥林匹克，不过最后他继续选择学习数学，而我选择了自己最喜欢的计算机。他现在做的是基础数学，发一片paper难度十分大，基本上只有读到博士，才有资格说做出自己的东西来写文章。导师曾经说过，搞计算机是勤能补拙的，搞数学就真的要靠天分了。最后，我也把现在计算机方面的一些问题请教了他，不过很可惜，他现在做的是基础数学，而非计算数学和应用数学，于是，可能我们之间的领域间隔比想象中的要大一些。不过，搞计算机理学搞到了研究生这个地步，做来做去，也就无非和数学模型，计算方法打交道而已，说来说去，还是数学呢。&lt;/div&gt;
&lt;div&gt;  论文的主题确定还需要经过导师的意见，而导师的意见往往是最重要的。不过，直接冲过去交流，老师不见得一下子明白我说得意思，而且，老师也经常行踪不定，所以师兄还是建议我写成一份文档，然后发给老师，老师有空就会看。&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;&lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=-508484562895931526&amp;page=RSS%3a+%e5%bc%80%e5%a7%8b%e7%ad%b9%e5%88%92%e7%ac%ac%e4%b8%80%e7%af%87paper%e4%ba%86&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=tangl99.spaces.live.com&amp;amp;GT1=tangl99"&gt;</description><comments>http://tangl99.spaces.live.com/Blog/cns!F8F17FFBEED1777A!505.entry#comment</comments><guid isPermaLink="true">http://tangl99.spaces.live.com/Blog/cns!F8F17FFBEED1777A!505.entry</guid><pubDate>Sat, 07 Oct 2006 16:24:12 GMT</pubDate><slash:comments>0</slash:comments><msn:type>blogentry</msn:type><live:type>blogentry</live:type><live:typelabel>Blog entry</live:typelabel><wfw:commentRss>http://tangl99.spaces.live.com/blog/cns!F8F17FFBEED1777A!505/comments/feed.rss</wfw:commentRss><wfw:comment>http://tangl99.spaces.live.com/Blog/cns!F8F17FFBEED1777A!505.entry#comment</wfw:comment><dcterms:modified>2006-10-07T16:24:12Z</dcterms:modified></item><item><title>openminer的sourceforge项目申请成功了</title><link>http://tangl99.spaces.live.com/Blog/cns!F8F17FFBEED1777A!497.entry</link><description>&lt;div&gt;整个openminer数据挖掘引擎的开源项目申请挺顺利的，唯一麻烦一点的就是需要填写一大段英文的项目描述。不过从昨天到今天，总共24小时，基本上所有的sf.net服务都已经给我开通了。只是现在我还没有制作任何主页和文件上传到sourceforge.net的服务器上。 
&lt;p&gt;  下面是我的openminer的项目描述，英文的：
&lt;p&gt;openminer&lt;br&gt;With the volume of the data increasing rapidly and greatly nowadays, making best use of the large scale of data becomes more necessary, which also accelerates the development of data mining technology. Thus, the openminer, as a data mining engine, is developed on java for analysis of dataset with the methods of data mining. By making use of openminer, we could discovery the knowledge which interests us but hides in the raw data.&lt;br&gt;  Before openminer, there is an open source project called weka, which is also used for data mining but it can only process small scale of dataset. Weka is developed as a toolkit of data mining and machine learning algorithms, so it is not easy to be integrated directly in the application software system.&lt;br&gt;  Openminer, as a data mining engine, provides a serials of interfaces and can be used in the projects which need data analysis service. It is an independent server program that can works in background. Openminer is also the container of data mining algorithms, it provides classical and new mining algorithms for association rules, classifier rules and cluster rules. We have already taken this data mining engine as a component of Credit Decision System which analyses the information about students. We integrated openminer with the web application of the students information management system. So, the fact approves that openminer can work efficiently and do great contribution to the projects with data analysis service.  &lt;br&gt;
&lt;p&gt; openminer就是一个开源的数据挖掘引擎。这个项目本来是我本科的毕业设计，现在我读研究生的方向也正是数据挖掘，于是就打算把这个项目发扬光大下去，同时还可以利用这个项目，做一些实验工作等等。
&lt;p&gt;  openminer的Home Page: &lt;a href="http://openminer.sourceforge.net/"&gt;&lt;u&gt;&lt;font color="#800080"&gt;http://openminer.sourceforge.net/&lt;/font&gt;&lt;/u&gt;&lt;/a&gt; 和 &lt;a href="http://sourceforge.net/projects/openminer/"&gt;&lt;u&gt;&lt;font color="#800080"&gt;http://sourceforge.net/projects/openminer/&lt;/font&gt;&lt;/u&gt;&lt;/a&gt;
&lt;p&gt;  最后附上如何管理sf.net项目的一篇文章的地址： &lt;a href="http://www.kylinx.net/node/79"&gt;&lt;u&gt;&lt;font color="#800080"&gt;http://www.kylinx.net/node/79&lt;/font&gt;&lt;/u&gt;&lt;/a&gt;&lt;/div&gt;&lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=-508484562895931526&amp;page=RSS%3a+openminer%e7%9a%84sourceforge%e9%a1%b9%e7%9b%ae%e7%94%b3%e8%af%b7%e6%88%90%e5%8a%9f%e4%ba%86&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=tangl99.spaces.live.com&amp;amp;GT1=tangl99"&gt;</description><comments>http://tangl99.spaces.live.com/Blog/cns!F8F17FFBEED1777A!497.entry#comment</comments><guid isPermaLink="true">http://tangl99.spaces.live.com/Blog/cns!F8F17FFBEED1777A!497.entry</guid><pubDate>Wed, 04 Oct 2006 03:21:11 GMT</pubDate><slash:comments>1</slash:comments><msn:type>blogentry</msn:type><live:type>blogentry</live:type><live:typelabel>Blog entry</live:typelabel><wfw:commentRss>http://tangl99.spaces.live.com/blog/cns!F8F17FFBEED1777A!497/comments/feed.rss</wfw:commentRss><wfw:comment>http://tangl99.spaces.live.com/Blog/cns!F8F17FFBEED1777A!497.entry#comment</wfw:comment><dcterms:modified>2006-10-04T03:21:11Z</dcterms:modified></item><item><title>OpenMiner数据挖掘引擎的主要技术和大体框架</title><link>http://tangl99.spaces.live.com/Blog/cns!F8F17FFBEED1777A!423.entry</link><description>&lt;div&gt;
&lt;div&gt;&lt;strong&gt;&lt;font size=6&gt;&lt;a&gt;&lt;span style="font-size:15pt"&gt;&lt;font color="#000000"&gt;1 &lt;/font&gt;&lt;/span&gt;&lt;/a&gt;&lt;span style="font-size:15pt"&gt;数据挖掘技术的基本概述&lt;/span&gt;&lt;/font&gt;&lt;/strong&gt;&lt;/div&gt;
&lt;div&gt;&lt;strong&gt;&lt;font size=5&gt;&lt;a&gt;&lt;span style="font-size:14pt"&gt;&lt;font color="#000000"&gt;1.1 &lt;/font&gt;&lt;/span&gt;&lt;/a&gt;&lt;span style="font-size:14pt"&gt;数据挖掘技术的基本概念&lt;/span&gt;&lt;/font&gt;&lt;/strong&gt;&lt;/div&gt;
&lt;div style="text-indent:24pt;line-height:20pt"&gt;&lt;span style="font-size:12pt"&gt;随着计算机技术的发展，各行各业都开始采用计算机及相应的信息技术进行管理和运营，这使得企业生成、收集、存贮和处理数据的能力大大提高，数据量与日俱增。企业数据实际上是企业的经验积累，当其积累到一定程度时，必然会反映出规律性的东西；对企业来，堆积如山的数据无异于一个巨大的宝库。在这样的背景下，人们迫切需要新一代的计算技术和工具来开采数据库中蕴藏的宝藏，使其成为有用的知识，指导企业的技术决策和经营决策，使企业在竞争中立于不败之地。另一方面，近十余年来，计算机和信息技术也有了长足的进展，产生了许多新概念和新技术，如更高性能的计算机和操作系统、因特网(intemet)、数据仓库(datawarehouse)、神经网络等等。在市场需求和技术基础这两个因素都具备的环境下，数据挖掘技术或称KDD(KnowledgeDiscovery in Databases；数据库知识发现)的概念和技术就应运而生了。&lt;/span&gt;&lt;/div&gt;
&lt;div style="line-height:20pt"&gt;&lt;span style="font-size:12pt"&gt;    &lt;/span&gt;&lt;span style="font-size:12pt"&gt;数据挖掘(Data Mining)旨在从大量的、不完全的、有噪声的、模糊的、随机的数据中, 提取隐含在其中的、人们事先不知道的、但又是潜在有用的信息和知识。还有很多和这一术语相近似的术语,如从数据库中发现知识(KDD)、数据分析、数据融合(Data Fusion)以及决策支持等。&lt;/span&gt;&lt;/div&gt;
&lt;div style="line-height:20pt"&gt; &lt;/div&gt;
&lt;div&gt;&lt;strong&gt;&lt;font size=5&gt;&lt;a&gt;&lt;span style="font-size:14pt"&gt;&lt;font color="#000000"&gt;1.2 &lt;/font&gt;&lt;/span&gt;&lt;/a&gt;&lt;span style="font-size:14pt"&gt;数据挖掘的基本任务&lt;/span&gt;&lt;/font&gt;&lt;/strong&gt;&lt;/div&gt;
&lt;div style="line-height:20pt"&gt;&lt;span&gt;    &lt;/span&gt;&lt;span style="font-size:12pt"&gt;数据挖掘的任务主要是关联分析、聚类分析、分类、预测、时序模式和偏差分析等。&lt;/span&gt;&lt;/div&gt;
&lt;div style="line-height:20pt"&gt;&lt;span style="font-size:12pt"&gt;    &lt;/span&gt;&lt;/div&gt;
&lt;div style="line-height:20pt"&gt;&lt;span style="font-size:12pt"&gt;1. &lt;/span&gt;&lt;span style="font-size:12pt"&gt;关联分析(association analysis)&lt;/span&gt;&lt;/div&gt;
&lt;div style="line-height:20pt"&gt;&lt;span style="font-size:12pt"&gt;    &lt;/span&gt;&lt;span style="font-size:12pt"&gt;关联规则挖掘由Rakesh Apwal等人首先提出。两个或两个以上变量的取值之间存在的规律性称为关联。数据关联是数据库中存在的一类重要的、可被发现的知识。关联分为简单关联、时序关联和因果关联。关联分析的目的是找出数据库中隐藏的关联网。一般用支持度和可信度两个阀值来度量关联规则的相关性，还不断引入兴趣度、相关性等参数，使得所挖掘的规则更符合需求。 &lt;/span&gt;&lt;/div&gt;
&lt;div style="line-height:20pt"&gt; &lt;/div&gt;
&lt;div style="line-height:20pt"&gt;&lt;span style="font-size:12pt"&gt;2. &lt;/span&gt;&lt;span style="font-size:12pt"&gt;聚类分析(clustering)&lt;/span&gt;&lt;/div&gt;
&lt;div style="text-indent:24pt;line-height:20pt"&gt;&lt;span style="font-size:12pt"&gt;聚类是把数据按照相似性归纳成若干类别，同一类中的数据彼此相似，不同类中的数据相异。聚&lt;span&gt;   &lt;/span&gt;类分析可以建立宏观的概念，发现数据的分布模式，以及可能的数据属性之间的相互关系。&lt;/span&gt;&lt;/div&gt;
&lt;div style="line-height:20pt"&gt; &lt;/div&gt;
&lt;div style="line-height:20pt"&gt;&lt;span style="font-size:12pt"&gt;3. &lt;/span&gt;&lt;span style="font-size:12pt"&gt;分类(classification)&lt;/span&gt;&lt;/div&gt;
&lt;div style="text-indent:24pt;line-height:20pt"&gt;&lt;span style="font-size:12pt"&gt;分类就是找出一个类别的概念描述，它代表了这类数据的整体信息，即该类的内涵描述，并用这&lt;span&gt;   &lt;/span&gt;种描述来构造模型，一般用规则或决策树模式表示。分类是利用训练数据集通过一定的算法而求得分类规则。分类可被用于规则描述和预测。&lt;/span&gt;&lt;/div&gt;
&lt;div style="text-indent:24pt;line-height:20pt"&gt; &lt;/div&gt;
&lt;div style="line-height:20pt"&gt;&lt;span style="font-size:12pt"&gt;4. &lt;/span&gt;&lt;span style="font-size:12pt"&gt;预测(predication)&lt;/span&gt;&lt;/div&gt;
&lt;div style="line-height:20pt"&gt;&lt;span style="font-size:12pt"&gt;    &lt;/span&gt;&lt;span style="font-size:12pt"&gt;预测是利用历史数据找出变化规律，建立模型，并由此模型对未来数据的种类及特征进行预测。&lt;span&gt;    &lt;/span&gt;预测关心的是精度和不确定性，通常用预测方差来度量。&lt;/span&gt;&lt;/div&gt;
&lt;div style="line-height:20pt"&gt; &lt;/div&gt;
&lt;div style="line-height:20pt"&gt;&lt;span style="font-size:12pt"&gt;5. &lt;/span&gt;&lt;span style="font-size:12pt"&gt;时序模式(time-series pattern)&lt;/span&gt;&lt;/div&gt;
&lt;div style="line-height:20pt"&gt;&lt;span style="font-size:12pt"&gt;    &lt;/span&gt;&lt;span style="font-size:12pt"&gt;时序模式是指通过时间序列搜索出的重复发生概率较高的模式。与回归一样，它也是用己知的数据预测未来的值，但这些数据的区别是变量所处时间的不同。&lt;/span&gt;&lt;/div&gt;
&lt;div style="line-height:20pt"&gt;&lt;span style="font-size:12pt"&gt;　　&lt;/span&gt;&lt;/div&gt;
&lt;div style="line-height:20pt"&gt;&lt;span style="font-size:12pt"&gt;6. &lt;/span&gt;&lt;span style="font-size:12pt"&gt;偏差分析(deviation)&lt;/span&gt;&lt;/div&gt;
&lt;div style="line-height:20pt"&gt;&lt;span style="font-size:12pt"&gt;    &lt;/span&gt;&lt;span style="font-size:12pt"&gt;在偏差中包括很多有用的知识，数据库中的数据存在很多异常情况，发现数据库中数据存在的异常情况是非常重要的。偏差检验的基本方法就是寻找观察结果与参照之间的差别。&lt;/span&gt;&lt;/div&gt;
&lt;div style="line-height:20pt"&gt; &lt;/div&gt;
&lt;div&gt;&lt;strong&gt;&lt;font size=5&gt;&lt;a&gt;&lt;span style="font-size:14pt"&gt;&lt;font color="#000000"&gt;1.3 &lt;/font&gt;&lt;/span&gt;&lt;/a&gt;&lt;span style="font-size:14pt"&gt;数据挖掘常的基本技术&lt;/span&gt;&lt;/font&gt;&lt;/strong&gt;&lt;/div&gt;
&lt;div style="line-height:20pt"&gt;&lt;span style="font-size:12pt"&gt;1. &lt;/span&gt;&lt;span style="font-size:12pt"&gt;统计学&lt;br&gt;&lt;span&gt;    &lt;/span&gt;统计学虽然是一门“古老的”学科，但它依然是最基本的数据挖掘技术，特别是多元统计分析，如判别分析、主成分分析、因子分析、相关分析、多元回归分析等。&lt;/span&gt;&lt;/div&gt;
&lt;div style="line-height:20pt"&gt; &lt;/div&gt;
&lt;div style="line-height:20pt"&gt;&lt;span style="font-size:12pt"&gt;2. &lt;/span&gt;&lt;span style="font-size:12pt"&gt;聚类分析和模式识别&lt;br&gt;&lt;span&gt;    &lt;/span&gt;聚类分析主要是根据事物的特征对其进行聚类或分类，即所谓物以类聚，以期从中发现规律和典型模式。这类技术是数据挖掘的最重要的技术之一。除传统的基于多元统计分析的聚类方法外，近些年来模糊聚类和神经网络聚类方法也有了长足的发展。&lt;/span&gt;&lt;/div&gt;
&lt;div style="line-height:20pt"&gt; &lt;/div&gt;
&lt;div style="line-height:20pt"&gt;&lt;span style="font-size:12pt"&gt;3. &lt;/span&gt;&lt;span style="font-size:12pt"&gt;决策树分类技术&lt;/span&gt;&lt;/div&gt;
&lt;div style="text-indent:24pt;line-height:20pt"&gt;&lt;span style="font-size:12pt"&gt;决策树分类是根据不同的重要特征，以树型结构表示分类或决策集合，从而产生规则和发现规律。&lt;/span&gt;&lt;/div&gt;
&lt;div style="line-height:20pt"&gt; &lt;/div&gt;
&lt;div style="line-height:20pt"&gt;&lt;span style="font-size:12pt"&gt;4. &lt;/span&gt;&lt;span style="font-size:12pt"&gt;人工神经网络和遗传基因算法&lt;/span&gt;&lt;/div&gt;
&lt;div style="line-height:20pt"&gt;&lt;span style="font-size:12pt"&gt;    &lt;/span&gt;&lt;span style="font-size:12pt"&gt;人工神经网络是一个迅速发展的前沿研究领域，对计算机科学 人工智能、认知科学以及信息技术等产生了重要而深远的影响，而它在数据挖掘中也扮演着非常重要的角色。人工神经网络可通过示例学习，形成描述复杂非线性系统的非线性函数，这实际上是得到了客观规律的定量描述，有了这个基础，预测的难题就会迎刃而解。目前在数据挖掘中，最常使用的两种神经网络是BP网络和RBF网络 不过，由于人工神经网络还是一个新兴学科，一些重要的理论问题尚未解决。&lt;/span&gt;&lt;/div&gt;
&lt;div style="line-height:20pt"&gt; &lt;/div&gt;
&lt;div style="line-height:20pt"&gt;&lt;span style="font-size:12pt"&gt;5. &lt;/span&gt;&lt;span style="font-size:12pt"&gt;规则归纳&lt;/span&gt;&lt;/div&gt;
&lt;div style="line-height:20pt"&gt;&lt;span style="font-size:12pt"&gt;    &lt;/span&gt;&lt;span style="font-size:12pt"&gt;规则归纳相对来讲是数据挖掘特有的技术。它指的是在大型数据库或数据仓库中搜索和挖掘以往不知道的规则和规律，这大致包括以下几种形式：IF … THEN …&lt;/span&gt;&lt;/div&gt;
&lt;div style="line-height:20pt"&gt; &lt;/div&gt;
&lt;div style="line-height:20pt"&gt;&lt;span style="font-size:12pt"&gt;6. &lt;/span&gt;&lt;span style="font-size:12pt"&gt;可视化技术&lt;/span&gt;&lt;/div&gt;
&lt;div style="line-height:20pt"&gt;&lt;span style="font-size:12pt"&gt;    &lt;/span&gt;&lt;span style="font-size:12pt"&gt;可视化技术是数据挖掘不可忽视的辅助技术。数据挖掘通常会涉及较复杂的数学方法和信息技术，为了方便用户理解和使用这类技术，必须借助图形、图象、动画等手段形象地指导操作、引导挖掘和表达结果等，否则很难推广普及数据挖掘技术。&lt;/span&gt;&lt;/div&gt;
&lt;div style="line-height:20pt"&gt; &lt;/div&gt;
&lt;div&gt;&lt;strong&gt;&lt;font size=5&gt;&lt;a&gt;&lt;span style="font-size:14pt"&gt;&lt;font color="#000000"&gt;1.4 &lt;/font&gt;&lt;/span&gt;&lt;/a&gt;&lt;span style="font-size:14pt"&gt;数据挖掘技术实施的步骤&lt;/span&gt;&lt;/font&gt;&lt;/strong&gt;&lt;/div&gt;
&lt;div style="line-height:150%"&gt;&lt;span style="font-size:12pt;line-height:150%"&gt;数据挖掘的过程&lt;/span&gt;&lt;span style="font-size:12pt;line-height:150%"&gt;可以分为&lt;/span&gt;&lt;span style="font-size:12pt;line-height:150%"&gt;6&lt;/span&gt;&lt;span style="font-size:12pt;line-height:150%"&gt;个步骤：&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="font-size:12pt;line-height:150%"&gt;1)&lt;span style="font:7pt 'Times New Roman'"&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:12pt;line-height:150%"&gt;理解业务：从商业的角度理解项目目标和需求，将其转换成一种数据挖掘的问题定义，设计出达到目标的一个初步计划。&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="font-size:12pt;line-height:150%"&gt;2)&lt;span style="font:7pt 'Times New Roman'"&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:12pt;line-height:150%"&gt;理解数据：收集初步的数据，进行各种熟悉数据的活动。包括数据描述，数据探索和数据质量验证等。&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="font-size:12pt;line-height:150%"&gt;3)&lt;span style="font:7pt 'Times New Roman'"&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:12pt;line-height:150%"&gt;准备数据：将最初的原始数据构造成最终适合建模工具处理的数据集。包括表、记录和属性的选择，数据转换和数据清理等。&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="font-size:12pt;line-height:150%"&gt;4)&lt;span style="font:7pt 'Times New Roman'"&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:12pt;line-height:150%"&gt;建模：选择和应用各种建模技术，并对其参数进行优化。&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="font-size:12pt;line-height:150%"&gt;5)&lt;span style="font:7pt 'Times New Roman'"&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:12pt;line-height:150%"&gt;模型评估：对模型进行较为彻底的评价，并检查构建模型的每个步骤，确认其是否真正实现了预定的商业目的。&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="font-size:12pt;line-height:150%"&gt;6)&lt;span style="font:7pt 'Times New Roman'"&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:12pt;line-height:150%"&gt;模型部署：创建完模型并不意味着项目的结束，即使模型的目的是为了增进对数据的了解，所获得的知识也要用一种用户可以使用的方式来组织和表示。通常要将活动模型应用到决策制订的过程中去。该阶段可以简单到只生成一份报告，也可以复杂到在企业内实施一个可重复的数据挖掘过程。控制得到普遍承认。&lt;/span&gt;&lt;/div&gt;
&lt;div style="line-height:20pt"&gt; &lt;/div&gt;
&lt;div&gt;&lt;strong&gt;&lt;font size=5&gt;&lt;a&gt;&lt;span style="font-size:14pt"&gt;&lt;font color="#000000"&gt;1.5 &lt;/font&gt;&lt;/span&gt;&lt;/a&gt;&lt;span style="font-size:14pt"&gt;数据挖掘的应用现状&lt;/span&gt;&lt;/font&gt;&lt;/strong&gt;&lt;/div&gt;
&lt;div style="text-indent:24pt;line-height:20pt"&gt;&lt;span style="font-size:12pt"&gt;数据挖掘是一个新兴的边缘学科，它汇集了来自机器学习、模式识别、数据库、统计学、人工智能以及管理信息系统等各学科的成果。多学科的相互交融和相互促进，使得这一新学科得以蓬勃发展，而且已初具规模。在美国国家科学基金会(NSF)的数据库研究项目中，KDD被列为90年代最有价值的研究项目。人工智能研究领域的科学家也普遍认为，下一个人工智能应用的重要课题之一，将是以机器学习算法为主要工具的大规模的数据库知识发现。尽管数据挖掘还是一个很新的研究课题，但它所固有的为企业创造巨大经济效益的潜力，已使其很快有了许多成功的应用，具有代表性的应用领域有市场预测、投资、制造业、银行、通讯等。&lt;/span&gt;&lt;/div&gt;
&lt;div style="text-indent:24pt;line-height:20pt"&gt;&lt;span style="font-size:12pt"&gt;美国钢铁公司和神户钢铁公司利用基于数据挖掘技术的ISPA系统，研究分析产品性能规律和进行质量控制，取得了显著效果。通用电器公司(GE)与法国飞机发动机制造公司(sNEcMA)，利用数据挖掘技术研制了CASSIOP．EE质量控制系统，被三家欧洲航空公司用于诊断和预测渡音737的故障，带来了可观的经济效益。该系统于1996年获欧洲一等创造性应用奖。&lt;/span&gt;&lt;/div&gt;
&lt;div style="text-indent:24pt;line-height:20pt"&gt;&lt;span style="font-size:12pt"&gt;享有盛誉的市场研究公司，如美国的A．C．一Nielson和Information Resources，欧洲的GFK和ln．fratest Burk等纷纷开始使用数据挖掘工具来应付迅速增长的销售和市场信息数据。商家的激烈竞争导致了市场快速饱和，产品的迅速更新，使得经营者对市场信息的需求格外强烈利用数据挖掘技术所形成的市场预测能力和服务，使这些市场研究公司取得了巨大收益。&lt;/span&gt;&lt;/div&gt;
&lt;div style="text-indent:24pt;line-height:20pt"&gt;&lt;span style="font-size:12pt"&gt;英国广播公司(BBC)也应用数据挖掘技术来预测电视收视率，以便合理安排电视节目时刻表。信用卡公司Alllelicall KxT,ress自采用数据挖掘技术后，信用卡使用率增加了10％ 一15％。AT&amp;amp;T公司赁借数据挖掘技术技术侦探国际电话欺诈行为，可以尽快发现国际电话使用中的不正常现象。&lt;/span&gt;&lt;/div&gt;
&lt;div style="text-indent:24pt;line-height:20pt"&gt;&lt;span style="font-size:12pt"&gt;中国的公安部门也在研究利用KDD技术总结各类案件的共性和发生规律，从而在宏观上制定最有效的社会治安综合治理的方案和措施；在微观上指出犯罪人的特点，划定罪犯的范围，为侦破工作提供方向。&lt;/span&gt;&lt;/div&gt;
&lt;div style="line-height:20pt"&gt; &lt;/div&gt;
&lt;div&gt;&lt;strong&gt;&lt;font size=6&gt;&lt;a&gt;&lt;span style="font-size:15pt"&gt;&lt;font color="#000000"&gt;2 OpenMiner&lt;/font&gt;&lt;/span&gt;&lt;/a&gt;&lt;span style="font-size:15pt"&gt;数据挖掘引擎的架构&lt;/span&gt;&lt;/font&gt;&lt;/strong&gt;&lt;/div&gt;
&lt;div&gt;&lt;strong&gt;&lt;font size=5&gt;&lt;a&gt;&lt;span style="font-size:14pt"&gt;&lt;font color="#000000"&gt;2.1 &lt;/font&gt;&lt;/span&gt;&lt;/a&gt;&lt;span style="font-size:14pt"&gt;大体框架&lt;/span&gt;&lt;/font&gt;&lt;/strong&gt;&lt;/div&gt;
&lt;div style="line-height:20pt"&gt;&lt;span&gt;    &lt;/span&gt;&lt;span style="font-size:12pt"&gt;在开发教务管理决策支持系统过程中，我们自主开发了一个Java平台的通用数据挖掘引擎OpenMiner。OpenMiner是一个独立于教务管理数据库和教务管理决策支持Web平台的数据挖掘服务提供者。OpenMiner作为一个OLAP的服务进程，主要是进行的是海量数据分析运算，运行于数据库后台服务器平台。因为OpenMiner服务程序需要和数据库系统进行大规模的数据交换操作，所以OpenMiner最好的情况是运行于数据库服务器，通过IPC(进程间通信)或者Windows的Pipe(管道)来与数据库交互，效率是要高于基于TCP网络的连接。&lt;/span&gt;&lt;/div&gt;
&lt;div style="line-height:20pt"&gt;&lt;span style="font-size:12pt"&gt;    OpenMiner&lt;/span&gt;&lt;span style="font-size:12pt"&gt;数据挖掘引引擎在整个教务决策支持系统中处于最核心的地位。教务决策支持系统的Web服务程序根据用户的可视化操作以及教务数据库具体的部署，构造相应的基于XML的数据挖掘原语，通过TCP网络连接，发送数据挖掘原语至OpenMiner服务进程，OpenMiner在接收到挖掘原语后，解释其挖掘原语的意义，执行相关的数据挖掘任务，最后将挖掘完成的结果再次通过TCP网络连接返回给Web服务程序。&lt;/span&gt;&lt;/div&gt;
&lt;div style="line-height:20pt"&gt; &lt;/div&gt;
&lt;div style="line-height:20pt"&gt; &lt;/div&gt;
&lt;p style="line-height:20pt" align=center&gt;&lt;img alt="" src="http://p.blog.csdn.net/images/p_blog_csdn_net/tangl_99/openminer_beta1_2_1.JPG"&gt;
&lt;div style="line-height:20pt"&gt; &lt;/div&gt;
&lt;div style="line-height:20pt" align=center&gt;&lt;strong&gt;图&lt;span&gt;2.1 OpenMiner在决策支持系统的结构图&lt;/span&gt;&lt;/strong&gt;&lt;/div&gt;
&lt;div style="line-height:20pt"&gt;&lt;span style="font-size:12pt"&gt;OpenMiner&lt;/span&gt;&lt;span style="font-size:12pt"&gt;是分成了关联规则挖掘，分类规则挖掘和聚类分析三大模块。本人做的主要是OpenMiner的关联规则挖掘以及OpenMiner系统架构部分。&lt;/span&gt;&lt;/div&gt;
&lt;div style="line-height:20pt"&gt;&lt;span style="font-size:12pt"&gt;    OpenMiner&lt;/span&gt;&lt;span style="font-size:12pt"&gt;挖掘引擎是一个基于数据挖掘模型Model的数据分析引擎。通过定义挖掘模型Model，将数据挖掘的任务分成模型的定义，模型的训练和模型的使用。挖掘引擎所做的工作以及前台用户的交流，也始终围绕挖掘模型而展开。前台用户操作挖掘引擎使用的数据挖掘原语分成模型定义原语，模型训练原语和模型使用原语。&lt;/span&gt;&lt;/div&gt;
&lt;div style="line-height:20pt"&gt;&lt;span&gt;&lt;ins cite="mailto:chjtang" datetime="2006-05-10T16:02"&gt; &lt;/ins&gt;&lt;/span&gt;&lt;/div&gt;
&lt;p style="line-height:20pt" align=center&gt;&lt;img alt="" src="http://p.blog.csdn.net/images/p_blog_csdn_net/tangl_99/openminer_beta1_2_2.JPG"&gt;
&lt;div style="line-height:20pt"&gt; &lt;/div&gt;
&lt;div style="line-height:20pt" align=center&gt;&lt;strong&gt;图&lt;span&gt;2.2 OpenMiner挖掘任务的三个部分&lt;/span&gt;&lt;/strong&gt;&lt;/div&gt;
&lt;div style="line-height:20pt"&gt; &lt;/div&gt;
&lt;div&gt;&lt;strong&gt;&lt;font size=5&gt;&lt;a&gt;&lt;span style="font-size:14pt"&gt;&lt;font color="#000000"&gt;2.2 &lt;/font&gt;&lt;/span&gt;&lt;/a&gt;&lt;span style="font-size:14pt"&gt;连接配置&lt;/span&gt;&lt;/font&gt;&lt;/strong&gt;&lt;/div&gt;
&lt;div&gt;&lt;strong&gt;&lt;font size=4&gt;&lt;span style="font-weight:normal;font-size:12pt"&gt;2.2.1&lt;/span&gt;&lt;span style="font-weight:normal;font-size:12pt"&gt; &lt;/span&gt;&lt;span style="font-weight:normal;font-size:12pt"&gt;与数据库的连接配置&lt;/span&gt;&lt;/font&gt;&lt;/strong&gt;&lt;/div&gt;
&lt;div style="line-height:20pt"&gt;&lt;span&gt;    &lt;/span&gt;&lt;span style="font-size:12pt"&gt;OpenMiner&lt;/span&gt;&lt;span style="font-size:12pt"&gt;在安装完成后，需要将数据库的连接信息，URL,用户名，密码等，填写于OpenMiner 的数据库配置文件dbserver.xml。这些信息是在安装部署OpenMiner数据挖掘服务的时候所完成的工作，出于安全考虑，这些信息是不通过前段Web Server来传递进来的。&lt;/span&gt;&lt;/div&gt;
&lt;div style="line-height:20pt"&gt;&lt;span style="font-size:12pt"&gt;    &lt;/span&gt;&lt;span style="font-size:12pt"&gt;下面是一个dbserver.xml的例子:&lt;/span&gt;&lt;/div&gt;
&lt;div style="text-indent:24pt;line-height:20pt"&gt;&lt;span style="font-size:12pt"&gt;&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style="text-indent:24pt;line-height:20pt"&gt;&lt;span style="font-size:12pt"&gt;&amp;lt;dbserver&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style="text-indent:24pt;line-height:20pt"&gt;&lt;span style="font-size:12pt"&gt;   &amp;lt;user&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style="text-indent:24pt;line-height:20pt"&gt;&lt;span style="font-size:12pt"&gt;       &amp;lt;url&amp;gt;jdbc:oracle:thin:@192.168.0.7:1521:dbminer&amp;lt;/url&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style="text-indent:24pt;line-height:20pt"&gt;&lt;span style="font-size:12pt"&gt;       &amp;lt;username&amp;gt;TL&amp;lt;/username&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style="text-indent:24pt;line-height:20pt"&gt;&lt;span style="font-size:12pt"&gt;       &amp;lt;password&amp;gt;TL&amp;lt;/password&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style="text-indent:24pt;line-height:20pt"&gt;&lt;span style="font-size:12pt"&gt;   &amp;lt;/user&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style="text-indent:24pt;line-height:20pt"&gt;&lt;span style="font-size:12pt"&gt;&amp;lt;/dbserver&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style="text-indent:24pt;line-height:20pt"&gt;&lt;span style="font-size:12pt"&gt;其中的url就是我在测试连接局域网内的192.168.0.7的一个Oracle服务器地址。由于dbserver.xml配置文件存放于后台服务器，再出于简单方便考虑，后面的username,password都还是明文保存。&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;strong&gt;&lt;font size=4&gt;&lt;span style="font-weight:normal;font-size:12pt"&gt;2.2.2&lt;/span&gt;&lt;span style="font-weight:normal;font-size:12pt"&gt; &lt;/span&gt;&lt;span style="font-weight:normal;font-size:12pt"&gt;与&lt;span&gt;Web Server的连接配置&lt;/span&gt;&lt;/span&gt;&lt;/font&gt;&lt;/strong&gt;&lt;/div&gt;
&lt;div style="line-height:20pt"&gt;&lt;span&gt;    &lt;/span&gt;&lt;span style="font-size:12pt"&gt;OpenMiner&lt;/span&gt;&lt;span style="font-size:12pt"&gt;对于挖掘服务使用者提供有自己的一个权限的管理，通过property.xml来配置主要的Web Server前台连接。&lt;/span&gt;&lt;/div&gt;
&lt;div style="line-height:20pt"&gt;&lt;span style="font-size:12pt"&gt;    &lt;/span&gt;&lt;span style="font-size:12pt"&gt;下面是property.xml的例子:&lt;/span&gt;&lt;/div&gt;
&lt;div style="text-indent:24pt;line-height:20pt"&gt;&lt;span style="font-size:12pt"&gt;&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style="text-indent:24pt;line-height:20pt"&gt;&lt;span style="font-size:12pt"&gt;&amp;lt;property port=&amp;quot;3333&amp;quot;&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style="text-indent:24pt;line-height:20pt"&gt;&lt;span style="font-size:12pt"&gt;   &amp;lt;user max=&amp;quot;5&amp;quot;&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style="text-indent:24pt;line-height:20pt"&gt;&lt;span style="font-size:12pt"&gt;       &amp;lt;username&amp;gt;test&amp;lt;/username&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style="text-indent:24pt;line-height:20pt"&gt;&lt;span style="font-size:12pt"&gt;       &amp;lt;password&amp;gt;test&amp;lt;/password&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style="text-indent:24pt;line-height:20pt"&gt;&lt;span style="font-size:12pt"&gt;       &amp;lt;dbusername&amp;gt;TL&amp;lt;/dbusername&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style="text-indent:24pt;line-height:20pt"&gt;&lt;span style="font-size:12pt"&gt;   &amp;lt;/user&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style="text-indent:24pt;line-height:20pt"&gt;&lt;span style="font-size:12pt"&gt;&amp;lt;/property&amp;gt;   &lt;/span&gt;&lt;/div&gt;
&lt;div style="text-indent:24pt;line-height:20pt"&gt;&lt;span style="font-size:12pt"&gt;property&lt;/span&gt;&lt;span style="font-size:12pt"&gt;根元素的port属性定义了OpenMiner服务监听的TCP端口号。&lt;/span&gt;&lt;/div&gt;
&lt;div style="text-indent:24pt;line-height:20pt"&gt;&lt;span style="font-size:12pt"&gt;其中，定义了一个名字和密码都叫test的客户端帐号，max属性定义了该帐号的最大的连接线程个数为5。同时，这个test用户对应的使用的数据库帐号为TL。前面的dbserver.xml中已经定义了用户名为TL的数据库帐号。那么OpenMiner将使用的TL这个数据库帐号进行内部的挖掘任务。至于TL这个帐号到底能够访问哪个数据库，访问数据库内的哪个表，就由dbserver.xml和数据库来决定了。&lt;/span&gt;&lt;/div&gt;
&lt;div style="line-height:20pt"&gt;&lt;span style="font-size:12pt"&gt;    &lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;strong&gt;&lt;font size=5&gt;&lt;a&gt;&lt;span style="font-size:14pt"&gt;&lt;font color="#000000"&gt;2.3 &lt;/font&gt;&lt;/span&gt;&lt;/a&gt;&lt;span style="font-size:14pt"&gt;线程对象池&lt;/span&gt;&lt;/font&gt;&lt;/strong&gt;&lt;/div&gt;
&lt;div style="line-height:20pt"&gt;&lt;span&gt;    &lt;/span&gt;&lt;span style="font-size:12pt"&gt;为了提高效率和稳定性，连接池和线程池技术已经普遍使用于多线程数据库服务程序中&lt;/span&gt;&lt;sup&gt;&lt;span style="font-size:12pt"&gt;[14,15]&lt;/span&gt;&lt;/sup&gt;&lt;span style="font-size:12pt"&gt;。OpenMiner在主要做的是一种OLAP数据分析服务，连接池与线程池的实现比较简单。一个非并行的数据挖掘分析服务只需要一个线程和一个数据库连接。&lt;/span&gt;&lt;/div&gt;
&lt;p style="line-height:20pt" align=center&gt;&lt;span style="font-size:12pt"&gt;&lt;img alt="" src="http://p.blog.csdn.net/images/p_blog_csdn_net/tangl_99/openminer_beta1_2_3.JPG"&gt;&lt;/span&gt;
&lt;div style="line-height:20pt" align=center&gt;&lt;span&gt;    &lt;/span&gt;&lt;a&gt;&lt;strong&gt;&lt;font color="#000000"&gt;图&lt;span&gt;2.3 线程对象池&lt;/span&gt;&lt;/font&gt;&lt;/strong&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div style="line-height:20pt"&gt;&lt;span&gt;    &lt;/span&gt;&lt;span style="font-size:12pt"&gt;图中，每个线程对象都是一个MinerThread对象，MinerThread对象继承于Java Thread线程对象。每个MinerThread拥有一个Connection数据库连接。所以，当线程对象存活的时候，Connection就始终存活。&lt;/span&gt;&lt;/div&gt;
&lt;div style="line-height:20pt"&gt;&lt;span&gt;    &lt;/span&gt;&lt;span style="font-size:12pt"&gt;OpenMiner&lt;/span&gt;&lt;span style="font-size:12pt"&gt;的线程对象管理模块统一对每个线程以及其数据库连接进行创建，管理和销毁。Miner挖掘服务并不需要自己创建关闭线程和创建关闭数据库连接。OpenMiner服务运行中一旦监听到由客户端的请求，会根据请求的类型信息，来分配一个“空闲”状态的线程对象来进行数据挖掘服务。当数据挖掘服务完成后，OpenMiner线程对象管理模块收回其分配的线程对象，并且置于“空闲”状态。&lt;/span&gt;&lt;/div&gt;
&lt;div style="line-height:20pt"&gt; &lt;/div&gt;
&lt;div&gt;&lt;strong&gt;&lt;font size=5&gt;&lt;a&gt;&lt;span style="font-size:14pt"&gt;&lt;font color="#000000"&gt;2.4 &lt;/font&gt;&lt;/span&gt;&lt;/a&gt;&lt;span style="font-size:14pt"&gt;挖掘算法模块&lt;/span&gt;&lt;/font&gt;&lt;/strong&gt;&lt;/div&gt;
&lt;div style="line-height:20pt"&gt;&lt;span&gt;    &lt;/span&gt;&lt;span style="font-size:12pt"&gt;上一节已经提到过，OpenMiner中，一个MinerThread就是一个挖掘服务的实例。MinerThread对象一旦接收到“命令”后，从“空闲”状态转向“工作”，就会根据具体的挖掘原语来调用相关的挖掘算法模块来执行数据挖掘任务。&lt;/span&gt;&lt;/div&gt;
&lt;div style="line-height:20pt"&gt;&lt;span style="font-size:12pt"&gt;    OpenMiner&lt;/span&gt;&lt;span style="font-size:12pt"&gt;内部提供了关联，分类，聚类各种不同的挖掘算法模块，我们会其后的开发过程中逐步增加完善。&lt;/span&gt;&lt;/div&gt;
&lt;div style="line-height:20pt"&gt;&lt;span style="font-size:12pt"&gt;    Miner&lt;/span&gt;&lt;span style="font-size:12pt"&gt;是所有挖掘算法模块的抽象父类，里面定义所有挖掘算法模块的公共接口函数，不同的算法模块都要求实现其基本接口。&lt;/span&gt;&lt;/div&gt;
&lt;div style="line-height:20pt"&gt;&lt;span&gt;    &lt;/span&gt;&lt;/div&gt;
&lt;div style="line-height:20pt"&gt; &lt;/div&gt;
&lt;div style="line-height:20pt"&gt; &lt;/div&gt;
&lt;div style="line-height:20pt"&gt; &lt;/div&gt;
&lt;p style="line-height:20pt" align=center&gt;&lt;img alt="" src="http://p.blog.csdn.net/images/p_blog_csdn_net/tangl_99/openminer_beta1_2_4.JPG"&gt;
&lt;div style="line-height:20pt"&gt; &lt;/div&gt;
&lt;div style="line-height:20pt" align=center&gt;&lt;strong&gt;图&lt;span&gt;2.4 算法模块之间的继承关系&lt;/span&gt;&lt;/strong&gt;&lt;/div&gt;&lt;/div&gt;&lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=-508484562895931526&amp;page=RSS%3a+OpenMiner%e6%95%b0%e6%8d%ae%e6%8c%96%e6%8e%98%e5%bc%95%e6%93%8e%e7%9a%84%e4%b8%bb%e8%a6%81%e6%8a%80%e6%9c%af%e5%92%8c%e5%a4%a7%e4%bd%93%e6%a1%86%e6%9e%b6&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=tangl99.spaces.live.com&amp;amp;GT1=tangl99"&gt;</description><comments>http://tangl99.spaces.live.com/Blog/cns!F8F17FFBEED1777A!423.entry#comment</comments><guid isPermaLink="true">http://tangl99.spaces.live.com/Blog/cns!F8F17FFBEED1777A!423.entry</guid><pubDate>Wed, 05 Jul 2006 04:28:02 GMT</pubDate><slash:comments>0</slash:comments><msn:type>blogentry</msn:type><live:type>blogentry</live:type><live:typelabel>Blog entry</live:typelabel><wfw:commentRss>http://tangl99.spaces.live.com/blog/cns!F8F17FFBEED1777A!423/comments/feed.rss</wfw:commentRss><wfw:comment>http://tangl99.spaces.live.com/Blog/cns!F8F17FFBEED1777A!423.entry#comment</wfw:comment><dcterms:modified>2006-07-05T04:28:02Z</dcterms:modified></item><item><title>ORACLE中表，视图名变大写和BLOB操作的问题</title><link>http://tangl99.spaces.live.com/Blog/cns!F8F17FFBEED1777A!341.entry</link><description>&lt;div&gt;&lt;font face="宋体, Simsun" size=3&gt;&lt;strong&gt;1. 表，视图创建后名字全部变成大写&lt;/strong&gt;&lt;/font&gt;&lt;br&gt;   通过JDBC中的DatabaseMetaData.getTables函数可以来查询当前数据库的MetaData，既可以查询一些数据表和视图等很多信息。但是，ORACLE在当你创建完成，名字全部变成了大写，如果在getTables中，参数名字输入的是小写，那么将查询不到该表或者该视图。&lt;br&gt;   其实，getTables函数也是通过SQL语句来查询一个叫做all_objects的表。&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;SELECT NULL AS table_cat,&lt;br&gt;       o.owner AS table_schem,&lt;br&gt;       o.object_name AS table_name,&lt;br&gt;       o.object_type AS table_type,&lt;br&gt;       NULL AS remarks&lt;br&gt;  FROM all_objects o&lt;br&gt;  WHERE o.owner LIKE ? ESCAPE '/'&lt;br&gt;    AND o.object_name LIKE ? ESCAPE '/'&lt;br&gt;    AND o.object_type IN ('xxx', 'VIEW')&lt;br&gt;  ORDER BY table_type, table_schem, table_name&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;&lt;strong&gt;&lt;font size=3&gt;2。关于BLOB数据类型的存取：&lt;/font&gt;&lt;/strong&gt;&lt;/div&gt;
&lt;div&gt;  ORACLE的新版本，其中BLOB的存取一直是个比较麻烦的事情，似乎它不兼容JDBC的标准。我在MYSQL下创建，查询的BLOB字段的SQL，在ORACLE上要出现一些问题：比如getBytes(),setBytes()要出现问题等等。&lt;/div&gt;
&lt;div&gt;  网上讨论这个的还是比较多的，最简单的办法就是把BLOB改成LONG RAW，虽然LONG RAW最大存储容量是2GB，而BLOB是4GB，但是其实大多数情况都够了。&lt;/div&gt;
&lt;div&gt;  如果非要使用BLOB，我这里从网上找到了一些贴子和代码：&lt;/div&gt;
&lt;div&gt;&lt;a href="http://community.csdn.net/Expert/FAQ/FAQ_Index.asp?id=197116"&gt;http://community.csdn.net/Expert/FAQ/FAQ_Index.asp?id=197116&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;&lt;a href="http://www.zhuoda.org/hofman/22956.html"&gt;http://www.zhuoda.org/hofman/22956.html&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;&lt;font color="#0000ff" size=2&gt;package&lt;/font&gt; demo; &lt;br&gt;&lt;font color=blue size=2&gt;import&lt;/font&gt; java.sql.*;&lt;br&gt;&lt;font color=blue size=2&gt;import&lt;/font&gt; java.io.*;&lt;br&gt;&lt;font color=blue size=2&gt;import&lt;/font&gt; java.sql.PreparedStatement;&lt;br&gt;&lt;font color=blue size=2&gt;import&lt;/font&gt; java.util.*;&lt;br&gt;&lt;br&gt;&lt;font color=blue size=2&gt;import&lt;/font&gt; oracle.jdbc.driver.*;&lt;br&gt;&lt;font color=blue size=2&gt;import&lt;/font&gt; oracle.sql.BLOB;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;font color="#0000aa" size=2&gt;&lt;i&gt;/**&lt;br&gt;* Insert record in the MEDIA table &lt;br&gt;* MEDIA (file_name varchar2(256), file_content BLOB);&lt;br&gt;*/&lt;/i&gt;&lt;/font&gt;&lt;font color=black size=2&gt;&lt;br&gt;&lt;font color=blue size=2&gt;public&lt;/font&gt; &lt;font color=blue size=2&gt;class&lt;/font&gt; BlobOracle &lt;br&gt;{&lt;br&gt;&lt;font color=blue size=2&gt;private&lt;/font&gt; &lt;font color=blue size=2&gt;final&lt;/font&gt; &lt;font color=blue size=2&gt;static&lt;/font&gt; &lt;font color=red size=2&gt;String&lt;/font&gt; hostname = &lt;/font&gt;&lt;font color="#00bb00" size=2&gt;&amp;quot;localhost&amp;quot;&lt;/font&gt;&lt;font color=black size=2&gt;;&lt;br&gt;&lt;font color=blue size=2&gt;private&lt;/font&gt; &lt;font color=blue size=2&gt;final&lt;/font&gt; &lt;font color=blue size=2&gt;static&lt;/font&gt; &lt;font color=red size=2&gt;String&lt;/font&gt; port = &lt;/font&gt;&lt;font color="#00bb00" size=2&gt;&amp;quot;1521&amp;quot;&lt;/font&gt;&lt;font color=black size=2&gt;;&lt;br&gt;&lt;font color=blue size=2&gt;private&lt;/font&gt; &lt;font color=blue size=2&gt;final&lt;/font&gt; &lt;font color=blue size=2&gt;static&lt;/font&gt; &lt;font color=red size=2&gt;String&lt;/font&gt; sid = &lt;/font&gt;&lt;font color="#00bb00" size=2&gt;&amp;quot;ORCL&amp;quot;&lt;/font&gt;&lt;font color=black size=2&gt;;&lt;br&gt;&lt;font color=blue size=2&gt;private&lt;/font&gt; &lt;font color=blue size=2&gt;final&lt;/font&gt; &lt;font color=blue size=2&gt;static&lt;/font&gt; &lt;font color=red size=2&gt;String&lt;/font&gt; username = &lt;/font&gt;&lt;font color="#00bb00" size=2&gt;&amp;quot;scott&amp;quot;&lt;/font&gt;&lt;font color=black size=2&gt;;&lt;br&gt;&lt;font color=blue size=2&gt;private&lt;/font&gt; &lt;font color=blue size=2&gt;final&lt;/font&gt; &lt;font color=blue size=2&gt;static&lt;/font&gt; &lt;font color=red size=2&gt;String&lt;/font&gt; password = &lt;/font&gt;&lt;font color="#00bb00" size=2&gt;&amp;quot;tiger&amp;quot;&lt;/font&gt;&lt;font color=black size=2&gt;;&lt;br&gt;&lt;font color=blue size=2&gt;private&lt;/font&gt; &lt;font color=blue size=2&gt;static&lt;/font&gt; &lt;font color=red size=2&gt;String&lt;/font&gt; fileLocation;&lt;br&gt;&lt;font color=blue size=2&gt;private&lt;/font&gt; &lt;font color=blue size=2&gt;static&lt;/font&gt; &lt;font color=red size=2&gt;Connection&lt;/font&gt; connection;&lt;br&gt;&lt;br&gt;&lt;font color=blue size=2&gt;public&lt;/font&gt; BlobOracle()&lt;br&gt;{&lt;br&gt;}&lt;br&gt;&lt;br&gt;&lt;/font&gt;&lt;font color="#0000aa" size=2&gt;&lt;i&gt;/**&lt;br&gt;* &lt;br&gt;* @param args&lt;br&gt;*/&lt;/i&gt;&lt;/font&gt;&lt;font color=black size=2&gt;&lt;br&gt;&lt;font color=blue size=2&gt;public&lt;/font&gt; &lt;font color=blue size=2&gt;static&lt;/font&gt; &lt;font color=blue size=2&gt;void&lt;/font&gt; main(&lt;font color=red size=2&gt;String&lt;/font&gt;[] args)&lt;br&gt;{&lt;br&gt;&lt;font color=blue size=2&gt;try&lt;/font&gt; &lt;br&gt;{&lt;br&gt;&lt;font color=blue size=2&gt;if&lt;/font&gt; (args.length == 0)&lt;br&gt;{&lt;br&gt;System.out.println(&lt;/font&gt;&lt;font color="#00bb00" size=2&gt;&amp;quot;\n\n Usage demo.BlobOracle &amp;quot;&lt;/font&gt;&lt;font color=black size=2&gt;);&lt;br&gt;System.exit(0);&lt;br&gt;}&lt;br&gt;&lt;br&gt;fileLocation = args[0];&lt;br&gt;&lt;br&gt;setConnection();&lt;br&gt;insertBLOB();&lt;br&gt;&lt;br&gt;} &lt;font color=blue size=2&gt;catch&lt;/font&gt; (Exception ex) &lt;br&gt;{&lt;br&gt;ex.printStackTrace();&lt;br&gt;} &lt;font color=blue size=2&gt;finally&lt;/font&gt; &lt;br&gt;{&lt;br&gt;}&lt;br&gt;}&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;font color=blue size=2&gt;private&lt;/font&gt; &lt;font color=blue size=2&gt;static&lt;/font&gt; &lt;font color=blue size=2&gt;void&lt;/font&gt; setConnection() &lt;font color=red size=2&gt;throws&lt;/font&gt; &lt;font color=red size=2&gt;SQLException&lt;/font&gt;&lt;br&gt;{&lt;br&gt;DriverManager.registerDriver(&lt;font color=blue size=2&gt;new&lt;/font&gt; oracle.jdbc.driver.OracleDriver());&lt;br&gt;connection = DriverManager.getConnection(&lt;/font&gt;&lt;font color="#00bb00" size=2&gt;&amp;quot;jdbc:oracle:thin:@&amp;quot;&lt;/font&gt;&lt;font color=black size=2&gt;+hostname+ &lt;/font&gt;&lt;font color="#00bb00" size=2&gt;&amp;quot;:&amp;quot;&lt;/font&gt;&lt;font color=black size=2&gt;+ port +&lt;/font&gt;&lt;font color="#00bb00" size=2&gt;&amp;quot;:&amp;quot;&lt;/font&gt;&lt;font color=black size=2&gt;+ sid , username , password);&lt;br&gt;connection.setAutoCommit(false); &lt;/font&gt;&lt;font color="#0000aa" size=2&gt;&lt;i&gt;// we must control the commit&lt;/i&gt;&lt;/font&gt;&lt;font color=black size=2&gt;&lt;br&gt;}&lt;br&gt;&lt;br&gt;&lt;font color=blue size=2&gt;private&lt;/font&gt; &lt;font color=blue size=2&gt;static&lt;/font&gt; &lt;font color=blue size=2&gt;void&lt;/font&gt; insertBLOB() &lt;font color=red size=2&gt;throws&lt;/font&gt; &lt;font color=red size=2&gt;SQLException&lt;/font&gt;, Exception&lt;br&gt;{&lt;br&gt;BLOB blob;&lt;br&gt;File file ;&lt;br&gt;FileInputStream is;&lt;br&gt;OutputStream os;&lt;br&gt;&lt;br&gt;&lt;font color=blue size=2&gt;long&lt;/font&gt; ts1 = System.currentTimeMillis();&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;/font&gt;&lt;font color="#0000aa" size=2&gt;&lt;i&gt;//Create a statement.&lt;/i&gt;&lt;/font&gt;&lt;font color=black size=2&gt;&lt;br&gt;PreparedStatement pstmt = connection.prepareStatement(&lt;/font&gt;&lt;font color="#00bb00" size=2&gt;&amp;quot;insert into media (file_name, file_content) values (?,empty_blob())&amp;quot;&lt;/font&gt;&lt;font color=black size=2&gt;);&lt;br&gt;file = &lt;font color=blue size=2&gt;new&lt;/font&gt; File(fileLocation);&lt;br&gt;&lt;font color=red size=2&gt;String&lt;/font&gt; fileName = file.getName();&lt;br&gt;&lt;/font&gt;&lt;font color="#0000aa" size=2&gt;&lt;i&gt;//Set the file name and execute the query&lt;/i&gt;&lt;/font&gt;&lt;font color=black size=2&gt;&lt;br&gt;pstmt.setString(1, fileName);&lt;br&gt;pstmt.execute();&lt;br&gt;&lt;br&gt;&lt;/font&gt;&lt;font color="#0000aa" size=2&gt;&lt;i&gt;//Take back the record for update (we will insert the blob)&lt;/i&gt;&lt;/font&gt;&lt;font color=black size=2&gt;&lt;br&gt;&lt;/font&gt;&lt;font color="#0000aa" size=2&gt;&lt;i&gt;//supposely the file name is the PK&lt;/i&gt;&lt;/font&gt;&lt;font color=black size=2&gt;&lt;br&gt;pstmt = connection.prepareStatement(&lt;/font&gt;&lt;font color="#00bb00" size=2&gt;&amp;quot;select file_content from media where file_name = ? for update&amp;quot;&lt;/font&gt;&lt;font color=black size=2&gt;);&lt;br&gt;pstmt.setString(1, fileName);&lt;br&gt;&lt;br&gt;&lt;/font&gt;&lt;font color="#0000aa" size=2&gt;&lt;i&gt;//Execute the query, and we must have one record so take it&lt;/i&gt;&lt;/font&gt;&lt;font color=black size=2&gt;&lt;br&gt;&lt;font color=red size=2&gt;ResultSet&lt;/font&gt; rset = pstmt.executeQuery();&lt;br&gt;rset.next();&lt;br&gt;&lt;br&gt;&lt;/font&gt;&lt;font color="#0000aa" size=2&gt;&lt;i&gt;//Use the OracleDriver resultset, we take the blob locator&lt;/i&gt;&lt;/font&gt;&lt;font color=black size=2&gt;&lt;br&gt;blob = ((OracleResultSet)rset).getBLOB(&lt;/font&gt;&lt;font color="#00bb00" size=2&gt;&amp;quot;file_content&amp;quot;&lt;/font&gt;&lt;font color=black size=2&gt;);&lt;br&gt;&lt;br&gt;is = &lt;font color=blue size=2&gt;new&lt;/font&gt; FileInputStream(file); &lt;/font&gt;&lt;font color="#0000aa" size=2&gt;&lt;i&gt;//Create a stream from the file&lt;/i&gt;&lt;/font&gt;&lt;font color=black size=2&gt;&lt;br&gt;&lt;/font&gt;&lt;font color="#0000aa" size=2&gt;&lt;i&gt;// JDBC 2.0&lt;/i&gt;&lt;/font&gt;&lt;font color=black size=2&gt;&lt;br&gt;&lt;/font&gt;&lt;font color="#0000aa" size=2&gt;&lt;i&gt;//os = blob.getBinaryOutputStream(); //get the output stream from the Blob to insert it&lt;/i&gt;&lt;/font&gt;&lt;font color=black size=2&gt;&lt;br&gt;&lt;/font&gt;&lt;font color="#0000aa" size=2&gt;&lt;i&gt;// JDBC 3.0&lt;/i&gt;&lt;/font&gt;&lt;font color=black size=2&gt;&lt;br&gt;os = blob.setBinaryStream(0); &lt;/font&gt;&lt;font color="#0000aa" size=2&gt;&lt;i&gt;//get the output stream from the Blob to insert it&lt;/i&gt;&lt;/font&gt;&lt;font color=black size=2&gt;&lt;br&gt;&lt;br&gt;&lt;/font&gt;&lt;font color="#0000aa" size=2&gt;&lt;i&gt;//Read the file by chuncks and insert them in the Blob. The chunk size come from the blob&lt;/i&gt;&lt;/font&gt;&lt;font color=black size=2&gt;&lt;br&gt;byte[] chunk = &lt;font color=blue size=2&gt;new&lt;/font&gt; byte[blob.getChunkSize()];&lt;br&gt;&lt;font color=blue size=2&gt;int&lt;/font&gt; i=-1;&lt;br&gt;System.out.println(&lt;/font&gt;&lt;font color="#00bb00" size=2&gt;&amp;quot;Inserting the Blob&amp;quot;&lt;/font&gt;&lt;font color=black size=2&gt;);&lt;br&gt;&lt;font color=blue size=2&gt;while&lt;/font&gt;((i = is.read(chunk))!=-1)&lt;br&gt;{&lt;br&gt;os.write(chunk,0,i); &lt;/font&gt;&lt;font color="#0000aa" size=2&gt;&lt;i&gt;//Write the chunk&lt;/i&gt;&lt;/font&gt;&lt;font color=black size=2&gt;&lt;br&gt;System.out.print('.'); &lt;/font&gt;&lt;font color="#0000aa" size=2&gt;&lt;i&gt;// print progression&lt;/i&gt;&lt;/font&gt;&lt;font color=black size=2&gt;&lt;br&gt;}&lt;br&gt;&lt;br&gt;&lt;/font&gt;&lt;font color="#0000aa" size=2&gt;&lt;i&gt;// When done close the streams&lt;/i&gt;&lt;/font&gt;&lt;font color=black size=2&gt;&lt;br&gt;is.close();&lt;br&gt;os.close();&lt;br&gt;&lt;br&gt;&lt;/font&gt;&lt;font color="#0000aa" size=2&gt;&lt;i&gt;//Close the statement and commit&lt;/i&gt;&lt;/font&gt;&lt;font color=black size=2&gt;&lt;br&gt;pstmt.close();&lt;br&gt;&lt;font color=blue size=2&gt;long&lt;/font&gt; ts2 = System.currentTimeMillis();&lt;br&gt;&lt;br&gt;connection.commit();&lt;br&gt;connection.close();&lt;br&gt;&lt;br&gt;System.out.println(&lt;/font&gt;&lt;font color="#00bb00" size=2&gt;&amp;quot;\n&amp;quot;&lt;/font&gt;&lt;font color=black size=2&gt;+ (ts2 - ts1) +&lt;/font&gt;&lt;font color="#00bb00" size=2&gt;&amp;quot; ms&amp;quot;&lt;/font&gt;&lt;font color=black size=2&gt; ); &lt;br&gt;&lt;br&gt;&lt;br&gt;}&lt;br&gt;&lt;br&gt;&lt;br&gt;}&lt;br&gt;&lt;/font&gt;&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;&lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=-508484562895931526&amp;page=RSS%3a+ORACLE%e4%b8%ad%e8%a1%a8%ef%bc%8c%e8%a7%86%e5%9b%be%e5%90%8d%e5%8f%98%e5%a4%a7%e5%86%99%e5%92%8cBLOB%e6%93%8d%e4%bd%9c%e7%9a%84%e9%97%ae%e9%a2%98&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=tangl99.spaces.live.com&amp;amp;GT1=tangl99"&gt;</description><comments>http://tangl99.spaces.live.com/Blog/cns!F8F17FFBEED1777A!341.entry#comment</comments><guid isPermaLink="true">http://tangl99.spaces.live.com/Blog/cns!F8F17FFBEED1777A!341.entry</guid><pubDate>Tue, 30 May 2006 10:32:37 GMT</pubDate><slash:comments>0</slash:comments><msn:type>blogentry</msn:type><live:type>blogentry</live:type><live:typelabel>Blog entry</live:typelabel><wfw:commentRss>http://tangl99.spaces.live.com/blog/cns!F8F17FFBEED1777A!341/comments/feed.rss</wfw:commentRss><wfw:comment>http://tangl99.spaces.live.com/Blog/cns!F8F17FFBEED1777A!341.entry#comment</wfw:comment><dcterms:modified>2006-05-30T10:38:01Z</dcterms:modified></item><item><title>使用分页查询来适应挖掘海量数据的需求</title><link>http://tangl99.spaces.live.com/Blog/cns!F8F17FFBEED1777A!193.entry</link><description>&lt;div&gt;   数据挖掘各类算法中，常常需要遍历整个数据库（表）。现实中的数据库可能十分大，往往不可能通过一个简单的Select *的方式遍历提取数据表内的所有元组。直接用Select * 的方式存在两大问题，一是Select *过后，可能要等很久数据库才能将所有信息提交完毕，第二是得到的结果可能是很大，远远超过内存的限制。
&lt;p&gt;   现在各种主流的数据库都支持了分页查询的方式。
&lt;p&gt;  &lt;strong&gt;以Oracle为例，通过rownum关键字可以获取指定的行区间。&lt;br&gt;  &lt;/strong&gt;比如:  Select * from XX.TABLE1 where rownum &amp;lt;= 100。不过Oracle的rownum有点特别的就是，rownum必须从1开始，如果直接这样写就不行了: Select * from XX.TABLE1 where rownum between 50 and 100。&lt;br&gt;  而实际上，我们可以这样来写：SELECT * from (select n.*,rownum num from XX.TABLE1 n WHERE rownum &amp;lt;=100) where num &amp;gt;= 50;
&lt;p&gt;  &lt;strong&gt;以MySQL为例，提供了limit关键字，更加方便获取中间某区间的行数据。&lt;br&gt;  &lt;/strong&gt;比如: Select * from TABLE1 limit 50,100。 MySQL的limit关键字用起来比Oracle要方便一些。不过各个数据库的分页查询的速度我倒没有研究过，网上听一些高手们说，Oracle提供的分页查询效率要高一些。
&lt;p&gt;  &lt;strong&gt;Hibernate这样的数据持久层提供的分页查询，可以屏蔽掉各个不同的数据库之间具体SQL实现差异。&lt;br&gt;  &lt;/strong&gt;Hiberante这样的数据持久层工具一大好处就是可以屏蔽掉不同数据库的之间的某些细节差异。分页查询在不同的数据库上实现的SQL不一样，所以要统一，最好使用Hibernate这样的工具。&lt;br&gt;  Query q = session.createQuery(&amp;quot;from Cat as c&amp;quot;); &lt;br&gt;  q.setFirstResult(50); &lt;br&gt;  q.setMaxResults(100); &lt;br&gt;  List l = q.list(); 
&lt;p&gt;   网上到处都可以搜寻到关于Hibernate内部实现分页查询的解读的文章。可以看到，Hibernate内部也是通过rownum，limit这些关键字来实现分页的。&lt;/div&gt;&lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=-508484562895931526&amp;page=RSS%3a+%e4%bd%bf%e7%94%a8%e5%88%86%e9%a1%b5%e6%9f%a5%e8%af%a2%e6%9d%a5%e9%80%82%e5%ba%94%e6%8c%96%e6%8e%98%e6%b5%b7%e9%87%8f%e6%95%b0%e6%8d%ae%e7%9a%84%e9%9c%80%e6%b1%82&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=tangl99.spaces.live.com&amp;amp;GT1=tangl99"&gt;</description><comments>http://tangl99.spaces.live.com/Blog/cns!F8F17FFBEED1777A!193.entry#comment</comments><guid isPermaLink="true">http://tangl99.spaces.live.com/Blog/cns!F8F17FFBEED1777A!193.entry</guid><pubDate>Sat, 18 Mar 2006 08:03:40 GMT</pubDate><slash:comments>1</slash:comments><msn:type>blogentry</msn:type><live:type>blogentry</live:type><live:typelabel>Blog entry</live:typelabel><wfw:commentRss>http://tangl99.spaces.live.com/blog/cns!F8F17FFBEED1777A!193/comments/feed.rss</wfw:commentRss><wfw:comment>http://tangl99.spaces.live.com/Blog/cns!F8F17FFBEED1777A!193.entry#comment</wfw:comment><dcterms:modified>2006-03-18T08:03:40Z</dcterms:modified></item><item><title>JDBC中获取数据表的信息</title><link>http://tangl99.spaces.live.com/Blog/cns!F8F17FFBEED1777A!188.entry</link><description>&lt;div&gt;
&lt;p&gt;  JDBC中通过MetaData来获取具体的表的相关信息。可以查询数据库中的有哪些表，表有哪些字段，字段的属性等等。MetaData中通过一系列getXXX函数，将这些信息存放到ResultSet里面，然后返回给用户。关于MetaData的说明网上也有不少，这里我只是从我自身学习的角度来记录一下简单使用JDBC以及获取数据表相关信息的方法。
&lt;p&gt;   首先，&lt;a href="http://hometown.aol.com/kgb1001001/Articles/JDBCMetadata/JDBC_Metadata.htm"&gt;&lt;u&gt;&lt;font color="#800080"&gt;http://hometown.aol.com/kgb1001001/Articles/JDBCMetadata/JDBC_Metadata.htm&lt;/font&gt;&lt;/u&gt;&lt;/a&gt; 这里有篇名字叫做《Understanding JDBC MetaData》的文章，讲解得不错。
&lt;p&gt;   下面就是我的JDBC下的获取表信息的代码了。我是以MySQL 5.0作为测试平台的。
&lt;h3&gt;   1. JDBC连接MYSQL的代码很标准，很简单。&lt;/h3&gt;
&lt;p&gt;   class.forName(&amp;quot;com.mysql.jdbc.Driver&amp;quot;).newInstance();&lt;br&gt;   Connection conn = DriverManager&lt;br&gt;     .getConnection(&amp;quot;jdbc:mysql://localhost/test?user=root&amp;amp;password=123456&amp;quot;);
&lt;h3&gt;   2. 下面就是获取表的信息。&lt;/h3&gt;
&lt;p&gt;    m_DBMetaData = m_Connection.getMetaData();&lt;br&gt;    ResultSet tableRet = m_DBMetaData.getTables(null, &amp;quot;%&amp;quot;,m_TableName,new String[]{&amp;quot;TABLE&amp;quot;});&lt;br&gt;    其中&amp;quot;%&amp;quot;就是表示*的意思，也就是任意所有的意思。其中m_TableName就是要获取的数据表的名字，如果想获取所有的表的名字，就可以使用&amp;quot;%&amp;quot;来作为参数了。
&lt;h3&gt;   3. 提取表的名字。&lt;/h3&gt;
&lt;p&gt;   while(tableRet.next) System.out.println(tableRet.&lt;font face="Courier New"&gt;getString(&amp;quot;TABLE_NAME&amp;quot;));&lt;/font&gt;
&lt;p&gt;&lt;font face="Courier New"&gt; 通过getString(&amp;quot;TABLE_NAME&amp;quot;)，就可以获取表的名字了。&lt;br&gt; 从这里可以看出，前面通过getTables的接口的返回，JDBC是将其所有的结果，保存在一个类似table的内存结构中，而其中TABLE_NAME这个名字的字段就是每个表的名字。&lt;/font&gt;
&lt;h3&gt;  4. 提取表内的字段的名字和类型&lt;/h3&gt;
&lt;p&gt;&lt;font face="Courier New"&gt;  String columnName;&lt;br&gt;  String columnType;&lt;br&gt;  ResultSet colRet = m_DBMetaData.getColumns(null,&amp;quot;%&amp;quot;, m_TableName,&amp;quot;%&amp;quot;);&lt;br&gt;  while(colRet.next()) {&lt;br&gt;   columnName = colRet.getString(&amp;quot;COLUMN_NAME&amp;quot;);&lt;br&gt;   columnType = colRet.getString(&amp;quot;TYPE_NAME&amp;quot;);&lt;br&gt;   int datasize = colRet.getInt(&amp;quot;COLUMN_SIZE&amp;quot;);&lt;br&gt;   int digits = colRet.getInt(&amp;quot;DECIMAL_DIGITS&amp;quot;);&lt;br&gt;   int nullable = colRet.getInt(&amp;quot;NULLABLE&amp;quot;);  &lt;br&gt;   System.out.println(columnName+&amp;quot; &amp;quot;+columnType+&amp;quot; &amp;quot;+datasize+&amp;quot; &amp;quot;+digits+&amp;quot; &amp;quot;+&lt;br&gt;     nullable);&lt;br&gt;  }&lt;/font&gt;
&lt;p&gt;&lt;font face="Courier New"&gt;  JDBC里面通过getColumns的接口，实现对字段的查询。跟getTables一样，&amp;quot;%&amp;quot;表示所有任意的（字段），而m_TableName就是数据表的名字。&lt;/font&gt;
&lt;p&gt;&lt;font face="Courier New"&gt;  getColumns的返回也是将所有的字段放到一个类似的内存中的表，而COLUMN_NAME就是字段的名字，TYPE_NAME就是数据类型，比如&amp;quot;int&amp;quot;,&amp;quot;int unsigned&amp;quot;等等，COLUMN_SIZE返回整数，就是字段的长度，比如定义的int(8)的字段，返回就是8，最后NULLABLE，返回1就表示可以是Null,而0就表示Not Null。&lt;/font&gt;&lt;/div&gt;&lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=-508484562895931526&amp;page=RSS%3a+JDBC%e4%b8%ad%e8%8e%b7%e5%8f%96%e6%95%b0%e6%8d%ae%e8%a1%a8%e7%9a%84%e4%bf%a1%e6%81%af&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=tangl99.spaces.live.com&amp;amp;GT1=tangl99"&gt;</description><comments>http://tangl99.spaces.live.com/Blog/cns!F8F17FFBEED1777A!188.entry#comment</comments><guid isPermaLink="true">http://tangl99.spaces.live.com/Blog/cns!F8F17FFBEED1777A!188.entry</guid><pubDate>Mon, 13 Mar 2006 06:27:58 GMT</pubDate><slash:comments>2</slash:comments><msn:type>blogentry</msn:type><live:type>blogentry</live:type><live:typelabel>Blog entry</live:typelabel><wfw:commentRss>http://tangl99.spaces.live.com/blog/cns!F8F17FFBEED1777A!188/comments/feed.rss</wfw:commentRss><wfw:comment>http://tangl99.spaces.live.com/Blog/cns!F8F17FFBEED1777A!188.entry#comment</wfw:comment><dcterms:modified>2006-03-13T06:27:58Z</dcterms:modified></item><item><title>openminer中挖掘关联规则的算法实现概述</title><link>http://tangl99.spaces.live.com/Blog/cns!F8F17FFBEED1777A!187.entry</link><description>&lt;div&gt;   关联规则挖掘算法很简单，比如Apriori，FPG这些都是典型的基础算法。但是一般的书籍却很少提到如何在真是的数据库上实现。真实的数据库不一定是海量数据库，哪怕是一个记录超过1W的关系表，如果属性很多，超过20个，那么中间过程中产生的候选项集也是很庞大的。其实所需的内存主要是保存候选项集和频繁项集。
&lt;p&gt;   候选项集的产生是组合交叉产生的，如果以组合公式来计算，属性个数N=20,那么产生的候选项集中，最大可以达到2^20-1项，大约就是1MB个候选项。而如果属性个数超过32个，那么最大的候选个数就超过4GB，即使一个候选项只保存一个字节，也达到了32位机器的内存极限了。显然，无论如何，候选项集是不能保存在内存中的。
&lt;p&gt;  现在大部分的书上的关联挖掘讲解都是基于算法演示，也没有多少运用于实际的数据库项目。OpenMiner里面需要关联挖掘的事务数据的事务项可能超过200个，显然不能同于一般数据挖掘教材上的那些算法了。
&lt;p&gt;  OpenMiner的关联挖掘实现的核心算法跟一般的基于内存的是一致的，唯一不同的就是将中间结果，候选项集和频繁项集，存放于外存。当然，也不是完全存放于外存，只是大部分存放于外存，当前需要多次访问的还是存放在内存中。访问外存的速度远比访问内存速度慢，而且OpenMiner的支持多种外存存储介质，可以是OpenMiner自己建立的磁盘文件，也可以是系统数据库里面的数据表。OpenMiner是推荐使用后者作为其中间结果的保存，因为数据库管理系统能够提供更好的候选式和频繁式的查询和提取效率。而通过Hibernate这样的O/R Mapping工具，数据挖掘使用者可以很方便地将数据表映射成Java里面的常用数据结构对象，比如List这些，这一层就可以对于Apriori,FPG算法模块来说做到透明了。
&lt;p&gt;   上述办法，OpenMiner解决了内存有限的问题，但是效率方面并没有解决。其实关于提高Apriori效率的研究早就已经有很多论文了。比如基于Hash-Tree的Apriori，以及后面的FPG等等，都是解决速度的不错方法，但是无论如何，关联挖掘的在进行支持度查找的时候，每次都要遍历整个数据表，实在快不起来。&lt;/div&gt;&lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=-508484562895931526&amp;page=RSS%3a+openminer%e4%b8%ad%e6%8c%96%e6%8e%98%e5%85%b3%e8%81%94%e8%a7%84%e5%88%99%e7%9a%84%e7%ae%97%e6%b3%95%e5%ae%9e%e7%8e%b0%e6%a6%82%e8%bf%b0&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=tangl99.spaces.live.com&amp;amp;GT1=tangl99"&gt;</description><comments>http://tangl99.spaces.live.com/Blog/cns!F8F17FFBEED1777A!187.entry#comment</comments><guid isPermaLink="true">http://tangl99.spaces.live.com/Blog/cns!F8F17FFBEED1777A!187.entry</guid><pubDate>Sat, 11 Mar 2006 16:53:04 GMT</pubDate><slash:comments>0</slash:comments><msn:type>blogentry</msn:type><live:type>blogentry</live:type><live:typelabel>Blog entry</live:typelabel><wfw:commentRss>http://tangl99.spaces.live.com/blog/cns!F8F17FFBEED1777A!187/comments/feed.rss</wfw:commentRss><wfw:comment>http://tangl99.spaces.live.com/Blog/cns!F8F17FFBEED1777A!187.entry#comment</wfw:comment><dcterms:modified>2006-03-11T16:53:04Z</dcterms:modified></item><item><title>Weka项目中的ARFF文件结构解析</title><link>http://tangl99.spaces.live.com/Blog/cns!F8F17FFBEED1777A!180.entry</link><description>&lt;div&gt;  Weka作为数据挖掘开源项目中的经典，很多算法和数据的组织结构是值得学习的。Weka里面大量使用了一种叫做arff(&lt;strong&gt;Attribute-Relation File Format&lt;/strong&gt; )的数据文件结构。这种arff文件内部结构很简单，主要是测试算法使用的轻量级的数据文件结构。OpenMiner继承Weka的风格，也打算支持arff文件格式，并且作为前期的挖掘算法测试数据来源。下面是我从网上找到的关于这种文件格式的网址&lt;a href="http://www.cs.waikato.ac.nz/~ml/weka/arff.html"&gt;&lt;u&gt;&lt;font color="#800080"&gt;http://www.cs.waikato.ac.nz/~ml/weka/arff.html&lt;/font&gt;&lt;/u&gt;&lt;/a&gt;
&lt;p&gt;  ARFF文件格式很简单，从Weka里面都可以找到一些它的例子：
&lt;p&gt;@relation weather
&lt;p&gt;@attribute outlook {sunny, overcast, rainy}&lt;br&gt;@attribute temperature real&lt;br&gt;@attribute humidity real&lt;br&gt;@attribute windy {TRUE, FALSE}&lt;br&gt;@attribute play {yes, no}
&lt;p&gt;@data&lt;br&gt;sunny,85,85,FALSE,no&lt;br&gt;sunny,80,90,TRUE,no&lt;br&gt;overcast,83,86,FALSE,yes&lt;br&gt;rainy,70,96,FALSE,yes&lt;br&gt;rainy,68,80,FALSE,yes&lt;br&gt;rainy,65,70,TRUE,no&lt;br&gt;overcast,64,65,TRUE,yes&lt;br&gt;sunny,72,95,FALSE,no&lt;br&gt;sunny,69,70,FALSE,yes&lt;br&gt;rainy,75,80,FALSE,yes&lt;br&gt;sunny,75,70,TRUE,yes&lt;br&gt;overcast,72,90,TRUE,yes&lt;br&gt;overcast,81,75,FALSE,yes&lt;br&gt;rainy,71,91,TRUE,no&lt;br&gt;
&lt;p&gt;不用多说，直接看，大致都能明白这个数据文件的意思了。
&lt;p&gt;    在读取arff文件的时候，有点是需要注意到的。在Java中，InputStream,DataInputStream这些类都不支持mark和reset，也就是说不能倒回去再读。而ByteArrayInputStream支持mark和reset，但是arff文件作为一个数据源文件，可能包含几十MB，甚至是几百MB。。。的数据，如果全部先读进内存，再从内存中解析，恐怕并不可行。还好Java中实现了BufferedInputStream，它可以预读8192个字节的缓冲，内存中的读完后，再从输入流中继续读8192个字节的缓冲，并且支持mark和reset，这就是我在Java里面自己实现解析arff时候的主要技术问题所在。至于字符串的解析就很简单了。&lt;/div&gt;&lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=-508484562895931526&amp;page=RSS%3a+Weka%e9%a1%b9%e7%9b%ae%e4%b8%ad%e7%9a%84ARFF%e6%96%87%e4%bb%b6%e7%bb%93%e6%9e%84%e8%a7%a3%e6%9e%90&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=tangl99.spaces.live.com&amp;amp;GT1=tangl99"&gt;</description><comments>http://tangl99.spaces.live.com/Blog/cns!F8F17FFBEED1777A!180.entry#comment</comments><guid isPermaLink="true">http://tangl99.spaces.live.com/Blog/cns!F8F17FFBEED1777A!180.entry</guid><pubDate>Sun, 26 Feb 2006 13:46:08 GMT</pubDate><slash:comments>0</slash:comments><msn:type>blogentry</msn:type><live:type>blogentry</live:type><live:typelabel>Blog entry</live:typelabel><wfw:commentRss>http://tangl99.spaces.live.com/blog/cns!F8F17FFBEED1777A!180/comments/feed.rss</wfw:commentRss><wfw:comment>http://tangl99.spaces.live.com/Blog/cns!F8F17FFBEED1777A!180.entry#comment</wfw:comment><dcterms:modified>2006-02-26T13:46:08Z</dcterms:modified></item><item><title>近期我对挖掘多维关联规则和Apriori挖掘事务数据的看法</title><link>http://tangl99.spaces.live.com/Blog/cns!F8F17FFBEED1777A!178.entry</link><description>&lt;div&gt;这几天我对数据挖掘中的关联挖掘有不少的疑问，看了教材上的Apriori算法。但是在实际挖掘算法的实现上遇到了一些问题。Apriori算法在《数据挖掘：概念与技术》的教材上演示的是针对事务数据的挖掘，类似这样的{I1,I2,I3}这样的事务数据集，并不要求I1,I2,I3之间是在同一张表上。而挖掘多维数据，那么是指的多维属性，比如 buys(X,&amp;quot;beef&amp;quot;) ^ buys(X,&amp;quot;beer&amp;quot;) =&amp;gt; buys(X,&amp;quot;fork&amp;quot;)，买了牛肉和啤酒的人多半会买叉子这个规则上，都是buys这个属性下的数据，所以还是单维。而书上的例子，age(X,&amp;quot;20...29&amp;quot;) ^ income(X,&amp;quot;20K...29K&amp;quot;) =&amp;gt; buys(X,&amp;quot;CD_player&amp;quot;)这就是一个多个属性，多维的关联规则。 而age,income,buys这几个属性可能在多张数据表上。 
&lt;p&gt;   教材上主要由Apriori算法来讲解关联挖掘部分，其中是以事务数据来挖掘的。开始实施Apriori算法的时候，我面对的是一张张表，而不是事务数据，就不太明白如何使用Apriori了。后来考虑了一下，把表中的信息提取出来，融合成一个个的事务，那么进行关联挖掘的时候，对于Apriori算法来说，觉得根本不需要理会这个到底是多维还是单维的事务，多维的数据其实可以融合成一个事务。这只是我初步的想法，后来我就询问了毕业设计指导老师，下面是我和指导老师的通信：
&lt;div&gt;------------------------------------------------------&lt;/div&gt;
&lt;div&gt;XX老师：&lt;/div&gt;
&lt;div&gt;   我是唐良，是计算机学院2002级本科毕业设计分配在唐老师门下做的。上个学期，已经定下来是做教务处的教务管理数据挖掘系统，你当时也给我们指导过一次。现在我们在《数据挖掘概念和技术》的时候，遇到一些问题，想请教一下。&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;1. 在第六章讲解挖掘关联规则的时候后半部分，讲解了挖掘多维关联规则的时候，似乎是讲解挖掘量化数据的办法的嘛。而多维关联规则，前面的Apriori算法本省就可以产生多维的啊。比如找到频繁项{I1, I2, I3}就有可能导出 I1 ^ I2 =&amp;gt; I3，这不就是二维的关联规则了吗？&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;2. 我看书上说的那些关联挖掘，都是基于一个事务表，这个表和实际的数据库中关系表似乎不一样吧。事务表中，一次事务的项可以是多个，个数可以不同，而实际的关系数据表中，字段个数都是固定的啊。那么就有这样一个问题，在挖掘关联规则的时候，一个事务可能并不能简单对应书上的那种一个表的一个Record记录，是不是我需要自己在扫描数据库的时候再构造一个事务处理，然后再交给关联挖掘算法？&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;谢谢！&lt;/div&gt;&lt;span&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;唐良&lt;/div&gt;
&lt;div&gt;2006-2-22&lt;/div&gt;
&lt;div&gt;------------------------------------------------------&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;&lt;font size=2&gt;&lt;font face="宋体"&gt;唐良，你好！&lt;/font&gt; &lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;font size=2&gt;        对于第1个问题，在关联规则挖掘中，所指的“维”实际上是指“属性”，那么在你举的例子中“&lt;/font&gt;&lt;font size=3&gt;I1 ^ I2 =&amp;gt; I3”，I1、I2或I3都是一个属性下的项，所以仍然是单维关联挖掘。&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;    对于第2个问题，这个问题实际中怎样操作数据库的数据来进行数据挖掘，这个不好说，但有一点可以肯定数据是需要预处理的，那么在预处理阶段，除了要做些去除“噪声”，转换格式，啊等等操作外，还要把数据转换成易于算法处理的格式。正如你所发现的问题：如果象书上例子那样描述数据，算法很难处理，起码不易扩展事务项。实际上，真正在做关联规则分析时，我们会把数据转换成另外一种格式，我给你传一个附件，是一个用于关联规则算法的数据，（第一列和第二列一样，都是指事务项编号；第三列是每项事务所含的事务），实际上，在进行分类算法分析时也是一样。&lt;/div&gt;
&lt;div&gt;&lt;/div&gt;
&lt;div&gt;-----------------------------------------------------&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;XX老师:&lt;/div&gt;
&lt;div&gt;   我又看了一下书,大致明白了多维和单维的关系。但是我觉得，Apriori挖掘的是针对事务的数据啊，即使是多维的数据，在数据预处理的时候就可以把相关的几个属性数据合并到一个事务数据项啊。比如书上的例子，age(X,&amp;quot;20...29&amp;quot;) ^ income(X,&amp;quot;20K...29K&amp;quot;) =&amp;gt; buys(X,&amp;quot;CD_player&amp;quot;)这个。虽然age,income,buys都是不同属性，不同的数据表内，但是我可以根据人物X，把几个数据合并成一个事务数据项啊，{ age, income, buys}这个样子，那么我就是针对这种事务数据项来使用Apriori算法来挖就是了啊。你看我想的对不对？ &lt;/div&gt;
&lt;div&gt;  书上的那个多维规则, age(X,&amp;quot;20...29&amp;quot;)  ^ income(X,&amp;quot;20K...29K&amp;quot;) =&amp;gt; buys(X,&amp;quot;CD_player&amp;quot;)。age,income,buys三个属性可能存放在不同的数据表内，但是必然有相互索引关联的关键字。我的想法就是把三个数据都打成一个事务数据表，比如说： 
&lt;div&gt;{ age(&amp;quot;20...29&amp;quot;), income(&amp;quot;20K...29K&amp;quot;), buys(&amp;quot;CD_player&amp;quot;)  }&lt;/div&gt;
&lt;div&gt;{ age(&amp;quot;10...19&amp;quot;), income(&amp;quot;0...5K&amp;quot;),      buys(&amp;quot;CD_player&amp;quot;)   }&lt;/div&gt;
&lt;div&gt;{ age(&amp;quot;20...29&amp;quot;), income(&amp;quot;50K...80K&amp;quot;), buys(&amp;quot;Computer&amp;quot;)   }&lt;/div&gt;
&lt;div&gt;{ age(&amp;quot;30...39&amp;quot;), income(&amp;quot;30K...40K&amp;quot;), buys(&amp;quot;TV&amp;quot;)             }&lt;/div&gt;
&lt;div&gt;...&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;你看这样行不行？&lt;/div&gt;&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;唐良&lt;/div&gt;
&lt;div&gt;2006-2-23&lt;/div&gt;
&lt;div&gt;-----------------------------------------------------&lt;/div&gt;
&lt;div&gt;&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;&lt;font size=2&gt;&lt;font face="宋体"&gt;唐良，你好！&lt;/font&gt;&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;font size=2&gt;&lt;/font&gt; &lt;/div&gt;
&lt;div&gt;    你在无意识（或有意）中做了数据挖掘的另一个研究方向，属性融合。&lt;/div&gt;
&lt;div&gt;    就象你在上一封邮件中谈到的那个例子一样，如果age属性事先被分成了3个量化区间（那么令为I1, I2, I3），income属性被划分成了若干区间(I4,...Ik)，buys有两个值(Ik+1, Ik+2)，那么我们就可以用Apriori算法来处理了，这实际上是做了一个映射，把多维的特征转换成了一维，我认为是可以的。 &lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/span&gt;&lt;/div&gt;&lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=-508484562895931526&amp;page=RSS%3a+%e8%bf%91%e6%9c%9f%e6%88%91%e5%af%b9%e6%8c%96%e6%8e%98%e5%a4%9a%e7%bb%b4%e5%85%b3%e8%81%94%e8%a7%84%e5%88%99%e5%92%8cApriori%e6%8c%96%e6%8e%98%e4%ba%8b%e5%8a%a1%e6%95%b0%e6%8d%ae%e7%9a%84%e7%9c%8b%e6%b3%95&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=tangl99.spaces.live.com&amp;amp;GT1=tangl99"&gt;</description><comments>http://tangl99.spaces.live.com/Blog/cns!F8F17FFBEED1777A!178.entry#comment</comments><guid isPermaLink="true">http://tangl99.spaces.live.com/Blog/cns!F8F17FFBEED1777A!178.entry</guid><pubDate>Fri, 24 Feb 2006 14:13:54 GMT</pubDate><slash:comments>5</slash:comments><msn:type>blogentry</msn:type><live:type>blogentry</live:type><live:typelabel>Blog entry</live:typelabel><wfw:commentRss>http://tangl99.spaces.live.com/blog/cns!F8F17FFBEED1777A!178/comments/feed.rss</wfw:commentRss><wfw:comment>http://tangl99.spaces.live.com/Blog/cns!F8F17FFBEED1777A!178.entry#comment</wfw:comment><dcterms:modified>2006-02-24T14:13:54Z</dcterms:modified></item><item><title>开启了我的第一个开源项目OpenMiner</title><link>http://tangl99.spaces.live.com/Blog/cns!F8F17FFBEED1777A!175.entry</link><description>&lt;p&gt;  昨天,总算把OpenMiner作为自己的第一个开源项目的Subversion和Wiki的开启了。OpenMiner其实是我的本科毕业设计的一个核心项目，是一个数据挖掘的核心组件。下面是OpenMiner的Wiki地址: http://wiki.javascud.org/display/openminer/Home，SVN地址是: &lt;a href="http://svn.javascud.org/svn/openminer"&gt;http://svn.javascud.org/svn/openminer&lt;/a&gt;。下载最新版本的OpenMiner不需要任何帐号，可以通过SVN客户端下载，也可以通过浏览器下载。 
&lt;p&gt;  下面是WIKI上针对OpenMiner的简单介绍:
&lt;p&gt;   数据挖掘技术是指从大量数据中从挖掘出潜在有用的知识，与KDD(knowledge Discovery in Database)类同。OpenMiner是基于Java的一个开源数据挖掘项目，通过OpenMiner，可以避开各种关联挖掘，分类预测，聚类分析等复杂算法，方便集成到各种决策支持系统开发项目，商业智能分析，或其它科学分析的软件项目。 &lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=-508484562895931526&amp;page=RSS%3a+%e5%bc%80%e5%90%af%e4%ba%86%e6%88%91%e7%9a%84%e7%ac%ac%e4%b8%80%e4%b8%aa%e5%bc%80%e6%ba%90%e9%a1%b9%e7%9b%aeOpenMiner&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=tangl99.spaces.live.com&amp;amp;GT1=tangl99"&gt;</description><comments>http://tangl99.spaces.live.com/Blog/cns!F8F17FFBEED1777A!175.entry#comment</comments><guid isPermaLink="true">http://tangl99.spaces.live.com/Blog/cns!F8F17FFBEED1777A!175.entry</guid><pubDate>Wed, 15 Feb 2006 13:24:24 GMT</pubDate><slash:comments>1</slash:comments><msn:type>blogentry</msn:type><live:type>blogentry</live:type><live:typelabel>Blog entry</live:typelabel><wfw:commentRss>http://tangl99.spaces.live.com/blog/cns!F8F17FFBEED1777A!175/comments/feed.rss</wfw:commentRss><wfw:comment>http://tangl99.spaces.live.com/Blog/cns!F8F17FFBEED1777A!175.entry#comment</wfw:comment><dcterms:modified>2006-02-15T13:24:24Z</dcterms:modified></item><item><title>Oracle10g启动与关闭的方法</title><link>http://tangl99.spaces.live.com/Blog/cns!F8F17FFBEED1777A!159.entry</link><description>&lt;h1&gt;&lt;font size=6&gt;Oracle10g启动与关闭的方法&lt;/font&gt;&lt;/h1&gt;
&lt;p&gt;  &lt;font size=4&gt;  Oracle10g和之前的Oracle似乎有点不一样.照理来说,直接使用bin下的dbstart就可以启动了,可是奇怪的就是启动不了.后来我从网上搜索了以下,并且在自己的机器上测试了一下,总算是找到一个可行的办法:&lt;/font&gt;
&lt;h2&gt;&lt;font size=5&gt;1. 启动Oracle10g&lt;/font&gt;&lt;/h2&gt;
&lt;p&gt;&lt;font size=4&gt;   以Oracle帐号登陆Linux,或者从root下输入su - oracle变成oracle帐号,然后进入bin目录输入sqlplus '/ as sysdba'进入sqlplus.然后直接输入startup就可以了.&lt;/font&gt;
&lt;h2&gt;&lt;font size=5&gt;2. 关闭Oracle10g&lt;/font&gt;&lt;/h2&gt;
&lt;p&gt;&lt;font size=4&gt;   关闭Oracle10g的办法和启动一样,只是sqlplus命令输入shutdown,或者输入shutdown immediate.Oracle10g开启和关闭都有点慢.&lt;/font&gt;
&lt;h2&gt;&lt;font size=5&gt;3. 开启和关闭监听&lt;/font&gt;&lt;/h2&gt;
&lt;p&gt;    &lt;font size=4&gt;在终端下(不是sqlplus),输入lsnrctl start 启动监听.输入lsnrctl stop关闭监听.&lt;/font&gt;&lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=-508484562895931526&amp;page=RSS%3a+Oracle10g%e5%90%af%e5%8a%a8%e4%b8%8e%e5%85%b3%e9%97%ad%e7%9a%84%e6%96%b9%e6%b3%95&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=tangl99.spaces.live.com&amp;amp;GT1=tangl99"&gt;</description><comments>http://tangl99.spaces.live.com/Blog/cns!F8F17FFBEED1777A!159.entry#comment</comments><guid isPermaLink="true">http://tangl99.spaces.live.com/Blog/cns!F8F17FFBEED1777A!159.entry</guid><pubDate>Sat, 21 Jan 2006 15:20:54 GMT</pubDate><slash:comments>0</slash:comments><msn:type>blogentry</msn:type><live:type>blogentry</live:type><live:typelabel>Blog entry</live:typelabel><wfw:commentRss>http://tangl99.spaces.live.com/blog/cns!F8F17FFBEED1777A!159/comments/feed.rss</wfw:commentRss><wfw:comment>http://tangl99.spaces.live.com/Blog/cns!F8F17FFBEED1777A!159.entry#comment</wfw:comment><dcterms:modified>2006-01-26T16:14:26Z</dcterms:modified></item></channel></rss>