【SciKit-Learn學習筆記】5:核SVM分類和預測乳腺癌資料集
學習《scikit-learn機器學習》時的一些實踐。
常用引數
引數C
SVM分類器svm.SVC()
中的引數C
即SVM所優化的目標函式
中,鬆弛係數
求和項的係數
。
鬆弛係數 表徵了資料樣本 違反最大間距規則的程度。對大部分滿足約束條件的樣本,其鬆弛係數 為0;而對不滿足約束條件的樣本,其鬆弛係數 是大於0的。
所以鬆弛係數的求和項係數 就是對違反最大間距規則的樣本的懲罰力度,懲罰越大越不能容忍有樣本不滿足約束條件。這一項類似於Logistic迴歸中引入正則化項,都是為了減少overfitting。
引數degree
在多項式核中使用,表示使用的多項式的階數。
引數gamma
官方文件裡的原話是:
Kernel coefficient for ‘rbf’, ‘poly’ and ‘sigmoid’. If gamma is ‘auto’ then 1/n_features will be used instead.
對於多項式核,它是多項式核函式
中的
。
對於高斯核,它是徑向基函式
中的
。
繪製最大分類超平面
打x
號的點是支援向量。
from sklearn import svm
from sklearn.datasets import make_blobs
from matplotlib import pyplot as plt
import numpy as np
# 繪製分類超平面,其中X是有兩個特徵的,所以實際繪製出來就是在平面上的不同類別區域用不同顏色標記
# 這裡h是取樣步長,draw_sv指示是否繪製支援向量
def plot_hyperplane(clf, X, y,
h=0.02,
draw_sv=True,
title='hyperplan'):
# 繪製的區間,x軸和y軸都從最小值-1到最大值+1
x_min, x_max = X[:, 0].min() - 1, X[:, 0].max() + 1
y_min, y_max = X[:, 1].min() - 1, X[:, 1].max() + 1
# 使用np.meshgrid()擴充為兩軸的所有可能取值的組合
xx, yy = np.meshgrid(np.arange(x_min, x_max, h),
np.arange(y_min, y_max, h))
plt.title(title)
plt.xlim(xx.min(), xx.max())
plt.ylim(yy.min(), yy.max())
plt.xticks(())
plt.yticks(())
# np.ravel()將取樣點的xy座標攤平,使用np.c_將其按列組合成[[x y][x y]...]的座標點形式
Z = clf.predict(np.c_[xx.ravel(), yy.ravel()])
# 用繪製等高線圖的方式來繪製不同類別為不同顏色(等高線圖上同一高度為同一顏色)
Z = Z.reshape(xx.shape)
plt.contourf(xx, yy, Z, cmap='hot', alpha=0.5)
# 不同類(標籤)展示在圖上的的標記和顏色
markers = ['o', 's', '^']
colors = ['b', 'r', 'c']
# 可能的類(標籤)取值
labels = np.unique(y)
# 對於每種標籤取值
for label in labels:
# 繪製相應的樣本點,使用自己的標記和顏色
plt.scatter(X[y == label][:, 0],
X[y == label][:, 1],
c=colors[label],
marker=markers[label])
# 繪製支援向量
if draw_sv:
# 用該方式可以直接取出支援向量是哪些點
sv = clf.support_vectors_
# 繪製為白色'x',這樣就會貼在之前的有色點上了
plt.scatter(sv[:, 0], sv[:, 1], c='y', marker='x')
if __name__ == '__main__':
# 生成聚類樣本100個,特徵數為2(預設n_features=2),類別數為2,標準差0.3,隨機種子設為0
X, y = make_blobs(n_samples=100, centers=2, random_state=0, cluster_std=0.3)
# print(X,y)
clf = svm.SVC(kernel='linear', C=1.0)
clf.fit(X, y)
plt.figure(figsize=(12, 4), dpi=144)
plot_hyperplane(clf, X, y, h=0.01, title="最大分類超平面")
plt.show()
執行結果:
比較三種核SVM的分類面
from sklearn import svm
from sklearn.datasets import make_blobs
from matplotlib import pyplot as plt
from z8.svc2 import plot_hyperplane
X, y = make_blobs(n_samples=100, centers=3, random_state=0, cluster_std=0.8)
# 線性核
clf_linear = svm.SVC(C=1.0, kernel='linear')
# 多項式核
clf_poly = svm.SVC(C=1.0, kernel='poly', degree=3)
# 高斯核(RBF核)
clf_rbf = svm.SVC(C=1.0, kernel='rbf', gamma=0.5)
clf_rbf2 = svm.SVC(C=1.0, kernel='rbf', gamma=1.0)
plt.figure(figsize=(10, 10), dpi=144)
clfs = [clf_linear, clf_poly, clf_rbf, clf_rbf2]
titles = ["線性核", "多項式核", "高斯核$\gamma=0.5$", "高斯核$\gamma=1.0$"]
# 分別訓練模型並繪製分類面.注意這裡用zip組成一個個元組組成的物件
for clf, i in zip(clfs, range(len(titles))):
clf.fit(X, y)
plt.subplot(2, 2, i + 1)
plot_hyperplane(clf, X, y, title=titles[i])
plt.show()
執行結果:
預測乳腺癌資料集
這裡在最後一部分(迴圈中呼叫plot_learning_curve()
)總是會有反覆呼叫這個檔案自己的奇怪現象,全部放到函式裡就好了,還不清楚為什麼會有這種情況。
from sklearn.datasets import load_breast_cancer
from sklearn.model_selection import train_test_split
from sklearn.svm import SVC
from z7.titanic import plot_curve # 繪製score隨引數變化的曲線
import numpy as np
from sklearn.model_selection import GridSearchCV
from matplotlib import pyplot as plt
from z3.learning_curve import plot_learning_curve # 繪製學習曲線
from sklearn.model_selection import ShuffleSplit
'''
SVM對乳腺癌資料集做分類
這裡全部需要放在函式裡呼叫,不然會來回呼叫這個檔案自己(還不清楚為什麼,這次不是檔案重名的問題)
'''
def init():
global X, y, X_train, y_train, X_test, y_test
cancer = load_breast_cancer()
X = cancer.data
y = cancer.target
print("shape:{},陽性樣本數:{},陰性樣本數{}".format(X.shape, y[y == 1].shape[0], y[y == 0].shape[0])
相關推薦
【SciKit-Learn學習筆記】5:核SVM分類和預測乳腺癌資料集
學習《scikit-learn機器學習》時的一些實踐。
常用引數
引數C
SVM分類器svm.SVC()中的引數C即SVM所優化的目標函式
a
【SciKit-Learn學習筆記】8:k-均值演算法做文字聚類,聚類演算法效能評估
學習《scikit-learn機器學習》時的一些實踐。
原理見K-means和K-means++的演算法原理及sklearn庫中引數解釋、選擇。
sklearn中的KMeans
from sklearn.datasets import make_blobs
from m
【SciKit-Learn學習筆記】7:PCA結合SVM做AT&T資料集人物影象分類
學習《scikit-learn機器學習》時的一些實踐。
原理見PCA及繪製降維與恢復示意圖。
sklearn的PCA
sklearn中包裝的PCA也是不帶有歸一化和縮放等預處理操作的,可以用MinMaxScaler()實現並裝在Pipeline裡封裝起來。
from
【SciKit-Learn學習筆記】6:樸素貝葉斯做文件分類並繪製混淆矩陣
學習《scikit-learn機器學習》時的一些實踐。
條件獨立
樸素即指的是條件獨立假設,假設n個特徵之間不相關,則可據聯合概率的條件展開式:
p
【SciKit-Learn學習筆記】4:決策樹擬合泰坦尼克號資料集並提交到Kaggle
學習《scikit-learn機器學習》時的一些實踐。
決策樹擬合泰坦尼克號資料集
這裡用繪製引數-score曲線的方式去直觀看出模型引數對模型得分的影響,作者使用了GridSearchCV來自動做k-fold交叉驗證,並且能在多組模型引數中找到最優的一組和最優值(用平均s
【SciKit-Learn學習筆記】3:線性迴歸測算波士頓房價,Logistic迴歸預測乳腺癌
學習《scikit-learn機器學習》時的一些實踐。
線性迴歸
這部分和第一篇筆記"繪製隨機波動樣本的學習曲線 "部分基本類似。線性迴歸裡可以加入多項式特徵,以對模型做增強。
線性迴歸增加多項式特徵,擬合sin函式
import numpy as np
impor
【SciKit-Learn學習筆記】2:kNN分類/迴歸,在糖尿病資料集上的表現
學習《scikit-learn機器學習》時的一些實踐。
kNN分類
在三個點周圍生成聚類樣本,然後做的kNN分類。
這種把標準差取得好(不要太小),得到的就不一定是線性可分的資料了。比如圖上右側有個玫紅點和藍點交錯。
from sklearn.datasets.sa
【SciKit-Learn學習筆記】1:SVM預測digits資料集,繪製隨機波動樣本的學習曲線
學習《scikit-learn機器學習》時的一些實踐。
SVM預測digits資料集
sklearn裡的各種模型物件統一了介面,fit()做訓練,predit()做預測,用score()獲得對模型測試結果的打分。
這裡的打分不是acc,應該是決定係數。
檢視資料形式
【Vue.js學習筆記】5:雙向資料繫結,計算屬性
雙向資料繫結
雙向資料繫結往往會用到input、select、textarea等表單標籤上,因為總是涉及一個數據資料的地方和輸出資料的地方。
當資料發生變化的時候,檢視也就發生變化,當檢視發生變化的時候,資料也會跟著同步變化。 資料雙向繫結,一定是對於UI控制元件來說的,
【SQL Server學習筆記】5:使用INSERT語句插入資料
使用SQL語句的意義是,要開發的DBAS應用程式不能像人一樣通過SSMS工具來操作資料,SQL語句是應用程式和資料庫通訊的橋樑。而且相比手動圖形化操作,SQL語句更加方便和強大。
SQL(結構化查詢語言)的組成
①DML(資料操作語言)
插入、刪除和修
【TensorFlow學習筆記】5:variable_scope和name_scope,圖的基本操作
學習《深度學習之TensorFlow》時的一些實踐。
variable_scope
一般的巢狀
上節有學到在巢狀scope中的變數,一般是:
import tensorflow as tf
# with tf.variable_scope("scopeA") as
【MyBatis學習筆記】5:認識使用typeHandlers配置型別處理器
簡述
註冊了的型別處理器會用於處理下面兩種情形:
為PreparedStatement設定一個引數,將引數從Java型別轉為JDBC型別。
從ResultSet中取出一個值,將結果從JDBC型別轉為Java型別。
型別處理器可分為以下兩類:
MyB
【ML學習筆記】5:機器學習中的數學基礎5(張量,哈達瑪積,生成子空間,超平面,範數)
向量/矩陣/張量
向量
向量可以表示成一維陣列,每個分量可以理解為向量所表示的點在空間中座標的分量。
矩陣
矩陣可以表示成二維陣列,上節理解了矩陣可以理解為線性對映在特定基下的一種定量描述。
張量
張量可以表示成任意維的陣列,張量是向量概
【MongoDB學習筆記】5:對結果集的操作,建立/檢視/重建/刪除索引
對結果集的操作
在RDBMS中獲得的結果是一張虛擬的表,可以在其上繼續操作。MongoDB中查詢到的結果是一個文件集合,也可以在其上做一些簡單操作。
limit()方法
相當於SQL中的TOP子句,會取結果集中的前指定條文件,使用
結果集.limit(數
【Vue.js學習筆記】9:使用npm搭建Vue-CLI腳手架並建立Vue專案
在第一篇的時候確實可以建立,這次跟著視訊搭建一次,比較一下和上次的區別,更正一下上次的錯誤操作,加深理解。
重新搭建Vue-CLI腳手架
在Node.js的安裝目錄下,刪除node_cache/和node_global下的所有內容,即讓Node處於剛剛安裝完成的狀態,連cnpm也
【Vue.js學習筆記】8:建立多個Vue例項物件,認識Vue中的元件
建立多個Vue例項物件
這裡在同一個js檔案中建立了兩個Vue例項物件,它們各自能完成前面學的那些功能,同時使用物件名稱也可以互相訪問,協同實現一些功能。
index.html
<!DOCTYPE html>
<html lang="en" xmlns:v-
【Vue.js學習筆記】7:v-for渲染,Vue的小Demo
v-for渲染
v-for是Vue中常用的列表渲染方法, 可以將一個列表渲染為一系列的HTML元素,也可以用來遍歷物件內的k-v對。另外關於模板元素渲染在官方文件上見這裡。
index.html
<!DOCTYPE html>
<html lang="en"
【Vue.js學習筆記】6:動態繫結CSS樣式,條件渲染和v-show
動態繫結CSS樣式
這部分涉及官方文件中的Class與Style繫結。
index.html
<!DOCTYPE html>
<html lang="en" xmlns:v-bind="http://www.w3.org/1999/xhtml" xmlns:
【Vue.js學習筆記】4:事件修飾符,鍵盤事件,鍵值修飾符
事件修飾符
在Vue的官方文件中給出了引入v-on:的事件修飾符的理念是,不希望在方法中去處理DOM細節。
事件冒泡
事件在事件源上發生,處理事件的方法並未繫結在該事件源上,事件就要向外或者向內傳播(propagation),也稱事件冒泡。在JS裡,可以用事件物件的stopP
【Vue.js學習筆記】3:資料繫結,事件繫結
資料繫結
使用Vue時在Vue物件的el欄位中要指定一下根容器,這裡用id選擇器。這個例子同時學習了data和methods的基本用法。
資料繫結(data-binding)可以將Vue物件中的data的值繫結到HTML標籤中的某些位置,則修改時只需要修改物件中相應data的值即