色婷婷狠狠18禁久久YY,CHINESE性内射高清国产,国产女人18毛片水真多1,国产AV在线观看

如何用Python實現(xiàn)支持向量機

江奕云2年前17瀏覽0評論

如何用Python實現(xiàn)支持向量機?

1,實現(xiàn)線性分類

import numpy as np

import matplotlib.pyplot as plt

from sklearn.datasets.samples_generator import make_blobs

from sklearn.svm import SVC

#隨機生成點,n_samples:樣本點個數(shù);centers:樣本點分為幾類;random_state:每次隨機生成一致;cluster_std:每類樣本點間的離散程度,值越大離散程度越大。

X,y = make_blobs(n_samples=50, centers=2, random_state=0, cluster_std=0.60)

#畫出所有樣本點

plt.scatter(X[:,0],X[:,1],c=y,cmap='summer')

#使用線性分類SVC擬合

#svc函數(shù)還可以包括以下參數(shù)(具體例子見文章最后):

#1,C(C越大意味著分類越嚴(yán)格不能有錯誤;當(dāng)C趨近于很小的時意味著可以有更大的錯誤容忍)

#2,kernel(kernel必須是[‘linear’, ‘poly’, ‘rbf’, ‘sigmoid’, ‘precomputed’]中的一個,默認為’rbf’)

#3,gamma(gamma越大模型越復(fù)雜,會導(dǎo)致過擬合,對線性核函數(shù)無影響)

model = SVC(kernel='linear')

model.fit(X,y)

plot_svc_decision_function(model)

這里用到繪制邊界線及圈出支持向量的函數(shù)plot_svc_decision_function()

def plot_svc_decision_function(model, ax=None, plot_support=True):

#Plot the decision function for a 2D SVC

if ax is None:

ax = plt.gca()

#找出圖片x軸y軸的邊界

xlim = ax.get_xlim()

ylim = ax.get_ylim()

# create grid to evaluate model

x = np.linspace(xlim[0], xlim[1], 30)

y = np.linspace(ylim[0], ylim[1], 30)

Y, X = np.meshgrid(y, x)

#形成圖片上所有坐標(biāo)點(900,2),900個二維點

xy = np.vstack([X.ravel(), Y.ravel()]).T

#計算每點到邊界的距離(30,30)

P = model.decision_function(xy).reshape(X.shape)

#繪制等高線(距離邊界線為0的實線,以及距離邊界為1的過支持向量的虛線)

ax.contour(X, Y, P, colors='k',levels=[-1, 0, 1], alpha=0.5,linestyles=['--', '-', '--'])

# 圈出支持向量

if plot_support:

#model.support_vectors_函數(shù)可打印出所有支持向量坐標(biāo)

ax.scatter(model.support_vectors_[:, 0],model.support_vectors_[:, 1],s=200,c='',edgecolors='k')

ax.set_xlim(xlim)

ax.set_ylim(ylim)

繪制效果圖如下:

2,實現(xiàn)非線性分類–引入核函數(shù)有時候線性核函數(shù)不能很好的劃分邊界比如:

from sklearn.datasets.samples_generator import make_circles

X,y = make_circles(100, factor=.1, noise=.1)

plt.scatter(X[:, 0], X[:, 1], c=y, s=50, cmap='summer')

clf = SVC(kernel='linear').fit(X, y)

plot_svc_decision_function(clf, plot_support=False)

分類結(jié)果如下:

此時,需加入徑向基函數(shù)rbf(高斯)

X,y = make_circles(100, factor=.1, noise=.1)

plt.scatter(X[:, 0], X[:, 1], c=y, s=50, cmap='summer')

clf = SVC(kernel='rbf', C=1E6)

clf.fit(X,y)

plot_svc_decision_function(clf)

分類結(jié)果如下:

希望您滿意,能幫助到您~~