㈠ python怎麼用sklearn包進行聚類
#-*-coding:utf-8-*-
fromsklearn.clusterimportKMeans
fromsklearn.externalsimportjoblib
importnumpy
final=open('c:/test/final.dat','r')
data=[line.strip().split(' ')forlineinfinal]
feature=[[float(x)forxinrow[3:]]forrowindata]
#調用kmeans類
clf=KMeans(n_clusters=9)
s=clf.fit(feature)
prints
#9個中心
printclf.cluster_centers_
#每個樣本所屬的簇
printclf.labels_
#用來評估簇的個數是否合適,距離越小說明簇分的越好,選取臨界點的簇個數
printclf.inertia_
#進行預測
printclf.predict(feature)
#保存模型
joblib.mp(clf,'c:/km.pkl')
#載入保存的模型
clf=joblib.load('c:/km.pkl')
'''
#用來評估簇的個數是否合適,距離越小說明簇分的越好,選取臨界點的簇個數
foriinrange(5,30,1):
clf=KMeans(n_clusters=i)
s=clf.fit(feature)
printi,clf.inertia_
'''
㈡ python代碼如何應用系統聚類和K-means聚類法進行聚類分析 然後選擇變數,建立適當的模型
-Means聚類演算法
k-means演算法以k為參數,把n個對象分成k個簇,使簇內具有較高的相似度,而簇間的相似度較低。
隨機選擇k個點作為初始的聚類中心。
對於剩下的點,根據其與聚類中心的距離,將其歸入最近的簇。
對每個簇,計算所有點的均值作為新的聚類中心。
重復2,3直到聚類中心不再發生改變
Figure 1
K-means的應用
數據介紹:
現有1999年全國31個省份城鎮居民家庭平均每人全年消費性支出的八大主要變數數據,這八大變數分別是:食品、衣著、家庭設備用品及服務、醫療保健、交通和通訊、娛樂教育文化服務、居住以及雜項商品和服務。利用已有數據,對31個省份進行聚類。
實驗目的:
通過聚類,了解1999年各個省份的消費水平在國內的情況。
技術路線:
sklearn.cluster.Kmeans
數據實例:
㈢ 譜聚類(Spectral clustering)(python實現)
譜聚類概念 :
譜聚類是一種基於圖論的聚類方法,通過對樣本數據的拉普拉斯矩陣的特徵向量進行聚類,從而達到對樣本數據聚類的母的。譜聚類可以理解為將高維空間的數據映射到低維,然後在低維空間用其它聚類演算法(如KMeans)進行聚類。
演算法步驟
1 計算相似度矩陣 W
2 計算度矩陣 D
3 計算拉普拉斯矩陣L=D-W
4 計算L的特徵值,將特徵值從小到大排序,取前k個特徵值.將這個特徵值向量轉換為矩陣
5 通過其他聚類演算法對其進行聚類,如k-means
詳細公式和概念請到 大佬博客
相比較PCA降維中取前k大的特徵值對應的特徵向量,這里取得是前k小的特徵值對應的特徵向量。但是上述的譜聚類演算法並不是最優的,接下來我們一步一步的分解上面的步驟,總結一下在此基礎上進行優化的譜聚類的版本。
python實現
例子一:使用譜聚類從雜訊背景中分割目標
效果圖
例子2:分割圖像中硬幣的區域
效果圖
注意
1)當聚類的類別個數較小的時候,譜聚類的效果會很好,但是當聚類的類別個數較大的時候,則不建議使用譜聚類;
(2)譜聚類演算法使用了降維的技術,所以更加適用於高維數據的聚類;
(3)譜聚類只需要數據之間的相似度矩陣,因此對於處理稀疏數據的聚類很有效。這點傳統聚類演算法(比如K-Means)很難做到
(4)譜聚類演算法建立在譜圖理論基礎上,與傳統的聚類演算法相比,它具有能在任意形狀的樣本空間上聚類且收斂於全局最優解
(5)譜聚類對相似度圖的改變和聚類參數的選擇非常的敏感;
(6)譜聚類適用於均衡分類問題,即各簇之間點的個數相差不大,對於簇之間點個數相差懸殊的聚類問題,譜聚類則不適用;
參考
譜聚類演算法介紹
sklearn官網
㈣ python中的sklearn中決策樹使用的是哪一種演算法
sklearn中決策樹分為DecisionTreeClassifier和DecisionTreeRegressor,所以用的演算法是CART演算法,也就是分類與回歸樹演算法(classification and regression tree,CART),劃分標准默認使用的也是Gini,ID3和C4.5用的是信息熵,為何要設置成ID3或者C4.5呢
㈤ 老師讓學習人工智慧中常用分類和聚類演算法和scilearn包的使用,請問應該怎麼學習
Scikit-learn
Scikit-learn 是基於Scipy為機器學習建造的的一個Python模塊,他的特色就是多樣化的分類,回歸和聚類的演算法包括支持向量機,邏輯回歸,樸素貝葉斯分類器,隨機森林,Gradient Boosting,聚類演算法和DBSCAN。而且也設計出了Python numerical和scientific libraries Numpy and Scipy
2.Pylearn2
Pylearn是一個讓機器學習研究簡單化的基於Theano的庫程序。
3.NuPIC
NuPIC是一個以HTM學習演算法為工具的機器智能。HTM是皮層的精確計算方法。HTM的核心是基於時間的持續學習演算法和儲存和撤銷的時空模式。NuPIC適合於各種各樣的問題,尤其是檢測異常和預測的流數據來源。
4. Nilearn
Nilearn 是一個能夠快速統計學習神經影像數據的Python模塊。它利用Python語言中的scikit-learn 工具箱和一些進行預測建模,分類,解碼,連通性分析的應用程序來進行多元的統計。
5.PyBrain
Pybrain是基於Python語言強化學習,人工智慧,神經網路庫的簡稱。 它的目標是提供靈活、容易使用並且強大的機器學習演算法和進行各種各樣的預定義的環境中測試來比較你的演算法。
6.Pattern
Pattern 是Python語言下的一個網路挖掘模塊。它為數據挖掘,自然語言處理,網路分析和機器學習提供工具。它支持向量空間模型、聚類、支持向量機和感知機並且用KNN分類法進行分類。
7.Fuel
Fuel為你的機器學習模型提供數據。他有一個共享如MNIST, CIFAR-10 (圖片數據集), Google』s One Billion Words (文字)這類數據集的介面。你使用他來通過很多種的方式來替代自己的數據。
8.Bob
Bob是一個的信號處理和機器學習的工具。它的工具箱是用Python和C++語言共同編寫的,它的設計目的是變得更加高效並且減少開發時間,它是由處理圖像工具,音頻和處理、機器學習和模式識別的大量包構成的。
9.Skdata
Skdata是機器學習和統計的數據集的庫程序。這個模塊對於玩具問題,流行的計算機視覺和自然語言的數據集提供標準的Python語言的使用。
10.MILK
MILK是Python語言下的機器學習工具包。它主要是在很多可得到的分類比如SVMS,K-NN,隨機森林,決策樹中使用監督分類法。 它還執行特徵選擇。 這些分類器在許多方面相結合,可以形成不同的例如無監督學習、密切關系金傳播和由MILK支持的K-means聚類等分類系統。
11.IEPY
IEPY是一個專注於關系抽取的開源性信息抽取工具。它主要針對的是需要對大型數據集進行信息提取的用戶和想要嘗試新的演算法的科學家。
12.Quepy
Quepy是通過改變自然語言問題從而在資料庫查詢語言中進行查詢的一個Python框架。他可以簡單的被定義為在自然語言和資料庫查詢中不同類型的問題。所以,你不用編碼就可以建立你自己的一個用自然語言進入你的資料庫的系統。
現在Quepy提供對於Sparql和MQL查詢語言的支持。並且計劃將它延伸到其他的資料庫查詢語言。
13.Hebel
Hebel是在Python語言中對於神經網路的深度學習的一個庫程序,它使用的是通過PyCUDA來進行GPU和CUDA的加速。它是最重要的神經網路模型的類型的工具而且能提供一些不同的活動函數的激活功能,例如動力,涅斯捷羅夫動力,信號丟失和停止法。
14.mlxtend
它是一個由有用的工具和日常數據科學任務的擴展組成的一個庫程序。
15.nolearn
這個程序包容納了大量能對你完成機器學習任務有幫助的實用程序模塊。其中大量的模塊和scikit-learn一起工作,其它的通常更有用。
16.Ramp
Ramp是一個在Python語言下制定機器學習中加快原型設計的解決方案的庫程序。他是一個輕型的pandas-based機器學習中可插入的框架,它現存的Python語言下的機器學習和統計工具(比如scikit-learn,rpy2等)Ramp提供了一個簡單的聲明性語法探索功能從而能夠快速有效地實施演算法和轉換。
17.Feature Forge
這一系列工具通過與scikit-learn兼容的API,來創建和測試機器學習功能。
這個庫程序提供了一組工具,它會讓你在許多機器學習程序使用中很受用。當你使用scikit-learn這個工具時,你會感覺到受到了很大的幫助。(雖然這只能在你有不同的演算法時起作用。)
18.REP
REP是以一種和諧、可再生的方式為指揮數據移動驅動所提供的一種環境。
它有一個統一的分類器包裝來提供各種各樣的操作,例如TMVA, Sklearn, XGBoost, uBoost等等。並且它可以在一個群體以平行的方式訓練分類器。同時它也提供了一個互動式的情節。
19.Python 學習機器樣品
用的機器學習建造的簡單收集。
20.Python-ELM
這是一個在Python語言下基於scikit-learn的極端學習機器的實現。
㈥ 樸素貝葉斯分類演算法的sklearn實現
1、背景
《機器學習實戰》當中,用python根據貝葉斯公式實現了基本的分類演算法。現在來看看用sklearn,如何實現。還拿之前的例子,對帖子的分類。數據如下:
補充:題目的值左邊是幾個人的評論,右邊是評論屬於侮辱類(1)、正常類(0),需要進行文本分類,且再有新的文本過來時能自動劃分至0或1。
2、分類
(1)演算法的准備
通過查看sklearn的訓練模型函數,fit(X, Y),發現只需要准備兩個參數。一個是數據的矩陣,另一個是數據的分類數組。首先就是將以上的文本轉化成矩陣。
在前一章其實已經講解過如何將文本轉化成矩陣。這里將示意的再補充下。
a.首先選取所有的單詞,形成列,也可理解為屬性。例如:
b.其次將遍歷每個文本,填滿上述列的值。文本出現過列的次,填一。沒有出現過填0。比如第一句就是:my dog has flea problems help please,可表示為:
同理所有的文本都可如此表示,所以就形成了一個數字的矩陣。
(2)beyes模型的選擇
在完成數據的准備以後,就可以直接調用sklearn的模型和函數完成模型的訓練啦。但在beyes模型的選擇的時候發現,beyes下有多個模型可選擇,所以這個會讓人糾結。接下來共同了解下這些模型:
a.高斯模型(GaussianNB)
高斯模型是對於每個屬性的值是連續的,且服從高斯分布時可使用:
比如人的身高,比如花的高度等等。當然你也可將這些數據離散化,比如按等距劃分、等頻劃分成離散的值,但可能效果都沒有直接用高斯模型來計算的好。
用法:class sklearn.naive_bayes.GaussianNB
參數:無
b.多項式模型(MultinominalNB)
如果大部分是多元離散值,則採用多項式模型要好些。多項式模型,通常就是構造參數向量,然後通過極大似然估計來尋求參數的最有值。
這里只簡單的略列一些公式,具體可查詢更多資料。從這個計算過程中可得出,這里引入啦一個平滑先驗值alpha,這個值在模型訓練的時候也會用到。通常alpha>0,可引入不在訓練集的特徵,尤其當alpha=1,成為拉普拉絲平滑。具體alpha取值對模型的影響可附件的圖。
用法:class sklearn.naive_bayes.MultinomialNB(alpha=1.0,fit_prior=True,class_prior=None)
參數:
alpha:浮點數,就是上述說的引入平滑的值;
fit_prior:bool值,如果為Ture,則不用去學習P(y=ck),以均勻分布替代,否則則去學習P(y=ck)(不懂)
class_prior:一個數組。它指定了每個分類的先驗概率P(y=c1),P(y=c2)…..,若指定了該參數
則每個分類的先驗概率無需學習 (不懂)
c.伯努利模型(BernoulliNB)
如果特徵值為二元離散值或是稀疏的多元離散值,則可採用伯努利模型。
公式:class sklearn.naive_bayes.BernoulliNB(alpha=1.0,binarize=0.0,fit_prior=Ture,
class_prior=None)
參數:
binarize:一個浮點數或者None,如果為浮點數則以該數值為界,特徵值大於它的取1,小於的為0 。如果為None,假定原始數據已經二值化
其它參數同上。
通過以上的模型對比和分析,由於文本分析轉化後是很多二項取值的稀疏矩陣,因此選取伯努利模型效果會更佳。
補充:alpha、binarize值對模型效果的影響
㈦ python scikit-learn 有什麼演算法
1,前言
很久不發文章,主要是Copy別人的總感覺有些不爽,所以整理些干貨,希望相互學習吧。不啰嗦,進入主題吧,本文主要時說的為樸素貝葉斯分類演算法。與邏輯回歸,決策樹一樣,是較為廣泛使用的有監督分類演算法,簡單且易於理解(號稱十大數據挖掘演算法中最簡單的演算法)。但其在處理文本分類,郵件分類,拼寫糾錯,中文分詞,統計機器翻譯等自然語言處理范疇較為廣泛使用,或許主要得益於基於概率理論,本文主要為小編從理論理解到實踐的過程記錄。
2,公式推斷
一些貝葉斯定理預習知識:我們知道當事件A和事件B獨立時,P(AB)=P(A)(B),但如果事件不獨立,則P(AB)=P(A)P(B|A)。為兩件事件同時發生時的一般公式,即無論事件A和B是否獨立。當然也可以寫成P(AB)=P(B)P(A|B),表示若要兩件事同事發生,則需要事件B發生後,事件A也要發生。
由上可知,P(A)P(B|A)= P(B)P(A|B)
推出P(B|A)=
其中P(B)為先驗概率,P(B|A)為B的後驗概率,P(A|B)為A的後驗概率(在這里也為似然值),P(A)為A的先驗概率(在這也為歸一化常量)。
由上推導可知,其實樸素貝葉斯法就是在貝葉斯定理基礎上,加上特徵條件獨立假設,對特定輸入的X(樣本,包含N個特徵),求出後驗概率最大值時的類標簽Y(如是否為垃圾郵件),理解起來比邏輯回歸要簡單多,有木有,這也是本演算法優點之一,當然運行起來由於得益於特徵獨立假設,運行速度也更快。
8. Python代碼
# -*-coding: utf-8 -*-
importtime
fromsklearn import metrics
fromsklearn.naive_bayes import GaussianNB
fromsklearn.naive_bayes import MultinomialNB
fromsklearn.naive_bayes import BernoulliNB
fromsklearn.neighbors import KNeighborsClassifier
fromsklearn.linear_model import LogisticRegression
fromsklearn.ensemble import RandomForestClassifier
fromsklearn import tree
fromsklearn.ensemble import GradientBoostingClassifier
fromsklearn.svm import SVC
importnumpy as np
importurllib
# urlwith dataset
url ="-learning-databases/pima-indians-diabetes/pima-indians-diabetes.data"
#download the file
raw_data= urllib.request.urlopen(url)
#load the CSV file as a numpy matrix
dataset= np.loadtxt(raw_data, delimiter=",")
#separate the data from the target attributes
X =dataset[:,0:7]
#X=preprocessing.MinMaxScaler().fit_transform(x)
#print(X)
y =dataset[:,8]
print(" 調用scikit的樸素貝葉斯演算法包GaussianNB ")
model= GaussianNB()
start_time= time.time()
model.fit(X,y)
print('training took %fs!' % (time.time() - start_time))
print(model)
expected= y
predicted= model.predict(X)
print(metrics.classification_report(expected,predicted))
print(metrics.confusion_matrix(expected,predicted))
print(" 調用scikit的樸素貝葉斯演算法包MultinomialNB ")
model= MultinomialNB(alpha=1)
start_time= time.time()
model.fit(X,y)
print('training took %fs!' % (time.time() - start_time))
print(model)
expected= y
predicted= model.predict(X)
print(metrics.classification_report(expected,predicted))
print(metrics.confusion_matrix(expected,predicted))
print(" 調用scikit的樸素貝葉斯演算法包BernoulliNB ")
model= BernoulliNB(alpha=1,binarize=0.0)
start_time= time.time()
model.fit(X,y)
print('training took %fs!' % (time.time() - start_time))
print(model)
expected= y
predicted= model.predict(X)
print(metrics.classification_report(expected,predicted))
print(metrics.confusion_matrix(expected,predicted))
print(" 調用scikit的KNeighborsClassifier ")
model= KNeighborsClassifier()
start_time= time.time()
model.fit(X,y)
print('training took %fs!' % (time.time() - start_time))
print(model)
expected= y
predicted= model.predict(X)
print(metrics.classification_report(expected,predicted))
print(metrics.confusion_matrix(expected,predicted))
print(" 調用scikit的LogisticRegression(penalty='l2')")
model= LogisticRegression(penalty='l2')
start_time= time.time()
model.fit(X,y)
print('training took %fs!' % (time.time() - start_time))
print(model)
expected= y
predicted= model.predict(X)
print(metrics.classification_report(expected,predicted))
print(metrics.confusion_matrix(expected,predicted))
print(" 調用scikit的RandomForestClassifier(n_estimators=8) ")
model= RandomForestClassifier(n_estimators=8)
start_time= time.time()
model.fit(X,y)
print('training took %fs!' % (time.time() - start_time))
print(model)
expected= y
predicted= model.predict(X)
print(metrics.classification_report(expected,predicted))
print(metrics.confusion_matrix(expected,predicted))
print(" 調用scikit的tree.DecisionTreeClassifier()")
model= tree.DecisionTreeClassifier()
start_time= time.time()
model.fit(X,y)
print('training took %fs!' % (time.time() - start_time))
print(model)
expected= y
predicted= model.predict(X)
print(metrics.classification_report(expected,predicted))
print(metrics.confusion_matrix(expected,predicted))
print(" 調用scikit的GradientBoostingClassifier(n_estimators=200) ")
model= GradientBoostingClassifier(n_estimators=200)
start_time= time.time()
model.fit(X,y)
print('training took %fs!' % (time.time() - start_time))
print(model)
expected= y
predicted= model.predict(X)
print(metrics.classification_report(expected,predicted))
print(metrics.confusion_matrix(expected,predicted))
print(" 調用scikit的SVC(kernel='rbf', probability=True) ")
model= SVC(kernel='rbf', probability=True)
start_time= time.time()
model.fit(X,y)
print('training took %fs!' % (time.time() - start_time))
print(model)
expected= y
predicted= model.predict(X)
print(metrics.classification_report(expected,predicted))
print(metrics.confusion_matrix(expected,predicted))
"""
# 預處理代碼集錦
importpandas as pd
df=pd.DataFrame(dataset)
print(df.head(3))
print(df.describe())##描述性分析
print(df.corr())##各特徵相關性分析
##計算每行每列數據的缺失值個數
defnum_missing(x):
return sum(x.isnull())
print("Missing values per column:")
print(df.apply(num_missing, axis=0)) #axis=0代表函數應用於每一列
print(" Missing values per row:")
print(df.apply(num_missing, axis=1).head()) #axis=1代表函數應用於每一行"""