From f651016ed9f63553c1f3635b8e0eedd54aabdcab Mon Sep 17 00:00:00 2001 From: David Lee Date: Thu, 26 May 2022 23:15:32 +0800 Subject: [PATCH] Commit all unstaged code and note from my old Macbook --- Algorithm/CRF/CRF.md | 44 ++++++- Algorithm/EM/EM_Iris/EM_Iris_FromScratch.py | 0 .../HMM/HMM_Text_Segmentation/HMMLearn.py | 2 + .../HMM_Text_Segmentation/HMM_FromScratch.py | 8 ++ .../LogisticRegression/LogisticRegression.md | 8 +- Algorithm/MEM/MEM.md | 85 ++++++++++++++ Algorithm/NaiveBayes/NaiveBayes.md | 35 +++++- Algorithm/PCA/PCA.md | 30 ++--- Algorithm/SVM/SVM.md | 46 +++++--- Algorithm/SVM/SVMDerivation.md | 19 +-- .../VSM_Document_Similarity_FromScratch.py | 89 ++++++++++++++ Notes/FeatureEngineering.md | 3 + Notes/GraphicalModel.md | 38 ++++++ Notes/MachineLearningConcepts.md | 111 +++++++++++++----- Notes/MachineLearningExplainability.md | 1 + Notes/Math/Calculus/JacobiansDerivation.md | 11 ++ Notes/Math/Derivative/NYU_ML_HW1.md | 30 +++++ Notes/Math/Derivative/homework.pdf | Bin 0 -> 115963 bytes Notes/Math/LinearAlgebra/Basis.md | 44 +++++++ Notes/Math/Probability/ProbabilityBasics.md | 0 .../Topic/DistanceSimilarityMeasurement.md | 65 ++++++++++ Notes/Math/temp.txt | 38 ++++++ README.md | 16 ++- reminder.txt | 16 +++ 24 files changed, 661 insertions(+), 78 deletions(-) create mode 100644 Algorithm/EM/EM_Iris/EM_Iris_FromScratch.py create mode 100644 Algorithm/HMM/HMM_Text_Segmentation/HMMLearn.py create mode 100644 Algorithm/HMM/HMM_Text_Segmentation/HMM_FromScratch.py create mode 100644 Algorithm/MEM/MEM.md create mode 100644 Algorithm/VSM/VSM_Document_Similarity/VSM_Document_Similarity_FromScratch.py create mode 100644 Notes/GraphicalModel.md create mode 100644 Notes/MachineLearningExplainability.md create mode 100644 Notes/Math/Calculus/JacobiansDerivation.md create mode 100644 Notes/Math/Derivative/NYU_ML_HW1.md create mode 100644 Notes/Math/Derivative/homework.pdf create mode 100644 Notes/Math/LinearAlgebra/Basis.md create mode 100644 Notes/Math/Probability/ProbabilityBasics.md create mode 100644 Notes/Math/Topic/DistanceSimilarityMeasurement.md create mode 100644 Notes/Math/temp.txt create mode 100644 reminder.txt diff --git a/Algorithm/CRF/CRF.md b/Algorithm/CRF/CRF.md index b9a38b0..447c3a7 100644 --- a/Algorithm/CRF/CRF.md +++ b/Algorithm/CRF/CRF.md @@ -1,7 +1,45 @@ -# Condiitonal Random Field +# Conditonal Random Field -## Probabilistic Undirected Graphical Model (aka. Markov Random Field) +> Can be considered to a extension of [MEM](../MEM/MEM.md) + +## Overview + +### Quick View + +| Category | Usage | Methematics | Application Field | +| ------------------- | -------------- | ----------- | ----------------- | +| Supervised Learning | Classification | Entropy | NLP | + +## Background - From MEM to CRF + +![](https://i.stack.imgur.com/khcnl.png) + +### Conditional Maximum Entropy Distribution + +## Concept + +### [Undirected Graph Model](../../Notes/GraphicalModel.md#Undirected-Graph-Model) + +## Viterbi Algorithm ## Links -[Wiki - Conditional random field](https://en.wikipedia.org/wiki/Conditional_random_field) +* [**An Introduction to Conditional Random Fields**](https://www.research.ed.ac.uk/portal/files/10482724/crftut_fnt.pdf) + +### Wikipedia + +* [Graphical model](https://en.wikipedia.org/wiki/Graphical_model) +* [Clique (graph theory)](https://en.wikipedia.org/wiki/Clique_(graph_theory)) +* [Markov random field](https://en.wikipedia.org/wiki/Markov_random_field) +* [Conditional random field](https://en.wikipedia.org/wiki/Conditional_random_field) + +### Tools + +* [kmkurn/pytorch-crf: (Linear-chain) Conditional random field in PyTorch.](https://github.com/kmkurn/pytorch-crf) + * [pytorch-crf — pytorch-crf 0.7.2 documentation](https://pytorch-crf.readthedocs.io/en/stable/) +* [CRF++](https://taku910.github.io/crfpp/) + * [github](https://github.com/taku910/crfpp) +* [TensorFlow CRF](https://www.tensorflow.org/api_docs/python/tf/contrib/crf) + * [github](https://github.com/tensorflow/tensorflow/tree/master/tensorflow/contrib/crf) +* [sklearn-crfsuite](https://sklearn-crfsuite.readthedocs.io/en/latest/) + * [github](https://github.com/TeamHG-Memex/sklearn-crfsuite/) diff --git a/Algorithm/EM/EM_Iris/EM_Iris_FromScratch.py b/Algorithm/EM/EM_Iris/EM_Iris_FromScratch.py new file mode 100644 index 0000000..e69de29 diff --git a/Algorithm/HMM/HMM_Text_Segmentation/HMMLearn.py b/Algorithm/HMM/HMM_Text_Segmentation/HMMLearn.py new file mode 100644 index 0000000..9fca1b5 --- /dev/null +++ b/Algorithm/HMM/HMM_Text_Segmentation/HMMLearn.py @@ -0,0 +1,2 @@ +from hmmlearn import hmm + diff --git a/Algorithm/HMM/HMM_Text_Segmentation/HMM_FromScratch.py b/Algorithm/HMM/HMM_Text_Segmentation/HMM_FromScratch.py new file mode 100644 index 0000000..d89f2dc --- /dev/null +++ b/Algorithm/HMM/HMM_Text_Segmentation/HMM_FromScratch.py @@ -0,0 +1,8 @@ +import numpy as np + +def log_normalize(vector): + return np.log(vector) - np.log(np.sum(vector)) + +def log_sum(vector): + pass + \ No newline at end of file diff --git a/Algorithm/LogisticRegression/LogisticRegression.md b/Algorithm/LogisticRegression/LogisticRegression.md index 1093b2e..d58f30a 100644 --- a/Algorithm/LogisticRegression/LogisticRegression.md +++ b/Algorithm/LogisticRegression/LogisticRegression.md @@ -38,7 +38,7 @@ For each piece of data in the dataset: ## Multiple Classes -### [Multinomial](../MEM/MEM.md) - Softmax Regression (SMR) +### Multinomial - Softmax Regression (SMR) > Softmax Regression (synonyms: Multinomial Logistic, Maximum Entropy Classifier, or just Multi-class Logistic Regression) is a generalization of logistic regression that we can use for multi-class classification (under the assumption that the classes are mutually exclusive) @@ -57,6 +57,10 @@ $$ ### Book +Dive into Deep Learning + +* [Ch3.4. Softmax Regression](http://d2l.ai/chapter_linear-networks/softmax-regression.html) + Machine Learning in Action * Ch5 Logistic Regression @@ -93,3 +97,5 @@ Multinomial (softmax) * [2 Ways to Implement Multinomial Logistic Regression in Python](http://dataaspirant.com/2017/05/15/implement-multinomial-logistic-regression-python/) - use scikit learn * [Machine Learning and Data Science: Multinomial (Multiclass) Logistic Regression](https://www.pugetsystems.com/labs/hpc/Machine-Learning-and-Data-Science-Multinomial-Multiclass-Logistic-Regression-1007/) +* [mlxtend - Softmax Regression](https://rasbt.github.io/mlxtend/user_guide/classifier/SoftmaxRegression/) + * [jupyter notebook](https://github.com/rasbt/python-machine-learning-book/blob/master/code/bonus/softmax-regression.ipynb) diff --git a/Algorithm/MEM/MEM.md b/Algorithm/MEM/MEM.md new file mode 100644 index 0000000..023fc41 --- /dev/null +++ b/Algorithm/MEM/MEM.md @@ -0,0 +1,85 @@ +# Maximum Entropy Model + +Maximum Entropy Classifier / [Multinomial Logistic Regression - i.e. Softmax](../LogisticRegression/LogisticRegression.md#Multinomial---Softmax-Regression-(SMR)), + +> Can be considered to a mother of other algorithms +> +> [Condiitonal Random Field](../CRF/CRF.md) + +## Brief Description + +### Quick View + +Category|Usage|Methematics|Application Field +--------|-----|-----------|----------------- +Supervised Learning|Classification|Entropy|Many + +## Concept + +### The MEM Model + +#### Background + +Consider a machine learning problem + +* $x$ = $(x_1, x_2, \dots, s_m)$ is input feature vector +* $y \in \{1, 2, \dots, k\}$ => a k classes classification problem + +Given k linear model for machine learning. Each has dimension of m. + +$$ +\phi = w_{i1}x_1 + w_{i2}x_2+\cdots + w_{im}x_m,~~~1\leq i \leq k +$$ + +Prediction "class" $\hat{y}$ is the maximum "score" for each linear model output. + +$$ +\hat{y} = \arg\max_{1\leq i \leq k} \phi_i(x) +$$ + +TBD + + + + + +### Training the Model + +* GIS Algorithm +* IIS Algorithm +* Gradient Descent +* [Quasi-Newton Method](https://en.wikipedia.org/wiki/Quasi-Newton_method) (擬牛頓法) - L-BFGS Algorithm + +#### GIS Algorithm + +> GIS stands for Generalized Iterative Scaling + +#### IIS Algorithm + +> IIS stands for Improved Iterative Scaling. Improved from [GIS](#GIS-Algorithm) + +### Solving Overfitting + +* Feature Select: throw out rare feature +* Feature Induction: pick useful feature (improves performance) +* Smoothing + +### Feature Selection + +### Feature Induction + +### Smoothing + +## Application + +> MEM is a classification model. It's not impossible to solve the sequential labeling problem, just not so suitable. +> For example of POS tagging, a classifier maybe not considered the global meaning information. + +### POS Tagging + +## Resources + +### Wikipedia + +* [Principle of maximum entropy - Maximum entropy models](https://en.wikipedia.org/wiki/Principle_of_maximum_entropy#Maximum_entropy_models) +* [Multinomial logistic regression (Maximum entropy classifier)](https://en.wikipedia.org/wiki/Maximum_entropy_classifier) diff --git a/Algorithm/NaiveBayes/NaiveBayes.md b/Algorithm/NaiveBayes/NaiveBayes.md index e3397b5..cd6d232 100644 --- a/Algorithm/NaiveBayes/NaiveBayes.md +++ b/Algorithm/NaiveBayes/NaiveBayes.md @@ -2,7 +2,9 @@ ## Brief Description -Naive bayes are a set of supervised learning algorithms based on applying Bayes’ theorem with the “naive” assumption of conditional independence between every pair of features given the value of the class variable. +Naive bayes are a set of supervised learning algorithms based on applying Bayes’ theorem with the “naive” assumption of *conditional independence* between every pair of features given the value of the class variable. + +> But in the real word, in our concept, most of the things are not conditional independence. e.g. context in NLP ### Quick View @@ -21,6 +23,10 @@ Supervised Learning|Classification|Bayes' Theorem| ## Concept +### Bayes Decision + +Posterior prob. = (Likelihood * Prior prob.) / Evidence + ### Bayes' Theorem $$ @@ -35,10 +41,30 @@ $$ ### Real-world conditions -* We predict label by multiplying them. But if any of these probability is 0, then we will get 0 when we multiply them. To lessen the impact of this, we'll initialize all of our occurence counts to 1, and initialize the denominators to 2. (for binary classifier) -* Another problem is **Underflow**: doing too many multiplications of small numbers. (In programming, multiply many small numbers will eventually rounds off to 0) +* We predict label by multiplying them. But if any of these [probability is 0](#Zero-Probability-=>-Smoothing), then we will get 0 when we multiply them. To lessen the impact of this, we'll initialize all of our occurence counts to 1, and initialize the denominators to 2. (for binary classifier) +* Another problem is **Underflow**: doing too many multiplications of small numbers. (In programming, multiply many small numbers will eventually rounds off to 0 which called **floating-point underflow**) * Solution 1: Take the natural logarithm of this product +#### Zero Probability => Smoothing + +> original: $P(w_k|c_j) = \displaystyle\frac{n_k}{n}$ + +m-estimation: $P(w_k|c_j) = \displaystyle\frac{n_k + mp}{n + m}$ + +> additional m "virtual samples" distributed according to p + +## Application + +### Document Classification/Categorization + +Smoothing using Laplace smoothing (for $mp = 1$ and $m$ = Vocabulary) + +$$ +P(w_k|c_j) = \frac{n_k + 1}{n + |\operatorname{Vocabulary}|} +$$ + +### Word Sense Disambiguation + ## TODO * Figure out why the log mode in predictOne function has lower accuracy when using + than using * as the origin mode. ([Line 66](NaiveBayes_Nursery/NaiveBayes_Nursery_sklearn.py)) @@ -55,5 +81,6 @@ $$ ## Wikipedia +* [Additive smoothing (Laplace smoothing)](https://en.wikipedia.org/wiki/Additive_smoothing) * [Bayesian Machine Learning](http://fastml.com/bayesian-machine-learning/) -* [Naive Bayes Classifier](https://en.wikipedia.org/wiki/Naive_Bayes_classifier) \ No newline at end of file +* [Naive Bayes Classifier](https://en.wikipedia.org/wiki/Naive_Bayes_classifier) diff --git a/Algorithm/PCA/PCA.md b/Algorithm/PCA/PCA.md index edc19a9..e22563f 100644 --- a/Algorithm/PCA/PCA.md +++ b/Algorithm/PCA/PCA.md @@ -10,9 +10,9 @@ A method for doing dimensionality reduction by transforming the feature space to ### Quick View -Category|Usage|Methematics|Application Field ---------|-----|-----------|----------------- -Unsupervised Learning|Dimensionality Reduction|Orthogonal, Covariance Matrix, Eigenvalue Analysis| +| Category | Usage | Methematics | Application Field | +| --------------------- | ------------------------ | ------------------------------------------------------------------------ | ----------------- | +| Unsupervised Learning | Dimensionality Reduction | Orthogonal, Covariance Matrix, Eigenvalue Analysis, Lagrange Multipliers | ## Concepts @@ -22,13 +22,13 @@ Steps * Take the first principal component to be in the direction of the largest variability of the data * The second preincipal component will be in the direction orthogonal to the first principal component -> (We can get these values by taking the covariance matrix of the dataset and doing eigenvalue analysis on the covariance matrix) + > (We can get these values by taking the covariance matrix of the dataset and doing eigenvalue analysis on the covariance matrix) * Once we have the eigenvectors of the covariance matrix, we can take the top N eigenvectors => N most important feature * Multiply the data by the top N eigenvectors to transform our data into the new space Pseudocode -``` +```txt Remove the mean Compute the covariance matrix Find the eigenvalues and eigenvectors of the covariance matrix @@ -42,11 +42,11 @@ Transform the data into the new space created by the top N eigenvectors Variables * m x n matrix: $X$ - * In practice, column vectors of $X$ are positively correlated - * the hypothetical factors that account for the score should be uncorrelated + * In practice, column vectors of $X$ are positively correlated + * the hypothetical factors that account for the score should be uncorrelated * orthogonal vectors: $\vec{y}_1, \vec{y}_2, \dots, \vec{y}_r$ - * We require that the vectors span $R(X)$ - * and hence the number of vectors, $r$, should be euqal to the rank of $X$ + * We require that the vectors span $R(X)$ + * and hence the number of vectors, $r$, should be euqal to the rank of $X$ The covariance matrix is $$ @@ -88,11 +88,11 @@ it follows that $\vec{y_1}$ and $\vec{y_2}$ are orthogonal. ## Reference * Linear Algebra with Applications - * Ch 5 Orthogonality - * Ch 6 Eigenvalues - * Ch 6.5 Application 4 - PCA - * Ch 7.5 Orthogonal Transformations - * Ch 7.6 The Eigenvalue Problem + * Ch 5 Orthogonality + * Ch 6 Eigenvalues + * Ch 6.5 Application 4 - PCA + * Ch 7.5 Orthogonal Transformations + * Ch 7.6 The Eigenvalue Problem ## Links @@ -101,7 +101,7 @@ it follows that $\vec{y_1}$ and $\vec{y_2}$ are orthogonal. ### Tutorial * [**Siraj Raval - Dimensionality Reduction**](https://www.youtube.com/watch?v=jPmV3j1dAv4) - * [Github](https://github.com/llSourcell/Dimensionality_Reduction) + * [Github](https://github.com/llSourcell/Dimensionality_Reduction) ### Scikit Learn diff --git a/Algorithm/SVM/SVM.md b/Algorithm/SVM/SVM.md index 5a879c1..9cfe542 100644 --- a/Algorithm/SVM/SVM.md +++ b/Algorithm/SVM/SVM.md @@ -10,9 +10,9 @@ Support Vector Machines (SVM) are learning systems that use a hypothesis space o ### Quick View -Category|Usage|Methematics|Application Field ---------|-----|-----------|----------------- -Supervised Learning|Classification (Main), Regression, Outliers Detection Clustering (Unsupervised)|Convex Optimization, Constrained Optimization, Lagrange Multipliers|Numerous +| Category | Usage | Methematics | Application Field | +| ------------------- | ------------------------------------------------------------------------------- | ------------------------------------------------------------------- | ----------------- | +| Supervised Learning | Classification (Main), Regression, Outliers Detection Clustering (Unsupervised) | Convex Optimization, Constrained Optimization, Lagrange Multipliers | Numerous | * Support Vector Machine is suited for extreme cases (little sample set) * SVM find a hyper-plane that separates its training data in such a way that the distance between the hyper plane and the cloest points form each class is maximized @@ -39,12 +39,12 @@ Disadvantage * Poor performance when features >> samples * SVMs do not provide probability estimates -SVM vs. Perceptron|SVM|Perceptron / NN -------------------|---|---------- -**Solving Problem**|Optimization|Iteration -**Optimal**|Global (∵ convex)|Local -**Non-linear Seprable**|Higher dimension|Stack multi-layer model -**Performance**|Better with prior knowledge|Skip feature engineering step +| SVM vs. Perceptron | SVM | Perceptron / NN | +| ----------------------- | --------------------------- | ----------------------------- | +| **Solving Problem** | Optimization | Iteration | +| **Optimal** | Global (∵ convex) | Local | +| **Non-linear Seprable** | Higher dimension | Stack multi-layer model | +| **Performance** | Better with prior knowledge | Skip feature engineering step | ## Terminology @@ -110,22 +110,30 @@ SVM vs. Perceptron|SVM|Perceptron / NN ### Kernal Function * Use a kernal trick to reduce the computational cost - * Kernel Function: Transform a non-linear space into a linear space - * Popular kernel types - * Linear Kernel + * Kernel Function: Transform a non-linear space into a linear space + * Popular kernel types + * Linear Kernel - $K(x, y) = x \times y$ + $\kappa(x_i, x_j) = x_i^Ty_j$ - * Polynomial Kernel + > $K(x, y) = x \times y$ + + * Polynomial Kernel + + $\kappa(x_i, x_j) = (x_i^Ty_j)^d$ + + When $d = 0$ then it is linear kernel + + > $K(x, y) = (x \times y + 1)^d$, $d \geq 0$ - $K(x, y) = (x \times y + 1)^d$ + * Radial Basis Function (RBF) Kernel - * Radial Basis Function (RBF) Kernel + $\kappa(x_i, x_j) = \exp(-\frac{||x_i - x_j||^2}{2\sigma^2})$, $\sigma > 0$ and is width of RBF kernel - $K(x, y) = e^{-\gamma ||x-y||^2}$ + > $K(x, y) = e^{-\gamma ||x-y||^2}$ - * Sigmoid Kernel - * ... + * Sigmoid Kernel + * ... ### Tune Parameter diff --git a/Algorithm/SVM/SVMDerivation.md b/Algorithm/SVM/SVMDerivation.md index 3c14f90..0b08640 100644 --- a/Algorithm/SVM/SVMDerivation.md +++ b/Algorithm/SVM/SVMDerivation.md @@ -16,7 +16,7 @@ ### Theorem * Lagrange Duality - * Karush-Kuhn-Tucker (KKT) + * Karush-Kuhn-Tucker (KKT) ### Big Picture @@ -51,6 +51,8 @@ $$|\vec{w} \cdot \vec{x} + b|$$ We can represent our correctness of classification by: $$y_i (\vec{w} \cdot \vec{x} + b)$$ +> $$\begin{cases} \vec{w}^T\vec{x} + b \geq +1, & y_i = +1 \\ \vec{w}^T\vec{x} + b \leq -1, & y_i = -1\end{cases}$$ + * If classify correctly => $y_i$ and $(\vec{w} \cdot \vec{x} + b)$ will have same sign => Positive product * Else => Negative product @@ -72,7 +74,7 @@ $$ \gamma_i = y_i \bigg(\frac{\vec{w}}{||\vec{w}||} \cdot \vec{x_i} + \frac{b}{| $$ r = \frac{\hat{r}}{||\vec{w}||} $$ -when ||w|| = 1 <=> functional margin = geometric margin +when $||\vec{w}||$ = 1 <=> functional margin = geometric margin ### Maximize Margin @@ -146,10 +148,12 @@ Distance between two hyperplane are called **margin**. Margin depends on normal Apply *Lagrange Duality*, get the optimal solution of primal problem by solving dual problem Advantage + 1. Dual problem is easier to solve + * remove the constrain 2. Introduce kernel function, expend to non-linear classification problem -For each constraint introduce a **Lagrange multiplier** $\alpha_i \geq 0$ +For each constraint introduce a [**Lagrange multiplier**](https://en.wikipedia.org/wiki/Lagrange_multiplier) $\alpha_i \geq 0$ Lagrange function $$ @@ -220,9 +224,9 @@ It takes the large optimization problem and breaks it into many small problem. 1. Once we have a set of alphas we can easily compute our weights w 2. And get the separating hyperplane * SMO algorithm choose two alphas to optimize on each cycle. Once a sutiable pair of alphas is found, one is increased and one is decreased. - * Suitable criteria - * A pair mus meet is that both of the alphas have to be outside their margin boundary - * The alphas aren't already clamped or bounded + * Suitable criteria + * A pair mus meet is that both of the alphas have to be outside their margin boundary + * The alphas aren't already clamped or bounded * The reason that we have to change two alphas at the same time is because we need have a constraint $\displaystyle \sum \alpha_i * y^{(i)} = 0$ ## Introduce slack variable (C parameter) @@ -232,4 +236,5 @@ It takes the large optimization problem and breaks it into many small problem. ## Reference * 李航 - 統計機器學習 -* Machine Learning in Action \ No newline at end of file +* Machine Learning in Action +* 機器學習 diff --git a/Algorithm/VSM/VSM_Document_Similarity/VSM_Document_Similarity_FromScratch.py b/Algorithm/VSM/VSM_Document_Similarity/VSM_Document_Similarity_FromScratch.py new file mode 100644 index 0000000..9602589 --- /dev/null +++ b/Algorithm/VSM/VSM_Document_Similarity/VSM_Document_Similarity_FromScratch.py @@ -0,0 +1,89 @@ +## VSM Document Similarity From Scratch Version +# +# Author: David Lee +# Create Date: 2018/12/2 +# +# Article amount: 3443 + +import numpy as np +import pandas as pd +from collections import defaultdict + +class Similarity: + def euclidianDistanceSimilarity(self, A, B): + return 1.0/(1.0 + np.linalg.norm(A - B)) + def cosineSimilarity(self, A, B): + num = float(A.T*B) + denom = np.linalg.norm(A) * np.linalg.norm(B) + return 0.5 + 0.5 * (num/denom) + +class VSM_Model: + def __init__(self): + pass + + def __toDictionary(self, articleMatrix): + """ + For each article, calculate a dictionary + i.e. word id pair + """ + for article in articleMatrix: + pass + + def __DictToCorpus(self, dictionary): + pass + + def calcTfIdf(self): + pass + + def getSimilarityMat(self, articleMatrix): + pass + + +def documentTokenize(document): + frequencyOfWords = defaultdict(int) + for line in document: + tokens = line.strip().split() + if tokens: # skip empty lines + # Extract single word + for token in tokens[1:]: + word = token[:token.index('/')] + pos = token[token.index('/')+1:] # part-of-speech + # remove common words and meaningless words (using a stoplist) + if pos not in ('w', 'y', 'u', 'c', 'p', 'k', 'm'): + frequencyOfWords[word] += 1 + return frequencyOfWords + +def articlesToMatrix(document, freqOfWords): + articleMatrix = [] + emptyline = 0 # To seperate each article + wordsWeWant = [] + articleCounter = 0 + for line in document: + tokens = line.strip().split() + if tokens: + emptyline = 0 + for token in tokens: + word = token[:token.index('/')] + # remove the words that only appear once in the corpus + if freqOfWords[word] > 1: + wordsWeWant.append(word) + else: + emptyline += 1 + # Found an article + if emptyline == 3: + articleMatrix.append(wordsWeWant) + wordsWeWant = [] + articleCounter += 1 + if wordsWeWant: + articleMatrix.append(wordsWeWant) + articleCounter += 1 + print('Total articles:', articleCounter) + return articleMatrix + +def documentPreprocessing(path): + with open(path, 'r') as chinaNews: + document = chinaNews.readlines() + # 1. tokenize the documents + frequencyOfWords = documentTokenize(document) + # 2. calculate remain word for each article + return articlesToMatrix(document, frequencyOfWords) \ No newline at end of file diff --git a/Notes/FeatureEngineering.md b/Notes/FeatureEngineering.md index c895921..b9b1650 100644 --- a/Notes/FeatureEngineering.md +++ b/Notes/FeatureEngineering.md @@ -380,6 +380,9 @@ The features themselves will work for either model. However, numerical inputs to ## Resources +* [**分分鐘帶你殺入Kaggle Top 1% - 知乎**](https://zhuanlan.zhihu.com/p/27424282) +* [如何ensemble多個神經網路? - 知乎](https://www.zhihu.com/question/60753512/answer/184409655) +* [**Kaggle Ensembling Guide | MLWave**](https://mlwave.com/kaggle-ensembling-guide/) * [Wiki - Feature engineering](https://en.wikipedia.org/wiki/Feature_engineering) * [機器學習筆記 - 特徵工程](https://feisky.xyz/machine-learning/basic/feature-engineering.html) * [**Understanding Feature Engineering (Part 1) — Continuous Numeric Data**](https://towardsdatascience.com/understanding-feature-engineering-part-1-continuous-numeric-data-da4e47099a7b) diff --git a/Notes/GraphicalModel.md b/Notes/GraphicalModel.md new file mode 100644 index 0000000..b67844a --- /dev/null +++ b/Notes/GraphicalModel.md @@ -0,0 +1,38 @@ +# (Probabilistic) Graphical Model + +## Overview + +* Graph Models represent families of probability distribution via graphs + * [Directed GM](#directed-graph-model): [Bayesian Network](#dag-bayesian-network) + * Consider local information + * [Undirected GM](#undirected-graph-model): [Markov Random Field](#probabilistic-undirected-graph-model-aka-markov-random-field) + * Consider global information + * Combination GM: Chain graphs + +* Typical Graphical Model + * [Generative Model](MachineLearningBigPicture.md#Generative-Model): from Category to Data + * e.g. Naive Bayes + * [Discriminative Model](MachineLearningBigPicture.md#Discriminative-Model): from Data to Category + +## Directed Graph Model + +> [HMM](../HMM/HMM.md) is a Directed Graph Model + +### DAG (Bayesian Network) + +## Undirected Graph Model + +> [CRF is a Undirected Graph Model](#Probabilistic-Undirected-Graph-Model-(aka.-Markov-Random-Field)) + +Undirected Graph Model Concept: + +* Clique (團): the fully connected subgraph (subset of nodes where each pair connected) +* Maximal clique (最大團): a clique that cannot be extended by including one more adjacent vertex (no extra node can be added and remain a clique) + +Score Problem + +* Potential Function (勢函數): map clique to a positive real number (score) + +### Probabilistic Undirected Graph Model (aka. Markov Random Field) + +> CRF = Markov Random Field + conditions; C => condition distribution, RF => Markov Random Field (joint distribution) diff --git a/Notes/MachineLearningConcepts.md b/Notes/MachineLearningConcepts.md index b9d5ddb..30f70f5 100644 --- a/Notes/MachineLearningConcepts.md +++ b/Notes/MachineLearningConcepts.md @@ -24,6 +24,7 @@ Table of content - [Binary to Multi-class](#binary-to-multi-class) - [One-vs-rest (one-vs-all) Approaches](#one-vs-rest-one-vs-all-approaches) - [Pairwise (one-vs-one, all-vs-all) Approaches](#pairwise-one-vs-one-all-vs-all-approaches) + - [Multi-Labeled Classification](#multi-labeled-classification) - [Model Validation](#model-validation) - [Splitting Data](#splitting-data) - [Simplest Split](#simplest-split) @@ -38,12 +39,14 @@ Table of content - [Classification](#classification) - [Accuracy (Error Rate)](#accuracy-error-rate) - [Confusion Matrix](#confusion-matrix) - - [Precision, Recall Ratio](#precision-recall-ratio) + - [Precision, Recall Rate](#precision-recall-rate) + - [Precision-Recall Curve (P-R Curve)](#precision-recall-curve-p-r-curve) - [ROC curve](#roc-curve) - [Regression](#regression) - [Mean Absolute Error (MAE)](#mean-absolute-error-mae) - [Mean Squared Error (MSE)](#mean-squared-error-mse) - [Root Mean Squared Error (RMSE)](#root-mean-squared-error-rmse) + - [Mean Absolute Percent Error (MAPE)](#mean-absolute-percent-error-mape) - [Clustering](#clustering) - [Within Groups Sum of Squares](#within-groups-sum-of-squares) - [Mean Silhouette Coefficient of all samples](#mean-silhouette-coefficient-of-all-samples) @@ -70,6 +73,8 @@ Table of content - [Incremental Learning (Online Learning)](#incremental-learning-online-learning) - [Competitive Learning](#competitive-learning) - [Multi-label Classification](#multi-label-classification) + - [Other](#other) + - [Interpretability](#interpretability) ## Data Preprocessing @@ -252,6 +257,14 @@ Tutorial: #### Pairwise (one-vs-one, all-vs-all) Approaches +### Multi-Labeled Classification + +> Difference between multi-class classification & multi-label classification is that in multi-class problems the classes are mutually exclusive, whereas for multi-label problems each label represents a different classification task, but the tasks are somehow related.. + +* [Multi-label classification - Wikipedia](https://en.wikipedia.org/wiki/Multi-label_classification) +* [Deep dive into multi-label classification..! (With detailed Case Study)](https://towardsdatascience.com/journey-to-the-center-of-multi-label-classification-384c40229bff) +* [1.12. Multiclass and multilabel algorithms — scikit-learn 0.21.3 documentation](https://scikit-learn.org/stable/modules/multiclass.html) + ## Model Validation ### Splitting Data @@ -313,68 +326,89 @@ This means that the training data will contain approximately 63.2% of the exampl ### Classification +Consider a **two-class** problem. +(Confusion matrix with different outcome labeled) + +| Actual \ Redicted | +1 | -1 | +| :---------------: | :-----------------: | :-----------------: | +| **+1** | True Positive (TP) | False Negative (FN) | +| **-1** | False Positive (FP) | True Negative (TN) | + #### Accuracy (Error Rate) * The error rate = the number of misclassified instances / the total number of instances tested. + * = (TP + TN) / (TP + FP + TN + FN) * Measuring errors this way hides how instances were misclssified. +Defect: + +* When the data is unbalnaced/skewed the accuracy may become invalid + * extreme case: when there are 99% of negative samples => predect all negative will get 99% accuracy + #### Confusion Matrix [**Wiki - Confusion Matrix**](https://en.wikipedia.org/wiki/Confusion_matrix) +[如何辨別機器學習模型的好壞?秒懂Confusion Matrix - YC Note](https://www.ycc.idv.tw/confusion-matrix.html) * With a confusion matrix you get a better understanding of the classification errors. * If the off-diagonal elements are all zero, then you have a perfect classifier * Construct a confusion matrix: a table about Actual labels vs. Predicted label -#### Precision, Recall Ratio +#### Precision, Recall Rate These metrics that are more useful than error rate when detection of one class is more important than another class. -Consider a **two-class** problem. -(Confusion matrix with different outcome labeled) - -| Actual \ Redicted | +1 | -1 | -| :---------------: | :-----------------: | :-----------------: | -| **+1** | True Positive (TP) | False Negative (FN) | -| **-1** | False Positive (FP) | True Negative (TN) | - * **Precision** = TP / (TP + FP) - * Tells us the fraction of records that were positive from the group that the classifier predicted to be positive - + * Tells us the fraction of records that were positive from the group that the classifier predicted to be positive * **Recall** = TP / (TP + FN) - * Measures the fraction of positive examples the classifier got right. - * Classifiers with a large recall dont have many positive examples classified incorectly. + * Measures the fraction of positive examples the classifier got right. + * Classifiers with a large recall dont have many positive examples classified incorectly. + +To improve precision, the classifier will predict a sample to be positive when "it has high confident", but this may miss many "not enough confident" positive sample, end up cause low recall rate. -* **F₁ Score** = 2 × (Precision × Recall) / (Precision + Recall) +To improve recall, the classifier will tend to look for the result which is not so popular, ... -Summary: +> Summary: +> +> * You can easily construct a classifier that achieves a high measure of recall or precision but not both. +> * If you predicted everything to be in the positive class, you'd have perfect recall but poor precision. -* You can easily construct a classifier that achieves a high measure of recall or precision but not both. -* If you predicted everything to be in the positive class, you'd have perfect recall but poor precision. +* **F1 Score** = 2 × (Precision × Recall) / (Precision + Recall) + * [harmonic mean](https://en.wikipedia.org/wiki/Harmonic_mean) of precision and recall Now consider **multiple classes** problem. * Macro-average * Micro-average +In **sorting problem**: Usually use *Top N* return result to calculate precision and recall rate to measure performance + +* Precision@N +* Recall@N + +#### Precision-Recall Curve (P-R Curve) + #### ROC curve [Wiki - Receiver operating characteristic](https://en.wikipedia.org/wiki/Receiver_operating_characteristic) -ROC stands for Receiver Operating Characteristic +* x axis: False Positive Rate (FPR) = FP / (TN + FN) +* y axis: True Positive Rate (TPR) = TP / (TP + FP) + +> ROC stands for Receiver Operating Characteristic -* The ROC curve shows how the two rates chnge as the threshold changes +* The ROC curve shows how the two rates (FPR & TPR) changes as the threshold changes * The ROC curve has two lines, a solid one and a dashed one. - * The solid line: - * the leftmost point corresponds to classifying everything as the negative class. - * the rightmost point corresponds to classifying everything in the positive class. - * The dashed line: - * the curve you'd get by randomly guessing. + * The solid line: + * the leftmost point corresponds to classifying everything as the negative class. + * the rightmost point corresponds to classifying everything in the positive class. + * The dashed line: + * the curve you'd get by randomly guessing. * The ROC curve can be used to compare classifiers and make cost-versus-benefit decisions. - * Different classifiers may perform better for different threshold values + * Different classifiers may perform better for *different threshold values* * The best classifier would be in upper left as much as possible. - * This would mean that you had a high true positive rate for a low false positive rate. + * This would mean that you had a high true positive rate for a low false positive rate. **AUC** (Area Under the Curve): A metric to compare different ROC @@ -389,6 +423,20 @@ ROC stands for Receiver Operating Characteristic #### Root Mean Squared Error (RMSE) +$$ +\operatorname{RMSE} = \sqrt{\frac{\sum_{i=1}^n (y_i - \hat{y}_i)^2}{n}} +$$ + +* If outliers (e.g. some noise points) exist, will affect the result of RMSE and make it worse + +#### Mean Absolute Percent Error (MAPE) + +$$ +\operatorname{MAPE} = \sum_{i=1}^n |\frac{y_i - \hat{y}_i}{y_i}| \times \frac{100}{n} +$$ + +* equivalent to normalized the error of each data point => reduce the effect caused by the outliers + ### Clustering #### Within Groups Sum of Squares @@ -574,3 +622,12 @@ Find the fastest way to minimize the error. ### Multi-label Classification [Wiki - Multi-label Classification](https://en.wikipedia.org/wiki/Multi-label_classification) + +## Other + +### Interpretability + +> 可解釋性 + +* [要研究深度學習的可解釋性(Interpretability),應從哪幾個方面著手?](https://www.zhihu.com/question/320688440/answer/659692388) +* [可解釋性與deep learning的發展](https://zhuanlan.zhihu.com/p/30074544) diff --git a/Notes/MachineLearningExplainability.md b/Notes/MachineLearningExplainability.md new file mode 100644 index 0000000..f30e971 --- /dev/null +++ b/Notes/MachineLearningExplainability.md @@ -0,0 +1 @@ +[Machine Learning Explainability | Kaggle](https://www.kaggle.com/learn/machine-learning-explainability) \ No newline at end of file diff --git a/Notes/Math/Calculus/JacobiansDerivation.md b/Notes/Math/Calculus/JacobiansDerivation.md new file mode 100644 index 0000000..e2516fa --- /dev/null +++ b/Notes/Math/Calculus/JacobiansDerivation.md @@ -0,0 +1,11 @@ +# Some special case Jacobians Derivation in Machine Learning + +* Elementwise activation function $\mathbf{h} = f(\mathbf{z})$ + $$ + \frac{\partial\mathbf{h}}{\partial\mathbf{z}} + $$ +* wx+b + * x + * b +* uth + * u diff --git a/Notes/Math/Derivative/NYU_ML_HW1.md b/Notes/Math/Derivative/NYU_ML_HW1.md new file mode 100644 index 0000000..7463f65 --- /dev/null +++ b/Notes/Math/Derivative/NYU_ML_HW1.md @@ -0,0 +1,30 @@ +# NYU Machine Learning HW1 + +## 1 + +Let $\{x_1, x_2, \dots, x_n\}$ be a set of points in $d$-dimentional space. Suppose we wish to produce a single point estimate $\mu \in \mathcal{R}^d$ that minimizes the mean squared-error: + +$$ +\frac{1}{n} (||x_1 - \mu||^2_2 + ||x_2 - \mu||^2_2 + \dots + ||x_n - \mu||^2_2) +$$ + +Find a closed form expression for $\mu$ and prove that your answer is correct. + +### Solution + +> [Proof (part 1) minimizing squared error to regression line | Khan Academy - YouTube](https://www.youtube.com/watch?v=mIx2Oj5y9Q8) + +## 2 + +Not all norms behave the same; for instance, the $l_1$-norm of a vector can be dramatically different from the $l_2$-norm, especially in high dimensions. Prove the following norm inequalities for $d$-dimensional vectors, starting from the definitions provided in class and lecture notes. (Use any algebraic technique/result you like, as long as you cite it.) + +1. $||x||_\infty \leq ||x||_2 \leq \sqrt{d}||x||_\infty$ +2. $||x||_\infty \leq ||x||_1 \leq d||x||_\infty$ + +> [analysis - 1 and 2 norm inequality - Mathematics Stack Exchange](https://math.stackexchange.com/questions/2293778/1-and-2-norm-inequality) + +--- + +p-norm + +infinity norm diff --git a/Notes/Math/Derivative/homework.pdf b/Notes/Math/Derivative/homework.pdf new file mode 100644 index 0000000000000000000000000000000000000000..321c92e2fadb33d1512bfaaba20ab027d39b8dbf GIT binary patch literal 115963 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

