( j; p8 h& S) ?7 b+ T0 \, ox_train=input_variables_values_training_datasets: Z% X& f% e3 ]
y_train=target_variables_values_training_datasets : x8 ~5 F. |4 M% Mx_test=input_variables_values_test_datasets . e6 i) _6 Q% G8 ?$ B+ C; g- O8 t% m: }1 b' K) |: t0 ~+ G1 \
# Create linear regression object 6 e E* z! Q/ E7 Y" tlinear = linear_model.LinearRegression()7 ^+ {- u6 ~2 b) z' S, }0 N: d' n
& k" S& R7 c3 E" Y- c# Train the model using the training sets and check score 5 P; m$ G4 p9 |1 a8 vlinear.fit(x_train, y_train)' g, r6 E- P! \% R
linear.score(x_train, y_train)$ M9 m9 O* @0 j
7 q& x% G+ Y/ l' h3 ]- K" i#Equation coefficient and Intercept 3 L9 w1 i! E, O- F7 l9 qprint('Coefficient: \n', linear.coef_)7 V# q/ X5 c0 C* l1 w
print('Intercept: \n', linear.intercept_)1 F! X4 P9 T4 v! T% u
3 ]0 _! ^8 J: ]2 p j! F# l o
#Predict Output 5 |$ T& L/ \8 T6 ^5 @! M2 o) vpredicted= linear.predict(x_test) / F) ^) X m+ z H; X; d1 j2.逻辑回归 / d: B. h) v1 |3 C- P逻辑回归最早听说的时候以为是回归算法,其实是一个分类算法,不要让他的名字迷惑了.通常利用已知的自变量来预测一个离散型因变量的值(通常是二分类的值).简单来讲,他就是通过拟合一个Lg来预测一个时间发生的概率,所以他预测的是一个概率值,并且这个值是在0-1之间的,不可能出这个范围,除非你遇到了一个假的逻辑回归! 9 o3 M6 B& G/ c Y8 d1 a! @: _$ z- l0 U- a
同样用例子来理解: . \, j* H5 I0 y1 u& K* t+ C& R+ C4 t( J# D# F2 a
假设你的一个朋友让你回答一道题。可能的结果只有两种:你答对了或没有答对。为了研究你最擅长的题目领域,你做了各种领域的题目。那么这个研究的结果可能是这样的:如果是一道十年级的三角函数题,你有70%的可能性能解出它。但如果是一道五年级的历史题,你会的概率可能只有30%。逻辑回归就是给你这样的概率结果。$ C1 X' U( }: y! B9 v8 R
! C! w" o& d H' X数学又来了,做算法这行业是离不开数学的,还是好好学学数学吧 ( B& L2 V2 o: a! [9 a1 L ) @9 M9 I& T* ~! y- E3 X! B6 Q最终事件的预测变量的线性组合就是: , k, @5 p8 O( P1 S' Q; y( V( q `. v
% O# c, {6 _9 H+ k+ Q; |odds= p/ (1-p) = probability of event occurrence / probability of not event occurrence 9 A3 N4 m6 y9 F% z& {( H: e7 v- A9 \6 y- ? G
ln(odds) = ln(p/(1-p))5 x% s: C! f0 D% \$ z, I/ b
* V0 A+ C) l9 F! c9 z/ e2 ologit(p) = ln(p/(1-p)) = b0+b1X1+b2X2+b3X3....+bkXk$ A0 v( r( I9 e5 r2 f
在这里,p是我们感兴趣的事件出现的概率.他通过筛选出特定参数值使得观察到的样本值出现的概率最大化,来估计参数,而不是像普通回归那样最小化误差的平方和. % h& U1 v1 o" _* f) h8 a) T* q A: J, R; y- A7 s4 g: t8 k
至于有的人会问,为什么需要做对数呢?简单来说这是重复阶梯函数的最佳方法. ) b. C9 C0 S4 P1 I" w d 1 x- |& t! g+ Q, G% h `* `. f2 X: f 4 Y" t1 s+ d8 t4 F from sklearn.linear_model import LogisticRegression 1 V" a( W3 T; K7 K9 z' q & W+ O9 X' L& C, W model = LogisticRegression() . T6 J9 j! R; f, ^4 S+ r . E7 n% y- e8 \, @& f: _ # Train the model using the training sets and check score( v9 q0 u: q4 W
model.fit(X, y)" O5 L- i2 i" n' ~7 s3 `
model.score(X, y) : A( I/ ?( m5 s' \" F 9 {- @8 Q" R& e6 u8 k# r! ^; N #Equation coefficient and Intercept 8 H# N7 {& x! W5 B" H print('Coefficient: \n', model.coef_) ) T0 d# l+ X2 l1 T2 c print('Intercept: \n', model.intercept_)' f/ E4 J! B1 `6 y2 w1 U; ]
. M& ]# k9 V7 V' D6 E4 q) H #Predict Output3 j9 @6 S# B w( I8 n5 f
predicted= model.predict(x_test) T% A9 K& c! z- l) X
逻辑回归的优化: ( T) R! L" I" A/ B/ q加入交互项0 r% B5 W$ E0 K5 }& i6 k, u
1 o. s# {4 j* s" a" Y
减少特征变量 7 J1 m' p3 I( ]8 ?7 }8 G 6 Q" X; ~& j8 S# X) q 正则化 ) n e+ y7 t# G1 N: W& w & Z) G6 I' V( L4 j 使用非线性模型 & B, N0 x2 a: k5 y. X6 { d5 s7 V6 q, i3 |3.决策树( B/ B9 u) C8 r; j+ [$ g5 G- X
这是我最喜欢也是能经常使用到的算法。它属于监督式学习,常用来解决分类问题。令人惊讶的是,它既可以运用于类别变量(categorical variables)也可以作用于连续变量。这个算法可以让我们把一个总体分为两个或多个群组。分组根据能够区分总体的最重要的特征变量/自变量进行。 ' h' t/ k9 Q. P* e) B% A+ s, i B9 o" m5 [/ n' `8 L: E
5 s) j* o8 t4 f / b% f7 Q3 Z( C0 `! `! h; @5 W从上图中我们可以看出,总体人群最终在玩与否的事件上被分成了四个群组。而分组是依据一些特征变量实现的。用来分组的具体指标有很多,比如Gini,information Gain, Chi-square,entropy。* b. c- @% J1 K- [) _6 w
! y- g: s& H( c2 m& S
. C* P' A, C+ nfrom sklearn import tree $ _/ n+ N& M% W: f# v C * C- S; V( @+ ?5 w0 c; g3 M ' V( p2 [$ m: F% y! C; w9 E7 n) y" u# Create tree object ( ~* | ^! x4 x, c! g. M
model = tree.DecisionTreeClassifier(criterion='gini') # for classification, here you can change the algorithm as gini or entropy (information gain) by default it is gini ) ^6 e6 ^& j# h7 `# E
: m) x v3 Z: H& |7 M; C
# model = tree.DecisionTreeRegressor() for regression % ^/ h8 |: q" @1 G4 H, I 5 q( _8 `4 {9 r. H2 q# k/ H# Train the model using the training sets and check score 1 _: s) S- u3 Umodel.fit(X, y) : k+ J* Y; r6 b2 o, Lmodel.score(X, y)! x4 H& h4 ^, ?3 E
* c0 x* z3 b [- ?, z#Predict Output, B" Z u7 t1 ?5 f- H
predicted= model.predict(x_test) 5 w2 O$ h4 ?9 l' j2 {4. 支持向量机(SVM) + d* S5 r8 p6 Q! N1 e这是一个分类算法。在这个算法中我们将每一个数据作为一个点在一个n维空间上作图(n是特征数),每一个特征值就代表对应坐标值的大小。比如说我们有两个特征:一个人的身高和发长。我们可以将这两个变量在一个二维空间上作图,图上的每个点都有两个坐标值(这些坐标轴也叫做支持向量)。1 v% R/ @# J- [2 A; a$ h
! r3 W& V* e. }( l" J # }! V- k* I6 C在上图中,黑色的线就是最佳分割线。因为这条线到两组中距它最近的点,点A和B的距离都是最远的。任何其他线必然会使得到其中一个点的距离比这个距离近。这样根据数据点分布在这条线的哪一边,我们就可以将数据归类。) _* w8 L1 D0 a
7 w; T& j! q! C e3 [1 D6 ~9 h& P#Import Library" @& Y; f4 F2 I
from sklearn import svm7 b, d. Y2 m+ L. P6 K9 h* j {. C
#Assumed you have, X (predictor) and Y (target) for training data set and x_test(predictor) of test_dataset E- e# I: s! I# Create SVM classification object 4 G5 w0 ], P y" h$ R& J0 `- G . n, a! r: [1 C% Jmodel = svm.svc() # there is various option associated with it, this is simple for classification. You can refer link, for mo# re detail. 9 `( J! ]. M8 x" h6 D 2 e8 M& Z9 F, o; |$ j( H$ H# Train the model using the training sets and check score T7 Q& w) e- B! ?5 omodel.fit(X, y)1 V2 E2 C6 U" S
model.score(X, y) + d$ {; f( G( l9 ] ) |' H$ G# q/ o: g" @#Predict Output % ]" {' |3 ^% t8 opredicted= model.predict(x_test) % }; {# k4 f4 ?. p' P: r' M5. 朴素贝叶斯 9 U1 d& f# Z. ~ r这个算法是建立在贝叶斯理论上的分类方法。它的假设条件是自变量之间相互独立。简言之,朴素贝叶斯假定某一特征的出现与其它特征无关。比如说,如果一个水果它是红色的,圆状的,直径大概7cm左右,我们可能猜测它为苹果。即使这些特征之间存在一定关系,在朴素贝叶斯算法中我们都认为红色,圆状和直径在判断一个水果是苹果的可能性上是相互独立的。 X3 {+ _3 j- u7 K5 H6 S
: }! J; d) f1 Q) V
朴素贝叶斯的模型易于建造,并且在分析大量数据问题时效率很高。虽然模型简单,但很多情况下工作得比非常复杂的分类方法还要好。% d) i; Y# q0 a' [8 S6 w$ _; I
& `5 ?; h& B: ^5 s) ?$ A) }贝叶斯理论告诉我们如何从先验概率P(c),P(x)和条件概率P(x|c)中计算后验概率P(c|x)。算法如下: 6 U" X* ]: H; V' s e. ]- B& U2 G6 T7 n: l
4 O/ d* g3 R7 \' D3 p
P(c|x)是已知特征x而分类为c的后验概率。. i; j7 O0 G8 d' p- _
: q1 ~. X6 y- c2 T
P(c)是种类c的先验概率。 ) m' n; H) K7 [- K! D, U# O7 H2 C+ s- L+ H; i: ?7 l0 t
P(x|c)是种类c具有特征x的可能性。 F3 c' { a, D" C* k( @* T' h" X; Q' e% x. A
P(x)是特征x的先验概率。 ; c+ w! c( p; |' t( i/ l ' ^- ?( K7 Y; R3 t3 {4 P% c: R5 A; M4 d1 l- G* M4 i
例子: 以下这组训练集包括了天气变量和目标变量“是否出去玩”。我们现在需要根据天气情况将人们分为两组:玩或不玩。整个过程按照如下步骤进行:6 D# _ P" L1 d2 F
3 J0 W9 ~6 t$ F3 o0 A#Assumed you have, X (attributes) for training data set and x_test(attributes) of test_dataset # P( E3 X. n4 B3 A @$ z% Z: K1 T8 v# Create KNeighbors classifier object model + v5 E; Q0 }) J! S$ [4 U* r
k_means = KMeans(n_clusters=3, random_state=0) : }0 d, v6 u( }/ n& e F 3 J0 {0 t. X5 y( P* G0 O# Train the model using the training sets and check score 0 r& K* k5 U, H& K3 Cmodel.fit(X)7 @1 X) F* y( W$ |/ f4 ]
# r7 Z7 h; H7 a8 M" u
#Predict Output' o- S! |+ d) d! ^3 D% R& O
predicted= model.predict(x_test) * T6 \6 Q: I" P; v3 h) E8.随机森林 . q! N% j5 z6 @0 `随机森林是对决策树集合的特有名称。随机森林里我们有多个决策树(所以叫“森林”)。为了给一个新的观察值分类,根据它的特征,每一个决策树都会给出一个分类。随机森林算法选出投票最多的分类作为分类结果。 a+ a! I. B# b7 K- [
! c% p8 o. v/ g. u
怎样生成决策树:7 @/ H. \1 r7 x
4 {6 @% q# S/ E# g* k) }如果训练集中有N种类别,则有重复地随机选取N个样本。这些样本将组成培养决策树的训练集。 + ~$ M7 Y7 F( J' t5 g3 M l1 z" ~
如果有M个特征变量,那么选取数m << M,从而在每个节点上随机选取m个特征变量来分割该节点。m在整个森林养成中保持不变。 2 s* _# `; R: u: M ) q5 H4 g# }5 q) h4 P每个决策树都最大程度上进行分割,没有剪枝。 Z4 |, Z6 E* `( |7 A+ K' k& x& P
#Import Library , D: { A9 E# A$ ifrom sklearn.ensemble import RandomForestClassifier/ ~$ i, ~( [8 Q& p; x
#Assumed you have, X (predictor) and Y (target) for training data set and x_test(predictor) of test_dataset5 ^! E M [' i$ e8 X) \
+ I4 N: N: l& v: d9 E+ s* v; |# Create Random Forest object " u, ?3 W1 m! j f4 y, Y) @' rmodel= RandomForestClassifier() " m( ]2 a, N/ U$ N V4 p8 P: ?4 Z6 ~ ^4 d: w
# Train the model using the training sets and check score / V% L8 ?: j* n- L8 ?! E& I% Bmodel.fit(X, y)7 C* |8 ~( X* K E' c( X7 f
5 D2 F% T* H+ q9 P7 b2 e9 M#Predict Output 6 r. m n1 M0 ypredicted= model.predict(x_test) + G* M2 W$ Y- D9.降维算法(Dimensionality Reduction Algorithms): a9 H7 y( H' e
在过去的4-5年里,可获取的数据几乎以指数形式增长。公司/政府机构/研究组织不仅有了更多的数据来源,也获得了更多维度的数据信息。/ S5 y, g! N8 Q9 p: q
. X6 n! K3 D1 f' t! B# s0 x7 l
例如:电子商务公司有了顾客更多的细节信息,像个人信息,网络浏览历史,个人喜恶,购买记录,反馈信息等,他们关注你的私人特征,比你天天去的超市里的店员更了解你。 # U0 O9 N5 r. Q2 U # V' p# |( p3 d* K v作为一名数据科学家,我们手上的数据有非常多的特征。虽然这听起来有利于建立更强大精准的模型,但它们有时候反倒也是建模中的一大难题。怎样才能从1000或2000个变量里找到最重要的变量呢?这种情况下降维算法及其他算法,如决策树,随机森林,PCA,因子分析,相关矩阵,和缺省值比例等,就能帮我们解决难题。5 I2 O Y' Q/ u- i5 S# J! n
8 U8 ~5 y% e F
- U. `( m7 ^& x& F
#Import Library1 y; A$ e+ x9 E) P
from sklearn import decomposition0 K/ o: m9 m* I! d
#Assumed you have training and test data set as train and test; B0 z# }$ {4 b
# Create PCA obeject pca= decomposition.PCA(n_components=k) #default value of k =min(n_sample, n_features) - u( Y: C% R9 g& `# For Factor analysis ' Q) H' i( o( V& g0 ~' i& |2 ^#fa= decomposition.FactorAnalysis() ; U D& e( z3 t0 }# Reduced the dimension of training dataset using PCA/ z* R& {3 `1 V8 K3 Z
& D' s) z0 q7 o- y( n- g
train_reduced = pca.fit_transform(train); R( X- ?; B0 T V7 ]6 W
9 P' _) l4 m x9 T" J6 @! h. \#Reduced the dimension of test dataset 1 g1 n3 M* l5 N+ ~; x" D9 V8 g# stest_reduced = pca.transform(test)9 P5 i: N, Q5 v: `$ S5 Z
10.Gradient Boosing 和 AdaBoost I4 p* w O% v: O! |" W7 [GBM和AdaBoost都是在有大量数据时提高预测准确度的boosting算法。Boosting是一种集成学习方法。它通过有序结合多个较弱的分类器/估测器的估计结果来提高预测准确度。这些boosting算法在Kaggle,AV Hackthon, CrowdAnalytix等数据科学竞赛中有出色发挥。$ q. W" \3 J/ E; i) @
9 U# @: x) y; c4 l
#Import Library% X6 O( l" b3 m0 X1 }
from sklearn.ensemble import GradientBoostingClassifier * t) q- T8 t6 m" x3 s. `9 c4 a#Assumed you have, X (predictor) and Y (target) for training data set and x_test(predictor) of test_dataset " g. H& b! ` C2 L5 G' `# Create Gradient Boosting Classifier object " B" E% I" Q9 @1 amodel= GradientBoostingClassifier(n_estimators=100, learning_rate=1.0, max_depth=1, random_state=0)0 U; [+ y$ D* O: `& B2 [& `
4 G5 [) {9 N: G" G: i
# Train the model using the training sets and check score 1 k9 A2 j' |; s: X' y. l' \8 x2 smodel.fit(X, y)0 b8 y# Q8 d5 W9 b2 c
#Predict Output , ]. }( M. V7 t# b; ]- xpredicted= model.predict(x_test) ' y& K$ j, t- O4 D+ M* |5 o' HGradientBoostingClassifier 和随机森林是两种不同的boosting分类树。人们经常提问 这两个算法有什么不同。 4 @: U" Y1 W3 U" v8 N# a ]% s, n1 R' z% [
原文链接:http://blog.csdn.net/han_xiaoyang/article/details/511913862 D4 \4 W: a# {
————————————————$ a1 Y8 F$ [/ \
版权声明:本文为CSDN博主「_小羊」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。 ( D) w1 @" _: s, i1 r5 I原文链接:https://blog.csdn.net/qq_39303465/article/details/79176075 3 ?/ i9 F q! t) b8 j6 T7 c) b1 K3 F+ H
7 d! {8 d3 U1 p. K! S* Y