1. 程式人生 > >《Python資料分析與資料探勘實戰》第九章學習——支援向量機

《Python資料分析與資料探勘實戰》第九章學習——支援向量機

第九章主要是對支援向量機(SVM)的應用,應用領域是水質評價,即利用支援向量機對影象資料進行訓練,從而對水質類別進行分類。
關於支援向量機的理論內容,支援向量機通俗導論(理解SVM的三層境界)這篇文章講得非常詳細,博主主要對書中的實戰部分進行整理。
首先,對資料進行匯入,並構造特徵和標籤。
程式碼如下:

#-*- coding:utf-8 -*-
import pandas as pd
import numpy as np
inputfile='D:/ProgramData/PythonDataAnalysiscode/chapter9/demo/data/moment.csv'
data=pd.read_csv(inputfile
,encoding='gbk')
data=data.take(np.random.permutation(len(data))) data=data.as_matrix() data_train=data[:int(0.8*len(data)),:] data_test=data[int(0.8*len(data)):,:] #構造特徵和標籤 x_train=data_train[:,2:]*30 y_train=data_train[:,0].astype(int) x_test=data_test[:,2:]*30 y_test=data_test[:,0].astype(int)

值得一提的是,原書中,打亂資料用的是random.shuffle,經過實踐,此函式打亂後的資料並不是我們想要的結果。此處應該用以下三種方法來打亂資料:

data.sample(frac=1)
【from sklearn.utils import shuffle
shuffle(data)】data.take(np.random.permutation(len(data)))】

然後,匯入演算法,訓練模型。
程式碼如下:

#匯入模型相關的函式,建立並訓練模型
from sklearn import svm
model=svm.SVC()
model.fit(x_train,y_train)
import pickle
#儲存模型
pickle.dump(model,open('D:/ProgramData/PythonDataAnalysiscode/chapter9/demo/data/svm.model'
,'wb'))

最後,對測試集資料進行預測,並畫出訓練資料和測試資料預測的混淆矩陣圖。
書中並沒有對預測結果的混淆矩陣進行視覺化,博主參照其他資料,將混淆矩陣繪圖函式程式碼記錄如下:

import matplotlib.pyplot as plt
import itertools
def plot_confusion_matrix(cm, classes,
                          normalize=False,
                          title='Confusion matrix',
                          cmap=plt.cm.Blues):
    """
    This function prints and plots the confusion matrix.
    Normalization can be applied by setting `normalize=True`.
    """
    plt.imshow(cm, interpolation='nearest', cmap=cmap)
    plt.title(title)
    plt.colorbar()
    tick_marks = np.arange(len(classes))
    plt.xticks(tick_marks, classes, rotation=45)
    plt.yticks(tick_marks, classes)

    if normalize:
        cm = cm.astype('float') / cm.sum(axis=1)[:, np.newaxis]

    thresh = cm.max() / 2.
    for i, j in itertools.product(range(cm.shape[0]), range(cm.shape[1])):
        plt.text(j, i, cm[i, j],
                 horizontalalignment="center",
                 color="white" if cm[i, j] > thresh else "black")

    plt.tight_layout()
    plt.ylabel('True label')
    plt.xlabel('Predicted label')

具體混淆矩陣執行程式碼如下:

from sklearn import metrics
cm_train=metrics.confusion_matrix(y_train,model.predict(x_train))
cm_test=metrics.confusion_matrix(y_test,model.predict(x_test))
fig=plt.figure(figsize=(10,5))
ax=fig.add_subplot(121)
plot_confusion_matrix(cm_train,classes=range(5),title='Confusion matrix on train-set')
ax=fig.add_subplot(122)
plot_confusion_matrix(cm_test,classes=range(5),title='Confusion matrix on test-set')
plt.show()