Y 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 literal 0 HcmV?d00001 diff --git a/Notes/Math/LinearAlgebra/Basis.md b/Notes/Math/LinearAlgebra/Basis.md new file mode 100644 index 0000000..a537b73 --- /dev/null +++ b/Notes/Math/LinearAlgebra/Basis.md @@ -0,0 +1,44 @@ +# Linear Algebra Basis + +## Definitions + +* Inner products: $\langle x, y \rangle = x^Ty$ +* Norm + * L2 Norm: $||x||^2 = x^Tx$ +* Distance: + * $d(x, y) = ||x - y||$ + * $d_M(x, y) = \sqrt{(x-y)^T M(x-y)}$ +* Orthogonality $\langle x, y \rangle = 0$ + +Needed to define norm preserving (i.e. orthogonal) transforms + +* Similarity between two vectors: $|\langle x, y \rangle| = |x||y|\cos\theta$ + * maximum when the two vector are aligned + * minimum when they are orthogonal to each other +* Transforming a vector + * $y = Tx$ + +## Subspaces and bases + +Let $S\in R^N$ be a subset of vectors in $R^N$ + +### Span + +### Bases + +## Eigenvectors and Eigenvalues + +... + +$$ +x^TLx = \sum (x_i - x_j)^2 = x^T(U\Lambda U^T)x \\ += (U^Tx)\Lambda(U^Tx) = \alpha^T \Lambda \alpha += \sum_{k=1}^N \lambda_k\alpha_k^2 +$$ + +> total variation + +## Resources + +* [**Immersive Math - Linear Algebra**](http://immersivemath.com/ila/index.html) +* [Essence of Linear Algebra - YouTube](https://www.youtube.com/playlist?list=PL_w8oSr1JpVCZ5pKXHKz6PkjGCbPbSBYv) diff --git a/Notes/Math/Probability/ProbabilityBasics.md b/Notes/Math/Probability/ProbabilityBasics.md new file mode 100644 index 0000000..e69de29 diff --git a/Notes/Math/Topic/DistanceSimilarityMeasurement.md b/Notes/Math/Topic/DistanceSimilarityMeasurement.md new file mode 100644 index 0000000..ce67429 --- /dev/null +++ b/Notes/Math/Topic/DistanceSimilarityMeasurement.md @@ -0,0 +1,65 @@ +# Distance / Similarity Measurement + +## Basis + +### Centroid + +## Distance + +### Euclidean Distance + +> 歐幾里德距離(歐氏距離) + +### Manhattan Distance + +> 曼哈頓距離 + +### Chebyshev Distance + +### Summary of Distance + +## Norm + +* [[數學分析] 淺談各種基本範數 (Norm)](https://ch-hsieh.blogspot.com/2010/04/norm.html) + +### Lp Norm + +> Lp範式 + +### Distance in Norm + +* Euclidean Distance: P = 2 +* Manhattan Distance: P = 1 +* Chebyshev Distance: P = ∞ + +## Similarity + +### Cosine Similarity + +### Exponential Similarity + +### Other Distance + +#### Kullback-Leibler Divergence (KL-divergence) + +> This is not a true metric because it does not obey triangle inequality + +### Summary of Similarity + +#### Similarity vs. Distance + +Cosine Similarity is inversely proportional with Euclidean Distance + +## Other Measurement + +### From a Point to a Set + +$$ +\operatorname{dis}(x, A) = \frac{1}{|A|} ............ (haven't finish yet) +$$ + +### Distance between two sets + +* Nearest distance between Set A and Set B +* Farthest distance between Set A and Set B +* Average distance between Set A and Set B diff --git a/Notes/Math/temp.txt b/Notes/Math/temp.txt new file mode 100644 index 0000000..f0d4192 --- /dev/null +++ b/Notes/Math/temp.txt @@ -0,0 +1,38 @@ +机器学习中的基本数学知识 +https://www.cnblogs.com/steven-yang/p/6348112.html + +element-wise product/point-wise product/Hadamard product + + + +distance +norm + +Distance + +Manhattan Distance (L1 Norm) +https://github.com/likejazz/Siamese-LSTM/blob/master/util.py#L133 +https://medium.com/@montjoile/l0-norm-l1-norm-l2-norm-l-infinity-norm-7a7d18a4f40c + +Python Packages + +numpy +scipy +pandas +matplotlib +seaborn [seaborn: statistical data visualization — seaborn 0.9.0 documentation](https://seaborn.pydata.org/) +sympy +cvxpy +cvxopt +networkx +[NetworkX documentation — NetworkX 1.10 documentation](https://networkx.github.io/documentation/networkx-1.10/index.html) + + +https://www.cis.upenn.edu/~jean/math-deep.pdf + + +[[數學分析] 什麼是若且唯若 "if and only if"](https://ch-hsieh.blogspot.com/2013/07/if-and-only-if.html) +[[數學分析] 淺談各種基本範數 (Norm)](https://ch-hsieh.blogspot.com/2010/04/norm.html) + + +p norm infinity norm \ No newline at end of file diff --git a/README.md b/README.md index 302601a..b728413 100644 --- a/README.md +++ b/README.md @@ -38,6 +38,11 @@ For evaluation * [`surprise`](https://github.com/NicolasHug/Surprise): A Python scikit building and analyzing recommender systems +For competition + +* [StackNet](https://github.com/kaz-Anova/StackNet): computational, scalable and analytical Meta modelling framework +* [hyperopt](https://github.com/hyperopt/hyperopt): Distributed Asynchronous Hyperparameter Optimization in Python + NLP related * [`gensim`](https://radimrehurek.com/gensim/index.html): Topic Modelling @@ -132,6 +137,8 @@ Iris Logistic|Logistic Regression / Classification|[Iris Data Set](https://archi * `Gradient Boosting Decision Tree (GBDT)` (aka. Multiple Additive Regression Tree (MART)) * [`XGBoost`](Algorithm/XGBoost/XGBoost.md) * [`LightGBM`](Algorithm/LightGBM/LightGBM.md) +* Stacking +* Blending ### NLP Related @@ -333,7 +340,9 @@ Iris Logistic|Logistic Regression / Classification|[Iris Data Set](https://archi #### MOOC * [Stanford Andrew Ng - CS229](http://cs229.stanford.edu/) - * [Coursera](https://www.coursera.org/learn/machine-learning) + * [Coursera](https://www.coursera.org/learn/machine-learning) +* [ML Course - Predrag Radivojac and Martha White](https://marthawhite.github.io/mlcourse/schedule.html) + * [Machine Learning Handbook](https://marthawhite.github.io/mlcourse/notes.pdf) ### Github @@ -376,7 +385,7 @@ Textbook Implementation * [AI Challenger Datasets](https://challenger.ai/datasets/) * [Peking University Open Research Data](http://opendata.pku.edu.cn/) * [Open Images Dataset](https://storage.googleapis.com/openimages/web/index.html) - * [github](https://github.com/openimages/dataset) + * [github](https://github.com/openimages/dataset) * [Alibaba Cloud Tianchi Data Lab](https://tianchi.aliyun.com/datalab/index.htm) * [biendata](https://biendata.com) @@ -391,6 +400,8 @@ Global * [CodaLab](https://competitions.codalab.org/competitions/21948) * [CodaLab](https://competitions.codalab.org/) +> * [DataSciCamp](https://www.datascicamp.com/) + Taiwan * [Open Data](https://opendata-contest.tca.org.tw/) @@ -398,6 +409,7 @@ Taiwan China * [Tianchi Competition](https://tianchi.aliyun.com/competition/) +* [FlyAI](https://www.flyai.com/) * [biendata](https://www.biendata.com/) * [SODA](http://soda.shdataic.org.cn/) * [Data Fountain](https://www.datafountain.cn/) diff --git a/reminder.txt b/reminder.txt new file mode 100644 index 0000000..02c95e0 --- /dev/null +++ b/reminder.txt @@ -0,0 +1,16 @@ +collecting the common concept over different algorithm to a single file with reference + +CRF + MEM + HMM together (and LR) maybe with some probability notes (Grpah Model summation***) Viterbi + +Similarity Measurement + KMeans + ML Big Picture clustering + +CRF + GraphicalModel + MLBigPicture + +Maybe partial derivative derivation on some Jacobians (which are mentioned in CS224n Lecture 3) + + + + + +1. Bayesian Network +2. Github Issue about CMiFM bug, check that out