2 w& v' z f& u; R; g! C从上图中我们可以看出,总体人群最终在玩与否的事件上被分成了四个群组。而分组是依据一些特征变量实现的。用来分组的具体指标有很多,比如Gini,information Gain, Chi-square,entropy。* n, i) z( W" m( I
3 v8 A7 |$ B: j$ w6 h# ^6 F- q& F) X9 a; l3 I
from sklearn import tree 7 s- Q2 U. j- k 8 s* J- |& v6 U4 Y/ A% F. V b3 k/ j y
# Create tree object 9 k3 E8 |$ U$ \3 W1 q
model = tree.DecisionTreeClassifier(criterion='gini') # for classification, here you can change the algorithm as gini or entropy (information gain) by default it is gini $ L6 L5 H+ w1 X" s8 e# D# R
g& B) u/ R; S3 }) `# model = tree.DecisionTreeRegressor() for regression + B) Y( g8 O; a0 Y( V, W " s6 F9 S' z& [+ z" ]2 x, _# Train the model using the training sets and check score* q( {- T7 I7 o' H
model.fit(X, y) 9 V& y! l3 J F, ?8 f; E$ [model.score(X, y) ( Z" }+ K5 g4 k- \ + B7 Z! m+ C( |2 f: [#Predict Output ! Q1 u9 ]" g* t0 epredicted= model.predict(x_test) + v o* j4 E4 |, J3 z4. 支持向量机(SVM) + }2 K1 p+ ~& w& ^! c这是一个分类算法。在这个算法中我们将每一个数据作为一个点在一个n维空间上作图(n是特征数),每一个特征值就代表对应坐标值的大小。比如说我们有两个特征:一个人的身高和发长。我们可以将这两个变量在一个二维空间上作图,图上的每个点都有两个坐标值(这些坐标轴也叫做支持向量)。 0 Y/ u$ R' ]* n2 F2 o, V) c 6 n: U' S! }3 p9 Y4 A3 J. V现在我们要在图中找到一条直线能最大程度将不同组的点分开。两组数据中距离这条线最近的点到这条线的距离都应该是最远的。8 H0 z' B1 Q1 _/ r
1 b: Y7 u1 W+ d! N 8 V) o! Y6 V7 w: B5 F" ^! E( i& E b) {" q& z- Z( e( Y
在上图中,黑色的线就是最佳分割线。因为这条线到两组中距它最近的点,点A和B的距离都是最远的。任何其他线必然会使得到其中一个点的距离比这个距离近。这样根据数据点分布在这条线的哪一边,我们就可以将数据归类。 # o+ M5 P6 u( E1 L& V ( L0 o9 q# i7 Q2 N#Import Library % h* U1 @% R4 Ffrom sklearn import svm" x! w( v, z9 C/ R4 Q: g4 B
#Assumed you have, X (predictor) and Y (target) for training data set and x_test(predictor) of test_dataset# t. K2 o/ O6 I/ r/ H5 x
# Create SVM classification object ( [9 j4 L" `, I( ^8 i % e: p: J3 }& h+ l4 {model = svm.svc() # there is various option associated with it, this is simple for classification. You can refer link, for mo# re detail.' f6 t4 s- y& q9 `' Q% X1 T
3 g- m" Y6 M: S; D4 w" J# Train the model using the training sets and check score & b. `( L6 J* R; T s$ s0 Pmodel.fit(X, y)* I+ R+ i: |+ m6 m7 `5 g
model.score(X, y)) M0 K+ a' c& y* @" ~
' \9 J9 s$ [" }+ i( `. a" |# dKNN在生活中的运用很多。比如,如果你想了解一个不认识的人,你可能就会从这个人的好朋友和圈子中了解他的信息。' m: K7 }9 n. M7 s( |
- c/ H6 w! p5 v5 g
在用KNN前你需要考虑到:7 _' O' q& K/ X; }$ c& A8 Y% j
. M2 i+ ~$ {; G- R0 Q- r- H' `9 [2 S
KNN的计算成本很高 ! D% B. _5 s! n+ L) g# j/ D. I& L$ \) z- C7 m
所有特征应该标准化数量级,否则数量级大的特征在计算距离上会有偏移。 1 [) q: Z1 X2 Y# B3 n1 S$ y# X9 a# r A# I. {
在进行KNN前预处理数据,例如去除异常值,噪音等。9 t7 o6 J9 m+ y7 [8 w
5 u3 Y1 B4 K, z+ ^/ b: M#Import Library ( e$ _4 Y5 y* f+ Zfrom sklearn.neighbors import KNeighborsClassifier ) p, f( C( E" G' d/ b y& m. a4 b + T; M' ?: y" @* L#Assumed you have, X (predictor) and Y (target) for training data set and x_test(predictor) of test_dataset ( R) O8 Q: q3 a6 V+ O# Create KNeighbors classifier object model " B& ^* s7 y: Q, f9 C% A
+ B5 j; u+ E4 H' jKNeighborsClassifier(n_neighbors=6) # default value for n_neighbors is 5 ) |7 p) u+ C+ `' w/ O7 x3 _! C. I1 u6 h/ s8 Y
# Train the model using the training sets and check score + y7 M! N, `1 Wmodel.fit(X, y)3 J# Y' K) K8 n: g
9 N0 d6 h2 ~+ f' r5 b. e#Predict Output0 s l3 u. R {6 o, J1 p
predicted= model.predict(x_test) + a: K) d' m3 Q: |8 M7. K均值算法(K-Means) . r' ]0 W v& w这是一种解决聚类问题的非监督式学习算法。这个方法简单地利用了一定数量的集群(假设K个集群)对给定数据进行分类。同一集群内的数据点是同类的,不同集群的数据点不同类。6 u! M. D" n: E" D+ |2 j
7 G, K9 o/ j& Q0 s# x- E" E
还记得你是怎样从墨水渍中辨认形状的么?K均值算法的过程类似,你也要通过观察集群形状和分布来判断集群数量!5 h" D& X1 Z$ l# S( [1 v
3 f: t' `$ j9 Y 9 A1 O/ n1 {0 n. v* m2 A, eK均值算法如何划分集群:; W, q5 u1 S; \$ N- H& X
4 [, {6 I8 Z* T: b3 h7 J
& J* s4 s8 k, c4 i# `; @- h! q 1 M' |! h5 ~3 g) f从每个集群中选取K个数据点作为质心(centroids)。 ) T! Z2 e/ N: w) M; T; ^) t6 z2 }" z2 H% w3 U
将每一个数据点与距离自己最近的质心划分在同一集群,即生成K个新集群。 ^( t* M3 @& `- u% p3 ~! Z" _4 s
找出新集群的质心,这样就有了新的质心。 - `0 v* b$ D! B" x# o8 W : ]$ x, T" g) C: j; e6 T重复2和3,直到结果收敛,即不再有新的质心出现。 2 Z0 Z& V. ~ b7 i/ C: K 3 V: ?/ [& l- n; [3 d9 L ) i. E) \8 I) m M! D4 I& W怎样确定K的值: : P+ }" C8 b: J- J- S, q L% V z0 N% D* o, ?1 a
如果我们在每个集群中计算集群中所有点到质心的距离平方和,再将不同集群的距离平方和相加,我们就得到了这个集群方案的总平方和。- k) ]6 U& \4 _! Y1 I% w
: F: B W! ]: `
我们知道,随着集群数量的增加,总平方和会减少。但是如果用总平方和对K作图,你会发现在某个K值之前总平方和急速减少,但在这个K值之后减少的幅度大大降低,这个值就是最佳的集群数。 6 z- T, B# `7 Z+ x% Q# Z0 f+ Q! q8 ?& B: P* {7 ~, V
* [6 L i1 M7 n* \0 P2 `#Import Library . k, f* S8 W4 Ifrom sklearn.cluster import KMeans4 U* V) h2 P* D) N, h* t
# D1 S, H3 T, _+ O' r) P#Assumed you have, X (attributes) for training data set and x_test(attributes) of test_dataset! }5 n' w% A h6 X, ?! ~" ^
# Create KNeighbors classifier object model : Z$ H' d2 o2 r& N- ok_means = KMeans(n_clusters=3, random_state=0) 0 Z2 c9 h q% w3 J. [" s' N, d8 N( `% N6 X
# Train the model using the training sets and check score $ U& O3 C- d8 mmodel.fit(X) : C: p) F+ Z* d0 h, x3 G( r6 }2 T! Y5 I9 ?
#Predict Output+ i7 A8 \/ v9 o
predicted= model.predict(x_test). ?& {& ~. E- E3 l" m4 _
8.随机森林7 u1 a0 C: w% s
随机森林是对决策树集合的特有名称。随机森林里我们有多个决策树(所以叫“森林”)。为了给一个新的观察值分类,根据它的特征,每一个决策树都会给出一个分类。随机森林算法选出投票最多的分类作为分类结果。 q* ^6 q9 o9 V# b7 R
5 n0 W$ y: q' b怎样生成决策树: 4 q; ?% F K) J% y0 s3 A8 T- q 7 f7 ?4 b$ n8 O, e7 v( x* B如果训练集中有N种类别,则有重复地随机选取N个样本。这些样本将组成培养决策树的训练集。 , i) y% j' X ^4 r6 K2 P& e3 |! d$ p! s$ P! g6 ~, |" r2 L+ ?5 K
如果有M个特征变量,那么选取数m << M,从而在每个节点上随机选取m个特征变量来分割该节点。m在整个森林养成中保持不变。 . H! }1 r2 y& a; d3 P. |8 e: Q& V& S$ Z a9 i( i x! S8 E: ]. Z
每个决策树都最大程度上进行分割,没有剪枝。3 w! L( h0 [" \, a1 m; c5 N
1 f( A) U1 Z5 Q/ E% K#Import Library ; F2 |+ [% p& E! Gfrom sklearn.ensemble import RandomForestClassifier , e- e, d) X5 H#Assumed you have, X (predictor) and Y (target) for training data set and x_test(predictor) of test_dataset4 l, Z" m7 R& `( k. Q' N
3 P% Y2 N7 M( ~4 w n
# Create Random Forest object 9 i4 ~% P1 ~& n4 V) h+ Hmodel= RandomForestClassifier() 9 n: K2 D# h8 l" o' T' p6 W& S0 n. S% Q! Q3 E
# Train the model using the training sets and check score : h$ M9 @4 s. b7 jmodel.fit(X, y)$ |8 \( k1 Z' l1 U
" _- w+ R1 O, r% \1 M
#Predict Output% L9 c( h. D- Q3 l
predicted= model.predict(x_test) ! @! Q4 g, P, k; u8 C9.降维算法(Dimensionality Reduction Algorithms)+ G" l4 A4 C- q- B3 \* J" [. e3 k
在过去的4-5年里,可获取的数据几乎以指数形式增长。公司/政府机构/研究组织不仅有了更多的数据来源,也获得了更多维度的数据信息。7 [* ]# b" y; _6 r. s2 O5 C) k+ y
7 e. y- e1 p7 E& F( \: @: p1 R
例如:电子商务公司有了顾客更多的细节信息,像个人信息,网络浏览历史,个人喜恶,购买记录,反馈信息等,他们关注你的私人特征,比你天天去的超市里的店员更了解你。- R7 e4 C1 D% ~' T/ Q" Y2 Y
" B& r- F' }: x4 M
作为一名数据科学家,我们手上的数据有非常多的特征。虽然这听起来有利于建立更强大精准的模型,但它们有时候反倒也是建模中的一大难题。怎样才能从1000或2000个变量里找到最重要的变量呢?这种情况下降维算法及其他算法,如决策树,随机森林,PCA,因子分析,相关矩阵,和缺省值比例等,就能帮我们解决难题。 " Y' Q) o1 y( F7 b8 _1 b4 x ! w. f) W A$ P% k' M" Q 9 V* W" }2 E, N3 f$ c#Import Library $ N- }4 n* U" efrom sklearn import decomposition2 M' a/ {+ m! ^/ ]' x
#Assumed you have training and test data set as train and test( @ a& `% J" L0 ^ Z; t
# Create PCA obeject pca= decomposition.PCA(n_components=k) #default value of k =min(n_sample, n_features) ; d" X: c' b9 [% G6 W+ T# For Factor analysis% v7 H' l8 j w! T9 L
#fa= decomposition.FactorAnalysis()* _5 ^5 r7 R' k' G( H
# Reduced the dimension of training dataset using PCA2 S* f+ O2 O! i0 w+ G
6 Q4 O+ T4 ?0 D; X) {9 J2 ?0 g
train_reduced = pca.fit_transform(train) - v6 t6 p) {- j/ }! X ' C% ~5 F2 L2 F" o#Reduced the dimension of test dataset& r! J% x0 ~ |& e; A: I
test_reduced = pca.transform(test) 6 Y" U7 @' v9 e7 X' y10.Gradient Boosing 和 AdaBoost. d5 j, d8 U9 Q5 R) Q
GBM和AdaBoost都是在有大量数据时提高预测准确度的boosting算法。Boosting是一种集成学习方法。它通过有序结合多个较弱的分类器/估测器的估计结果来提高预测准确度。这些boosting算法在Kaggle,AV Hackthon, CrowdAnalytix等数据科学竞赛中有出色发挥。 ( Z) }% [8 d0 ?% @. u$ Y5 Z * T# x$ e1 Q+ T- i- ?8 d/ q#Import Library 4 |7 f- q8 ?- J5 Xfrom sklearn.ensemble import GradientBoostingClassifier# @# |+ H! b9 ?1 j$ g6 y4 \
#Assumed you have, X (predictor) and Y (target) for training data set and x_test(predictor) of test_dataset ( v; _/ t# @+ e: b, ]. i1 Q# Create Gradient Boosting Classifier object* S$ Y& I& x6 Z- m4 ~) `* A, e- I
model= GradientBoostingClassifier(n_estimators=100, learning_rate=1.0, max_depth=1, random_state=0)5 p7 k4 a0 O. ] M
. `4 B/ E% H! E0 T7 N# [# Train the model using the training sets and check score * E8 c5 z1 x Gmodel.fit(X, y): x2 q& M8 g @8 V
#Predict Output - ~1 I" } ]' `5 K( p, {' Opredicted= model.predict(x_test) 1 A! I2 T* [" K6 v( F) u! V7 vGradientBoostingClassifier 和随机森林是两种不同的boosting分类树。人们经常提问 这两个算法有什么不同。 8 x1 i i3 X* B* g/ V6 e" _( K' s( ?; |3 p2 l9 y" `
原文链接:http://blog.csdn.net/han_xiaoyang/article/details/51191386+ `. ^2 N+ P$ B% d
———————————————— ( G+ A$ R3 `5 T: e' H* M) l版权声明:本文为CSDN博主「_小羊」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。 7 J4 a, X+ G( B1 Q! k原文链接:https://blog.csdn.net/qq_39303465/article/details/79176075 ! L7 a# l% F7 q" _3 [$ w. j9 L; h( O ~' w% z& y- n6 S