輸出結果如下圖:
這裡寫圖片描述
支援向量機在訓練集上的準確率有93.3%,但其在測試集上的準確率卻只有79.5%。說明模型方差較大,可能存在過擬合。
但是由於我們前面將資料進行了打亂,因此每一次執行的結果都有所不同,經幾次執行,在測試集上的準確率最高的達到92.68%,這應該與資料量的限制有關係。
這說明支援向量機模型對於水質評價分類效果較好,但是資料量太少,需要更多的資料,這樣才能得到更為穩定的結果。
最後,這一章的實踐較為簡單,但支援向量機的理論部分還是需要好好理解,其應用還是非常廣泛的。

相關推薦

Python資料分析資料實戰學習——支援向量

第九章主要是對支援向量機(SVM)的應用,應用領域是水質評價,即利用支援向量機對影象資料進行訓練,從而對水質類別進行分類。 關於支援向量機的理論內容,支援向量機通俗導論(理解SVM的三層境界)這篇文章講得非常詳細,博主主要對書中的實戰部分進行整理。 首先,對

機器學習實戰-支援向量

1 拉格朗日乘子法(等式約束): 目標函式:f(x)=b+wTxi+∑(αihi),s.t.hi=0 最優解條件:∂h∂xi=0 2 kkt(不等式約束): 目標函式:f(x)=b+wTxi+∑(αigi)+∑(βihi),s.t.hi=0,gi≤0

Python資料分析資料實戰十五學習——文字分析

本章主要實戰目的是對京東平臺上的熱水器評論進行文字挖掘分析,包括分析其使用者情感傾向、從評論文字中挖掘出該品牌熱水器的優點與不足和提煉不同品牌熱水器的賣點。 本文主要包括以下幾個部分: 評論資料抽取 評論預處理 模型準備 模型構建 總結 評論資料抽

Python資料分析資料實戰十三學習——預測

這一章內容是對財政收入的影響因素進行分析,並構建預測模型。 本章資料比較清楚,幾乎不用做清洗工作,主要工作都在模型構建上,中間涉及到的演算法有Lasso演算法的改進演算法——Adaptive-Lasso、書中自己編寫的灰色預測、神經網路。 書中對財政地方收入

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

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

資料分析資料概述

1.什麼是資料分析與資料探勘技術? 所謂資料分析,即對已知的資料進行分析,然後提出一些有價值的資訊。比如統計出平均數、標準差等資訊,資料分析的資料量有可能不會太大。而資料探勘,是指對大量的資料進行分析和挖掘,得到一些未知的有價值的資訊等,比如從網站的使用者或使用者行為資料中挖掘出潛在需求資訊,從

python資料分析挖掘實戰 拓展練習

這一章的拓展練習感覺是比較簡單的。基本上沒有太多讓人糾結的地方。沒有特徵提取和資料規約,讓事情簡單了不少。當然不包括寫出C4.5的決策樹,我也沒有那麼寫。 讀取資料,劃分訓練集和測試集,不用多說。

資料分析資料 - 01入門介紹

### 一 資料分析的定義 資料分析就是用合適的方法來發揮出資料的最大價值,這是一門結合了統計學,高等數學,工程學,商業決策等知識的技能,其中高等數學,工程學和統計學這些都是硬技能,而商業決策是屬於軟技能,資料分析師就是具備這些技能的崗位。資料分析師也有所側重點,有的人是商業出身,偏向於商業領域,有的人是統計

資料分析資料 - 02基礎操練

### 一 知識體系 在這一章我們將使用基礎的Python庫pandas,numpy,matplotlib來完成一個數據分析的小專案,推薦使用Anaconda環境下的jupter-notebook來進行練習。 ### 二 背景介紹 這是一組航空公司使用者的資料,我們希望能夠從這些資料中分析出有價值的資訊,資

資料分析資料 - 03智慧對話

### 一 資料分析與自然語言處理 我們在處理很多資料分析任務時,不可避免地涉及到與文字內容相關的知識,這是屬於文字挖掘(text mining)的內容,顯然是NLP技術的範疇,基於這樣的考慮我們先來對自然語言處理有一個基本的認識。 ### 二 自然語言處理 > 如果一臺計算機能夠欺騙人類,讓人相信它是人類

資料分析資料 - 04科學計算

