python機器學習實戰書十五章MapRece, mrjob在SVM上的應用實例上 有能在python3.7上順利運行的代碼

第一部分分類第1章機器學習基礎21.1 何謂機器學習31.1.1 感測器和海量數據41.1.2 機器學習非常重要51.2 關鍵術語51.3 機器學習的主要任務71.4 如何選擇合適的演算法81.5 開發機器學習應用程序的步驟91.6 Python語言的優勢101.6.1 可執行偽代碼101.6.2 Python比較流行101.6.3 Python語言的特色111.6.4 Python語言的缺點111.7 NumPy函數庫基礎121.8 本章小結13第2章k-近鄰演算法 152.1 k-近鄰演算法概述152.1.1 准備:使用Python導入數據172.1.2 從文本文件中解析數據192.1.3 如何測試分類器202.2 示例:使用k-近鄰演算法改進約會網站的配對效果202.2.1 准備數據:從文本文件中解析數據212.2.2 分析數據:使用Matplotlib創建散點圖232.2.3 准備數據:歸一化數值252.2.4 測試演算法:作為完整程序驗證分類器262.2.5 使用演算法:構建完整可用系統272.3

Ⅱ python svm error 為什麼執行 終止了

一般來說是通過梯度下降(這里是求最大值,所以應該叫上升)等版演算法每一次迭代對權所有m個變數αi也就是α向量進行一次性優化
通過誤差每次迭代調整α向量中每個元素的值。
而坐標上升法(坐標上升與坐標下降可以看做是一對,坐標上升是用來求解max最優化問題,坐標下降用於求min最優化問題)的思想是每次迭代只調整一個變數αi的值,其他變數的值在這次迭代中固定不變。

Ⅲ scikit-learn中的SVM是用什麼演算法實現求解凸優化的

作為scikit-learn的一個小contributor,來簡單說下個人看法吧。 首先,我認為這取決於題主本身在Python、機器學習方面的水平。因為題主沒有提供這方面信息,我也只能簡單介紹一下scikit-learn的現狀,讓題主自行判斷。

Ⅳ 如何用Python實現支持向量機

看這個文章
blog.csdn.net/zouxy09/article/details/17292011
機器學習演算法與Python實踐之(四)支持向量機(SVM)實現

Ⅳ 如何用python實現smo演算法

在ml中常見的優化演算法基本都是: sgd 這種對每個單變數進行同步更新 als(交替最小專二乘)/smo(序列最小優化)這種交替(固屬定一個單變數,優化另一個單變數)思路。如果你熟悉smo,那麼als就也可以理解了。 其它(希望更多的人補充)

Ⅵ auc 論文里的 怎麼計算 python svm

利用Python畫ROC曲線,以及AUC值的計算\
前言
ROC(Receiver Operating Characteristic)曲線和AUC常被用來評價一個二值分類器(binary classifier)的優劣。這篇文章將先簡單的介紹ROC和AUC,而後用實例演示如何python作出ROC曲線圖以及計算AUC。
AUC介紹
AUC(Area Under Curve)是機器學習二分類模型中非常常用的評估指標,相比於F1-Score對項目的不平衡有更大的容忍性,目前常見的機器學習庫中(比如scikit-learn)一般也都是集成該指標的計算,但是有時候模型是單獨的或者自己編寫的,此時想要評估訓練模型的好壞就得自己搞一個AUC計算模塊,本文在查詢資料時發現libsvm-tools有一個非常通俗易懂的auc計算,因此摳出來用作日後之用。
AUC計算
AUC的計算分為下面三個步驟:
1、計算數據的准備,如果模型訓練時只有訓練集的話一般使用交叉驗證的方式來計算,如果有評估集(evaluate)一般就可以直接計算了,數據的格式一般就是需要預測得分以及其目標類別(注意是目標類別,不是預測得到的類別)
2、根據閾值劃分得到橫(X:False Positive Rate)以及縱(Y:True Positive Rate)點
3、將坐標點連成曲線之後計算其曲線下面積,就是AUC的值
直接上python代碼
#! -*- coding=utf-8 -*-
import pylab as pl
from math import log,exp,sqrt
evaluate_result="you file path"
db = [] #[score,nonclk,clk]
pos, neg = 0, 0
with open(evaluate_result,'r') as fs:
for line in fs:
nonclk,clk,score = line.strip().split('\t')
nonclk = int(nonclk)
clk = int(clk)
score = float(score)
db.append([score,nonclk,clk])
pos += clk
neg += nonclk
db = sorted(db, key=lambda x:x[0], reverse=True)
#計算ROC坐標點
xy_arr = []
tp, fp = 0., 0.
for i in range(len(db)):
tp += db[i][2]
fp += db[i][1]
xy_arr.append([fp/neg,tp/pos])
#計算曲線下面積
auc = 0.
prev_x = 0
for x,y in xy_arr:
if x != prev_x:
auc += (x - prev_x) * y
prev_x = x
print "the auc is %s."%auc
x = [_v[0] for _v in xy_arr]
y = [_v[1] for _v in xy_arr]
pl.title("ROC curve of %s (AUC = %.4f)" % ('svm',auc))
pl.xlabel("False Positive Rate")
pl.ylabel("True Positive Rate")
pl.plot(x, y)# use pylab to plot x and y
pl.show()# show the plot on the screen
輸入的數據集可以參考svm預測結果
其格式為:
nonclk \t clk \t score
其中:
1、nonclick:未點擊的數據,可以看做負樣本的數量
2、clk:點擊的數量,可以看做正樣本的數量
3、score:預測的分數,以該分數為group進行正負樣本的預統計可以減少AUC的計算量
運行的結果為:
如果本機沒安裝pylab可以直接注釋依賴以及畫圖部分
注意
上面貼的代碼:
1、只能計算二分類的結果(至於二分類的標簽隨便處理)
2、上面代碼中每個score都做了一次閾值,其實這樣效率是相當低的,可以對樣本進行采樣或者在計算橫軸坐標時進行等分計算

