3 V! s: i1 M; y/ Y6 W 5 u6 S2 k6 K" z0 k7 o3 pfrom sklearn import tree 5 J7 ?/ s% W: _7 ]' E5 }, H: {/ e% }2 O
1 l$ m) t( ?: C3 M# Create tree object 3 a/ Z: |/ i0 v5 U7 N! Bmodel = tree.DecisionTreeClassifier(criterion='gini') # for classification, here you can change the algorithm as gini or entropy (information gain) by default it is gini ! j8 u( \ e8 q% a/ O; V! T3 @" e( V! C" R! ]: Q# `
# model = tree.DecisionTreeRegressor() for regression) H. ]* T) y/ s$ L: L1 B
7 n# W" e# A' K( H1 E% s+ ~
# Train the model using the training sets and check score1 F2 i) S/ G+ ]! ~7 L) t9 I
model.fit(X, y) . s) z m7 J& Gmodel.score(X, y)* k& |6 E. g8 K. H
# d* A0 D: m, | N0 v2 j. t0 O5 P
#Predict Output- |7 ] L% ~8 X. V% i9 E
predicted= model.predict(x_test) % y6 U6 A% B) P5 z: S C% S4. 支持向量机(SVM)& w& N4 f2 j( H a- p* _1 d
这是一个分类算法。在这个算法中我们将每一个数据作为一个点在一个n维空间上作图(n是特征数),每一个特征值就代表对应坐标值的大小。比如说我们有两个特征:一个人的身高和发长。我们可以将这两个变量在一个二维空间上作图,图上的每个点都有两个坐标值(这些坐标轴也叫做支持向量)。 2 S+ `- ^) k! \" L+ Z5 B( ?4 u. x7 M ( ?7 Z! C: ~' a5 I% }0 A3 i现在我们要在图中找到一条直线能最大程度将不同组的点分开。两组数据中距离这条线最近的点到这条线的距离都应该是最远的。 I0 J2 ?7 h, N6 ^) f1 i; t: {6 ^' { q
6 M6 M, C+ f5 f
; l+ ~! K5 j+ l
在上图中,黑色的线就是最佳分割线。因为这条线到两组中距它最近的点,点A和B的距离都是最远的。任何其他线必然会使得到其中一个点的距离比这个距离近。这样根据数据点分布在这条线的哪一边,我们就可以将数据归类。 # |2 ^. \, d6 x/ v( A; o: P$ U* C4 ]
#Import Library" u3 J, f: a4 @* _9 e7 h
from sklearn import svm; K! s- a( P) o% ~# ?
#Assumed you have, X (predictor) and Y (target) for training data set and x_test(predictor) of test_dataset) t5 U+ B3 E8 s+ ]9 D
# Create SVM classification object 6 Q; f: I) p: r5 j2 ~* g |7 w* u! A ( i4 j' r+ Y- G3 s2 ]( z) Mmodel = svm.svc() # there is various option associated with it, this is simple for classification. You can refer link, for mo# re detail.# \6 {0 C; V) ^' g0 y$ q0 o! p; Q
1 q/ r9 i8 _# e' {7 W# [) p# Train the model using the training sets and check score, \+ i/ K# g8 T3 H
model.fit(X, y)/ a. E* L/ l/ m) ^' {- O) ]
model.score(X, y) 1 g8 O/ }* P1 `$ Y# B; N 9 H5 m2 I# f2 G5 D! Q$ x9 @#Predict Output . H7 k% e6 \2 y! P. l- H: ]1 T4 spredicted= model.predict(x_test) # |$ U% ?: q7 H' B5. 朴素贝叶斯 ; g$ [3 G4 }1 C: v6 b这个算法是建立在贝叶斯理论上的分类方法。它的假设条件是自变量之间相互独立。简言之,朴素贝叶斯假定某一特征的出现与其它特征无关。比如说,如果一个水果它是红色的,圆状的,直径大概7cm左右,我们可能猜测它为苹果。即使这些特征之间存在一定关系,在朴素贝叶斯算法中我们都认为红色,圆状和直径在判断一个水果是苹果的可能性上是相互独立的。% o7 ^9 Y4 _ [( y: i
) w% M$ }, g4 x4 ~
朴素贝叶斯的模型易于建造,并且在分析大量数据问题时效率很高。虽然模型简单,但很多情况下工作得比非常复杂的分类方法还要好。 : D" v* n0 ~; j7 z ( v( Y9 B: G# E! y贝叶斯理论告诉我们如何从先验概率P(c),P(x)和条件概率P(x|c)中计算后验概率P(c|x)。算法如下:( j+ V% ]8 q o4 F
) L/ q$ l7 X0 O# w+ u2 Y1 t
, [5 O/ {. x$ x- _
P(c|x)是已知特征x而分类为c的后验概率。 : W7 Q! U! R. h5 g2 ~) G . W8 i4 c& J" V9 _) z/ tP(c)是种类c的先验概率。 H' @$ }! P, ?* ^% j% t d f2 H2 t5 T+ G( B, L
P(x|c)是种类c具有特征x的可能性。/ i+ A/ [6 f! q$ J
, Y0 j0 e! M" y! uP(x)是特征x的先验概率。 9 j) L8 c: Q$ S( T* `- D. ^) s . a4 U& M1 L! ]$ h$ ^3 o/ X" G& Y. B1 }' P# q, h, l2 Y
例子: 以下这组训练集包括了天气变量和目标变量“是否出去玩”。我们现在需要根据天气情况将人们分为两组:玩或不玩。整个过程按照如下步骤进行:' G/ X- z5 C+ ^# R9 Z
8 j, x# }3 U& d3 B
步骤1:根据已知数据做频率表0 ^: v) P0 o& D$ n+ K9 U. L2 l
+ M2 x7 Z' n6 s, i当有多种类别和多种特征时,预测的方法相似。朴素贝叶斯通常用于文本分类和多类别分类问题。/ o6 y. S0 n2 E& N" x- C
0 x9 Y- Q$ c; }. S; ^#Import Library. L5 s+ ]! D0 u: [" p
from sklearn.naive_bayes import GaussianNB ; a1 [9 N( j% _, _" F+ U#Assumed you have, X (predictor) and Y (target) for training data set and x_test(predictor) of test_dataset0 r. f# q7 h' p' W
( s: J% O# b+ D$ [) g5 G" n# Create SVM classification object model = GaussianNB() # there is other distribution for multinomial classes like Bernoulli Naive Bayes, Refer link $ K4 c( f8 C' K # `' e0 j' {( E7 e, S# Train the model using the training sets and check score. ^6 U% J) Z# G) [
model.fit(X, y) 2 e" K0 j& m8 z* H2 e/ T6 Z/ U9 {- D7 {* o1 X V2 ?
#Predict Output" |; J8 _9 j+ K& F) R, F5 \
predicted= model.predict(x_test)0 }- Z: D) R- k$ o: w5 T) t( r. d5 h
6.KNN(K-邻近算法)% g) Z, Y1 U9 e* A. j. X
这个算法既可以解决分类问题,也可以用于回归问题,但工业上用于分类的情况更多。 KNN先记录所有已知数据,再利用一个距离函数,找出已知数据中距离未知事件最近的K组数据,最后按照这K组数据里最常见的类别预测该事件。 - y( ~) f, N+ U: K* T0 f/ N Q0 i( O, H! v8 ?距离函数可以是欧式距离,曼哈顿距离,闵氏距离 (Minkowski Distance), 和汉明距离(Hamming Distance)。前三种用于连续变量,汉明距离用于分类变量。如果K=1,那问题就简化为根据最近的数据分类。K值的选取时常是KNN建模里的关键。 f/ j' f5 {0 L; p" S
5 l% o+ x5 i9 l" V9 e( w: u#Assumed you have, X (predictor) and Y (target) for training data set and x_test(predictor) of test_dataset; \; h& i7 ~5 I- A" Y# p- k
# Create KNeighbors classifier object model : [- _4 g6 {0 E6 w; \/ [
/ G) u- ~* I& b/ C4 n+ j- x1 LKNeighborsClassifier(n_neighbors=6) # default value for n_neighbors is 5 ( f. Y8 G8 Q; M0 ]! Z & `5 z4 E4 C* a$ o3 h# Train the model using the training sets and check score) W0 i1 e+ t) t) G) Q
model.fit(X, y) - p2 Q5 P! u9 z; q# [% c ) f/ N% q4 d2 F/ k7 C#Predict Output & l# w$ u& Z! epredicted= model.predict(x_test) + |" ~5 N5 \- ?$ n; a+ |7. K均值算法(K-Means) 6 j$ U$ r7 J; W4 b* I% i这是一种解决聚类问题的非监督式学习算法。这个方法简单地利用了一定数量的集群(假设K个集群)对给定数据进行分类。同一集群内的数据点是同类的,不同集群的数据点不同类。$ E' [" {/ ]1 G* ]' T5 N- l* f
' n( D* j! w( H0 h7 k( v
还记得你是怎样从墨水渍中辨认形状的么?K均值算法的过程类似,你也要通过观察集群形状和分布来判断集群数量!! R4 j2 y2 n, y7 ~, W( h' C. M+ V$ V
: v8 I" `. ^! C! D3 |0 f
& W0 E, i- M3 Z$ \+ h; c
K均值算法如何划分集群:3 {: w; `1 |* z3 k$ C1 \" _( ^
4 C) Y( B. |( H0 H6 S9 p