How to interpret decision tree results in python. Step 2 – Types of Tree Visualizations.

Contribute to the Help Center

Submit translations, corrections, and suggestions on GitHub, or reach out on our Community forums.

Number of children at home <=3. Aug 6, 2023 · Unfortunately, the results are often worse than in our case. So how do interpret those values? Jan 25, 2022 · Decision Trees with Python more content at https://educationalresearchtechniques. predict (X_test) 5. Features: sepal length (cm), sepal width (cm), petal length (cm), petal width (cm) Numerically, setosa flowers are identified by zero, versicolor by one, and Aug 22, 2023 · Classification using Decision Tree in Weka. iloc[:,2]. Please help me plot a tree of higher resolution as the image gets blurred when I increase the tree depth. Refresh the page, check Medium ’s site status, or find something interesting to read. fit(X,y) # Visualising the Decision Tree Regression results (higher resolution) X_grid = np May 18, 2021 · The dtreeviz is a python library for decision tree visualization and model interpretation. Nov 2, 2022 · Flow of a Decision Tree. So, while this method of visualization is not the worst, we must Aug 5, 2018 · For instance, Decision Tree models can be interpreted simply by plotting the tree and seeing how splits are made and what are the leafs’ composition. Mar 6, 2022 · 1. In the following examples we'll solve both classification as well as regression problems using the decision tree. datasets import load_iris. In this tutorial, we will focus on building a Decision Tree Regressor using Python and the scikit-learn library. Since your class weights aren't integers, the resulting values are the way they are. This is a plot that shows how a fit machine learning algorithm predicts a coarse grid across the input feature space. 9. Nonetheless, when running the following script: it prints out Feb 26, 2021 · A decision tree is a flowchart-like tree structure where an internal node represents feature (or attribute), the branch represents a decision rule, and each leaf node represents the outcome. close() Copying the contents of the created file ('dt. 2 Random Forest. Decision tree designed without limitations on depth or impurity in a split will create a very complex tree, with a leaf for each Nov 22, 2021 · Classification and Regression Trees (CART) can be translated into a graph or set of rules for predictive classification. A predicted value is learned for each partition in the “leaf nodes” of the learned tree. While other machine Learning models are close to black boxes, decision trees provide a graphical and intuitive way to understand what our algorithm does. It can be an instance of DecisionTreeClassifier or DecisionTreeRegressor. tree import DecisionTreeClassifier from sklearn import tree classifier = DecisionTreeClassifier(max_depth = 3,random_state = 0) tree. You'll also learn the math behind splitting the nodes. #. qualities of a house) will be used to predict a continuous output (e. I was expecting either MaritalStatus_M=0 or =1) I am following a tutorial on using python v3. Jan 1, 2023 · Final Decision Tree. Decision trees are very interpretable – as long as they are short. The decision rules generated by the CART predictive model are generally visualized as a binary tree. import pandas as pd . Assume that our data is stored in a data frame ‘df’, we then can train it LIME supports explanations for tabular models, text classifiers, and image classifiers (currently). The explanations should help you to understand why the model behaves the way it does. From the analysis perspective the first node is the root node, which is the first variable that splits the target variable. It works for both continuous as well as categorical output variables. Plot Tree with plot_tree. In this tutorial, you’ll learn how the algorithm works, how to choose different parameters for your model, how to… Read More »Decision Tree Classifier with Mar 11, 2018 · a continuous variable, for regression trees. Your model is considering categorical variables at numerical and H2O provides you the option to change that using categorical_encoding. Visualize the Decision Tree with graphviz. A decision tree follows a set of if-else conditions to visualize the data and classify it according to the conditions. Here is a visual comparison of the visualization generated from default scikit-learn and that from dtreeviz Oct 17, 2022 · LIME is a model-agnostic machine learning tool that helps you interpret your ML models. Visually too, it resembles and upside down tree with protruding branches and hence the name. The decision tree provides good results for classification tasks or regression analyses. Update Mar/2018: Added alternate link to download the dataset as the original appears […] Nov 28, 2023 · Introduction. It is a tree-based algorithm that divides the entire dataset into a tree-like structure based on certain conditions. This algorithm can be used for regression and classification problems — yet, is mostly used for classification problems. clf = DecisionTreeClassifier () # Train Decision Tree Classifier. 6 to do decision tree with machine learning using scikit-learn. Parameters: criterion{“gini”, “entropy”, “log_loss”}, default=”gini”. LIME uses "inherently interpretable models" such as decision trees, linear models, and rule-based heuristic models to Once you've fit your model, you just need two lines of code. tree import export_text. . So, as you can see, decision trees make decisions much like we do, by asking questions, weighing options, and choosing the most informative path. One of the easiest ways to interpret a decision tree is visually, accomplished with Scikit-learn using these few lines of code: dotfile = open("dt. But that does not mean that it is always better than a decision tree. Though I am not sure how to interpret the results. Moreover, when building each tree, the algorithm uses a random sampling of data points to train Aug 27, 2020 · Plotting individual decision trees can provide insight into the gradient boosting process for a given dataset. Splitting: The algorithm starts with the entire dataset Jun 6, 2023 · At a basic level, a decision tree is a machine learning model that learns the relationship between observations and target values by examining and condensing training data into a binary tree. # method allows to retrieve the node indicator functions. Apr 1, 2020 · In order to visualize decision trees, we need first need to fit a decision tree model using scikit-learn. 1 Iris Dataset. If this section is not clear, I encourage you to check out my Understanding Decision Trees for Classification (Python) tutorial (blog, video) as I go into a lot of detail on how decision trees work and how to use them. April 2023. Supported criteria are “gini” for the Gini impurity and “log_loss” and “entropy” both for the Shannon information gain, see Mathematical Jan 11, 2023 · Here, continuous values are predicted with the help of a decision tree regression model. which is a harsh metric since you require for each sample that. compute_node_depths() method computes the depth of each node in the tree. com/l/tzxohThis webinar Mar 8, 2020 · The main advantage of decision trees is how easy they are to interpret. In this article, I will try to interpret the Linear Regression, Lasso, and Decision Tree models which are inherently interpretable. Apr 14, 2021 · Apologies, but something went wrong on our end. fit(X_train,y_train) Et voilà, out model is Jan 6, 2023 · Fig: A Complicated Decision Tree. Step 2: Initialize and print the Dataset. A depth of 1 means 2 terminal nodes. It is considered as the building block for Random Forest and Gradient Boosting models A decision tree is a flowchart-like tree structure where an internal node represents a feature (or attribute), the branch represents a decision rule, and each leaf node represents the outcome. A python library for decision tree visualization and model interpretation. Jun 22, 2018 · I'm currently in the middle of my first machine-learning and so far I don't quite get the scale of the values that I get from decision_function(X) (Nor how to understand them). values #Creating a model object and fiting the data reg = DecisionTreeRegressor(random_state=0) reg. The Decision Tree is a machine learning algorithm that takes its name from its tree-like structure and is used to represent multiple decision stages and the possible response paths. # Create Decision Tree classifier object. To make the rules look more readable, use the feature_names argument and pass a list of your feature names. X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=1) Next, we create and train an instance of the DecisionTreeClassifer class. May 17, 2024 · Decision Tree is a decision-making tool that uses a flowchart-like tree structure or is a model of decisions and all of their possible results, including outcomes, input costs, and utility. Random Forest is an ensemble of Decision Trees. These values represent the weighted observations for each class, i. model = DecisionTreeClassifier(random_state=16) model. Decision Tree From Scratch in Python. NOTE: You can support StatQuest by purchasing the Jupyter Notebook and Python code seen in this video here: https://statquest. A decision tree is one of the supervised machine learning algorithms. However there’s no specific way to do that with RandomForest or XGBoost, which are usually better at making predictions. Both have weights applied to them, to take care of right censored information issues. iloc[:,1:2]. Trees can be visualized. I have come to the point where I want to know the important features in the data set. each label set be correctly predicted. Here is the code; import pandas as pd import numpy as np import matplotlib. The dtreeviz is a python library for decision tree visualization and model interpretation. pyplot as plt. Jun 4, 2021 · Decision Tree is a popular supervised machine learning algorithm for classification and regression tasks. At first, I thought the features are listed from the most informative to least informative (from top to bottom), but examining the \nvalue it suggests otherwise. 2) I am especially unsure if my column features for both KNN and Decision Tree are the same, to reflect the same result. This is a recursive partitioning method where the feature space is continually split into further partitions based on a split criteria. Introduction. export_text #. Let’s get started. The code uses only NumPy, Pandas and the standard…. Decision trees are constructed from only two elements – nodes and branches. It overcomes the shortcomings of a single decision tree in addition to some other advantages. After printing out the important features I get an array of values which I cannot quite interpret. Decision trees are the fundamental building block of gradient boosting machines and Random Forests(tm), probably the two most popular machine learning models for structured data. In multi-label classification, this is the subset accuracy. However, a decision plot can be more helpful than a force plot when there are a large number of significant features involved. Jun 12, 2021 · Decision trees. We provide the y values because our model uses a supervised machine learning algorithm. For instance, in the example below, decision trees learn from data to approximate a sine curve with a set of if-then-else decision rules. 1 Decision Trees. Jan 9, 2022 · 3. Compared to other Machine Learning algorithms Decision Trees require less data to train. In addition, decision tree models are more interpretable as they simulate the human decision-making process. The decision tree estimator to be exported. If you want to get class counts, you can simply divide your values by class weights. Here’s how it works: 1. Finally, select the “RepTree” decision Nov 3, 2023 · In decision tree regression, the algorithm builds a tree-like structure to predict a continuous target variable. The structure shows how the data is partitioned into smaller subsets based on the May 14, 2024 · Decision Tree is one of the most powerful and popular algorithms. Decision trees are intuitive, easy to interpret, and can handle both numerical and categorical data. Jul 9, 2019 · NA basically shows that you go left if value is smaller than threshold or is null. In this article, We are going to implement a Decision tree in Python algorithm on the Balance Scale Weight & Distance May 18, 2021 · dtreeviz library for visualizing tree-based models. Click here to buy the book for 70% off now. So, we should start with the elementary building block — Decision Tree. One starts at the root node, where the first question is asked. Each decision tree in the random forest contains a random sampling of features from the data set. clf = clf. The number of terminal nodes increases quickly with depth. In this tutorial you will discover how you can plot individual decision trees from a trained gradient boosting model using XGBoost in Python. The following example represents a tree model predicting the species of iris flower based on the length (in cm) and width of sepal and petal. Now that we have the data, we can create and train our Decision tree model. This article was published as a part of the Data Science Blogathon! Aug 10, 2021 · DECISION TREE (Titanic dataset) A decision tree is one of most frequently and widely used supervised machine learning algorithms that can perform both regression and classification tasks. The tree look like as picture below. predict(iris. I thought accuracy of decision tree would be higher. ----------. Python. May 15, 2020 · Am using the following code to extract rules. Decision Tree is one of the powerful algorithms that come under the non-parametric Supervised Learning Technique. In our example of predicting wine quality, we will be solving a regression task, so let’s start Jun 8, 2023 · In this blog post, we’ll walk through a step-by-step guide on how to implement decision trees in Python using the scikit-learn library. You'll do so using all the 30 features in the dataset, which is split into 80% train and 20% test. Continuous Variable Decision Trees: In this case the features input to the decision tree (e. e. For regression trees, the prediction is a value, such as price. Load the data set using the read_csv () function in pandas. Dec 9, 2019 · Decision Tree result. 5 Useful Python Libraries for Decision trees and random forests. Import Libraries May 8, 2022 · A big decision tree in Zimbabwe. Each child node asks an additional question, and based upon Summary. Divide the dataset into the subsets based on the possible values of the selected attribute (in Step 2) Repeat the above steps for all the subsets created until Jun 18, 2021 · Similarly, 20 * 0. Some advantages of decision trees are: Simple to understand and to interpret. 9 = 18, so we have 20 samples of the class weighted at 0. MaritalStatus_M <= 0. clf = DecisionTreeClassifier(random_state=0) iris = load_iris() tree = clf. They help when logistic regression models cannot provide sufficient decision boundaries to predict the label. We can interpret Decision Trees as a sequence of simple questions for our data, with yes/no answers. 1. Jul 27, 2019 · Therefore, we set a quarter of the data aside for testing. 5 (M- Married in here and was a binary. This a Churn model result. . To demonstrate, we use a model trained on the UCI Communities and Crime data set. Note: Both the classification and regression tasks were executed in a Jupyter iPython Notebook. Note that backwards compatibility may not be supported. I have a data set of 11800 lines and around 50 rows. drop(['Frozen'], axis = 1) # TODO: Split the data into training and testing sets(0. Read more in the User Guide. target) tree. They are powerful algorithms, capable of fitting even complex datasets. In other words, if a tree is already as pure as possible at a depth, it will not continue to split. Now, let me introduce you to how to train the Decision Tree Classifier in Python using scikit-learn on Iris Species Dataset. The next video will show you how to code a decisi Jun 30, 2018 · The decision_path. Let’s see what a decision tree looks like, and how they work when a new input is given for prediction. The term model-agnostic means that you can use LIME with any machine learning model when training your data and interpreting the results. Then each of these sets is further split into subsets to arrive at a decision. Each leaf in the decision tree is responsible for making a specific prediction. Aug 11, 2022 · Note: Remember, the goal here is to visualize our decision trees, thus any sort of split of the dataset in train and test set or other kinds of strategies to train the model will be executed. The results of CART can be interpreted by examining the structure and the predictions of the decision tree. Jul 31, 2019 · It is important to keep in mind that max_depth is not the same thing as depth of a decision tree. dot", 'w') tree. # indicator matrix at the position (i, j) indicates that the sample i goes. Decision trees are preferred for many applications, mainly due to their high explainability, but also due to the fact that they are relatively simple to set up and train, and the short time it takes to perform a prediction with a decision tree. – Vlad_Z. The model uses 101 features. Jul 12, 2023 · This is the new ‘decision node’. Step 1: Import the required libraries. After training the tree, you feed the X values to predict their output. tree import DecisionTreeClassifier. In decision tree classifier, the Nov 19, 2023 · Nov 19, 2023. They are versatile, easy to interpret, and can handle both classification and regression tasks. The function to measure the quality of a split. A decision surface plot is a powerful tool for understanding how a given model “ sees ” the prediction task and Apr 17, 2022 · In this tutorial, you’ll learn how to create a decision tree classifier using Sklearn and Python. The Decision Tree then makes a sequence of splits based in hierarchical order of impact on this target variable. 2 Breast Cancer Wisconsin (Diagnostic) Dataset. Using the dtreeTrain to train our decision tree and dtreeScore to score our validation or hold out sample we can evaluate how well our decision tree model fits our data and predicts new data. A supervised decision tree. values y =df. --. Step 2 – Types of Tree Visualizations. Jul 19, 2021 · Timestamps0:00 - 0:23 Intro0:23 - 0:55 What Does A Decision Tree Look Like?0:56 - 1:50 A Deep Dive Into Our Dataset1:51 - 2:26 How do Decision Trees Come Up Dec 24, 2023 · These techniques will aid in generalizing the training results. They expect you to provide the most crucial tree (a single decision tree), which is defined as the "best_tree" variable in our example above. Implementing a decision tree in Weka is pretty straightforward. Aug 7, 2018 · I built a Decision Tree in python and I am struggling to interpret it. Overall interpretation Like a force plot, a decision plot shows the important features involved in a model’s output. Parameters. This is usually called the parent node. data) Nov 7, 2023 · First, we’ll import the libraries required to build a decision tree in Python. , and it would choose the split that results in the most pure (single-color) boxes. Apr 7, 2023 · January 20227. y_pred = clf. Python Decision-tree algorithm falls under the category of supervised learning algorithms. 7 Important Concepts in Decision Trees and Random Forests. Click the “Choose” button. May 7, 2021 · Plot decision trees using sklearn. You need to use the predict method. datasets and training a very simple Decision Tree for visualizing it further. The topmost node in a decision tree is known as the root node. A decision tree split the data into multiple sets. Prerequisites Jan 19, 2016 · I am using sk-learn python 27 and have output some decision tree feature results. The more terminal nodes and the deeper the tree, the more difficult it becomes to understand the decision rules of a tree. Key Terminology. com May 3, 2021 · Implement a decision tree using the CHAID algorithm in Python for classification tasks. Let’s see the Step-by-Step implementation –. Decision trees are one of the most popular algorithms when it comes to data mining, decision analysis, and artificial intelligence. Sep 9, 2022 · In the "dtreeviz" library, the approach is to identify the most important decision trees within the ensemble of trees in the XGBOOST model. 6 Datasets useful for Decision trees and random forests. 3. I want to know how can I interpret the following: 1. Separate the independent and dependent variables using the slicing method. The bra DTR will sort of create a partition level for all the values Check the graph - Click here from sklearn. dot' in our example) to a graphviz rendering Aug 24, 2017 · I am currently working on a simple data science project. The random forest is a machine learning classification algorithm that consists of numerous decision trees. According to the information available on its Github repo, the library currently supports scikit-learn, XGBoost, Spark MLlib, and LightGBM trees. In this blog post, we will explore decision trees in detail, understand how they work, and implement a decision tree classifier using Python. a categorical variable, for classification trees. Mar 7, 2023 · 4 Python code Examples. A decision tree is a machine learning model that builds upon iteratively asking questions to partition data and reach a solution. An array containing the feature names. gumroad. Decision-tree algorithm falls under the category of supervised learning algorithms. A decision tree begins with the target variable. 6. Training the Decision Tree in Python using scikit-learn. Oct 8, 2023 · The basics of Decision Trees. This is a light wrapper to the decision trees exposed in scikit-learn. Jul 26, 2022 · Python decision tree and random forest results. Feb 20, 2024 · Decision trees are powerful tools in the field of machine learning and data science. Visualizing decision trees is a tremendous aid when learning how these models work and when Dec 17, 2020 · This video will show you how to and interpret your decision tree regressor model results after building it using python, scikit-learn, matplotlib, and other Jan 22, 2022 · Jan 22, 2022. Note, that scikit-learn also provides DecisionTreeRegressor, a method for using Decision Trees for Regression. plot_tree(classifier); A decision tree classifier. Jan 13, 2021 · Here, I've explained Decision Trees in great detail. import matplotlib. I would recommend using integer weights {0:1, 1:9}, as you should avoid using floats Feb 23, 2019 · A Scikit-Learn Decision Tree. In a nutshell, LIME is used to explain predictions of your machine learning model. Machine Learning. Sep 10, 2015 · 17. Decision trees are an intuitive supervised machine learning algorithm that allows you to classify data with high degrees of accuracy. The related part of the code is presented below: # TODO: Make a copy of the DataFrame, using the 'drop' function to drop the given feature new_data = data. The iris data set contains four features, three classes of flowers, and 150 samples. feature_names) dotfile. In this Aug 23, 2016 · Returns the mean accuracy on the given test data and labels. Feb 27, 2024 · The Decision Tree action set in SAS Viya with Python using SWAT makes it simple to create and analyze decision trees for your data. To install LIME, execute the following line from the Terminal:pip install lime. Depth of 2 means max. pyplot as plt Apr 17, 2023 · Going back to our marble example, the decision tree might try splitting the marbles by color, by size, by weight, etc. Decision Trees is a type of supervised learning algorithms in machine learning, used for both classification and regression tasks. I have performed both Decision tree regression and Random forest regression. tree import DecisionTreeRegressor #Getting X and y variable X = df. From the drop-down list, select “trees” which will open all the tree algorithms. The reason there is decision 1 again is because your See full list on towardsdatascience. Python3. the price of that house). Sep 10, 2017 · I am trying to evaluate a relevance of features and I am using DecisionTreeRegressor(). Using Python. export_text() function; The first three methods build the decision tree in the form of a graph. Jun 5, 2019 · Predict in the Decision Tree is simply to follow the path in the constructed tree-shape decisions to the leaf node, and return the value of that node as we define in the fit() function. The deeper the tree, the more complex the decision rules and the fitter the model. Jun 3, 2020 · In this exercise, you'll train a classification tree on the Wisconsin Breast Cancer dataset using entropy as an information criterion. data, iris. First, import export_text: from sklearn. [ ] from sklearn. I am trying my hands out on the decision trees classifier. Jul 30, 2022 · Here we are simply loading Iris data from sklearn. Image by author. Decision Tree for Classification. export_text. A Decision Tree can be used for Regression and Classification tasks alike. Aug 26, 2020 · A popular diagnostic for understanding the decisions made by a classification algorithm is the decision surface. We can visualize the Decision Tree in the following 4 ways: Printing Text Representation of the tree. Machine learning still suffers from a black box problem, and one image is not going to solve the issue!Nonetheless, looking at an individual decision tree shows us this model (and a random forest) is not an unexplainable method, but a sequence of logical questions and answers — much as we would form when making predictions. It is the most intuitive way to zero in on a classification or label for an object. Apr 8, 2021 · Decision trees are a non-parametric model used for both regression and classification tasks. 5 (Integer) 2. # through the node j. Decision Tree Classifier is a Machine Learning classification algorithm that is used to predict the probability of a categorical dependent variable. Decision trees tend to overfit the training data, which means absolutely remarkable results in the learning process but very low results in testing. A non zero element of. Since the data is in numerical format, it is interpreted as numerical. g. Together, the result is 2545 + 20 = 2565 samples, which is equal to your samples. There can be instances when a decision tree may perform better than a random forest. Based on the sklearn documentation decision_function(X) is meant to: Predict confidence scores for samples. I will analyze global interpretability — which analyzes the most important feature for prediction in general and local interpretability — which explains individual prediction results. Nov 7, 2022 · Decision Tree Algorithm in Python. In Python, we can use the scikit-learn method DecisionTreeClassifier for building a Decision Tree for classification. Let’s start by creating decision tree using the iris flower data se t. The image below shows decision trees with max_depth values of 3, 4, and 5. How to Interpret Decision Trees with 1 Simple Example. My question is, 1) are my results reflective of my subject? The fact that KNN accuracy is 94% and Decision Tree of 48% is confusing. Before jumping into the training, let’s spend some time understanding how Random Forests work. fit (X_train,y_train) #Predict the response for test dataset. decision_path(X_test) # Similarly, we can also have the leaves ids reached by each sample. Jul 17, 2021 · A Random Forest is a powerful ensemble model built with large number of Decision Trees. 4. Just complete the following steps: Click on the “Classify” tab on the top. tree. My code for the Decision tree (a look at the variables): Importance of the variables. Aug 26, 2020 · Important terms used in Decision Tree Root Node: The topmost node of the tree. The tree_. 2. 3 Wine Quality Dataset. The aim of this article is to make all the parts of a decision tree classifier clear by walking through the code that implements the algorithm. Build a text report showing the rules of a decision tree. Decision trees are versatile machine learning algorithm capable of performing both regression and classification task and even work in case of tasks which has multiple outputs. X : array-like, shape = (n_samples, n_features) Test samples. node_indicator = estimator. Introduction to decision trees. com/ Oct 8, 2021 · Performing The decision tree analysis using scikit learn. The last method builds the decision tree in the form of a text report. Gain insights into interpreting CHAID decision tree results by analyzing the split decisions based on categorical variables. Second, create an object that will contain your rules. They are also the fundamental components of Random Forests, which is one of the The decision classifier has an attribute called tree_ which allows access to low level attributes such as node_count, the total number of nodes, and max_depth, the maximal depth of the tree. Display the top five rows from the data set using the head () function. Splitting: Process of dividing node into one or more sub-nodes based on some split criteria. In this post we’re going to discuss a commonly used machine learning model called decision tree. Based upon the answer, we navigate to one of two child nodes. number of observations per class multiplied by the respective class weight. What is a Decision Tree? Aug 17, 2023 · Are you intrigued by the power of decision-making in machine learning?By the end of this tutorial, you'll have a solid grasp of Decision Trees, be capable of Aug 23, 2023 · Decision trees are powerful machine learning algorithms that can be used for both classification and regression tasks. 4 nodes. import numpy as np . max_depth is a way to preprune a decision tree. X = df # data without target class. It learns to partition on the basis of the attribute value. fit(iris. Nov 16, 2023 · In this section, we will implement the decision tree algorithm using Python's Scikit-Learn library. The from-scratch implementation will take you some time to fully understand, but the intuition behind the algorithm is quite simple. from sklearn. Let’s use a relevant example: the Iris dataset, a Aug 18, 2018 · Conclusions. export_graphviz() function; Plot decision trees using dtreeviz Python package; Print decision tree details using sklearn. tree_ also stores the entire binary tree structure, represented as a Sep 10, 2020 · The decision tree algorithm - used within an ensemble method like the random forest - is one of the most widely used machine learning algorithms in real production settings. In the default case, sample weights are all 1, meaning value will sum to the number of samples. 25) using the given feature as the target # TODO: Set a random state. export_graphviz(dt, out_file=dotfile, feature_names=iris. ro ap hi vh jg zb mu oh pe oe