Ⅶ 可以使用python多進程實現smote演算法嗎

import numpy as np
import csv
#import svm
import pandas as pd
import matplotlib.pyplot as plt
dataset=pd.read_csv(r'xxx.csv')
array=np.array(dataset)
y= np.array(array[:,0], dtype=np.int64)
x = np.array(array[:,1: array.shape[1]], dtype=np.double)
from sklearn.cross_validation import train_test_split
from imblearn.over_sampling import SMOTE
from imblearn.combine import SMOTEENN
def data_prepration(x):
x_features= x.ix[:,x.columns != "y_label_name"]
x_labels=x.ix[:,x.columns=="y_label_name"]
x_features_train,x_features_test,x_labels_train,x_labels_test = train_test_split(x_features,x_labels,test_size=0.3,random_state = 0)
print("length of training data")
print(len(x_features_train))
print("length of test data")
print(len(x_features_test))
return(x_features_train,x_features_test,x_labels_train,x_labels_test)
data_train_x,data_test_x,data_train_y,data_test_y=data_prepration(dataset)
os= SMOTE(random_state=0)
os_data_x,os_data_y=os.fit_sample(data_train_x.values,data_train_y.values.ravel())
columns = data_train_x.columns
os_data_x = pd.DataFrame(data=os_data_x,columns=columns )
print (len(os_data_x))
os_data_y= pd.DataFrame(data=os_data_y,columns=["credit_status"])
# 現在檢查下抽樣後的數據
print("length of oversampled data is ",len(os_data_x))
print("Number of normal transcation",len(os_data_y[os_data_y["credit_status"]==1]))
print("Number of fraud transcation",len(os_data_y[os_data_y["credit_status"]==0]))
print("Proportion of Normal data in oversampled data is ",len(os_data_y[os_data_y["credit_status"]==0])/len(os_data_x))
print("Proportion of fraud data in oversampled data is ",len(os_data_y[os_data_y["credit_status"]==1])/len(os_data_x))
newtraindata=pd.concat([os_data_x,os_data_y],axis=1)
newtestdata=pd.concat([data_test_x,data_test_y],axis=1)
#train_csv_file= open(r'D:\Data\MijiaOldCustomer\train.csv','wb')
#writer = csv.writer(train_csv_file)
#writer.writerows(newtraindata)
newtraindata.to_csv(r'train.csv',sep=',')
newtestdata.to_csv(r'test.csv
',sep=',')

Ⅷ 誰可以給我SVM分類演算法的源代碼

專業的可以看LIBSVM,如果只是想學習下具體實現可以參考這個地方:內http://www.fuqingchuan.com/2014/03/222.html, 這里用100行python代碼就實現容了SVM!

Ⅸ python svm 怎麼訓練模型

支持向量機SVM(Support Vector Machine)是有監督的分類預測模型,本篇文章使用機器學習庫-learn中的手寫數字數據集介紹使用Python對SVM模型進行訓練並對手寫數字進行識別的過程。

准備工作

手寫數字識別的原理是將數字的圖片分割為8X8的灰度值矩陣,將這64個灰度值作為每個數字的訓練集對模型進行訓練。手寫數字所對應的真實數字作為分類結果。在機器學習sklearn庫中已經包含了不同數字的8X8灰度值矩陣,因此我們首先導入sklearn庫自帶的datasets數據集。然後是交叉驗證庫,SVM分類演算法庫,繪制圖表庫等。

12345678910#導入自帶數據集from sklearn import datasets#導入交叉驗證庫from sklearn import cross_validation#導入SVM分類演算法庫from sklearn import svm#導入圖表庫import matplotlib.pyplot as plt#生成預測結果准確率的混淆矩陣from sklearn import metrics

讀取並查看數字矩陣

從sklearn庫自帶的datasets數據集中讀取數字的8X8矩陣信息並賦值給digits。

12#讀取自帶數據集並賦值給digitsdigits = datasets.load_digits()

查看其中的數字9可以發現,手寫的數字9以64個灰度值保存。從下面的8×8矩陣中很難看出這是數字9。

12#查看數據集中數字9的矩陣digits.data[9]

以灰度值的方式輸出手寫數字9的圖像,可以看出個大概輪廓。這就是經過切割並以灰度保存的手寫數字9。它所對應的64個灰度值就是模型的訓練集,而真實的數字9是目標分類。我們的模型所要做的就是在已知64個灰度值與每個數字對應關系的情況下,通過對模型進行訓練來對新的手寫數字對應的真實數字進行分類。

1234#繪制圖表查看數據集中數字9的圖像plt.imshow(digits.images[9], cmap=plt.cm.gray_r, interpolation='nearest')plt.title('digits.target[9]')plt.show()


從混淆矩陣中可以看到,大部分的數字SVM的分類和預測都是正確的,但也有個別的數字分類錯誤,例如真實的數字2,SVM模型有一次錯誤的分類為1,還有一次錯誤分類為7。



Ⅹ python調用libSVM異常,svm_save_model(modelName,model)。總說第一個參數類型錯誤

可以看看python文件夾下面的README。第一個參數是:保存model的文件名,字元串類型。回第二個參數就是答svm_train返回的model。
README裡面有詳細的例子。按照你的錯誤,
model_file_name是字元串類型嗎?檢查一下就行吧