1. 程式人生 > >資料探勘之鳶尾花資料集分析

資料探勘之鳶尾花資料集分析

因為手上沒有iris.data資料,只能通過在sklearn中載入原始資料,並將其轉換為Dataframe格式

主要內容:資料分佈的視覺化(特徵之間分佈、特徵內部、分類精度、熱力圖) 

演算法:決策樹 隨機森林

import pandas as pd
from sklearn.datasets import load_iris
import numpy as np
# iris_data = pd.read_csv('iris.data')
iris = load_iris()
X, y = iris.data, iris.target

iris_data = pd.DataFrame(np.hstack((X, y.reshape(-1, 1))),index = range(X.shape[0]),columns=['sepal_length_cm','sepal_width_cm','petal_length_cm','petal_width_cm','class'] )

#如果拿到手的資料沒有 資料頭標籤 那可以通過下面這句話 新增標籤
# iris_data.columns = ['sepal_length_cm','sepal_width_cm','petal_length_cm','petal_width_cm','class'] 
# print(iris_data.head)

# from PIL import Image
import matplotlib.pyplot as plt
# img = Image.open('test.jpg')
# plt.imshow()
# plt.show()
# 
# #看一下資料的分佈規則 可以看數量 均值 方差 分位數等
print(iris_data.describe())
# 
# #強大的視覺化庫 可以檢視到不同特徵之間的關係 以及分佈
import seaborn as sb
sb.pairplot(iris_data.dropna(),hue = 'class')
 
plt.figure(figsize=(10,10))
for column_index,column in enumerate(iris_data.columns):
    if column == 'class':
        continue
    plt.subplot(2,2,column_index+1)
    sb.violinplot(x= 'class', y=column, data = iris_data)
plt.show()

輸出:

       sepal_length_cm  sepal_width_cm  petal_length_cm  petal_width_cm  \
count       150.000000      150.000000       150.000000      150.000000   
mean          5.843333        3.054000         3.758667        1.198667   
std           0.828066        0.433594         1.764420        0.763161   
min           4.300000        2.000000         1.000000        0.100000   
25%           5.100000        2.800000         1.600000        0.300000   
50%           5.800000        3.000000         4.350000        1.300000   
75%           6.400000        3.300000         5.100000        1.800000   
max           7.900000        4.400000         6.900000        2.500000   

            class  
count  150.000000  
mean     1.000000  
std      0.819232  
min      0.000000  
25%      0.000000  
50%      1.000000  
75%      2.000000  
max      2.000000  

利用seaborn和交叉驗證 對訓練精度進行視覺化

import pandas as pd
from sklearn.datasets import load_iris
import numpy as np
# iris_data = pd.read_csv('iris.data')
iris = load_iris()
X, y = iris.data, iris.target

iris_data = pd.DataFrame(np.hstack((X, y.reshape(-1, 1))),index = range(X.shape[0]),columns=['sepal_length_cm','sepal_width_cm','petal_length_cm','petal_width_cm','class'] )
import matplotlib.pyplot as plt
import seaborn as sb
from sklearn.cross_validation import train_test_split
all_inputs = iris_data[['sepal_length_cm','sepal_width_cm','petal_length_cm','petal_width_cm']].values #可以不用加values
all_classes = iris_data['class'].values #可以不用加values
training_inputs,testing_inputs,training_classes,testng_classes  = train_test_split(all_inputs,all_classes,train_size = 0.75,random_state = 1) #random_state 制定隨機數的種子

from sklearn.tree import DecisionTreeClassifier
decision_tree_classifier= DecisionTreeClassifier()
decision_tree_classifier.fit(training_inputs,training_classes)
print(decision_tree_classifier.score(testing_inputs,testng_classes)) #計算精度值
 
#對分類精度進行視覺化
from sklearn.cross_validation import cross_val_score
import numpy as np
decision_tree_classifier = DecisionTreeClassifier() # math_depth = 1
cv_scores = cross_val_score(decision_tree_classifier,all_inputs,all_classes,cv =10)
print(cv_scores)
sb.distplot(cv_scores) # kde = False
plt.title('Average score:{}'.format(np.mean(cv_scores)))
plt.show()

