Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...

Full Transcript

Lecture 1 - Setting the stage Artificial Intelligence - Spam Filter - Chat-GPT - Self driving taxi “Using computers to mimic human intelligence” ML is a subcategory of artificial intelligence What is intelligence? Learning (ML), performing, planning, interacting, speaking, feelings (...

Lecture 1 - Setting the stage Artificial Intelligence - Spam Filter - Chat-GPT - Self driving taxi “Using computers to mimic human intelligence” ML is a subcategory of artificial intelligence What is intelligence? Learning (ML), performing, planning, interacting, speaking, feelings (?) …etc, etc, etc. Machine learning Classic ML - Decision Trees, Random Forest, Train-test split, Confusion matrix etc. Artificial Neural Networks “Deep Learning” "Mimicking human brains” - The building blocks of NN comes from Classic ML. What is Machine Learning? “ML is a field of study in AI concerned with the development and study of statistical algorithms that can learn from data and generalize to unseen data and thus perform tasks without explicit instructions” Data can be given in a table with labels (Supervised learning) Data can be given in a table without labels (Unsupervised learning) Data, and labels, can be generated by trial and error (Reinforcement learning) A task to solve, any technique can be used as long as the task is being performed as best as possible! Use a set of historic data to test how well the model is performing. Unsupervised learning Ex: Chat-GPT - No labels - Find patterns in data - Visualize (plot) data, can be difficult with more parameters. - NLP, “the apple is sweet” “apple has a powerful processor” Supervised learning Ex: Image recognition - Labels - ML is trying to make the approximated 2D plot as good as it can - Most common ML Reinforcement learning Ex: Self Learning Autonomous Cars - Trial and error, create own database First widespread use of ML (Historic perspective) Email Spam filter (1990-2000) NLP Email 1 “buy for free diamonds…” => Label: Spam Email 2 “The exam takes place in room..” => Label: No spam The Intelligence, the Computer, Learning… what’s the key essence?? - Computer uses 0 and 1 - Everything is based on numbers, math, mathematical functions, statistics, 🦸🏽‍♀️ programming.. - Computers is good since they are super-fast and have a super-memory!! Typical ML Intelligence => Test on data to see how much error the model gave Ex: Predict value of house Error Function - Find Minima to get the least error in prediction! - Multidimensional numerical optimization task - Regression (continuous values) - In reality maybe not only two parameters (as in picture) but hundreds. Also there are many maximums and minimums - Look at derivative (gradient in several dimensions) to know which direction to go - Go to the bottom of the minimum to know how to tune the parameters and make a new prediction. Intelligence is when computers adjust parameters to give the most optimized settings. How do we know the most optimal? Test on data and try again, what’s the error now? Classification Find the best class separation cut line! - Which class a new data point belongs to. - PCA (principal component analysis) - Points above the separation line is class 1, below is class 2. Find the optional place for the separation line! Example of real life application of ML E-Coli bacteria in Helsingborg beach waters 1. Fast prediction of E.Coli amount - Without ML; 70% accuracy - With ML: 87% accuracy (using classic ML) 2. ML points out which bacterias are most important for E.Coli presence (which input variable) 3. Next task is to do Forecasting of E.Coli presence (like a weather forecast) by learning from history using ML (deep ML) Lecture 2 Example of a Real life application of Machine Learning Real life data can be messy and imperfect => Needs cleanup and preprocessing. - Get to know your data - Visualize your data Datasets used in this course 1. The Iris flowers dataset - “Hello world” for ML - Three different Iris flowers to classify - Width and height on septel and petel => 4 variables - Last column with label - Totalt 150 blommor, lika många samples från varje klass - Sertosa, Versicolor or Virginica 2. MNIST Handwritten digits - Every pixel is an input variable - Baseline in ML (Result with a very simple model) 3. MNIST Fashion Dataset - Pictures on more “real world” things Label column (supervised learning) or “target” or “species” Input kolomnerna längst till vänster, output längst till höger Scriptet, göra PCA på blommorna! För 3D plot gå upp på skiftnyckeln > Preferences > iPython console > Graphics > Backend (Default inline, QT5 (nytt interaktivt fönster) ) Section 1 import sklearn_decomposition as PCA (komprimerar) PCA bild ger en global bild med info från alla kolumner. Om det är en onödig kolumn kan den hoppas över för att komprimera! Section 2 Ladda in IRIS datasetet Första variabel data = Array av data med kolumner och rader (innehåller) - 4-input variabel, petel width och height Target = labels, 1,2 och 3 är olika blommtyper X-axeln: Varje ny blomma Y-axel: Värdet för blomma target-kolumnen = Klasserna 0,1,2. Plottar dem olika klasserna. Kanske lite onödig att ta med. Petal width, en viktigt input variabel pga skiljer sig mycket beroende på blomma! Petal length = Också en bra prediktor! Sepal width = Hade PCA antagligen ignorerat pga ingen tydlig skillnad. Section 3 2D PCA-plot, den ska gå från 4 till 2 dimensioner X och Y-axlarna kommer vara en kombination av ursprung Blir en unsupervised learning pga behöver inga labels Label kollonen läggs till för att ge en färg per klassifisering Nu har grafen två parametrar som heter Principal Component 1 och 2 - Röda är klart avgränsade - Blå och grön har något överlapp Sista sectionerna - Variansen av data visar på hur hög/låg skillnad i datat. Utspridd data har högre varians. Desto mer utspridd data desto mer information => Essens av ML! - Vad är den totala utspriddheten av min PCA-plot? 97.8% accuracy Från 4 till 3D mha PCA Ovanligt med 3D PCA plot! Svårt vid publikation Sätter en 3 istället för 2 när man initierar PCA modellen! pca_model2 = PCA(n_components=3) Axlarna blir PCA component 1,2,3… Tredje axel ger mer information Varians går till 99.5%, alltså accuracy på 99.5% Mer noggrann! Varje datapunkt relativt till varje annan datapunkt Kan spinna runt på datat! Motivation 1 - Denoising Autoencoder (Generative AI) Tar bort brus! Generativ AI = ML algoritmen skapar nya saker Kan göra en enklare variant med PCA! - Invers PCA transform => Gå tillbaka till högre dimensioner - PCA transform förlorar en del information, så att göra en invers PCA transform får inte tillbaka infon som tappades. Vänster: Siffra från MNIST med brus Stoppade in den Neutralt nätverk räknade Höger: Får ut en ny tydligare bild Jämför ursprung och nyare bild => Formen på siffran skiljer sig åt, får inte tillbaka samma bild på siffran 2 innan brus. En helt ny unik bild som datorn “hittat på” och genererat! 1. Input bilder => 2. Kläms i en smal hals med få neuroner => 3. Output bilder Denna tankegången är grunden för ChatGPT! Motivation 2 - Large Language Model (LLM) Sentiment analysis = Detektera om glad/arg (Klassifisering) Hur många gånger dyker sweet/dry upp i en mening? Om sweet = glad, om dry = arg Supervised eftersom vi har labels - Sweet verkar väga tyngre (se sentence 2) För att make a prediction: 1. Learn from DATA 2. Make a prediction Model 3. Evaluate your Model on known DATA (before selling it), får absolut inte titta på testmängd förrän i slutet när den ska testas!! 4. Make the prediction 5. Check it afterwards.. and add to the DATA Skiljelinje som den nedan, all data som är ovanför är sad, alla under är happy! Ändra skiljelinje tills man får så bra resultat som möjligt! Motivation 3 - Spam filter Tanken med Naive Bayes, räkna antal gånger ett ord förekommer i ett email! Exempelvis buy och free 1. Titta på gamla email som har lika många free som är spam och vilka som inte var spam => Räkna ut sannolikhet för att det nya emailet skulle vara spam. 2. Gör detsamma med buy! 3. Naive Bayes = Multiplicera sannolikheterna med varandra. Får en score siffra!’ 4. Gör samma fast med sannolikheten att det inte var spam för både free och buy. Då tar man 1 - sannolikheten att det var spam. Produkt av spam sannolikheterna > Produkt av icke-spam sannolikheterna = SPAM Lecture 3 Continuing of lecture 2 How do we combine this? using Naive Bayes approximation (multiplying probabilities even though it’s not completely correct to do so in probability theory if it has correlation) “free” and “buy” should not have any correlation if there is correlation => approximation is not true. Little to no correlation then the Naive Bayes approximation works! => We multiply the probabilities! (For “free” AND “buy”, both for spam and no spam) 0.o29 probability for spam 0.40 probability for no spam Classify as no spam! Discrete task => “Counting words” example Continuous features => Like “height of human” we use Normal or Gaussian probability distribution Principal Component Analysis (PCA) - To shringe feature dimension to 2 or 3 dimensions for plotting - Unsupervised ML: Only the features are input to the algorithm. If there is a label column, it can be used for labeling datapoints in the PCA plots (or coloring) How does it work? Ex: From 2D to 1D with PCA Do we need 2 dimensions to describe this data? What if we fit a straight line through the datapoints in 2D, and then the project the datapoints to new datapoint Projection = Red dot is original data point. Make a line from the datapoint to the PC1-axis, needs to be perpendicular (vinkelrät) to the PC1-axis. If so, we can put the red dot on that value on the PC1-axis. If you have a lamp and flashing it on the datapoint, a shadow will appear there on the PC1-axis. Now we only have one coordinate, -1.5! Each datapoint is moved to the new axis, in a direction perpendicular to the new axis. We see that red and green cluster are separated. Example 1: Variance is very little, not good. Example 2: The data is more spread out, higher variance of data. Choose a PC1-axis that have a high variance as possible Also the distance from each datapoint to the axis should be as small as possible (least square sum) PCA fit algorithm; Iteratively rotate and shift PCI axis to maximize the variation of the projected points on PC1-axis. Mean Value and Variance (Statistics Review) Experimental Data: If datapoints is spread out = Large variance else small variance To determine if the variance is large or small, make a histogram Numbers on variable on x-axis, see how many datapoints in a bin (height of bin) Left: High variance Right: Low variance Need to remember mean value, variance and standard deviation! Why (n-1)? - If we have few data points it’s needed to have -1. Variance becomes a little too small if we don’t have it. Probability distribution: Total area under curve = 1 Back to PCA Higher dimensional data to 2D PCA: Once PC1 is found, PC2 will be perpendicular to PC1 The “rotation” (angle) of PC2 around PC1 is again obtained by maximizing the variance of projected datapoints on PC2. Variable importance for the PCA Visualization Plot Bonus PCA: What input feature was the most important? Example 1: X1 is more important for PC1 Example 2: X2 is more important for PC1 Example 3: Both x2 and x2 are equally important on PC1 The angle between PC1 and the different axis tells us the importance of that variable Examples of using PCA 1. Human-level control through deep reinforcement learning TCE visualizing that if you go in to the artificial neural network, you can see what happens in the “black box”. Here they go to the last layer before the conclusion. How will different input picture forms different clusters? The last layer uses PCA! 2. E.Coli/no E.Coli data in Helsingborg Sea-beaches A lot of E.Coli vs not is clustered 3. XAI (explainable AI) ongoing Diploma Work => Visualize with PCA layers within a complex CNN, convolutional NN; Takes different layers from the CNN and makes PCA-plots on. - PCA plots when it’s fully trained you can see that by each layer the clusters get more separated in the PCA plots. Graph catches lots of non-linear patterns that are actually present. Pearson correlation coefficient, pure statistics Correlation = Relationship between two variables One commando line in Python to find Pearson correlation coefficient! If correlating perfectly => correlation coefficient = 1 NOTE! Correlation coefficient only looks at linear correlation. It can still correlate even though it’s not linear, see picture below. High correlation between variables means that both variables might not be needed. But you want high correlation between feature and target! Code IRIS flowers Look at data (variables) and see if you can see some structure! print(Dataframe.info()) = Gives info about dataframe written in console Desto högre target värde desto viktigare prediktor! Ett högre värde mellan variabler, desto mer följer variablerna varandra och man kan skippa en av dem! Spelar ingen roll vilken av dem som man skippar. Bra sätt att få ner mängden kolonner. Lecture 4 PCA, Principal Component Analysis - Unsupervised learning - Visualisera multidimensional data Data preprocessing - Data i verkligheten är inte perfekt, måste processas! - Ta bort outliers Övningsuppgift_2_lösning.py PCA MNIST-digits MNIST siffror = Bild 8x8 pixlar Block 1: load_digits() = Ladda in digits - data: (1707, 64). Varje rad är en bild med 64 kolonner (64 pixelvärden, 8x8) - 2D matris, kan ses genom dubbelhakparanteser - Varje rad är en sample (en bild) - Varje kolonn är pixelvärden för en bild - target: 1D array (bara en hakparantes), varje siffra säger vilken siffra det ska vara (labels) - images: 3D array, 8x8 pixlar som 2D array istället och en 1707.. Smidigt om det ska plottas ut. Digits = pd.Dataframe. - Kolonner har pixelvärden - Rad är varje bild - Längst till höger = target-kolonn. Vilken siffra det föreställer. Digits.plot() - 64 kolonner och massa rader ger grisig visualisering - Det går att se att siffervärden går mellan 0-.16 för alla datapunkter. (0 = svart, 16 = vit) print(Digits(‘target’).value.counts()) - ger utskrift i terminal kring hur många samples vi har av varje siffra. Ger en bild av hur balanserat datat är! features=Digits.iloc[:,-1] - Viktigt att bara ha features som input, inte target #Visualize a number! Plottar ut bild 2D PCA-plot - Visar hur många klasser vi har (10) - 0 (lila) gör ett fint litet kluster - Ganska mycket överlapp! - Intressant att se vilka siffror som skiljer sig mest! - Täcker bara 29% av ursprunglig data (se kommentar) => Sträcka mellan varje punkt kan vara 70% fel. Varför så lågt? Vi går från 64 dimensioner till 2, blir mycket svårare! Bra argument att gå till en 3D PCA plot! feature_raknikng_sorted = Ger största siffran längst upp, vilken pixel var viktigast? Vilken pixel har mest varians? Den pixeln ändras som mest när man går igenom alla bilder. Pixel 32 är alltid svart => Varians på 0, blir ingen skillnad oberoende på bild. 3D PCA plot - Ger en varians på 40%, mycket bättre än 2D PCA plot. PCA-normalization-and-simulated-defects-in-Iris-data.py Endast 2 typer av blommor 1. Gör en dataframe av Iris 2. Plotta ut dataframe 3. Kolla variabler a. Så att du exempelvis inte har råkat få två likadana kolumnet 4. print(Iris(‘target’).value.counts()), hur många gånger vi har siffra 1 och 2. I detta fall 50 gånger av varje. 2D PCA plot 1. Lite överlapp men ganska definerade kluster 2. Varians gick ner till 92%, eftersom setosa blommor var så väl separerade kluster => PCA axlar som täcker setosa-variansen- 3. Förbättringsutrymme => 3D PCA 3D PCA plot 1. Nästan separerat perfekt! Lite överlapp 2. 98% varians PCA-algoritmen letar efter nya axlar som täcker så mycket varians som möjligt! Men.. Om man har en kolumn med mycket större siffror än andra kolumner. Absolut beloppet av variansen blir mycket större! => PCA är känslig på storleksordningen av varje kolumns data! Sepel width och sepel length kolumnen => Ändra enhet till mm istället (10x så stora siffror) Titta på datat i Iris2 => Första två kolumner har nu 10x så stora siffror som tidigare. Om olika kolumner mäter olika stora fysiska enheter kan skillnaden mellan siffrorna bli väldigt stor! Resultatet blir inte alls lika separerat! - PCA fokuserar på sepel kolumner med större värden - Nu ligger det mer parallelt med sepel width (vilket var en dålig prediktor eftersom den inte skiljer sig mycket) - Varians gick upp till 99% => Låter bra men iom att det bara är två kolumner som dominerar så går vi från 2D till 2D. PCA-plot är sanningsenlig men tittar bara på sepel width och sepel length, inte hur alla 4 features jobbar tillsammans! Om man vill att PCA ska ta lika stor hänsyn oavsett enhet => Normalisera! Normalisera Vanlig paket: StandardScaler Alla kolumner skalas till centrerade vid 0. Gaussian/normalfördelat Värdet på alla kolumner ändras, alla siffror är centrerade kring 0. Alla kolumner har lika mycket att säga till om! Normalisera alltid kolumner innan PCA-visualisering! Varians har nu gått ner till 88% - Varje kolon har precis lika mycket att säga till om. 4D till 2D print(pca_model.components) = Vilka features är viktiga för PCA-plotten. Stor siffra menas mer att säga till om, och vice versa. Ta reda på om varje kolon ska ha lika mycket att säga till om, gör isåfall normalisering först innan PCA! Preprocessa data NaN värden dropnan() = kommando för att ta bort rader med NaN Kan vara lite ooptimalt att slänga bort samples! Det som saknades var target-labelen, alla andra features hade vi! => Göra en klassifisering på blomman utifrån features Kan predicta vilken klass blomman ska vara med en klassifiseringsmodell som testas på en del av den kända datan! Utstickande värden (outliers) - Kan vara mänskliga misstag - Titta på alla andra blommor av samma klass och deras värden på petel length = Ta ett medelvärde av alla dem och stoppa in. 1. Plocka ut alla rader där target = 1 2. Räkna ut medelvärdet och stoppa in värdet på rätt position Vi kan också använda resterande inputvärden för blomman och använda en regressionsmodel för att predicta vad det saknade värdet borde vara! Borde korrelera med något annat värde på blomman Pearson Correlation Coefficient Dataframe.corr() = Blixtsnabb korrelation mellan olika kolumner (mellan features och features/target) Bra att göra innan man börjar med komplicerad ML! Relationen mellan två st variabler (x,y) Lutningskoefficient och korrelations koefficient är nära besläktat! Om alla datapunkter är utspridda och inte ligger på en rät linje blir r = 0 Pearson Correlation Coefficient letar endast efter korrelation utefter räta linjer! Om icke-linjär struktur, kommer correlation bli 0. Kan dock ha värdefull struktur! => Korrelations coefficienten ska endast fungera som en indikation för hur lätt eller svår uppgiften kommer vara! Korrelation mellan target och feature: = Så högt som möjligt! Behåll dessa. Andra kolonner kan dumpas. 2-Class Classification Machine Learning 1. Data pre-proccessing För att inte behöva ta all data: Head = Första rader Tail = Sista raderna 2. Randomly select 80% of data for training and 20% for testing. - Hide the testing data until time for testing - 80% and 20% random samples At the end, Evaluate models performance on both training and testing set - Good for spotting over/underfitting Overfitting: Hög accuracy på träningsmängd och låg accuracy på testmängd. Underfitting: En modell som är för enkel. En accuracy på träningsmängden som är låg, också låg på testmängden. Ska ha lika hög accuracy på tränings och testmängd! The random selection of test and training data Setting a “seed”: The data is randomly selected, but it will be the same data selection every time (good for reproducing the same results) Not setting a seed: Every run will give a new random selection. Good for (ethical) experimental uncertainty of performance claimed of your model. 3. Choose a Model algorithm - Thousands to choose from, each one good on certain data and on certain tasks. - Your experience and knowledge will narrow down the choice. - Try a couple of algorithm and check performance. Note: ML performance (different algorithms) and variable importance ranking also teaches you about the data as a bonus to your prediction results. 4. Fit the model to the training data - The “learning” part - Usually, finding minima of error function. => Need for derivatives, calculus and vector algebra. 5. Evaluate the performance Accuracy a = TP + TN / (TP + TN + FP + FN) TP = true positve Prediction by the ML model is the positive class. And the true (label) is also the positive class. Prediction positive Label positive TN = true negative Prediction negative class Label negative class FP = False positive Prediction positive Label negative FN = False negative Prediction negative Label positive Lecture 5 Repetition - Vi vill alltid visualisera vår data => 4 features måste reduceras ner för att kunna se det. - PCA visualization (unsupervised ML) - Skiljer sig från ren statistik eller matrisalgebra när datat är stort (antal features och samples) behövs en numerisk approximativa lösningar (börjar med PCA1, kollar varians, förflyttar och räknar ut ny varians osv osv. tills en approximativ lösning nås => Går in i ML (= numerisk steg för steg iteration)) - Verklig data har alltid defekter! Behövs data pre-processing (garbage in garbage out) - ML kan användas för att hitta outliers (onormala värden) - Baseline = Lösningen att ta medelvärdet för alla andra värden när ett värde behöver bytas ut/saknas - Ta resterande tre givna features värden som prediktorer => Gör en modell som tar dessa som input och ger output för det saknade värdet. - 80/20 tränings/test split - Overfitting = En modell som är för detaljerad - Underfitting = En modell som är för enkel Linear Regression Använder standard linjär regression (“least squares fit”), alltså anpassa en rak linje funktion till datat, y = kx + m. I statistik, används all data för anpassningen och målet är att hitta ett värde för k och m. I ML, målet är att använda y = kx + m, anpassat till träningsdatat och testat mot testdatat. Least Squares Fit Avståndet från en datapunkt till en rak linje Error contribution of this datapoint, (y1 - (kx1 + m))^2 Vertikalt avtånd till linjen är “felet” Total error to minimize by numerical iteration (find parameters k and m): Sum of all the error contributions from all training datapoints. k and me can be thought of as “tuning knobs” tuned to fit the training data optimally. Skillnad med PCA: - Avståndet mellan räta linjen från datapunkten som var vinkelrät mot axeln som minimerades Evaluation of performance on the testing data MSE = Mean Square Error Sum over all test samples and divide by the number of test samples Another one is MAE (mean absolute error), average over all test samples absolute value error. MAPE = Mean Absolute Divided by mean value of test samples Artificial Neural Networks ML Linear Regression predicts target value (y) = k1*x1 + k2*x2 + ….. + m Varje pil är en matematisk beräkning, i output-neuronen summeras alla inputs + konstant Ett av det mest basic neurala nätverk fungerar exakt som linjär regression! Fördelar med neurala nätverk: - Tillåter icke-linjära komponenter och beräkningar Non-linear regression k1, k2, m1, m2 ska bestämmas när man tränar på en datamängd! - Exakt samma beräkning som tidigare, summera alla inputs + konstant MEN en matematisk beräkning (squiggle ex: e-funktion, log-funktion, en icke-linjär funktion) på resultatet! - Sista steget är som i linjär regression, men resultat blir inte rät linje/rät plan utan kurvigt! Exempel med Python-kod: Predict petal length Importera paket train_test_split =paket som gör tränings/test split linearRegression = linjär regression mean_absolute_percentage-error = MAE df.tail = ger sista 100 raderna av dataframen Undersök förhållande mellan parametrar Vid undersökning av förhållande mellan length och width kan vi se ett linjärt samband som inte går att ignorera helt! Kanske kan vara värt att använda sepel length och sepel width för att se hur de korrelerar med petel length - Lite korrelation men inte riktigt Sepel width och petel length? - Ganska stort moln - Ingen riktig korrelation Välj parametrar.drop([“”], axis=1) = droppar petal length pga analys ovan np.asarray() = gör om till array som man oftast vill köra på Förutsätter 2D array, därför är arrayen 2D! X = tre input features (sepal length, sepal width och petal width) y = target-kolonnen (petal length kollonnen), 1D array (måste ha lika många rader som input features X) train_test_split(X, y, test-size=0.2, random_state=42) = Dela upp datamängd i träning och testmängd. Om man vill ha olika resultat varje gång man kör om kommandot, sätt random_state = none. Ger nya uppdelningar av tränings och testmängd varje gång. Träna reg = linearRegression().fit(X_train, y_train) = Linjär regressionsmodell som tränas på X_train och y_traing med fit() reg.predict(X_test) = Använd tränade linjära regressionsfunktion på testmängd för att få ut predictade y-värden. Jämför Jämför y_test och y_test_predict => Plotta mot varandra! Räkna ut fel mean_absolute_percentage_error(y_test_predict, y_test) = Ger ett medelvärde på fel reg.predict(X_train) mean_absolute_percentage_error(y_train_predict, y_train) = Predicta på träningsdatat för att se hur väl får linjär regression matchar mot vårt träningsdata. Vanligt att få lite bättre värde på felet. Om vi får mycket skillnad = overfitting, för detaljerad model. Predicta blomma 51 reg.predict(X_flower51) = Predict på en specifik blomma. ML classification Decision Tree Feature 1: “The fruit is from coop”. very bad Feature 2: “The fruit is yellow”, A bit better, but some apples are also yellow. Feture 3: “The fruit is 15cm long”. This is really good! A decision tree for “Apples and Bananas” could look like the above. - Binary tree with yes/no 1. Vilken feature ska man börja med? Rot-noden. Denna som separerar så bra som möljligt på träningsdatamängden, threshold. 2. I varje steg försöker modellen hitta ett bättre threshold-värde och noder för att separera frukterna så bra som möjligt. GINI index - Vanligt sätt att veta vart det ska separeras, threshold. - Ska vara så litet som möjligt Ex: 10 training samples, 6 apples and 4 bananas (true labels) Hur många var bananer vs äpplen som gick respektive väg? - Till vänster: Dålig separation => Ett visst GINI index - Till höger: Bättre separation => Ett visst GINI index - Summera GINI-index för alla noder. - Välj det valet som hade lägst GINI index! Räkna ut GINI index Ex: Node 2 (vänster), GINI index = 0.5 Node 3 (höger), GINI index = 0.375 1. Learning or training = iteratively find which feature is the best to use at each splitting node, and what value is the optimum (giving the lowest GINI index of the decision question) 2. If Tree gets very big to fit the training data perfectly = overfitted 3. If it’s stopped too early, close to the root, not detailed enough = underfitting 4. It is straight forward to have more than 2 classes, this is automatically sensed in the scikit learn algorithm (from label column) Random Forest => När man har fler träd! Bonus result 1: - Helps against overfitting, each tree haves randomly selected features - Each tree makes a prediction and the final prediction is a majority vote. - Default i Python är 100 decision trees! Ex: 100 trees RandomForest model gets 65 trees predicting apple, 35 trees predicting banana => 65% it is an apple! - Very useful to know how certain each prediction is. - Corresponds to how much in the middle of a cluster a new sample is. Bonus result 2: - Feature importance ranking. An important feature will occur in many trees and particular high up close to the root node. Chosen root node is the most important and separates the data the best, Lecture 6 ML Linjär Regression VS Baseline model - Är linjär regression bättre på att få till ett nytt värde? Pythonscript - Linjär regression på petel-length Predicta petel length utifrån dem andra features! 1. Dela upp features och target Kolla så att X och y är lika många 2. Utvärdera resultat med MAPE Skapa en lista och gör en for-loop som - Delar upp test och träningsmängd - Fit(), anpassar alla parametrar enligt y = kx + m + p1 + p2 ….. - Bestäm parametrar genom least square fit - Jämför test-predictions med y_test - Lägg till det värdet i den tomma listan 3. Medelvärdet av MEAN-listan 4. Får ut ett felvärde 5. Kör om samma med små variationer! Vilka input-features är viktigare än andra? Lek med att ta bort vissa features och se hur det påverkar resultatet! Ex: Droppa petel length, sepel width och sepel length. Kolla MAPE mean! Blir lite sämre, de borttagna parametrarna bidrar med info! => Prova med fler parametrar! 6. Jämför med Baseline-modell => Ersätta petel-length värde med medelvärde Viktigt att göra precis på samma sätt! Resultat: Maskininlärning har halverat felet! Exercise 3 Predicta petel width! (Röd kurva) Repetition - Decision tree Model Rot-frågan: Den fråga som delar upp datat så mycket som möjligt! Nästa fråga => Ny feature, ny kolonn! Att bestämma: - Hur ska trädet se ut? - Vilken fråga i vilken ordning? - Vilket threshold-värde? 1. The “Learning” or “training” is to iterative find which feature is the best to use at each splitting node, and what value is the optimum (giving the lowest GINI index of the Decision Question) 2. If the Tree gets very big to fit the training data perfectly => Overfitted 3. If it stopped too early, close to the root, it will not know enough => Underfitted Random Forest Predicta klass på blomma i dokument med fel i IRIS-blommorna Input = 4 kolonner Output = Target Är det virginica eller versicolor? Binärt! test_prediction VS y_test => Hur bra predictades det? Räkna ut en accuracy för att se hur vi gjorde på testmängden! Mha TP, FP, TN, FN Räkna ut medelvärde på accuracy! Bonus-resultat med Random Forest: - Feature importance ranking! Petel width var bättre än petel length Plotta ett träd och jämför med graf! Lecture 7 Logistic Regression => Används till klassifisering Logistic = Antyder klassifisering Regression = I modellen använder vi en regressionsanpassning. Men istället för en rät linje blir det en kurvig linje. Sigmoid-funktion beskriver fördelningen! Notera! AX1 + B är en rät linje Om X1 => ∞ Går allt mot = 1 Om X1 => -∞ Går allt mot = 0 Tecknet på A = Bestämmer om sigmoid är växande eller avtagande Storlek på A = Avgör hur brant kurvan är i övergången Konstant B = Skiftar kurvan till höger eller vänster, tar hand om vart skiftet från klass 1 till 2 sker. Fler input-features ger: Threshold Threshold värde för varje feature Sigmoid-funktion behövs för att hitta det bästa threshold-värdet! Vanligtvis 0.5 Kokar ner till ett, det bästa, threshold-värdet! Notera! Man kan ha två threshold-värden. En nära y=1 och en y=0 exempelvis. Om vi får ett väldigt högt p-värde, nära det högre thresholdvärdet => Sannolikheten väldigt hög att den ska klassificeras till den klassen. IRIS-blommorna Desto större blad desto mer sannolikt att det är Virginica. Ingen riktig hierarkisk struktur P-värdet Sannolikheten att vi har klass 1 Om P är > 0.5 => Klass 1 Om P är < 0.5 => Klass 0 Feature ranking Vilken input variabel var viktigast? Ex: Vi har en feature X1 - A blir väldigt litet, i princip 0. Ger alltid 0 för alla X1-termer - Spelar ingen roll vad X1 är för något => Ingen viktig feature - Stor skillnad vad X1 är för något => Viktig feature Example, IRIS flowers Idea: Classify new sample to the same class as the closest known (training data) sample Feature distance, Cartesian: => KNN, K-Nearest-Neighbor K = Hur många blommor i närheten av testblomman ska du kolla på? Den klass som dominerar runt punkten blir den klass som punkten tilldelas. Bra om: Man får flera olika kluster där flera kluster hör till samma klass. KNN är väldigt lokalt och tittar i närheten av en viss punkt! OBS! K-Means algorithm => Handlar om clustering INTE om klassificering! Accuracy Pit-fall Vad händer om vi har unbalanced data? Ex: We have 50 versicolor and 5 virginica After Train-Test split, say: Train: 40 versicolor, 4 virginica Test: 10 versicolor, 1 virginica First problem, heavy trained on majority class Training set almost only have versicolor, the error from every datapoint will become heavy weighted for versicolor flowers and very little for virginica since we have so few. Model will work very well for versicolor and very poor for virginica! Second problem, it always predicts versicolor Model so simple it always predicts versicolor, never predicts a virginica flower. Very high accuracy for versicolor Very low accuracy for virginica => Too high accuracy and wrong accuracy on test-set!! 3-class IRIS Classification Decision Tree => See how the nodes look. How many flowers are in every node? Confusion matrix Normaliserade = Har delat med totala antalet sampels I olika lådorna brukar det vara antalet samples, inte i detta exempel. 10-class MNIST Digits Pixel 0 => Feature X1 Pixel 1 => Feature X2 …. Pixel 63 => Feature X63 8x8 pixels Sista kolonnen har target value! Köra mest med random forest för att klassificera! Random forest kommer att ranka pixlarna längst ut väldigt lågt och inte ha med dem i trädet, framförallt inte nära rot-noden! Task: Visualize One Decision Tree - Play with parameter setting of random forest and see which gives highest test accuracy! Looping this is called => Hyperparameter Grid Search “Pre-testing” is called => Validation Set Lecture 8 Kodsnutt X och Y = "Branthet" C = Var grafen går ner Ta fram en Baseline Två klasser, klassificera vilken klass en ny blomma tillhör! Plocka ut alla features Stratify = sätter exakt lika många blommor av varje klass i tränings och testmängden. Random Forest Classifier med Random Forest Räkna ut TP, FP, TN och FN Ett högre antal varv ger ett mer stabilt medelvärde Logistic Regression Baseline - Tittar på en blomma och försöker hitta den blomma som är mest lik från textmängden. - Samma tanke som med KNN - Här sätts k till 1, alltså kollar vi bara på 1 granne. - Använder sig av alla 4 feature värden - 1000 i denna loop, ger mer stabilt medelvärde. Ännu enklare baseline - Endast en feature Lecture 9 We have made a prediction on MNIST numbers How can we improve accuracy? More attention to tricky classes 1. Give more attention to tricky classes, ex; 6 and 8 might be similar but 1 is very simple. We can make the model “worse” for 1 and better for trickier cases! - Focus training more on 6 and 8 than 1. - In any algorithm that is trained: Every training sample contributes to the total error is minimized. => To give certain classes more “say” to the total error How? 1. Have more training samples of the prioritized class (the tricky class) 2. Weigh the error contribution from the prioritized class (multiply with a factor > 1 when this is suitable for the algorithm) 3. Prediction probabilities for every test sample for every class will also help us. which class was harder to classify. Reduce overfitting - Too many features, and/or too complex model - Too good on test data and too bad on training data How? 1. Fewer features using: a. PCA reduction, most important features only. Model and algorithm independent. b. Can also use Random Forest and decision trees for this and using the prediction ranking list. Gives a simpler model. 2. More training samples a. Artificially made, “Data Augmentation”, Realistic new samples. For MNIST the numbers might be shifted, rotated etc. Only on training data, not on test data! 3. Upsamling an unbalanced dataset (only training) a. Say class 1: 100 samples and class 2: 20 samples. Instead of selecting 20 samples (we don’t want to throw away 80) from class 1 we can take the 20 samples and make some copies up to 100. The error that is minimized will be more even between the classes since it’s the same amount of samples in both. When? Why? - Too few samples - Samples with labels usually cost lots of money - Few test samples => - Few training samples => Model will be adjusted to fit these perfectly. It will keep adjusting until the error is almost 0. - 100% accuracy on training samples and 0% accuracy on test samples Another test evaluation metric: Sensitivity Ex: Imagine a medical test Class 1, negative, no disease Class 2, positive, has disease What is worse? FN: Predicted no disease but has disease FP: Predicted disease but has no disease => Maybe FN The accuracy = (TP+TN) / (TP+TN+FN+FP) it doesn’t care between FN and FP! Sensitivity: TP / (TP + FN) If FN = 0 then sensitivity = 1 Accuracy give an overall evaluation Sensitivity focuses on FN’s contribution If the other way around, Specificity Specificity TN / (TN + FP) Specificity focuses on FP’s contribution Important metrics: Accuracy, Sensitivity and Specificity Note! The denominator can not be 0 when using sensitivity or specificity. Can happen if we don’t have a TP or FN. Lecture 10 Artificial Neural Networks - Needs installation of TensorFlow and Keras TensorFlow Flow: Calculations from left to right Tensor: A matrix with values on parameters The parameters can be put into matrixes, calculations will be matrix calculations! A simple linear NN for regression (predict a number) The machine learning tries to find: - The best values of the parameters A, B, C and D Input Layer - Every input feature have a corresponding input neuron Training Scheme A, B, C random initial values. D = 0 initially. Note! x,y and z are now constants and A, B, C and D will vary. 1. Use error calculation. Sample 1: a. Send in features x,y, and z into NN. b. The network calculates f value. c. Compare f with Sample 1 target value. Error = (f - target)^2 d. Go through all training samples and collect error contributions to total error. See how good the value of the parameters are. Tweak depending on result and try again. 2. Use calculus (derivatives, chain rule, backpropagation) to guide which direction A, B, C and D should be tweaked (small baby steps). Backpropagation = Start with outer layer and calculate derivatives. When going to the next layer you can use the derivatives from the previous layer. Chain rule! 3. Tweak all parameters (Gradient descent), step to go down. 4. Repeat from step 1 until the total err doesn’t decrease any more. Done! Sometimes there is not only one error pit! Find the best global minimum. A simple NN for classification (logistic regression) In principle, a training sample of class 0 has a target y-value = 0 and a training sample of class 1 has a target y-value = 1. When we add more layers with activation function in between input and output layer => Deep learning 1. In inputlayer: Parameters are multiplied with neuron value. 2. Send to next layer. 3. The values are summed together. 4. The sum is put into a non-linear function, ex: Sigmoid. Output is a non-linear value. 5. Multiply by some parameters and send to next layer. 6. Last layer. Either send out as it is (for regression) or add another sigmoid (classification) which provides a non-linear value. How can we change the architecture? Input-layer: Will always corresponds to the number of inputs. Output-layer: Will always be one. Other layers: We can decide how many! A benefit with neural networks. Neurons: Can have different amount of arrows to it (Remember an arrow represents the value being multiplied with parameters) Dense: If the neuron get arrows from all the neurons in the previous layer. Convolutional: Removes arrow in smart way. Training a NN Take a Regression problem Training Data: Feature 1 Feature 2 Label Sample 1 2.1 -1.3 6.7 Sample 2 1.8 -0.7 5.9 Network prediction on Training Data Iterating from random parameters to trained parameters Now, tweak all parameters A, B, C to get better predictions and smallter total error. Re-Inforcement learning No data to begin with => Our agent are going to try. Award for correct action and punishment otherwise. Trial-and-error! Agent creates own tabel out of trial-and-error experience. Action space: What can the agent do? Action 5: Making a drop-off State space: What states can the agent be? Ex: 16, depending on where it is. Reward; +30p when picked up properly -1p for each taxi step Value-based re-inforcement learning: Driver learning what to do from Map Value: The obtained total rewards if acting optimally from that state until end-of-game. Ex: Higher value when taxi is closer to drop-off position, see map below. Policy: What the taxi should do. 1. Finds all values of the map 2. Logic policy, do the action that gives the highest value possible. Calculation for value, Bellman equation - In the beginning the state values are all 0 in the map. - Iterating the map using the calculation for value eventually gives reward values in map - The calculation for the agent to learn Driver learning from Trial and Error Q value - Two parameters: S, A - S = State - A = Action - Difference between Value and Q Value: Q value doesn’t only look at states but also at actions in that state. Q-table Colons = Actions Rows = States When training is finished, it will have the Q table to use. 1. Look into Q-table to see where it is (Position 16) 2. Look at what action is best (north) 3. Now in state 11 4. Choose action with highest value Lecture 12 Quiz, 18-19 - Test quiz out on Canvas - 10 multiple choise questions - 6 in ML, 2 in mathematics, 2 in Python programming Godkänd: 6 av 10 VG: 9 av 10 Om Sensitivity = 1, ingen FN, vilket inte stämmer Om Accuracy = 1, Inget bidrag på FP och FN, stämmer inte. Re-Inforcement learning, smart taxi Q-table Rad: Olika tillstånd (vart den står) Kolonnerna: Olika actions Trial and Error - Provar och ser vad den får rewatds för! - Lägger in det i Q-table baserat på hur det gick Mål: - Gå från ett Q-table med bara 0 till ett som stämmer. - Policy väljer rätt action i varje tillfälle - Siffra för perfekt action ska vara störst - Sluta träna när det inte är några förändringar längre. Formel ovan leder till alla värden i Q-table inte är heltal. Dessutom tas små små steg LR = Learning Rate, hur stora steg ska vi ta. Oftast 0.1, vilket ger decimaltal. Python kod sp = np.array([[], [], …]) = 2D array. Siffror definerar vad som kommer hända (actions). Sp är tillståndet man kommer till och s är det man står i. def step(s, action): next_state=sp(s) reward = -1 if(action==5): … Q-values = bara nollor till en början

Use Quizgecko on...
Browser
Browser