### 一 認識科學計算 在人工智慧的研發中,其本質就是把一切問題轉化為數學問題,所以數學運算非常重要。很多數學運算採用的都是numpy這個庫,因為它提供了非常多的科學計算的方法,能讓我們的工作變得非常便利,這一章我將從numpy的基本使用開始,逐漸解決掉那些數學問題,讓Python與數學能夠更緊密的結合在一

資料分析資料 - 05統計概率

### 一 統計學基礎運算 #### 1 方差的計算 在統計學中為了觀察資料的離散程度,我們需要用到標準差,方差等計算。我們現在擁有以下兩組資料,代表著兩組同學們的成績,現在我們要研究哪一組同學的成績更穩定一些。方差是中學就學過的知識,可能有的同學忘記了 ,一起來回顧下。 **A組 = [50,60,40,3

資料分析資料 - 07資料處理

### 一 pandas基本資料型別 #### 1 Series型別 Pandas是資料處理中非常常用的一個庫,是資料分析師、AI的工程師們必用的一個庫,對這個庫是否能夠熟練的應用,直接關係到我們是否能夠把資料處理成我們想要的樣子。Pandas是基於NumPy構建的,讓以NumPy為中心的應用變得更加的簡單,

資料分析資料 - 09鄰近演算法

## 一 鄰近演算法的基本介紹 ### 1 基本說明 鄰近演算法又叫做K臨近演算法或者KNN(K-NearestNeighbor),是機器學習中非常重要的一個演算法,but它簡單得一塌糊塗,其核心思想就是樣本的類別由距離其最近的K個鄰居投票來決定。現在假設我們已經有一個已經標記好的資料集,也就是說我們已經知道

【MOOC】Python資料分析展示-北京理工大學-【〇周】資料分析之前奏

課程內容導學 主題思想 與一組資料相關的那些事兒: 如何理解一組資料表達的含義 有損地提取資料特徵 內容組織 全課程包括: • 8個內容單元,共12個單元 • 全課程總長4周,每週3個單元 • 每週包含一個實戰型例項 程式

【MOOC】Python資料分析展示-北京理工大學-【三週】資料分析之概要

概要:提取資料的基本特徵 單元7:pandas庫入門 Pandas是Python第三方庫,提供高效能易用資料型別和分析工具,Pandas基於NumPy實現,常與NumPy和Matplotlib一同使用。 常用引用方法: import pandas

資料分析資料分析方法論的區別

資料分析方法論主要用來指導資料分析師進行一次完整的資料分析,它 更多的是指資料分析思路,比如主要從哪幾方面開展資料分析,各方面包含什麼內容和指標?資料分析方法論主要 從巨集觀角度指導如何進行資料分析,它就像是一個數據分析的前期規劃,指導著後期資料分析工作的開展。而資料分析

python入到到實戰--

第九章  類 面向物件程式設計 是最有效的軟體編寫方法之一。 在面向物件程式設計中, 你編寫表示現實世界中的事物和情景的類, 並基於這些類來建立物件。 編寫類時, 你定義一大類對象都有的通用行為。 基於類建立物件 時, 每個物件都自動具備這種通用行為, 然後可根據需要賦予每個物件獨特的個性。 根據

輸出拓撲排序的所有可能結果(題目來源:演算法分析設計及其案例教程課後習題五題)

這是我在csdn 的第②篇部落格 該篇為C++程式碼 原題問的是實現拓撲排序的方法,但答案給除了所有的拓撲排序的可能。 看到答案這麼寫我就在想如何才能輸出所有拓撲排序的結果?,但我一開始只能寫出輸出一種可能的拓撲排序結果的程式碼,經過一天的查詢資料後在CSDN

Python語言程式設計(MOOC崇天)python計算生態概述學習筆記(霍蘭德人格分析雷達圖+玫瑰花製作)

複習:    今日學習: python計算生態概述 從資料出來到人工智慧 python庫之資料分析 numpy: pandas: Scipy: python庫之資料視覺化 Matpl