輸出:

0.9736842105263158
[1.         0.93333333 1.         0.93333333 0.93333333 0.86666667
 0.93333333 0.93333333 1.         1.        ]

通過GridSearchCV進行引數選擇 並將引數進行熱度圖視覺化,並通過最佳引數建立一個決策樹,通過graphviz將生成的dot檔案轉為pdf,但是本文沒有進行相關操作,以後有時間再試, 

隨後通過隨機森林進行分類的最佳引數選擇

import pandas as pd
from sklearn.datasets import load_iris
import numpy as np
# iris_data = pd.read_csv('iris.data')
iris = load_iris()
X, y = iris.data, iris.target

iris_data = pd.DataFrame(np.hstack((X, y.reshape(-1, 1))),index = range(X.shape[0]),columns=['sepal_length_cm','sepal_width_cm','petal_length_cm','petal_width_cm','class'] )
import matplotlib.pyplot as plt
import seaborn as sb
from sklearn.cross_validation import train_test_split
all_inputs = iris_data[['sepal_length_cm','sepal_width_cm','petal_length_cm','petal_width_cm']].values #可以不用加values
all_classes = iris_data['class'].values #可以不用加values
training_inputs,testing_inputs,training_classes,testng_classes  = train_test_split(all_inputs,all_classes,train_size = 0.75,random_state = 1) #random_state 制定隨機數的種子
from sklearn.tree import DecisionTreeClassifier
#通過GridSearchCV進行引數選擇
from sklearn.grid_search import GridSearchCV
from sklearn.cross_validation import StratifiedKFold
decision_tree_classifier = DecisionTreeClassifier()
parameter_grid = {'max_depth':[1,2,3,4,5],
                  'max_features':[1,2,3,4]}
cross_validation = StratifiedKFold(all_classes,n_folds=10)
grid_search = GridSearchCV(decision_tree_classifier,param_grid = parameter_grid,cv = cross_validation)
grid_search.fit(all_inputs, all_classes)
print('Best score:{}'.format(grid_search.best_score_))
print('Best parameter:{}'.format(grid_search.best_params_))
 
#將GridSearchCV選擇的引數進行熱度圖視覺化
grid_visualization = []
for grid_pair in grid_search.grid_scores_:
    grid_visualization.append(grid_pair.mean_validation_score)
grid_visualization = np.array(grid_visualization)
grid_visualization.shape = (5,4)
sb.heatmap(grid_visualization,cmap='Blues')
plt.xticks(np.arange(4)+0.5,grid_search.param_grid['max_features'])
plt.yticks(np.arange(5)+0.5,grid_search.param_grid['max_depth'][::-1])
plt.xlabel('max_features')
plt.ylabel('max_depth')
#通過上面的引數選擇 將最好的引數建立一個決策樹
decision_tree_classifier = grid_search.best_estimator_
import sklearn.tree as tree
from sklearn.externals.six import StringIO
with open('iris_dtc.dot','w') as out_file:
    out_file = tree.export_graphviz(decision_tree_classifier,out_file=out_file)
    #可以通過下載graphviz軟體將dot檔案轉換為 pdf檔案 http://www.graphviz.org/
 
#通過隨機森林選擇最佳引數分類
from sklearn.ensemble import RandomForestClassifier
random_forest_classifier = RandomForestClassifier()
parameter_grid = {'n_estimators':[5,10,25,50],
                  'criterion':['gini','entropy'],
                  'max_features':[1,2,3,4],
                  'warm_start':[True,False]}
cross_validation = StratifiedKFold(all_classes,n_folds = 10)
grid_search = GridSearchCV(random_forest_classifier,param_grid=parameter_grid,cv = cross_validation)
grid_search.fit(all_inputs,all_classes)
print('Best score:{}'.format(grid_search.best_score_))
print('Best parameter:{}'.format(grid_search.best_params_))
print('Best_estimator:{}'.format(grid_search.best_estimator_))
plt.show()

輸出:

