日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

开源数据挖掘工具Orange简介

發布時間:2024/1/1 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 开源数据挖掘工具Orange简介 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

原文地址:?http://cloga.info/python/2014/01/02/Orangeintro/#wat_e_19338566-a664-48dd-adf4-325f96bcec42

Orange是一款底層基于C++,并且提供了Python接口的開源數據挖掘工具。與Sklearn,pyml這 類數據挖掘包相比,Orange的歷史更加悠久,在上面實現的算法也更加豐富,此外,除了以python模塊的形式使用之外,Orange還提供了GUI,可以用通過預先 定義好的多種模塊組成工作流來完成復雜的數據挖掘工作。

Orange的發起最早可以追溯到1997年WebLab會議,在這個會議上人們提到了構建一個靈活的實驗基準以便大家可以將自己的算法,實驗結果放在上面,這些想法最終 催生了Orange項目。

Orange包含大量標準或非標準的機器學習和數據挖掘的算法,以及常規數據讀寫和操作,其底層的核心是由C++來實現的,同時Orange也利用python腳本來快速 實現新算法的原型以及一些不太要求執行時間的功能。

Orange中的數據

Orange使用一種專有的數據結構,擴展名為.tab,其實就是用tab分隔每個數據的純文本。文檔的第一行為屬性的名稱,用tab分隔,第二行為屬性對應的數據類型, 包含連續性,間斷型和字符型。第三行包含一些元信息,用于指明依賴的特征(分類),不相關的特征(需要忽略的特征)和元特征。

import Orange data = Orange.data.Table("iris")

通過以上的代碼,就可以獲得一個Orange的數據表,數據表是Orange中基本數據單元(類似DataFrame在Pandas中的地位)。iris是Orange自 帶的樣例數據,其擴展名即為.tab。

Orange也可以讀取其他格式的數據文件,比如csv,txt等。

data = Orange.data.Table("iris.csv")

以上就可以將iris.csv中的數據轉換為Orange的數據表。iris.csv中是150個鳶尾花的記錄,這個數據在數據挖掘的課程及工具中經常被引用作為分類和聚 類的樣例數據。

讓我們看一下iris這個數據表中的數據。

data.domain.variables <Orange.feature.Continuous 'sepal length', Orange.feature.Continuous 'sepal width', Orange.feature.Continuous 'petal length', Orange.feature.Continuous 'petal width', Orange.feature.Discrete 'iris'>

在這個數據表中每條記錄有5個屬性

data.domain.features <Orange.feature.Continuous 'sepal length', Orange.feature.Continuous 'sepal width', Orange.feature.Continuous 'petal length', Orange.feature.Continuous 'petal width'>

這5個屬性中有四個屬于特征,分別是花萼長度(連續變量),花萼寬度(連續變量),花瓣長度(連續變量),花瓣寬度(連續變量)

data.domain.class_var Orange.feature.Discrete 'iris'

分類變量是一個間斷變量

data.domain.class_var.values <Iris-setosa, Iris-versicolor, Iris-virginica>

可以看到這150個鳶尾花是三種類型

每個Orange的數據表,是由Orange的data instant組成的list,每一個記錄就是一個data instant

type(data) Orange.data.Table data[0] [5.1, 3.5, 1.4, 0.2, 'Iris-setosa'] type(data[0]) Orange.data.Instance data[0][0] <orange.Value 'sepal length'='5.1'> data[0][0].value 5.099999904632568

通過value屬性可以獲得一個屬性的數值。

data.save("new_data.tab")

通過save方法可以將數據表輸出為.tab的文件

用Orange進行分類

通過get_class方法可以獲得Orange instance的對應的分類。對于iris這個數據集,就是具體的鳶尾花類型。

data[0].get_class() <orange.Value 'iris'='Iris-setosa'>

在Orange中的分類任務提供了Learners和Classifiers兩個對象。Learners通過對訓練集的學習返回一個Classifier,Classif ier可以用來預測一個data instance屬于哪個分類。

learner = Orange.classification.bayes.NaiveLearner() classifier = learner(data) classifier(data[50]) <orange.Value 'iris'='Iris-virginica'>

