$ u; S' ?9 S% T3 K2 S+ c4 m! e" ?" E) t1 P* l( N/ a
from sklearn.linear_model import LogisticRegression( S: X: t% G( ?/ `) R
8 N5 w; J' ^( J0 I! d model = LogisticRegression() 1 [9 p3 u6 X/ x8 X% a( g/ B2 ]$ P5 _" Q, y0 [9 F: M/ z
# Train the model using the training sets and check score ' m' y, O3 u+ V model.fit(X, y) # t C: V7 i! e( \- r' Z model.score(X, y)" s% e4 h/ U* T; `
0 c4 J$ W" V% I. B+ B & \4 P' i2 R/ y/ r! l, T6 g# Create tree object + C. s" T+ ]: Q* R1 O
model = tree.DecisionTreeClassifier(criterion='gini') # for classification, here you can change the algorithm as gini or entropy (information gain) by default it is gini 1 r! H; H# |; B' C- W" d. i" Z4 G8 Q6 U9 h" p4 ~
# model = tree.DecisionTreeRegressor() for regression ( ~. V9 Y1 V: F7 _9 t ) s) M, T, ]! N: Y3 r C8 @# Train the model using the training sets and check score ( q/ r1 b& D4 G8 I/ Y! Kmodel.fit(X, y)3 i! |: W0 a3 }3 q1 {# Q; o3 V
model.score(X, y)! l+ C- I: ?# O" P9 s
1 E0 p/ h! p9 w) M& l- K( l1 P$ Q那么,P (Yes | Sunny) = 0.33 * 0.64 / 0.36 = 0.60>0.5,说明这个概率值更大。 v$ X& z, _9 Q' I, H
) \+ N! S6 M+ X' o' ?
当有多种类别和多种特征时,预测的方法相似。朴素贝叶斯通常用于文本分类和多类别分类问题。5 n' b5 I3 |2 M; G) C( E
8 ?( N' |7 A1 G- s3 L' ?+ h
#Import Library+ \. d5 k: r9 a) M+ Y3 @
from sklearn.naive_bayes import GaussianNB ; p2 O n# g6 w#Assumed you have, X (predictor) and Y (target) for training data set and x_test(predictor) of test_dataset" m: v/ R3 e: { L _+ C+ X
6 |! M- n, L S/ \! V3 F+ C* q. D( K
# Create SVM classification object model = GaussianNB() # there is other distribution for multinomial classes like Bernoulli Naive Bayes, Refer link5 j5 o( J1 E/ y/ G/ j+ M, w( [: W
2 d% c6 T* B8 f# Train the model using the training sets and check score 1 }* y: G& p8 Zmodel.fit(X, y)( q. l' X* O" j, d+ a" O$ X
: ]- Y) X. z" l; Y+ @* z
#Predict Output : ^) }# `" ^& q& `& hpredicted= model.predict(x_test)0 o) ^' \/ r8 T. `3 R
6.KNN(K-邻近算法) " ~' u( Y8 K+ N这个算法既可以解决分类问题,也可以用于回归问题,但工业上用于分类的情况更多。 KNN先记录所有已知数据,再利用一个距离函数,找出已知数据中距离未知事件最近的K组数据,最后按照这K组数据里最常见的类别预测该事件。 " m; S4 n6 u! X6 x Z9 F# l3 S6 H4 B, H' e3 o7 Z+ a0 E$ ]
距离函数可以是欧式距离,曼哈顿距离,闵氏距离 (Minkowski Distance), 和汉明距离(Hamming Distance)。前三种用于连续变量,汉明距离用于分类变量。如果K=1,那问题就简化为根据最近的数据分类。K值的选取时常是KNN建模里的关键。 ( q7 L9 n" Y0 y: ~; d , Y. ]! I1 G* B2 w/ C( s/ q0 a; h : Z1 g6 D0 P' Q 5 G M1 K& g, jKNN在生活中的运用很多。比如,如果你想了解一个不认识的人,你可能就会从这个人的好朋友和圈子中了解他的信息。9 g9 T0 \9 p9 ~7 n9 _* @% N
) m$ e& x4 Z' [! Z l在用KNN前你需要考虑到:- j5 z! g( r" ?
5 o: U; W" N1 X! H, ^+ G+ I+ C* @KNN的计算成本很高 ; ]3 K/ g* U- H# M: V# [ 4 w/ I o9 v+ T% O' X& d" ^; X- r! W所有特征应该标准化数量级,否则数量级大的特征在计算距离上会有偏移。 1 i9 `! h0 r! v1 q8 `; i 5 V6 S* k6 U6 y0 g在进行KNN前预处理数据,例如去除异常值,噪音等。 , p- n% N% S: `" ?6 s4 @& Q8 t- t i! {8 e& D4 H" I% Y- {# e/ ?
#Import Library 1 h& j( r0 H0 s8 a/ i* jfrom sklearn.neighbors import KNeighborsClassifier& {7 q; A- T& M- s; ^
; D, `& Z0 S4 ~
#Assumed you have, X (predictor) and Y (target) for training data set and x_test(predictor) of test_dataset( Y5 M/ a. \& _$ N _! p1 d0 l0 O3 K
# Create KNeighbors classifier object model i6 j* Q* U+ X5 t' [/ ^; b
# L1 M2 k& Y* H! C: HKNeighborsClassifier(n_neighbors=6) # default value for n_neighbors is 5 : P. k2 @5 }) z+ U; e" S , A$ m; Y( U' u4 K: b: z9 v# Train the model using the training sets and check score H. X/ {' z1 s8 C {9 \+ y
model.fit(X, y)0 H. S! Z3 k$ a3 l- G
$ e6 N+ G- g: `0 n# u' Y4 ^7 r#Predict Output 3 m, W$ Z ]/ xpredicted= model.predict(x_test)6 T- k1 M: M9 _1 v" |
7. K均值算法(K-Means)- `* b8 L! E: q: H# Q9 k
这是一种解决聚类问题的非监督式学习算法。这个方法简单地利用了一定数量的集群(假设K个集群)对给定数据进行分类。同一集群内的数据点是同类的,不同集群的数据点不同类。 9 j: U7 E# U% b6 O c# C! a: `; s6 X6 }7 U) G$ D2 Q
还记得你是怎样从墨水渍中辨认形状的么?K均值算法的过程类似,你也要通过观察集群形状和分布来判断集群数量! ! `+ |" {. E, g , F9 i5 ~! a; h+ u- f6 G ' C8 d' V! I6 B! B7 D! ^3 RK均值算法如何划分集群:' S) S# [$ |% N" c+ }8 v4 D1 u
" k/ ~# g) }8 d8 S7 V' X G8 n+ d
8 w' t- c3 J8 C3 g H 1 R& \$ ^+ X3 A+ V% v4 _9 X从每个集群中选取K个数据点作为质心(centroids)。 / h4 C. |& g' j7 g0 h4 z0 G1 p. g; P* i8 b. F; t% Z: E. Q2 ?
将每一个数据点与距离自己最近的质心划分在同一集群,即生成K个新集群。 $ _; F: J: ~, s! ~4 C" z) N; K. J R/ h3 j' B
找出新集群的质心,这样就有了新的质心。 ; L+ | H& V0 z4 d% O, V# o- Z% c
重复2和3,直到结果收敛,即不再有新的质心出现。 9 w% `9 A! |, ^/ ?/ }1 {8 ~) E( Z! j' M( a/ w
$ B* F: |3 O5 `+ Z8 i怎样确定K的值: + p+ Y6 x# q' ]! x& o# I% m+ U 3 W/ b6 Z% `* M* o如果我们在每个集群中计算集群中所有点到质心的距离平方和,再将不同集群的距离平方和相加,我们就得到了这个集群方案的总平方和。 8 o' g( }0 ~- y. t0 t W/ L" Y; y4 |8 c4 t
我们知道,随着集群数量的增加,总平方和会减少。但是如果用总平方和对K作图,你会发现在某个K值之前总平方和急速减少,但在这个K值之后减少的幅度大大降低,这个值就是最佳的集群数。 ; L8 r3 M9 [7 _% c! C2 R ; L! L" U5 H2 y ? g ! x) Y9 n/ g/ o8 p#Import Library, |9 [1 b0 k' }: T1 F2 y+ `# u
from sklearn.cluster import KMeans) x6 o0 t- {5 H/ m/ z2 Y2 K: t
' v" a: Z9 R4 g1 r
#Assumed you have, X (attributes) for training data set and x_test(attributes) of test_dataset" j5 J V. G/ W% a+ X
# Create KNeighbors classifier object model + k2 P5 C/ |5 W) _8 Z
k_means = KMeans(n_clusters=3, random_state=0) , b8 k t; {; Y3 _4 M' S b' G6 V, k# X! _
# Train the model using the training sets and check score 6 @7 Q. E. I" w% I0 q1 t7 emodel.fit(X) + z9 x; f9 i z3 m- D$ E( D9 h% @' e/ v) b
#Predict Output . U( F) c) m j+ b6 B' s6 {! Ypredicted= model.predict(x_test) ( t( a; M2 W1 S+ `' c3 B4 V& u8.随机森林 * d8 P" |! z' r1 O- l, H; o- _随机森林是对决策树集合的特有名称。随机森林里我们有多个决策树(所以叫“森林”)。为了给一个新的观察值分类,根据它的特征,每一个决策树都会给出一个分类。随机森林算法选出投票最多的分类作为分类结果。) `- N1 O) i" N: S
2 S% s' G4 {- [& P8 h* e* m. t
怎样生成决策树: ; N) I$ {3 T2 N" x1 ?. V , ]8 e- M1 h% E b! V如果训练集中有N种类别,则有重复地随机选取N个样本。这些样本将组成培养决策树的训练集。1 D! o9 R( @6 Q
. q0 B X2 @: v
如果有M个特征变量,那么选取数m << M,从而在每个节点上随机选取m个特征变量来分割该节点。m在整个森林养成中保持不变。+ P3 o4 _' k0 }% i" Q
% P* J' F" r) h+ ~8 V每个决策树都最大程度上进行分割,没有剪枝。+ d0 m3 \3 I/ H; X
0 N) {. ]9 T6 X5 _$ D' C _
#Import Library 4 w$ B7 T5 z# q0 `# xfrom sklearn.ensemble import RandomForestClassifier5 s$ u' y6 X! b* A- [
#Assumed you have, X (predictor) and Y (target) for training data set and x_test(predictor) of test_dataset 1 `5 q9 a( `. l" I7 C# d # q) X/ B1 p2 U# Create Random Forest object * x, x* l' ?1 F1 Rmodel= RandomForestClassifier() 5 v9 K* F1 L; w 6 k6 G* B" ?4 B# Train the model using the training sets and check score ; i' m/ z* F, p0 mmodel.fit(X, y) . K' m# a2 W1 N0 t ' m+ f- G J0 Y; ~7 p( ]3 ^* N#Predict Output6 C, L0 l% e5 R
predicted= model.predict(x_test)) P1 {# ~1 w/ @4 ?2 r
9.降维算法(Dimensionality Reduction Algorithms) 6 a: Z6 D8 O& v在过去的4-5年里,可获取的数据几乎以指数形式增长。公司/政府机构/研究组织不仅有了更多的数据来源,也获得了更多维度的数据信息。 5 p$ Z x( H0 l: X' k9 E0 k- @ . C2 I( I7 u) w6 Y* D1 M& K例如:电子商务公司有了顾客更多的细节信息,像个人信息,网络浏览历史,个人喜恶,购买记录,反馈信息等,他们关注你的私人特征,比你天天去的超市里的店员更了解你。8 _' ]/ ^1 t8 F2 u- m3 Z7 M
3 w3 D) N0 I \" B$ L7 V
作为一名数据科学家,我们手上的数据有非常多的特征。虽然这听起来有利于建立更强大精准的模型,但它们有时候反倒也是建模中的一大难题。怎样才能从1000或2000个变量里找到最重要的变量呢?这种情况下降维算法及其他算法,如决策树,随机森林,PCA,因子分析,相关矩阵,和缺省值比例等,就能帮我们解决难题。 " T+ t6 a1 |' \+ r1 I8 [3 N & a5 O# h. P* K e6 H' V [8 G @- _" Q* V7 O
#Import Library2 |* R; F% g% e2 z5 ]9 }
from sklearn import decomposition2 k0 e3 C9 Z' L/ p8 `2 E
#Assumed you have training and test data set as train and test 5 g. h& k: M- O g9 \# Create PCA obeject pca= decomposition.PCA(n_components=k) #default value of k =min(n_sample, n_features)( V1 P; }+ \# E% m& C4 B
# For Factor analysis ' N! O0 x/ L) |" K4 l: R#fa= decomposition.FactorAnalysis()- t, H3 x4 K- n4 ]4 s% l
# Reduced the dimension of training dataset using PCA2 I2 {# m; f& k% c A( B6 @
, T! ]& r6 u* ?; o. strain_reduced = pca.fit_transform(train) 6 U/ Q$ U4 h# j) u4 _2 j $ U6 u+ q. {/ E0 _6 u# y#Reduced the dimension of test dataset ' ~$ ?. R+ Q& ]/ I* _test_reduced = pca.transform(test)6 N0 q- m% t( c- G
10.Gradient Boosing 和 AdaBoost( E* g* F/ w, P7 t: P
GBM和AdaBoost都是在有大量数据时提高预测准确度的boosting算法。Boosting是一种集成学习方法。它通过有序结合多个较弱的分类器/估测器的估计结果来提高预测准确度。这些boosting算法在Kaggle,AV Hackthon, CrowdAnalytix等数据科学竞赛中有出色发挥。" W5 O2 n1 E: F) b/ y. Q j3 S3 w9 r
- M4 g7 X. j5 d# e+ Y# a#Import Library& F+ t. Y, V# ?+ t; x
from sklearn.ensemble import GradientBoostingClassifier9 l. a! V$ c. D2 v% z
#Assumed you have, X (predictor) and Y (target) for training data set and x_test(predictor) of test_dataset : P9 F) l. ]& f7 C# Create Gradient Boosting Classifier object6 y6 n! ^; K5 m$ _
model= GradientBoostingClassifier(n_estimators=100, learning_rate=1.0, max_depth=1, random_state=0) ' V; G6 }: e* d. ?: T3 u# _: X1 A8 z1 u- Z. [/ j
# Train the model using the training sets and check score# J' n/ I& N- g1 E9 [
model.fit(X, y)3 `( p1 V6 `- Y% ^) b u
#Predict Output 5 w% l4 k0 B5 H( @1 O+ spredicted= model.predict(x_test): t: p9 \ N7 L1 I9 o& ^
GradientBoostingClassifier 和随机森林是两种不同的boosting分类树。人们经常提问 这两个算法有什么不同。% Z" ^3 S6 g# V3 i6 h4 b* m& G# H
1 k3 ]3 I: S0 d8 {/ f- C0 l& ?% @原文链接:http://blog.csdn.net/han_xiaoyang/article/details/51191386/ R/ ~0 F/ m) ~5 U0 |( S
———————————————— ) c7 }; k+ v5 U% B( W q; y# j版权声明:本文为CSDN博主「_小羊」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。 " e. |" K0 Z" J+ B5 s; ]/ i3 q原文链接:https://blog.csdn.net/qq_39303465/article/details/79176075" h% x! T( C5 K }$ {( f: g9 {* C
3 ~2 k, [( Y- c9 p8 F; B) I3 m