D:\F\Anaconda3\lib\site-packages\sklearn\cross_validation.py:44: DeprecationWarning: This module was deprecated in version 0.18 in favor of the model_selection module into which all the refactored classes and functions are moved. Also note that the interface of the new CV iterators are different from that of this module. This module will be removed in 0.20.
  "This module will be removed in 0.20.", DeprecationWarning)
D:\F\Anaconda3\lib\site-packages\sklearn\grid_search.py:43: DeprecationWarning: This module was deprecated in version 0.18 in favor of the model_selection module into which all the refactored classes and functions are moved. This module will be removed in 0.20.
  DeprecationWarning)
Best score:0.9666666666666667
Best parameter:{'max_depth': 3, 'max_features': 2}
Best score:0.9733333333333334
Best parameter:{'criterion': 'gini', 'max_features': 3, 'n_estimators': 10, 'warm_start': True}
Best_estimator:RandomForestClassifier(bootstrap=True, class_weight=None, criterion='gini',
            max_depth=None, max_features=3, max_leaf_nodes=None,
            min_impurity_split=1e-07, min_samples_leaf=1,
            min_samples_split=2, min_weight_fraction_leaf=0.0,
            n_estimators=10, n_jobs=1, oob_score=False, random_state=None,
            verbose=0, warm_start=True)

相關推薦

資料鳶尾花資料分析

因為手上沒有iris.data資料,只能通過在sklearn中載入原始資料,並將其轉換為Dataframe格式 主要內容:資料分佈的視覺化(特徵之間分佈、特徵內部、分類精度、熱力圖)  演算法:決策樹 隨機森林 import pandas as pd from skle

資料頻繁項分析

頻繁項集最經典和常用的應用就是超市的購物籃分析。每個購物籃裡有很多商品,每個商品都是一項元素,每個購物籃都是一個集合,所有購物籃就形成了一個系列集合。 分析哪些商品經常一起頻繁出現在購物籃內,即找到頻繁項集,然後,再分析其他商品與頻繁項集的關係,即關聯規則。 1. 什麼是

資料售房資料分析1

最近再做一批關於售房的資料,感覺自己陷入一個死衚衕裡: 該批資料是儲存再postgresql裡面,是從某售房網站上爬下來的,以資料庫中的一列欄位作為儲存資料,該列欄位是以json的資料形式儲存的,這裡跟我打開了一個新大門,資料庫能儲存json資料格式的資料,而且postgresql還有一套專門的

資料關聯分析二(頻繁項的產生)

頻繁項集的產生 格結構(lattice structure)常常用來表示所有可能的項集。 發現頻繁項集的一個原始方法是確定格結構中每個候選項集的支援度。但是工作量比較大。另外有幾種方法可以降低產生頻繁項集的計算複雜度。 1. 減少候選項集的數目。如先驗

資料方差分析實驗

本部落格根據非常好的excel資料而編寫,使用python語言操作,預計使用一週的時間更新完成。需要《非常好的excel資料》word文件,歡迎發郵件給[email protected],免費發放。這篇部落格對應《非常好的excel資料》裡的第5章節。 1.1 單因素方差分析

資料關聯分析一(基本概念)

許多商業企業運營中的大量資料,通常稱為購物籃事務(market basket transaction)。表中每一行對應一個事務,包含一個唯一標識TID。 利用關聯分析的方法可以發現聯絡如關聯規則或頻繁項集。 關聯分析需要處理的關鍵問題: 1. 從大型事

資料推薦分析--python實現

# #  FILTERINGDATA.py # #  Code file for the book Programmer's Guide to Data Mining #  http://guidetodatamining.com #  Ron Zacharski # #

使用Orange進行資料聚類分析(2)------K-means

一、基本k均值演算法 1 根據使用者指定的引數K,首先選擇K個初始化質心; 2 然後每個點指派到最近的質心,指派到一個質心的點形成一個簇。 3 更新每個簇的質心 4重複步驟2、3,直到簇不在發生變化。 虛擬碼描述如下: 選擇K個點作為初始質心 repeat 將每個質

