8 B4 d8 a7 X2 \! y! e5 Y2 W* v2 a#Import Library2 i; f, O( x) S: N+ F4 `1 M6 ^
from sklearn.naive_bayes import GaussianNB+ W& d7 a6 W+ z2 N
#Assumed you have, X (predictor) and Y (target) for training data set and x_test(predictor) of test_dataset - j. F9 K- O, s7 u! u1 p% V* ]* z; i6 j; a7 |
# Create SVM classification object model = GaussianNB() # there is other distribution for multinomial classes like Bernoulli Naive Bayes, Refer link+ E0 [4 [. a( J W# F5 f. w
4 [) T' g+ c# H1 [& U( V j* Z# Y
# Train the model using the training sets and check score 5 z; q' a/ A. m9 P6 K. lmodel.fit(X, y) 6 n) c/ [- j( ^) w: V& s& E+ T/ `* t, T1 O& T
#Predict Output 7 i( {5 v E/ I: r, `5 g: `predicted= model.predict(x_test)- `+ U7 O1 `3 ]2 P! X: y
6.KNN(K-邻近算法) 7 e4 p( Y: q- N6 q这个算法既可以解决分类问题,也可以用于回归问题,但工业上用于分类的情况更多。 KNN先记录所有已知数据,再利用一个距离函数,找出已知数据中距离未知事件最近的K组数据,最后按照这K组数据里最常见的类别预测该事件。 . l: H* o) z7 \$ c1 f! u& V( g/ B9 g0 r! {) v) g8 G% `& O
距离函数可以是欧式距离,曼哈顿距离,闵氏距离 (Minkowski Distance), 和汉明距离(Hamming Distance)。前三种用于连续变量,汉明距离用于分类变量。如果K=1,那问题就简化为根据最近的数据分类。K值的选取时常是KNN建模里的关键。# P3 }& Y2 @7 n% k6 _4 W
! W4 b& u. @/ P! e( s l
v7 q9 {! ^! Z/ Q 8 s: i# \! Q* N3 |1 s) UKNN在生活中的运用很多。比如,如果你想了解一个不认识的人,你可能就会从这个人的好朋友和圈子中了解他的信息。 0 ^: K0 I7 d1 {1 R1 s- q7 `$ L, h; {5 u0 C, c) B
在用KNN前你需要考虑到:6 j/ Z" e. n9 f1 K
& i6 ?; x9 \, h" A" uKNN的计算成本很高+ G# g* S( V4 B
! u G$ r% G [4 G所有特征应该标准化数量级,否则数量级大的特征在计算距离上会有偏移。1 ~ _0 N u) U) u7 z7 @1 O
. j! w& q9 s) r1 E. O
在进行KNN前预处理数据,例如去除异常值,噪音等。 $ u- N; {4 q Z2 e" E. M . |; j. ]* {5 h- P8 {( Y8 m#Import Library ) o; T1 l3 D6 @* afrom sklearn.neighbors import KNeighborsClassifier ! A! N7 W+ g+ Q% h" p # Q% U n, n/ U, y* F* j/ d#Assumed you have, X (predictor) and Y (target) for training data set and x_test(predictor) of test_dataset9 X+ f( N9 O' z- }- \6 p, {
# Create KNeighbors classifier object model 8 j3 C7 C2 `: g( \
, E ~; v, p* _- S( C, i
KNeighborsClassifier(n_neighbors=6) # default value for n_neighbors is 5 ( X$ R$ U- M% ]( _ @* P V6 j4 d, r* o
# Train the model using the training sets and check score: G: K* t, p. i, b5 \/ D
model.fit(X, y) 6 T1 O; u, P; P8 _6 e! ? 6 T6 u+ |% }/ {+ z, f+ s9 T6 J% ?( n#Predict Output 3 c+ x) H1 _; I. e5 d* j% f0 `predicted= model.predict(x_test) & M2 } h' W# [# a! P7. K均值算法(K-Means) 4 ?+ O- [' x4 ?! r- N' r" w: j0 a/ H这是一种解决聚类问题的非监督式学习算法。这个方法简单地利用了一定数量的集群(假设K个集群)对给定数据进行分类。同一集群内的数据点是同类的,不同集群的数据点不同类。 4 H% d8 M: L& t% E8 ~ N( K 4 _ }/ h0 K* [, ], G( U9 j7 B2 e还记得你是怎样从墨水渍中辨认形状的么?K均值算法的过程类似,你也要通过观察集群形状和分布来判断集群数量!3 ]" R m( v% E
# ?" W+ Z( f" |( z# S) ^ 7 {- {8 u' c( m9 h& C8 Q+ yK均值算法如何划分集群: # w) n* j! A, x% u! I* i 2 A1 K( S& w" A' T/ B! M+ M ! i4 x9 {; }: w7 S& V' Y. b( N& e6 L, O" S
从每个集群中选取K个数据点作为质心(centroids)。 : G- F% M6 I7 z! T5 y, J " f% o# b6 m8 c, P4 n! E# j I2 c将每一个数据点与距离自己最近的质心划分在同一集群,即生成K个新集群。+ Z6 f6 Z. o, U. P
/ k _! Q, j5 r! j; V找出新集群的质心,这样就有了新的质心。1 B4 p& ^5 l. i# r0 j/ i# K
C2 O* Q8 @9 B) f5 c- X: e
重复2和3,直到结果收敛,即不再有新的质心出现。) J3 |7 q, F7 G- C& I
( m( R; j# C- n' J. ]8 ]3 e/ m
& H8 ]8 b2 X2 ^3 U/ f6 s! V4 v
怎样确定K的值:5 T4 J) W v- z8 ^8 o) K* R( V" Y
2 f! r. Q3 n8 v; F4 F O
如果我们在每个集群中计算集群中所有点到质心的距离平方和,再将不同集群的距离平方和相加,我们就得到了这个集群方案的总平方和。 8 x% Z/ N7 d( o, p, C+ c5 P& E) u, h: Y$ s. `+ q
我们知道,随着集群数量的增加,总平方和会减少。但是如果用总平方和对K作图,你会发现在某个K值之前总平方和急速减少,但在这个K值之后减少的幅度大大降低,这个值就是最佳的集群数。- g% ^$ \& h# l& p7 W
3 o! S9 P# M$ H( X; f; q
' r- k, z7 ?6 W9 [( u% b
#Import Library k& g/ }, s6 ffrom sklearn.cluster import KMeans 4 `7 V. b" _; N, f% y: ]. J. O# H p4 G9 c: g
#Assumed you have, X (attributes) for training data set and x_test(attributes) of test_dataset5 k" r: K x$ n. K( U
# Create KNeighbors classifier object model 7 `6 ~# R/ A& D2 K6 U7 q# l
k_means = KMeans(n_clusters=3, random_state=0) 2 S2 z, B# C+ D$ m- [ + g5 l8 x5 a u9 p G# Train the model using the training sets and check score + v( o. |' N8 Bmodel.fit(X)% w- P$ h9 b- S5 }. D4 X# V' e% S
v0 T' i0 d$ Q( z2 z9 n2 j如果有M个特征变量,那么选取数m << M,从而在每个节点上随机选取m个特征变量来分割该节点。m在整个森林养成中保持不变。4 G' L* A7 s- q, |" u/ N
7 e( @. }" e' a* u) F
每个决策树都最大程度上进行分割,没有剪枝。1 e7 b: J9 u% ]9 P0 Y1 ]
! N: L5 H2 Z7 M+ v! Z% ]) f$ q
#Import Library 9 J) c) c0 B8 c% ifrom sklearn.ensemble import RandomForestClassifier 7 ~# ^: x+ b& t$ Q% G& x" s#Assumed you have, X (predictor) and Y (target) for training data set and x_test(predictor) of test_dataset 4 Y' ?4 V& a" N( p- N: K5 |5 ~6 @) ]) v% a# X. }2 u
# Create Random Forest object % l! Y$ ^6 O Tmodel= RandomForestClassifier()1 ^4 u: V' K3 e* O
3 Q0 P+ |1 G, `2 n. h0 q( P$ H- e
# Train the model using the training sets and check score 4 O! B6 c' }& S) g- Kmodel.fit(X, y)+ k% s8 I0 F; u8 i. k2 m* r: o
9 l9 O7 D' @9 `) V$ T ]
#Predict Output 6 F- N( ?4 J( V: B* Z$ B" z* Mpredicted= model.predict(x_test) O5 I" F# ?: a/ G
9.降维算法(Dimensionality Reduction Algorithms) 3 X! o) T+ M' F2 C4 T! ^在过去的4-5年里,可获取的数据几乎以指数形式增长。公司/政府机构/研究组织不仅有了更多的数据来源,也获得了更多维度的数据信息。0 g. j5 @- S$ E3 N
2 P" R! g+ Y, H, P) X
例如:电子商务公司有了顾客更多的细节信息,像个人信息,网络浏览历史,个人喜恶,购买记录,反馈信息等,他们关注你的私人特征,比你天天去的超市里的店员更了解你。! Z9 r+ t% q: I F4 V# I& j
) B. B# A0 Q: l
作为一名数据科学家,我们手上的数据有非常多的特征。虽然这听起来有利于建立更强大精准的模型,但它们有时候反倒也是建模中的一大难题。怎样才能从1000或2000个变量里找到最重要的变量呢?这种情况下降维算法及其他算法,如决策树,随机森林,PCA,因子分析,相关矩阵,和缺省值比例等,就能帮我们解决难题。- I) }; d j$ b4 h
7 H- k k! H/ p9 \, u: |- c* R L2 ^5 }+ x
#Import Library 8 ]- v) o2 x6 X [- c9 @+ ~from sklearn import decomposition+ Q- u5 v5 P) |* Y- O
#Assumed you have training and test data set as train and test . a, `% V) V: C6 O% s8 x# Create PCA obeject pca= decomposition.PCA(n_components=k) #default value of k =min(n_sample, n_features); u6 P( |" u2 ?0 Q1 H% y
# For Factor analysis* }7 Q* O9 _* E% {
#fa= decomposition.FactorAnalysis()+ C. f) Q; {9 j+ [6 Q& U
# Reduced the dimension of training dataset using PCA1 _8 \ d0 V. { t! {
, c# ~& Q# U& b& q
train_reduced = pca.fit_transform(train)# A& F: k; p' r/ H6 m# R
. L7 j- f" W. z' H) I8 M#Reduced the dimension of test dataset; D, ]# ]1 @2 ~* m+ {9 B( J7 @, h
test_reduced = pca.transform(test)! H* g* x: c M
10.Gradient Boosing 和 AdaBoost4 f4 \; }/ d; a+ p) G2 L$ X3 b: S, G
GBM和AdaBoost都是在有大量数据时提高预测准确度的boosting算法。Boosting是一种集成学习方法。它通过有序结合多个较弱的分类器/估测器的估计结果来提高预测准确度。这些boosting算法在Kaggle,AV Hackthon, CrowdAnalytix等数据科学竞赛中有出色发挥。 & S2 O7 y6 ~% a3 O: U) V% b5 r, z4 \3 p5 a% }0 [, ^+ E8 [
#Import Library2 I: K* ]+ |7 P7 A) m( B, V
from sklearn.ensemble import GradientBoostingClassifier; d4 x' j& ~. t! d0 M/ K
#Assumed you have, X (predictor) and Y (target) for training data set and x_test(predictor) of test_dataset ! {! i) H! [3 K# D( J3 [# Create Gradient Boosting Classifier object 5 V- Z5 g9 C4 p8 {model= GradientBoostingClassifier(n_estimators=100, learning_rate=1.0, max_depth=1, random_state=0)" z: T( e7 q! n+ M
) ^! ^& ^5 n0 L( K8 H: q b# Train the model using the training sets and check score ( I1 W/ R9 v; ?& D4 b! S$ G) Lmodel.fit(X, y) : w! g* O( c: |! p; B#Predict Output " Q* W! q% Y; B- _predicted= model.predict(x_test) % s1 z+ r: Y f aGradientBoostingClassifier 和随机森林是两种不同的boosting分类树。人们经常提问 这两个算法有什么不同。 9 ]; _, f: H5 G2 }2 T C: b6 k1 T. w6 O; U
原文链接:http://blog.csdn.net/han_xiaoyang/article/details/51191386( q5 Z7 X* o% I; V9 ^5 C
———————————————— 6 a: ]% O, B, k/ M0 }. y* y版权声明:本文为CSDN博主「_小羊」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。4 A5 i* Z6 [. S" k; _; b
原文链接:https://blog.csdn.net/qq_39303465/article/details/79176075 ( M2 Z" u/ y( C* F ! S- D1 c6 m* Z, Y, }1 z ) ~/ s! N' a0 F' `8 W" t4 J2 a6 y