上面代碼構建了一個樸素貝葉斯的learner,在iris數據集上應用learner構建了一個Classifier,并用它預測了一個樣例數據。

classifier(data[50],Orange.classification.Classifier.GetProbabilities) <0.000, 0.493, 0.507> classifier(data[0],Orange.classification.Classifier.GetProbabilities).variable.values <Iris-setosa, Iris-versicolor, Iris-virginica>

我們也可以看一下Classifier預測每個data instance是不同分類的可能性

data[50] [7.0, 3.2, 4.7, 1.4, 'Iris-versicolor']

上面的Learner預測第51個樣例數據為Iris-virginica,而其分類其實是Iris- versicolor,Classifier根據樣例數據預測第51個樣例有49.3%的幾率屬于Iris-versicolor, 有50.7%的幾率屬于Iris- virginica。通過Orange.evaluation.scoring.CA(Classification Accuracy)函數可以計算模型的分類準確度。

learners = [learner] res = Orange.evaluation.testing.cross_validation(learners, data) CA = Orange.evaluation.scoring.CA(res) print CA[0] 0.92

可以看到應用樸素貝葉斯分類的模型,在訓練集的正確率也只有92%。

讓我們在Iirs數據集上應用多種判別算法,來看一下比較不同算法結果。

learners = [Orange.classification.bayes.NaiveLearner(),Orange.classification.tree.TreeLearner(),Orange.classification.neural.NeuralNetworkLearner(),Orange.ensemble.forest.RandomForestLearner(),Orange.classification.svm.SVMLearner()] res = Orange.evaluation.testing.cross_validation(learners, data) CAs = Orange.evaluation.scoring.CA(res) for i,CA in enumerate(CAs):print "{:s} CA is {:2%}".format(learners[i].name, CAs[i]) naive CA is 92.000000% tree CA is 94.000000% NeuralNetwork CA is 96.000000% Random Forest CA is 96.000000% sVM CA is 96.666667%

可以看到在默認的參數情況下,對于Iris數據集SVM的預測效果最好達到了96.7%,其次是神經網絡和隨機森林,決策樹和樸素貝葉斯判別的效果較差。

用Orange進行聚類

層次聚類

sample = data.select(Orange.data.sample.SubsetIndices2(data, 20), 0) root = Orange.clustering.hierarchical.clustering(sample) labels = [str(d.get_class()) for d in sample] Orange.clustering.hierarchical.dendrogram_draw("hclust-dendrogram.png", root, labels=labels)

上面是官方給到的層次聚類的樣例代碼,通過這段代碼可以將Iris進行聚類。代碼中抽取了20個sample,如果分為三組的話,可以看到其中有3個數據的分類有誤。

K-Means聚類

import random km = Orange.clustering.kmeans.Clustering(data, 3) sample = random.sample(range(150), 20) for i in sample:print km.clusters[i], data[i].get_class() 2 Iris-virginica 2 Iris-versicolor 0 Iris-setosa 0 Iris-versicolor 2 Iris-virginica 2 Iris-versicolor 2 Iris-virginica 2 Iris-virginica 0 Iris-setosa 2 Iris-virginica 2 Iris-virginica 2 Iris-versicolor 1 Iris-setosa 2 Iris-versicolor 1 Iris-setosa 2 Iris-versicolor 2 Iris-versicolor 2 Iris-virginica 2 Iris-virginica 1 Iris-setosa

同樣是將iris分為三組,可以看到2對應Iris-setosa,0對應Iris-virginica,1對應Iris- versicolor,依然會有分組錯誤的情況。

在前面已經提到除了作為一個python模塊外,Orange也提供了GUI進行數據挖掘,下圖為層次聚類的一個工作流截圖。

可以看到層次聚類的過程被分解為數據讀取,計算距離,聚類,輸出結果這幾個步驟。通過在GUI中選取數據調整參數就可以進行層次聚類。

  • python 15
  • Orange 1
  • Python 13

總結

以上是生活随笔為你收集整理的开源数据挖掘工具Orange简介的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。