轉載:資料_SVD的python實現和分析

作者:NumX  來源:CSDN  原文:https://blog.csdn.net/baidu_36316735/article/details/53760479?utm_source=copy 前言 今日實現第一個推薦演算法,在”機器學習實戰“一書中找到了SVD方法一

HAWQ + MADlib 玩轉資料(六)——主成分分析與主成分投影

一、主成分分析(Principal Component Analysis,PCA)簡介        在資料探勘中經常會遇到多個變數的問題,而且在多數情況下,多個變數之間常常存在一定的相關性。例如,網站的“瀏覽量”和“訪客數”往往具有較強的相關關係,而電商應用中的“下單數”和“成交數”也具有較強的相關關係。

資料關聯分析五(序列模式)

購物籃資料常常包含關於商品何時被顧客購買的時間資訊,可以使用這種資訊,將顧客在一段時間內的購物拼接成事務序列,這些事務通常基於時間或空間的先後次序。 問題描述 一般地,序列是元素(element)的有序列表。可以記做s=(e1,e2,⋯,en),其中

資料_SVD的python實現和分析pin

前言 今日實現第一個推薦演算法,在”機器學習實戰“一書中找到了SVD方法一章練習。這裡總結下筆記經驗,與大家分享 。 簡介 對於一個簡單的推薦系統,例如電影推薦,我們知道N個使用者對M個電影的評分。這時候對於一個新的使用者,我們應該如何給他推薦新的電影呢?一個最簡單的方法,

資料十大經典演算法

國際權威的學術組織the IEEE International Conference on Data Mining (ICDM) 2006年12月評選出了資料探勘領域的十大經典演算法:C4.5, k-Means, SVM, Apriori, EM, PageRank, AdaBoost, k

小象學院大資料分析資料精華實戰+資料分析資料實戰

課程簡介:     小象學院大資料分析與資料探勘精華實戰課程 資料分析資料探勘實戰視訊教程 ----------------------課程目錄------------------------------ 第1 章 : 第一週回放課 課時1:第一課:

資料FP_Tree演算法實現

轉自http://www.cnblogs.com/zhangchaoyang/articles/2198946.html (格式複製之後有變化,建議直接點連結去部落格園看原文) python程式碼見https://github.com/yantijin/Lean_DataMining F

資料AdaBoost裝袋提升演算法

python3程式碼實現在https://github.com/yantijin/Lean_DataMining上,時間匆忙,敬請之處錯誤之處,謝謝! 以下內容轉自:https://blog.csdn.net/androidlushangderen/article/details/4363511

資料關聯規則Apriori演算法

一、Aoriori原始演算法: 頻繁挖掘模式與關聯規則 關聯規則兩個基本的指標(假設有事務A和事務B)   1、支援度(suport):計算公式如下        2、置信度(confidence):    關聯規則的挖掘過程:   1、設定最小支援度閾值,找出所有的頻繁項集且每個出現的次數要

零基礎入門大資料spark中的幾種map

今天再來說一下spark裡面的幾種map方法。前面的文章介紹過單純的map,但是spark還有幾種map值得對比一下,主要是下面幾種: map:普通的map flatMap:在普通map的基礎上多了一個操作,扁平化操作; mapPartitions:相對於分割槽P

零基礎入門大資料spark的rdd

本節簡單介紹一下spark下的基本資料結構RDD,方便理解後續的更多操作。 那麼第一個問題,什麼是rdd。我們知道,大資料一般儲存在分散式叢集裡面,那麼你在對其進行處理的時候總得把它讀出來吧,讀出來後總得把它存成某種格式的檔案吧,就好比程式語言裡面的,這個資料是陣列,那麼你可以以陣列

零基礎入門大資料reduce方法

上節介紹過大資料裡面(以spark為例)最為基礎典型的操作:map方法,map方法直白的理解就是一個分散式接受處理函式的方法,形式如map(fun),map方法本身不做處理,沒有map方法,裡面的函式fun就是一個單機的處理函式,有了map,相當於就把這個函式複製到多臺機器上,每臺機器同