├── LICENSE ├── README.md └── assets ├── autoencoder.png ├── bag-rf-var.ipynb ├── bagging.png ├── clustering.png ├── cnn.jpg ├── collaborative_filtering.gif ├── cron-job.PNG ├── cv.png ├── gan.jpg ├── knn.png ├── l1l2.png ├── lr.png ├── lstm.png ├── mlp.jpg ├── pca.gif ├── rnn.jpeg ├── sql-join.PNG ├── stacking.jpg ├── svm.png ├── tree.gif ├── w2v.png └── workflow.png /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2018 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # This repo is depreciated, check out the latest [Nailing Machine Learning Concepts](https://github.com/jayinai/nail-ml-concept) 2 | 3 | The purpose of this repo is two fold: 4 | 5 | * To help you (data science practitioners) prepare for data science related interviews 6 | * To introduce to people who don't know but want to learn some basic data science concepts 7 | 8 | The focus is on the knowledge breadth so this is more of a quick reference rather than an in-depth study material. If you want to learn a specific topic in detail please refer to other content or reach out and I'd love to point you to materials I found useful. 9 | 10 | I might add some topics from time to time but hey, this should also be a community effort, right? Any pull request is welcome! 11 | 12 | Here are the categorizes: 13 | 14 | * [Resume](#resume) 15 | * [SQL](#sql) 16 | * [Tools and Framework](#tools-and-framework) 17 | * [Statistics and ML In General](#statistics-and-ml-in-general) 18 | * [Supervised Learning](#supervised-learning) 19 | * [Unsupervised Learning](#unsupervised-learning) 20 | * [Reinforcement Learning](#reinforcement-learning) 21 | * [Natural Language Processing](#natural-language-processing) 22 | * [System](#system) 23 | 24 | ## Resume 25 | 26 | The only advice I can give about resume is to indicate your past data science / machine learning projects in a specific, **quantifiable** way. Consider the following two statements: 27 | 28 | > Trained a machine learning system 29 | 30 | and 31 | 32 | > Designed and deployed a deep learning model to recognize objects using Keras, Tensorflow, and Node.js. The model has 1/30 model size, 1/3 training time, 1/5 inference time, and 2x faster convergence compared with traditional neural networks (e.g, ResNet) 33 | 34 | The second is much better because it quantifies your contribution and also highlights specific technologies you used (and therefore have expertise in). This would require you to log what you've done during experiments. But don't exaggerate. 35 | 36 | Spend some time going over your resume / past projects to make sure you explain them well. 37 | 38 | 39 | ## SQL 40 | 41 | * [Difference between joins](#difference-between-joins) 42 | 43 | 44 | ### Difference between joins 45 | 46 | * **(INNER) JOIN**: Returns records that have matching values in both tables 47 | * **LEFT (OUTER) JOIN**: Return all records from the left table, and the matched records from the right table 48 | * **RIGHT (OUTER) JOIN**: Return all records from the right table, and the matched records from the left table 49 | * **FULL (OUTER) JOIN**: Return all records when there is a match in either left or right table 50 | 51 | ![](assets/sql-join.PNG) 52 | 53 | [back to top](#data-science-question-answer) 54 | 55 | 56 | ## Tools and Framework 57 | 58 | The resources here are only meant to help you brush up on the topis rather than making you an expert. 59 | 60 | * [Spark](#spark) 61 | 62 | ### Spark 63 | 64 | Using PySpark API. 65 | 66 | * The best resource is of course [Spark's documentation](https://spark.apache.org/docs/latest/). Take a thorough review of the topics 67 | * If you are really time constrained, scan the Spark's documentation and check [PySpark cheat sheet](https://s3.amazonaws.com/assets.datacamp.com/blog_assets/PySpark_Cheat_Sheet_Python.pdf) for the basics 68 | 69 | 70 | [back to top](#data-science-question-answer) 71 | 72 | 73 | ## Statistics and ML In General 74 | 75 | * [Project Workflow](#project-workflow) 76 | * [Cross Validation](#cross-validation) 77 | * [Feature Importance](#feature-importance) 78 | * [Mean Squared Error vs. Mean Absolute Error](#mean-squared-error-vs.-mean-absolute-error) 79 | * [L1 vs L2 regularization](#l1-vs-l2-regularization) 80 | * [Correlation vs Covariance](#correlation-vs-covariance) 81 | * [Would adding more data address underfitting](#would-adding-more-data-address-underfitting) 82 | * [Activation Function](#activation-function) 83 | * [Bagging](#bagging) 84 | * [Stacking](#stacking) 85 | * [Generative vs discriminative](#generative-vs-discriminative) 86 | * [Parametric vs Nonparametric](#parametric-vs-nonparametric) 87 | * [Recommender System](#recommender-system) 88 | 89 | ### Project Workflow 90 | 91 | Given a data science / machine learning project, what steps should we follow? Here's 92 | how I would tackle it: 93 | 94 | * **Specify business objective.** Are we trying to win more customers, achieve higher satisfaction, or gain more revenues? 95 | * **Define problem.** What is the specific gap in your ideal world and the real one that requires machine learning to fill? Ask questions that can be addressed using your data and predictive modeling (ML algorithms). 96 | * **Create a common sense baseline.** But before you resort to ML, set up a baseline to solve the problem as if you know zero data science. You may be amazed at how effective this baseline is. It can be as simple as recommending the top N popular items or other rule-based logic. This baseline can also server as a good benchmark for ML algorithms. 97 | * **Review ML literatures.** To avoid reinventing the wheel and get inspired on what techniques / algorithms are good at addressing the questions using our data. 98 | * **Set up a single-number metric.** What it means to be successful - high accuracy, lower error, or bigger AUC - and how do you measure it? The metric has to align with high-level goals, most often the success of your business. Set up a single-number against which all models are measured. 99 | * **Do exploratory data analysis (EDA).** Play with the data to get a general idea of data type, distribution, variable correlation, facets etc. This step would involve a lot of plotting. 100 | * **Partition data.** Validation set should be large enough to detect differences between the models you are training; test set should be large enough to indicate the overall performance of the final model; training set, needless to say, the larger the merrier. 101 | * **Preprocess.** This would include data integration, cleaning, transformation, reduction, discretization and more. 102 | * **Engineer features.** Coming up with features is difficult, time-consuming, requires expert knowledge. Applied machine learning is basically feature engineering. This step usually involves feature selection and creation, using domain knowledge. Can be minimal for deep learning projects. 103 | * **Develop models.** Choose which algorithm to use, what hyperparameters to tune, which architecture to use etc. 104 | * **Ensemble.** Ensemble can usually boost performance, depending on the correlations of the models/features. So it’s always a good idea to try out. But be open-minded about making tradeoff - some ensemble are too complex/slow to put into production. 105 | * **Deploy model.** Deploy models into production for inference. 106 | * **Monitor model.** Monitor model performance, and collect feedbacks. 107 | * **Iterate.** Iterate the previous steps. Data science tends to be an iterative process, with new and improved models being developed over time. 108 | 109 | ![](assets/workflow.png) 110 | 111 | 112 | [back to top](#data-science-question-answer) 113 | 114 | ### Cross Validation 115 | 116 | Cross-validation is a technique to evaluate predictive models by partitioning the original sample into a training set to train the model, and a validation set to evaluate it. For example, a k-fold cross validation divides the data into k folds (or partitions), trains on each k-1 fold, and evaluate on the remaining 1 fold. This results to k models/evaluations, which can be averaged to get a overall model performance. 117 | 118 | ![](assets/cv.png) 119 | 120 | [back to top](#data-science-question-answer) 121 | 122 | 123 | ### Feature Importance 124 | 125 | * In linear models, feature importance can be calculated by the scale of the coefficients 126 | * In tree-based methods (such as random forest), important features are likely to appear closer to the root of the tree. We can get a feature's importance for random forest by computing the averaging depth at which it appears across all trees in the forest. 127 | 128 | [back to top](#data-science-question-answer) 129 | 130 | 131 | ### Mean Squared Error vs. Mean Absolute Error 132 | 133 | * **Similarity**: both measure the average model prediction error; range from 0 to infinity; the lower the better 134 | * Mean Squared Error (MSE) gives higher weights to large error (e.g., being off by 10 just MORE THAN TWICE as bad as being off by 5), whereas Mean Absolute Error (MAE) assign equal weights (being off by 10 is just twice as bad as being off by 5) 135 | * MSE is continuously differentiable, MAE is not (where y_pred == y_true) 136 | 137 | [back to top](#data-science-question-answer) 138 | 139 | 140 | ### L1 vs L2 regularization 141 | 142 | * **Similarity**: both L1 and L2 regularization **prevent overfitting** by shrinking (imposing a penalty) on the coefficients 143 | * **Difference**: L2 (Ridge) shrinks all the coefficient by the same proportions but eliminates none, while L1 (Lasso) can shrink some coefficients to zero, performing variable selection. 144 | * **Which to choose**: If all the features are correlated with the label, ridge outperforms lasso, as the coefficients are never zero in ridge. If only a subset of features are correlated with the label, lasso outperforms ridge as in lasso model some coefficient can be shrunken to zero. 145 | * In Graph (a), the black square represents the feasible region of the L1 regularization while graph (b) represents the feasible region for L2 regularization. The contours in the plots represent different loss values (for the unconstrained regression model ). The feasible point that minimizes the loss is more likely to happen on the coordinates on graph (a) than on graph (b) since graph (a) is more **angular**. This effect amplifies when your number of coefficients increases, i.e. from 2 to 200. The implication of this is that the L1 regularization gives you sparse estimates. Namely, in a high dimensional space, you got mostly zeros and a small number of non-zero coefficients. 146 | 147 | ![](assets/l1l2.png) 148 | 149 | [back to top](#data-science-question-answer) 150 | 151 | 152 | ### Correlation vs Covariance 153 | 154 | * Both determine the relationship and measure the dependency between two random variables 155 | * Correlation is when the change in one item may result in the change in the another item, while covariance is when two items vary together (joint variability) 156 | * Covariance is nothing but a measure of correlation. On the contrary, correlation refers to the scaled form of covariance 157 | * Range: correlation is between -1 and +1, while covariance lies between negative infinity and infinity. 158 | 159 | 160 | [back to top](#data-science-question-answer) 161 | 162 | 163 | ### Would adding more data address underfitting 164 | 165 | Underfitting happens when a model is not complex enough to learn well from the data. It is the problem of model rather than data size. So a potential way to address underfitting is to increase the model complexity (e.g., to add higher order coefficients for linear model, increase depth for tree-based methods, add more layers / number of neurons for neural networks etc.) 166 | 167 | [back to top](#data-science-question-answer) 168 | 169 | 170 | ### Activation Function 171 | 172 | For neural networks 173 | 174 | * Non-linearity: ReLU is often used. Use Leaky ReLU (a small positive gradient for negative input, say, `y = 0.01x` when x < 0) to address dead ReLU issue 175 | * Multi-class: softmax 176 | * Binary: sigmoid 177 | * Regression: linear 178 | 179 | [back to top](#data-science-question-answer) 180 | 181 | ### Bagging 182 | 183 | To address overfitting, we can use an ensemble method called bagging (bootstrap aggregating), 184 | which reduces the variance of the meta learning algorithm. Bagging can be applied 185 | to decision tree or other algorithms. 186 | 187 | Here is a [great illustration](http://scikit-learn.org/stable/auto_examples/ensemble/plot_bias_variance.html#sphx-glr-auto-examples-ensemble-plot-bias-variance-py) of a single estimator vs. bagging. 188 | 189 | ![](assets/bagging.png) 190 | 191 | * Bagging is when samlping is performed *with* replacement. When sampling is performed *without* replacement, it's called pasting. 192 | * Bagging is popular due to its boost for performance, but also due to that individual learners can be trained in parallel and scale well 193 | * Ensemble methods work best when the learners are as independent from one another as possible 194 | * Voting: soft voting (predict probability and average over all individual learners) often works better than hard voting 195 | * out-of-bag instances can act validation set for bagging 196 | 197 | [back to top](#data-science-question-answer) 198 | 199 | 200 | ### Stacking 201 | 202 | * Instead of using trivial functions (such as hard voting) to aggregate the predictions from individual learners, train a model to perform this aggregation 203 | * First split the training set into two subsets: the first subset is used to train the learners in the first layer 204 | * Next the first layer learners are used to make predictions (meta features) on the second subset, and those predictions are used to train another models (to obtain the weigts of different learners) in the second layer 205 | * We can train multiple models in the second layer, but this entails subsetting the original dataset into 3 parts 206 | 207 | ![stacking](assets/stacking.jpg) 208 | 209 | [back to top](#data-science-question-answer) 210 | 211 | 212 | ### Generative vs discriminative 213 | 214 | * Discriminative algorithms model *p(y|x; w)*, that is, given the dataset and learned 215 | parameter, what is the probability of y belonging to a specific class. A discriminative algorithm 216 | doesn't care about how the data was generated, it simply categorizes a given example 217 | * Generative algorithms try to model *p(x|y)*, that is, the distribution of features given 218 | that it belongs to a certain class. A generative algorithm models how the data was 219 | generated. 220 | 221 | > Given a training set, an algorithm like logistic regression or 222 | > the perceptron algorithm (basically) tries to find a straight line—that is, a 223 | > decision boundary—that separates the elephants and dogs. Then, to classify 224 | > a new animal as either an elephant or a dog, it checks on which side of the 225 | > decision boundary it falls, and makes its prediction accordingly. 226 | 227 | > Here’s a different approach. First, looking at elephants, we can build a 228 | > model of what elephants look like. Then, looking at dogs, we can build a 229 | > separate model of what dogs look like. Finally, to classify a new animal, we 230 | > can match the new animal against the elephant model, and match it against 231 | > the dog model, to see whether the new animal looks more like the elephants 232 | > or more like the dogs we had seen in the training set. 233 | 234 | [back to top](#data-science-question-answer) 235 | 236 | 237 | ### Parametric vs Nonparametric 238 | 239 | * A learning model that summarizes data with a set of parameters of fixed size (independent of the number of training examples) is called a parametric model. 240 | * A model where the number of parameters is not determined prior to training. Nonparametric does not mean that they have no parameters. On the contrary, nonparametric models (can) become more and more complex with an increasing amount of data. 241 | 242 | [back to top](#data-science-question-answer) 243 | 244 | 245 | ### Recommender System 246 | 247 | * I put recommend system here since technically it falls neither under supervised nor unsupervised learning 248 | * A recommender system seeks to predict the 'rating' or 'preference' a user would give to items and then recommend items accordingly 249 | * Content based recommender systems recommends items similar to those a given user has liked in the past, based on either explicit (ratings, like/dislike button) or implicit (viewed/finished an article) feedbacks. Content based recommenders work solely with the past interactions of a given user and do not take other users into consideration. 250 | * Collaborative filtering is based on past interactions of the whole user base. There are two Collaborative filtering approaches: **item-based** or **user-based** 251 | - item-based: for user u, a score for an unrated item is produced by combining the ratings of users similar to u. 252 | - user-based: a rating (u, i) is produced by looking at the set of items similar to i (interaction similarity), then the ratings by u of similar items are combined into a predicted rating 253 | * In recommender systems traditionally matrix factorization methods are used, although we recently there are also deep learning based methods 254 | * Cold start and sparse matrix can be issues for recommender systems 255 | * Widely used in movies, news, research articles, products, social tags, music, etc. 256 | 257 | ![cf](assets/collaborative_filtering.gif) 258 | 259 | [back to top](#data-science-question-answer) 260 | 261 | 262 | ## Supervised Learning 263 | 264 | * [Linear regression](#linear-regression) 265 | * [Logistic regression](#logistic-regression) 266 | * [Naive Bayes](#naive-bayes) 267 | * [KNN](#knn) 268 | * [SVM](#svm) 269 | * [Decision tree](#decision-tree) 270 | * [Random forest](#random-forest) 271 | * [Boosting Tree](#boosting-tree) 272 | * [MLP](#mlp) 273 | * [CNN](#cnn) 274 | * [RNN and LSTM](#rnn-and-lstm) 275 | 276 | ### Linear regression 277 | 278 | * How to learn the parameter: minimize the cost function 279 | * How to minimize cost function: gradient descent 280 | * Regularization: 281 | - L1 (Lasso): can shrink certain coef to zero, thus performing feature selection 282 | - L2 (Ridge): shrink all coef with the same proportion; almost always outperforms L1 283 | - Elastic Net: combined L1 and L2 priors as regularizer 284 | * Assumes linear relationship between features and the label 285 | * Can add polynomial and interaction features to add non-linearity 286 | 287 | ![lr](assets/lr.png) 288 | 289 | [back to top](#data-science-question-answer) 290 | 291 | 292 | ### Logistic regression 293 | 294 | * Generalized linear model (GLM) for binary classification problems 295 | * Apply the sigmoid function to the output of linear models, squeezing the target 296 | to range [0, 1] 297 | * Threshold to make prediction: usually if the output > .5, prediction 1; otherwise prediction 0 298 | * A special case of softmax function, which deals with multi-class problems 299 | 300 | [back to top](#data-science-question-answer) 301 | 302 | 303 | ### Naive Bayes 304 | 305 | * Naive Bayes (NB) is a supervised learning algorithm based on applying [Bayes' theorem](https://en.wikipedia.org/wiki/Bayes%27_theorem) 306 | * It is called naive because it builds the naive assumption that each feature 307 | are independent of each other 308 | * NB can make different assumptions (i.e., data distributions, such as Gaussian, 309 | Multinomial, Bernoulli) 310 | * Despite the over-simplified assumptions, NB classifier works quite well in real-world 311 | applications, especially for text classification (e.g., spam filtering) 312 | * NB can be extremely fast compared to more sophisticated methods 313 | 314 | [back to top](#data-science-question-answer) 315 | 316 | ### KNN 317 | 318 | * Given a data point, we compute the K nearest data points (neighbors) using certain 319 | distance metric (e.g., Euclidean metric). For classification, we take the majority label 320 | of neighbors; for regression, we take the mean of the label values. 321 | * Note for KNN we don't train a model; we simply compute during 322 | inference time. This can be computationally expensive since each of the test example 323 | need to be compared with every training example to see how close they are. 324 | * There are approximation methods can have faster inference time by 325 | partitioning the training data into regions (e.g., [annoy](https://github.com/spotify/annoy)) 326 | * When K equals 1 or other small number the model is prone to overfitting (high variance), while 327 | when K equals number of data points or other large number the model is prone to underfitting (high bias) 328 | 329 | ![KNN](assets/knn.png) 330 | 331 | [back to top](#data-science-question-answer) 332 | 333 | 334 | ### SVM 335 | 336 | * Can perform linear, nonlinear, or outlier detection (unsupervised) 337 | * Large margin classifier: using SVM we not only have a decision boundary, but want the boundary 338 | to be as far from the closest training point as possible 339 | * The closest training examples are called support vectors, since they are the points 340 | based on which the decision boundary is drawn 341 | * SVMs are sensitive to feature scaling 342 | 343 | ![svm](assets/svm.png) 344 | 345 | [back to top](#data-science-question-answer) 346 | 347 | 348 | ### Decision tree 349 | 350 | * Non-parametric, supervised learning algorithms 351 | * Given the training data, a decision tree algorithm divides the feature space into 352 | regions. For inference, we first see which 353 | region does the test data point fall in, and take the mean label values (regression) 354 | or the majority label value (classification). 355 | * **Construction**: top-down, chooses a variable to split the data such that the 356 | target variables within each region are as homogeneous as possible. Two common 357 | metrics: gini impurity or information gain, won't matter much in practice. 358 | * Advantage: simply to understand & interpret, mirrors human decision making 359 | * Disadvantage: 360 | - can overfit easily (and generalize poorly) if we don't limit the depth of the tree 361 | - can be non-robust: A small change in the training data can lead to a totally different tree 362 | - instability: sensitive to training set rotation due to its orthogonal decision boundaries 363 | 364 | ![decision tree](assets/tree.gif) 365 | 366 | [back to top](#data-science-question-answer) 367 | 368 | 369 | ### Random forest 370 | 371 | Random forest improves bagging further by adding some randomness. In random forest, 372 | only a subset of features are selected at random to construct a tree (while often not subsample instances). 373 | The benefit is that random forest **decorrelates** the trees. 374 | 375 | For example, suppose we have a dataset. There is one very predicative feature, and a couple 376 | of moderately predicative features. In bagging trees, most of the trees 377 | will use this very predicative feature in the top split, and therefore making most of the trees 378 | look similar, **and highly correlated**. Averaging many highly correlated results won't lead 379 | to a large reduction in variance compared with uncorrelated results. 380 | In random forest for each split we only consider a subset of the features and therefore 381 | reduce the variance even further by introducing more uncorrelated trees. 382 | 383 | I wrote a [notebook](assets/bag-rf-var.ipynb) to illustrate this point. 384 | 385 | In practice, tuning random forest entails having a large number of trees (the more the better, but 386 | always consider computation constraint). Also, `min_samples_leaf` (The minimum number of 387 | samples at the leaf node)to control the tree size and overfitting. Always cross validate the parameters. 388 | 389 | [back to top](#data-science-question-answer) 390 | 391 | 392 | ### Boosting Tree 393 | 394 | **How it works** 395 | 396 | Boosting builds on weak learners, and in an iterative fashion. In each iteration, 397 | a new learner is added, while all existing learners are kept unchanged. All learners 398 | are weighted based on their performance (e.g., accuracy), and after a weak learner 399 | is added, the data are re-weighted: examples that are misclassified gain more weights, 400 | while examples that are correctly classified lose weights. Thus, future weak learners 401 | focus more on examples that previous weak learners misclassified. 402 | 403 | **Difference from random forest (RF)** 404 | 405 | * RF grows trees **in parallel**, while Boosting is sequential 406 | * RF reduces variance, while Boosting reduces errors by reducing bias 407 | 408 | **XGBoost (Extreme Gradient Boosting)** 409 | 410 | > XGBoost uses a more regularized model formalization to control overfitting, which gives it better performance 411 | 412 | [back to top](#data-science-question-answer) 413 | 414 | 415 | ### MLP 416 | 417 | A feedforward neural network of multiple layers. In each layer we 418 | can have multiple neurons, and each of the neuron in the next layer is a linear/nonlinear 419 | combination of the all the neurons in the previous layer. In order to train the network 420 | we back propagate the errors layer by layer. In theory MLP can approximate any functions. 421 | 422 | ![mlp](assets/mlp.jpg) 423 | 424 | [back to top](#data-science-question-answer) 425 | 426 | 427 | ### CNN 428 | 429 | The Conv layer is the building block of a Convolutional Network. The Conv layer consists 430 | of a set of learnable filters (such as 5 * 5 * 3, width * height * depth). During the forward 431 | pass, we slide (or more precisely, convolve) the filter across the input and compute the dot 432 | product. Learning again happens when the network back propagate the error layer by layer. 433 | 434 | Initial layers capture low-level features such as angle and edges, while later 435 | layers learn a combination of the low-level features and in the previous layers 436 | and can therefore represent higher level feature, such as shape and object parts. 437 | 438 | ![CNN](assets/cnn.jpg) 439 | 440 | [back to top](#data-science-question-answer) 441 | 442 | 443 | ### RNN and LSTM 444 | 445 | RNN is another paradigm of neural network where we have difference layers of cells, 446 | and each cell not only takes as input the cell from the previous layer, but also the previous 447 | cell within the same layer. This gives RNN the power to model sequence. 448 | 449 | ![RNN](assets/rnn.jpeg) 450 | 451 | This seems great, but in practice RNN barely works due to exploding/vanishing gradient, which 452 | is cause by a series of multiplication of the same matrix. To solve this, we can use 453 | a variation of RNN, called long short-term memory (LSTM), which is capable of learning 454 | long-term dependencies. 455 | 456 | The math behind LSTM can be pretty complicated, but intuitively LSTM introduce 457 | 458 | * input gate 459 | * output gate 460 | * forget gate 461 | * memory cell (internal state) 462 | 463 | LSTM resembles human memory: it forgets old stuff (old internal state * forget gate) 464 | and learns from new input (input node * input gate) 465 | 466 | ![lstm](assets/lstm.png) 467 | 468 | [back to top](#data-science-question-answer) 469 | 470 | 471 | ## Unsupervised Learning 472 | 473 | * [Clustering](#clustering) 474 | * [Principal Component Analysis](#principal-component-analysis) 475 | * [Autoencoder](#autoencoder) 476 | * [Generative Adversarial Network](#generative-adversarial-network) 477 | 478 | ### Clustering 479 | 480 | * Clustering is a unsupervised learning algorithm that groups data in such 481 | a way that data points in the same group are more similar to each other than to 482 | those from other groups 483 | * Similarity is usually defined using a distance measure (e.g, Euclidean, Cosine, Jaccard, etc.) 484 | * The goal is usually to discover the underlying structure within the data (usually high dimensional) 485 | * The most common clustering algorithm is K-means, where we define K (the number of clusters) 486 | and the algorithm iteratively finds the cluster each data point belongs to 487 | 488 | [scikit-learn](http://scikit-learn.org/stable/modules/clustering.html) implements many clustering algorithms. Below is a comparison adopted from its page. 489 | 490 | ![clustering](assets/clustering.png) 491 | 492 | [back to top](#data-science-question-answer) 493 | 494 | 495 | ### Principal Component Analysis 496 | 497 | * Principal Component Analysis (PCA) is a dimension reduction technique that projects 498 | the data into a lower dimensional space 499 | * PCA uses Singular Value Decomposition (SVD), which is a matrix factorization method 500 | that decomposes a matrix into three smaller matrices (more details of SVD [here](https://en.wikipedia.org/wiki/Singular-value_decomposition)) 501 | * PCA finds top N principal components, which are dimensions along which the data vary 502 | (spread out) the most. Intuitively, the more spread out the data along a specific dimension, 503 | the more information is contained, thus the more important this dimension is for the 504 | pattern recognition of the dataset 505 | * PCA can be used as pre-step for data visualization: reducing high dimensional data 506 | into 2D or 3D. An alternative dimensionality reduction technique is [t-SNE](https://lvdmaaten.github.io/tsne/) 507 | 508 | Here is a visual explanation of PCA 509 | 510 | ![pca](assets/pca.gif) 511 | 512 | [back to top](#data-science-question-answer) 513 | 514 | 515 | 516 | ### Autoencoder 517 | 518 | * The aim of an autoencoder is to learn a representation (encoding) for a set of data 519 | * An autoencoder always consists of two parts, the encoder and the decoder. The encoder would find a lower dimension representation (latent variable) of the original input, while the decoder is used to reconstruct from the lower-dimension vector such that the distance between the original and reconstruction is minimized 520 | * Can be used for data denoising and dimensionality reduction 521 | 522 | ![](assets/autoencoder.png) 523 | 524 | 525 | ### Generative Adversarial Network 526 | 527 | * Generative Adversarial Network (GAN) is an unsupervised learning algorithm that also has supervised flavor: using supervised loss as part of training 528 | * GAN typically has two major components: the **generator** and the **discriminator**. The generator tries to generate "fake" data (e.g, images or sentences) that fool the discriminator into thinking that they're real, while the discriminator tries to distinguish between real and generated data. It's a fight between the two players thus the name adversarial, and this fight drives both sides to improve until "fake" data are indistinguishable from the real data 529 | * How does it work, intuitively 530 | - The generator takes a **random** input and generates a sample of data 531 | - The discriminator then either takes the generated sample or a real data sample, and tries to predict whether the input is real or generated (i.e., solving a binary classification problem) 532 | - Given a truth score range of [0, 1], ideally the we'd love to see discriminator give low score to generated data but high score to real data. On the other hand, we also wanna see the generated data fool the discriminator. And this paradox drives both sides become stronger 533 | * How does it work, from a training perspective 534 | - Without training, the generator creates 'garbage' data only while the discriminator is too 'innocent' to tell the difference between fake and real data 535 | - Usually we would first train the discriminator with both real (label 1) and generated data (label 0) for N epochs so it would have a good judgement of what is real vs. fake 536 | - Then we **set the discriminator non-trainable**, and train the generator. Even though the discriminator is non-trainable at this stage, we still use it as a classifier so that **error signals can be back propagated and therefore enable the generator to learn** 537 | - The above two steps would continue in turn until both sides cannot be improved further 538 | * Here are some [tips and tricks to make GANs work](https://github.com/soumith/ganhacks) 539 | * One Caveat is that the **adversarial part is only auxiliary: The end goal of using GAN is to generate data that even experts cannot tell if it's real or fake** 540 | 541 | ![gan](assets/gan.jpg) 542 | 543 | [back to top](#data-science-question-answer) 544 | 545 | 546 | ## Reinforcement Learning 547 | 548 | [TODO] 549 | 550 | ## Natural Language Processing 551 | 552 | * [Tokenization](#tokenization) 553 | * [Stemming and lemmatization](#stemming-and-lemmatization) 554 | * [N-gram](#ngram) 555 | * [Bag of Words](#bag-of-words) 556 | * [word2vec](#word2vec) 557 | 558 | 559 | ### Tokenization 560 | 561 | * Tokenization is the process of converting a sequence of characters into a sequence of tokens 562 | * Consider this example: `The quick brown fox jumped over the lazy dog`. In this case each word (separated by space) would be a token 563 | * Sometimes tokenization doesn't have a definitive answer. For instance, `O'Neill` can be tokenized to `o` and `neill`, `oneill`, or `o'neill`. 564 | * In some cases tokenization requires language-specific knowledge. For example, it doesn't make sense to tokenize `aren't` into `aren` and `t` 565 | * For a more detailed treatment of tokenization please check [here](https://nlp.stanford.edu/IR-book/html/htmledition/tokenization-1.html) 566 | 567 | [back to top](#data-science-question-answer) 568 | 569 | ### Stemming and lemmatization 570 | 571 | * The goal of both stemming and lemmatization is to reduce inflectional forms and sometimes derivationally related forms of a word to a common base form 572 | * Stemming usually refers to a crude heuristic process that chops off the ends of words 573 | * Lemmatization usually refers to doing things properly with the use of a vocabulary and morphological analysis of words 574 | * If confronted with the token `saw`, stemming might return just `s`, whereas lemmatization would attempt to return either `see` or `saw` depending on whether the use of the token was as a verb or a noun 575 | * For a more detailed treatment please check [here](https://nlp.stanford.edu/IR-book/html/htmledition/stemming-and-lemmatization-1.html) 576 | 577 | [back to top](#data-science-question-answer) 578 | 579 | 580 | ### N gram 581 | 582 | * n-gram is a contiguous sequence of n items from a given sample of text or speech 583 | * An n-gram of size 1 is referred to as a "unigram"; size 2 is a "bigram" size 3 is a "trigram". Larger sizes are sometimes referred to by the value of n in modern language, e.g., "four-gram", "five-gram", and so on. 584 | * Consider this example: `The quick brown fox jumped over the lazy dog.` 585 | - bigram would be `the quick`, `quick brown`, `brown fox`, ..., i.e, every two consecutive words (or tokens) 586 | - trigram would be `the quick brown`, `quick brown fox`, `brown fox jumped`, ..., i.e., every three consecutive words (or tokens) 587 | * ngram model models sequence, i.e., predicts next word (n) given previous words (1, 2, 3, ..., n-1) 588 | * multiple gram (bigram and above) captures **context** 589 | * to choose n in n-gram requires experiments and making tradeoff between stability of the estimate against its appropriateness. Rule of thumb: trigram is a common choice with large training corpora (millions of words), whereas a bigram is often used with smaller ones. 590 | * n-gram can be used as features for machine learning and downstream NLP tasks 591 | 592 | [back to top](#data-science-question-answer) 593 | 594 | 595 | ### Bag of Words 596 | 597 | * Why? Machine learning models cannot work with raw text directly; rather, they take numerical values as input. 598 | * Bag of words (BoW) builds a **vocabulary** of all the unique words in our dataset, and associate a unique index to each word in the vocabulary 599 | * It is called a "bag" of words, because it is a representation that completely ignores the order of words 600 | * Consider this example of two sentences: (1) `John likes to watch movies, especially horor movies.`, (2) `Mary likes movies too.` We would first build a vocabulary of unique words (all lower cases and ignoring punctuations): `[john, likes, to, watch, movies, especially, horor, mary, too]`. Then we can represent each sentence using term frequency, i.e, the number of times a term appears. So (1) would be `[1, 1, 1, 1, 2, 1, 1, 0, 0]`, and (2) would be `[0, 1, 0, 0, 1, 0, 0, 1, 1]` 601 | * A common alternative to the use of dictionaries is the [hashing trick](https://en.wikipedia.org/wiki/Feature_hashing), where words are directly mapped to indices with a hashing function 602 | * As the vocabulary grows bigger (tens of thousand), the vector to represent short sentences / document becomes sparse (almost all zeros) 603 | 604 | [back to top](#data-science-question-answer) 605 | 606 | ### word2vec 607 | 608 | * Shallow, two-layer neural networks that are trained to construct linguistic context of words 609 | * Takes as input a large corpus, and produce a vector space, typically of several hundred 610 | dimension, and each word in the corpus is assigned a vector in the space 611 | * The key idea is **context**: words that occur often in the same context should have same/opposite 612 | meanings. 613 | * Two flavors 614 | - continuous bag of words (CBOW): the model predicts the current word given a window of surrounding context words 615 | - skip gram: predicts the surrounding context words using the current word 616 | 617 | ![](assets/w2v.png) 618 | 619 | [back to top](#data-science-question-answer) 620 | 621 | 622 | ## System 623 | 624 | * [Cron job](#cron-job) 625 | * [Linux](#linux) 626 | 627 | ### Cron job 628 | 629 | The software utility **cron** is a **time-based job scheduler** in Unix-like computer operating systems. People who set up and maintain software environments use cron to schedule jobs (commands or shell scripts) to run periodically at fixed times, dates, or intervals. It typically automates system maintenance or administration -- though its general-purpose nature makes it useful for things like downloading files from the Internet and downloading email at regular intervals. 630 | 631 | ![](assets/cron-job.PNG) 632 | 633 | Tools: 634 | * [Apache Airflow](https://airflow.apache.org/) 635 | 636 | [back to top](#data-science-question-answer) 637 | 638 | 639 | ### Linux 640 | 641 | Using **Ubuntu** as an example. 642 | 643 | * Become root: `sudo su` 644 | * Install package: `sudo apt-get install ` 645 | 646 | [back to top](#data-science-question-answer) 647 | 648 | 649 | Confession: some images are adopted from the internet without proper credit. If you are the author and this would be an issue for you, please let me know. 650 | -------------------------------------------------------------------------------- /assets/autoencoder.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jayinai/data-science-question-answer/eba9dc529f58a67afc4bce16ce8c6523a03555aa/assets/autoencoder.png -------------------------------------------------------------------------------- /assets/bag-rf-var.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "code", 5 | "execution_count": 1, 6 | "metadata": { 7 | "collapsed": false 8 | }, 9 | "outputs": [], 10 | "source": [ 11 | "import numpy as np\n", 12 | "from sklearn.datasets import load_boston\n", 13 | "from sklearn.ensemble import BaggingRegressor, RandomForestRegressor\n", 14 | "from sklearn.model_selection import train_test_split\n", 15 | "import matplotlib.pyplot as plt\n", 16 | "%matplotlib inline" 17 | ] 18 | }, 19 | { 20 | "cell_type": "code", 21 | "execution_count": 2, 22 | "metadata": { 23 | "collapsed": true 24 | }, 25 | "outputs": [], 26 | "source": [ 27 | "boston = load_boston()\n", 28 | "X, y = boston.data, boston.target\n", 29 | "X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=2017)" 30 | ] 31 | }, 32 | { 33 | "cell_type": "code", 34 | "execution_count": 3, 35 | "metadata": { 36 | "collapsed": false 37 | }, 38 | "outputs": [], 39 | "source": [ 40 | "n_tree = 50\n", 41 | "\n", 42 | "bag = BaggingRegressor(n_estimators=n_tree, n_jobs=-1)\n", 43 | "rf = RandomForestRegressor(n_estimators=n_tree, n_jobs=-1)\n", 44 | "\n", 45 | "bag.fit(X_train, y_train)\n", 46 | "rf.fit(X_train, y_train)\n", 47 | "\n", 48 | "bag_pred = np.array([bag.estimators_[tree].predict(X_test) for tree in range(n_tree)])\n", 49 | "rf_pred = np.array([rf.estimators_[tree].predict(X_test) for tree in range(n_tree)])\n", 50 | "\n", 51 | "bag_var = np.var(bag_pred, axis=0)\n", 52 | "rf_var = np.var(rf_pred, axis=0)" 53 | ] 54 | }, 55 | { 56 | "cell_type": "code", 57 | "execution_count": 4, 58 | "metadata": { 59 | "collapsed": false, 60 | "scrolled": false 61 | }, 62 | "outputs": [ 63 | { 64 | "data": { 65 | "image/png": "iVBORw0KGgoAAAANSUhEUgAAAq0AAAGyCAYAAADONP14AAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAAPYQAAD2EBqD+naQAAIABJREFUeJzs3XuYXWV99//PvdbaM5MDmcnBDOGYBBRQUEmoFRUKwlXw\nUNEflRilKlxttaDYPNWf9eoBrKc+WMELH9HyU5R6CKGi9cGKsSIqHtA2UYsVRA4hQpIJOcxkkmFm\n9lrr/v2x9lqzjzN7T2bWzuz7/bquXEn2XrNnZbIP3/3dn/t7G2utAAAAgCOZ1+4TAAAAAKZC0QoA\nAIAjHkUrAAAAjngUrQAAADjiUbQCAADgiEfRCgAAgCMeRSsAAACOeBStAAAAOOJRtAIAAOCIR9EK\nAACAI15LRasx5n3GmJ8ZYw4YYwaMMV8zxjyn6pjPGWPiql/frDqm2xjzSWPMHmPMsDHmK8aY5TPx\nDwIAAEDnabXTeo6kT0j6fUkXSipI+rYxZl7VcXdL6pd0dOnX+qrrPy7pVZIulXSupGMk3dniuQAA\nAMARxlo7/S82Zpmk3ZLOtdb+sHTZ5yT1Wmv/nwZfs0jS05LeYK39WumyUyQ9KOnF1tqfTfuEAAAA\n0JEON9PaJ8lK2ld1+Xml+MBDxpibjTFLyq5bKymQdE96gbX2N5K2Szr7MM8HAAAAHSiY7hcaY4yS\nj/l/aK39ddlVdyv5qP9xSSdJ+oikbxpjzrZJW/doSePW2gNVNzlQug4AAACoMO2iVdLNkp4r6aXl\nF1pr7yj76/8YYx6Q9Kik8yTdO51vZIxZKukiSdskjU7nNgAAADCreiStlLTZWrt3pm98WkWrMeb/\nSHqlpHOstTsnO9Za+7gxZo+kk5UUrbskdRljFlV1W/tL19VzkaQvTedcAQAAkKs3SfryTN9oy0Vr\nqWC9RNIfWGu3N3H8cZKWSkqL2y2SQkkXSCpfiHWCpJ80uJltkvTFL35Rp512Wqun7LQNGzboxhtv\nbPdpzCn8zKaHn1vr+JlNDz+31vEzmx5+bq158MEHdfnll0ulum2mtVS0GmNuVjK+6jWSDhlj+ktX\nDVlrR40xCyRdqyTTuktJd/V/S3pY0mZJstYeMMZ8VtINxpj9koYl3STpR5NMDhiVpNNOO01r1qxp\n5ZSd19vby8+sRfzMpoefW+v4mU0PP7fW8TObHn5u0zYrUc5WO61vVzIt4HtVl18h6V8kRZKeL+nN\nSiYL7FBSrP69tbZYdvyG0rFfkdQt6VuSrm7xXAAAAOCIlopWa+2kI7KstaOSLm7idsYkvbP0CwAA\nAJjU4c5pBQAAAGYdRWuHW7++egddTIWf2fTwc2sdP7Pp4efWOn5m08PP7chyWNu45sUYs0bSli1b\nthCIBgCgzbZv3649e/a0+zTQBsuWLdMJJ5xQ97qtW7dq7dq1krTWWrt1pr/34WwuAAAAHLN9+3ad\ndtppGhkZafepoA3mz5+vBx98sGHhOpsoWgEAQNP27NmjkZERZqc7KJ3DumfPHopWAAAwNzA7HXlj\nIRYAAACOeBStAAAAOOJRtAIAAOCIR9EKAACAIx5FKwAAQMl1110nz/O0b9++dp8KqlC0AgAAlBhj\nZIxp92mgDopWAAAAHPEoWgEAACBrrcbGxtp9Gg1RtKKusXBMe0f2tvs0AABoi6efflqXXXaZent7\ntWzZMv3lX/5lRUH3uc99ThdccIH6+/vV09Oj5z3vefr0pz9dczvWWl133XU69thjtWDBAl1wwQV6\n8MEHtXLlSl155ZVNn88ZZ5yhCy64oO7tH3vssbrsssuyy/7pn/5JL33pS7Vs2TLNnz9fZ511lu68\n886ar/U8T9dcc42+/OUv6/TTT1dPT482b97c9DnljR2xUNdNP71JX3rgS/rF23/R7lMBACBX1lpd\ndtllWrVqlf7xH/9R999/v2666SYNDg7q85//vCTp05/+tE4//XRdcsklCoJAd911l6666ipZa/UX\nf/EX2W399V//tT760Y/qkksu0R/+4R/ql7/8pS666KKWO5rr1q3T+9//fu3evVvLly/PLr/vvvu0\nc+dOrV+/Prvspptu0iWXXKLLL79c4+Pjuv3223XZZZfpG9/4hl7xildU3O4999yjO+64Q+94xzu0\nbNkyrVy5svUfWF6stUf8L0lrJNktW7ZY5OO9//Fee9wNx7X7NAAAR5gtW7bYTn5Nvu6666wxxr7u\nda+ruPzqq6+2nufZBx54wFpr7ejoaM3XXnzxxfbkk0/O/j4wMGALhYK99NJLK457//vfb40x9oor\nrmj6vB5++GFrjLGf/OQnKy6/6qqr7KJFiyrOp/rcwjC0Z5xxhr3wwgsrLjfG2CAI7EMPPdTUOUz1\nf59eL2mNnYV6kE4r6oriSLGN230aAIA5bmREeuih2f0ep54qzZ8/c7dnjNHVV19dcdk73/lO3Xzz\nzfrmN7+p008/Xd3d3dl1Bw4cULFY1Lnnnqtvf/vbGh4e1lFHHaV77rlHURRVdF7T27ruuutaOqdn\nP/vZeuELX6hNmzbpqquukiTFcaw777xTr3nNayrOp/zPg4ODCsNQ55xzjm6//faa2z3vvPN0yimn\ntHQu7ULRirpiGyuKo3afBgBgjnvoIWnt2tn9Hlu2SGvWzOxtnnzyyRV/P+mkk+R5nrZt2yZJ+tGP\nfqRrr71W999/v0ZGRrLjjDEaGhrSUUcdpSeeeKLubS1evFiLFy9u+ZzWrVunv/mbv9HOnTu1YsUK\n3Xvvvdq9e7fWrVtXcdw3vvENfehDH9IvfvGLihiC59UuZTqi4wBVKFpRV2QjRZaiFQBweE49NSkq\nZ/t7zLby2a2PPfaYLrzwQp122mm68cYbdfzxx6urq0v//u//ro9//OOK49n5pHLdunV63/vep3/9\n13/VNddcozvuuEN9fX266KKLsmPuu+8+XXLJJTrvvPP0qU99SitWrFChUNCtt96qjRs31tzmvHnz\nZuVcZwNFK+qK4ohOKwDgsM2fP/Nd0Dz89re/1Yknnpj9/ZFHHlEcx1q5cqXuuusujY+P66677tKx\nxx6bHXPPPfdU3Eb69Y888kjFbe3bt0/79+9v+ZxWrlypF73oRdq0aZOuvvpqfe1rX9PrXvc6FQqF\n7JivfvWrmjdvnjZv3qwgmCjzPvvZz7b8/Y40jLxCXXRaAQCustbqk5/8ZMVlN910k4wxesUrXiHf\n9yWpoqM6NDSUTRZIXXDBBfJ9X5/61KcqLv/EJz4x7XNbt26d7r//ft16663as2dPTTTA930ZYxSG\nYXbZtm3b9PWvf33a3/NIQacVdcU2ZiEWAMBZjz/+uC655BJdfPHF+vGPf6wvfelLuvzyy3XGGWeo\nu7tbhUJBr371q/W2t71Nw8PD+sxnPqP+/n7t2rUru43ly5frXe96l2644Ybstn75y1/q7rvv1rOe\n9axpbRd72WWX6d3vfrfe/e53a+nSpTWzW1/1qlfphhtu0EUXXaQ3vvGNGhgY0M0336xnP/vZ+u//\n/u/D/rm0E51W1EU8AOV+9ztpz552nwUA5MPzPG3atEnd3d163/vep7vvvlvXXHONPvOZz0iSnvOc\n5+jOO++U53l6z3veo1tuuUVvf/vbdc0119Tc1vXXX6+/+7u/03/913/pPe95jx555BFt3rxZcRyr\np6en5XM79thj9ZKXvEQHDx7UpZdemnV9U+eff75uvfVWDQwMaMOGDdq0aZOuv/56vfa1r625LWPM\ntArndjE2mYN6RDPGrJG0ZcuWLVozF4Mxc9CVX79SX3rgSxr72yN3Ozfk58ILpb4+6StfafeZAGi3\nrVu3au3ateI1efqGhoa0ePFifehDH9L73ve+dp9O06b6v0+vl7TWWrt1pr8/nVbUFVk6rZhw8KD0\n7W9LxWK7zwQA5pbR0dGay2688UYZY3Teeeflf0JzGJlW1EWmFeWiSBoeln7yE+ncc9t9NgAwd2za\ntEmf//zn9cpXvlILFy7Ufffdp9tvv10XX3yxzj77bEnSwMDApLcxb948LVq0KI/TPaJRtKKup3ZE\nskq2TZtLeRfMjqjUdN+8maIVAFrx/Oc/X4VCQR/96Ed14MAB9ff3a8OGDfrABz6QHbNixQoZY1Qv\nsmmM0Vve8hbdeuuteZ72EYmiFXXtHIgkP4kJBIa7ievSovVb35I+9KH2ngsAzCVnnnmmvv3tb096\nzHe+851Jrz/mmGNm8pTmLKoR1BWXZrRGcaTA427iujiWli6Vtm6Vdu+Wli9v9xkBQOd4+ctf3u5T\nmBNYiIW60qKVXCukpNOa7hI4RcMAAIBZQdGKumIlxSq7YkFKitYVK6Qzz0xyrQAA5I2iFXWVxwOA\nKJJ8P+m2bt6cxAUAAMgTRSvqyopWOq3QRNF68cXS009Lv/hFu88IAOAailbUFYtMKyakRevZZ0tH\nHZVMEQAAIE8UragrLVaJB0BK4gC+L3V1SS9/OblWAED+KFpRV9ppJR4AaaLTKiURgR//WDpwoL3n\nBABwC0Ur6sqKVjqtUFK0eqVni4suksJQ+u5323tOAJC3b33rWzrzzDM1b948+b6vA7x7zxVFK+qy\nzGlFmfJO66pVUn8/i7EAuGXfvn1at26d5s+fr5tvvllf+MIXtGDBgnafllPY6gh1pXNaQzqtUGXR\nKknd3Um3FQBc8Z//+Z86ePCgPvjBD+r8889v9+k4iU4r6rKleMB4SNGK2qLV95PLAMAFIyMjGhgY\nkCT19va2+WxqjYyMtPsUckHRirrSTGuRohWamB6QomgF0Kmuu+46eZ6nBx98UG984xu1ZMkSvexl\nL9Nb3/pWSdJZZ50lz/N05ZVXTnlbW7Zsked5+sIXvlBz3ebNm+V5nr75zW9KkrZv366rrrpKp556\nqubPn69ly5bpsssu0xNPPFHxdbfddps8z9MPfvADXXXVVerv79fxxx9/+P/wOYB4AOqi04pydFoB\nuMIYI0l6/etfr+c85zn6yEc+ovHxcf3617/WLbfcog9+8INauXKlTjrppClva+3atVq9erXuuOMO\n/cmf/EnFdZs2bdKSJUt00UUXSUriB/fff7/Wr1+v4447Ttu2bdPNN9+s888/X7/+9a/V09NT8fVX\nXXWVli9frmuvvVaHDh2aoX/9kY2iFXWlndYwZCEWKqcHSEnRylauADrZmWeeWdEhve2223TLLbfo\n4osv1po1a5q+nXXr1uljH/uYhoaGsmhBsVjUv/3bv+mP//iP5Zc6Aq9+9at16aWXVnztH/3RH+nF\nL36x7rzzTr3pTW+quG7ZsmW65557siLbBRStqMuWFmIVaadBdFoBTN9IcUQP7XloVr/HqctO1fzC\n/Bm7PWOM3va2t83Iba1bt04f+chH9NWvflVXXHGFpCQaMDQ0pHXr1mXHdXd3Z38Ow1AHDhzQ6tWr\n1dfXp61bt1YUrcYY/dmf/ZlTBatE0YoG0ngARSusTX5RtAKYjof2PKS1t6yd1e+x5c+3aM2K5ruf\nzVi1atWM3M7zn/98nXrqqdq0aVNWtG7atEnLli2rmEIwOjqqD3/4w/r85z+vp556StZaSUmBOjQ0\nVHO7K1eunJHzm0soWlEXC7GQSotTilYA03HqslO15c+3zPr3mGnz5s2bsdtat26dPvzhD2vfvn1a\nuHCh7rrrLr3pTW+SV5a7esc73qHbbrtNGzZs0Itf/GL19vbKGKN169YprpPHmsnzmysoWlFX2mkN\nI4KLrkufKylaAUzH/ML8Ge+CzjXr1q3T+9//ft15551avny5hoeH9YY3vKHimDvvvFNvfetbdf31\n12eXjY2NaXBwMO/TPWJRtKIua0qZVjqtzqPTCgCH59RTT9UZZ5yh22+/Xf39/VqxYoXOOeecimN8\n36/pqN50002KeLLNULSiLjKtSKV3gerpAdw1ALgmzZlOx7p16/T3f//36unp0Z/+6Z/WXP/qV79a\nX/jCF7Ro0SI997nP1U9+8hPdc889WrZs2Yyex1zG5gKoi6IVKTqtAJA4nNX669atk7VWo6OjFVMD\nUjfddJPe/OY368tf/rLe/e53a2BgQN/5zne0cOHCmu/r2tSAFJ1W1GUNmVYkKFoBuOTaa6/Vtdde\n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\n", 66 | "text/plain": [ 67 | "" 68 | ] 69 | }, 70 | "metadata": {}, 71 | "output_type": "display_data" 72 | } 73 | ], 74 | "source": [ 75 | "plt.figure(figsize=(8, 5))\n", 76 | "\n", 77 | "plt.plot(range(1, len(bag_var)+1), bag_var)\n", 78 | "plt.plot(range(1, len(rf_var)+1), rf_var)\n", 79 | "plt.legend(['bag_var', 'rf_var'])\n", 80 | "plt.show()" 81 | ] 82 | }, 83 | { 84 | "cell_type": "code", 85 | "execution_count": 5, 86 | "metadata": { 87 | "collapsed": false 88 | }, 89 | "outputs": [ 90 | { 91 | "name": "stdout", 92 | "output_type": "stream", 93 | "text": [ 94 | "bagging variance average: 15.121\n", 95 | "random forest variance average: 14.311\n" 96 | ] 97 | } 98 | ], 99 | "source": [ 100 | "print 'bagging variance average:', round(np.mean(bag_var), 3)\n", 101 | "print 'random forest variance average:', round(np.mean(rf_var), 3)" 102 | ] 103 | } 104 | ], 105 | "metadata": { 106 | "anaconda-cloud": {}, 107 | "kernelspec": { 108 | "display_name": "Python [default]", 109 | "language": "python", 110 | "name": "python2" 111 | }, 112 | "language_info": { 113 | "codemirror_mode": { 114 | "name": "ipython", 115 | "version": 2.0 116 | }, 117 | "file_extension": ".py", 118 | "mimetype": "text/x-python", 119 | "name": "python", 120 | "nbconvert_exporter": "python", 121 | "pygments_lexer": "ipython2", 122 | "version": "2.7.9" 123 | } 124 | }, 125 | "nbformat": 4, 126 | "nbformat_minor": 0 127 | } -------------------------------------------------------------------------------- /assets/bagging.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jayinai/data-science-question-answer/eba9dc529f58a67afc4bce16ce8c6523a03555aa/assets/bagging.png -------------------------------------------------------------------------------- /assets/clustering.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jayinai/data-science-question-answer/eba9dc529f58a67afc4bce16ce8c6523a03555aa/assets/clustering.png -------------------------------------------------------------------------------- /assets/cnn.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jayinai/data-science-question-answer/eba9dc529f58a67afc4bce16ce8c6523a03555aa/assets/cnn.jpg -------------------------------------------------------------------------------- /assets/collaborative_filtering.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jayinai/data-science-question-answer/eba9dc529f58a67afc4bce16ce8c6523a03555aa/assets/collaborative_filtering.gif -------------------------------------------------------------------------------- /assets/cron-job.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jayinai/data-science-question-answer/eba9dc529f58a67afc4bce16ce8c6523a03555aa/assets/cron-job.PNG -------------------------------------------------------------------------------- /assets/cv.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jayinai/data-science-question-answer/eba9dc529f58a67afc4bce16ce8c6523a03555aa/assets/cv.png -------------------------------------------------------------------------------- /assets/gan.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jayinai/data-science-question-answer/eba9dc529f58a67afc4bce16ce8c6523a03555aa/assets/gan.jpg -------------------------------------------------------------------------------- /assets/knn.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jayinai/data-science-question-answer/eba9dc529f58a67afc4bce16ce8c6523a03555aa/assets/knn.png -------------------------------------------------------------------------------- /assets/l1l2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jayinai/data-science-question-answer/eba9dc529f58a67afc4bce16ce8c6523a03555aa/assets/l1l2.png -------------------------------------------------------------------------------- /assets/lr.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jayinai/data-science-question-answer/eba9dc529f58a67afc4bce16ce8c6523a03555aa/assets/lr.png -------------------------------------------------------------------------------- /assets/lstm.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jayinai/data-science-question-answer/eba9dc529f58a67afc4bce16ce8c6523a03555aa/assets/lstm.png -------------------------------------------------------------------------------- /assets/mlp.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jayinai/data-science-question-answer/eba9dc529f58a67afc4bce16ce8c6523a03555aa/assets/mlp.jpg -------------------------------------------------------------------------------- /assets/pca.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jayinai/data-science-question-answer/eba9dc529f58a67afc4bce16ce8c6523a03555aa/assets/pca.gif -------------------------------------------------------------------------------- /assets/rnn.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jayinai/data-science-question-answer/eba9dc529f58a67afc4bce16ce8c6523a03555aa/assets/rnn.jpeg -------------------------------------------------------------------------------- /assets/sql-join.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jayinai/data-science-question-answer/eba9dc529f58a67afc4bce16ce8c6523a03555aa/assets/sql-join.PNG -------------------------------------------------------------------------------- /assets/stacking.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jayinai/data-science-question-answer/eba9dc529f58a67afc4bce16ce8c6523a03555aa/assets/stacking.jpg -------------------------------------------------------------------------------- /assets/svm.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jayinai/data-science-question-answer/eba9dc529f58a67afc4bce16ce8c6523a03555aa/assets/svm.png -------------------------------------------------------------------------------- /assets/tree.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jayinai/data-science-question-answer/eba9dc529f58a67afc4bce16ce8c6523a03555aa/assets/tree.gif -------------------------------------------------------------------------------- /assets/w2v.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jayinai/data-science-question-answer/eba9dc529f58a67afc4bce16ce8c6523a03555aa/assets/w2v.png -------------------------------------------------------------------------------- /assets/workflow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jayinai/data-science-question-answer/eba9dc529f58a67afc4bce16ce8c6523a03555aa/assets/workflow.png --------------------------------------------------------------------------------