diff --git a/README.md b/README.md index d7126e5c64..52fac7545c 100644 --- a/README.md +++ b/README.md @@ -1,195 +1,173 @@ +# ๐ŸŒŸ ML-Capsule: Hands-on ML from Basic to Advance ๐ŸŒŸ - # Master Machine learning +Welcome to **ML-Capsule**! This repository is a comprehensive collection of machine learning projects and resources, ranging from beginner to advanced levels. It covers a variety of topics, from basic machine learning concepts to deep learning, natural language processing, and much more. - -![Issues](https://img.shields.io/github/issues/Niketkumardheeryan/Hands-on-ML-Basic-to-Advance-) -![Pull Requests](https://img.shields.io/github/issues-pr/Niketkumardheeryan/Hands-on-ML-Basic-to-Advance-) -![Forks](https://img.shields.io/github/forks/Niketkumardheeryan/Hands-on-ML-Basic-to-Advance-) -![Stars](https://img.shields.io/github/stars/Niketkumardheeryan/Hands-on-ML-Basic-to-Advance-) +![Machine Learning](https://media.giphy.com/media/L8K62iTDkzGX6/giphy.gif) - - - +## ๐Ÿ“ˆ Why Machine Learning? + +Machine learning is a technique to analyze data that automates the process of building analytical models. It is a branch of artificial intelligence based on the idea that systems can learn from data, identify patterns, and make decisions with minimal human intervention. + +![image](https://github.com/user-attachments/assets/e11d2857-24cc-4528-b41f-b51eddd9ba14) -__________________________________________________________________________ - -## Description -

Machine learning technique to analysis data that automates analytical model building. It is a branch of artificial intelligence based on the idea that systems can learn from data, identify patterns and make decisions with minimal human intervention. ### Importance of Machine Learning -Machine learning is important because it gives enterprises a view of trends in customer behavior and business operational patterns, as well as supports the development of new products. Many of today's leading companies, such as Facebook, Google and Uber, make machine learning a central part of their operations. Machine learning has become a significant competitive differentiator for many companies.

+Machine learning is crucial because it provides enterprises with insights into customer behavior and business operational patterns, and supports the development of new products. Leading companies like Facebook, Google, and Uber integrate machine learning into their operations, making it a significant competitive differentiator. -## ๐ŸŒฑPre-requisites +![image](https://github.com/user-attachments/assets/5269314a-83c1-4519-abd8-bac00aae194e) -- Python IDE : Install it by using this link [python.org](https://www.python.org/downloads/) -- If you are new to python programming and want to have a fair knowledge before you start working on it, you can learn it in a simplified way through this [website](https://www.w3schools.com/python/) -## Topics +## ๐Ÿ“š Pre-requisites - ### Extracting Data - Extraction is a general term for methods of constructing combinations of the variables to get around these problems while still describing the data with sufficient accuracy - * Web scrapping - Library used :->> Beautiful Soup , Which extract the data from web pages. - - ### Visualization - Data visualization is the discipline of trying to understand data by placing it in a visual context so that patterns, trends and correlations that might not otherwise be detected can be exposed. Python offers multiple great graphing libraries that come packed with lots of different features. - * Different types of libraries used to manipulate data in form of type of graphs and graphical representation :->> Seaborn , pandas , matplotlib etc. - - ### Feature selection (Variable Selection) - the process of selecting a subset of relevant features for use in model.Having irrelevant features in your data can decrease the accuracy of the models and make your model learn based on irrelevant features. - * Library used for feature selection commonly :->> scikit-learn - * Link - https://machinelearningmastery.com/feature-selection-with-real-and-categorical-data/ - - ### Basic concepts of statistic -A).Understand the Type of Analytics - +- **Python IDE**: Install from [python.org](https://python.org) +- **Learn Python**: If you're new to Python, start learning from [W3Schools](https://www.w3schools.com/python/python_ml_getting_started.asp) -* Descriptive Analytics tells us what happened in the past and helps a business understand how it is performing by providing context to help stakeholders interpret information. +## ๐Ÿ—‚๏ธ Topics Covered -* Diagnostic Analytics takes descriptive data a step further and helps you understand why something happened in the past. +### 1. Extracting Data +Extraction refers to methods of constructing combinations of variables to accurately describe the data. -* Predictive Analytics predicts what is most likely to happen in the future and provides companies with actionable insights based on the information. +- **Web Scraping**: Library used - Beautiful Soup, to extract data from web pages. -* Prescriptive Analytics provides recommendations regarding actions that will take advantage of the predictions and guide the possible actions toward a solution - -B). Probability - -* Conditional Probability -* Independent Events -* Mutually Exclusive Events -* Bayesโ€™ Theorem - -C). Central Tendency - * Mean - * Mode - * varience - * Skewness - * Kurtosis: - * Standard Deviation - -D). Variability -* Range: The difference between the highest and lowest value in the dataset. -* Percentiles โ€” A measure that indicates the value below which a given percentage of observations in a group of observations falls. -* Quantilesโ€” Values that divide the number of data points into four more or less equal parts, or quarters. -* Interquartile Range (IQR)โ€” A measure of statistical dispersion and variability based on dividing a data set into quartiles. IQR = Q3 โˆ’ Q1 -* Variance: The average squared difference of the values from the mean to measure how spread out a set of data is relative to mean. - -E). Relationship Between Variables -* Causality: Relationship between two events where one event is affected by the other. -* Covariance: A quantitative measure of the joint variability between two or more variables. -* Correlation: Measure the relationship between two variables and ranges from -1 to 1, the normalized version of covariance. - -F). Probability Distribution -* Probability Mass Function (PMF): A function that gives the probability that a discrete random variable is exactly equal to some value. -* Probability Density Function (PDF): A function for continuous data where the value at any given sample can be interpreted as providing a relative likelihood that the value of the random variable would equal that sample. -* Cumulative Density Function (CDF): A function that gives the probability that a random variable is less than or equal to a certain value. -

- -

- -G). Hypothesis Testing and Statistical Significance -* Null and Alternative Hypothesis -* Interpretation -* Z-Test -* T-Test -* ANOVA (Analysis of Variance) -* Chi-Square Test - -H). Regression -* Linear Regression - ** Assumptions of Linear Regression - - - Linear Relationship - - Multivariate Normality - - No or Little Multicollinearity - - No or Little Autocorrelation - - Homoscedasticity - * Multiple Linear Regression - -# Data Science -Data science is an interdisciplinary field that uses scientific methods, processes, algorithms and systems to extract knowledge and insights from structured and unstructured data, and apply knowledge and actionable insights from data across a broad range of application domains.
-

- -

- -## Why is data science important? -In business, the goal of data science is to provide intelligence about consumers and campaigns and help companies create strong plans to engage their audience and sell their products. -
+### 2. Visualization +Data visualization places data in a visual context to expose patterns, trends, and correlations. -Data scientists must rely on creative insights using big data, the large amounts of information collected through various collection processes, like data mining. -On an even more fundamental level, big data analytics can help brands understand the customers who ultimately help determine the long-term success of a business or initiative. In addition to targeting the right audience, data science can be used to help companies control the stories of their brands. -Because big data is a rapidly growing field, there are constantly new tools available, and those tools need experts who can quickly learn their applications. Data scientists can help companies create a business plan to achieve goals based on research and not just intuition. -
-Data science plays a very important role in security and fraud detection, because the massive amounts of information allow for drilling down to find slight irregularities in data that can expose weaknesses in security systems.It is a driving force between highly specialized user experiences created through personalization and customization. The analysis can be used to make customers feel seen and understood by a company. -
+- **Libraries Used**: Seaborn, pandas, matplotlib -## What are the six major areas of data science? -The six major areas of data science include the following: +### 3. Feature Selection +The process of selecting relevant features for use in a model to increase accuracy and performance. -* Multidisciplinary investigations. Considering large, complex systems with interconnected pieces, data scientists use varying methods to collect large amounts of data. -* Models and methods for data. Data scientists need to rely on experience and intuition to decide which methods will work best for modeling their data, and they need to adjust those methods continuously to hone in on the insights they seek. -* Pedagogy. It is up to data scientists to work with companies and clients to determine the best ideologies to apply while collecting and analyzing information about their customers and products. -* Computing with data. The biggest thing that all data science projects have in common is the necessity to use tools and software to analyze the involved algorithms and statistics, because the size of the pool of information they are working with is so massive. -* Theory. Data science theory is an evolving and sophisticated professional arena with countless applications. -* Tool evaluation. There are many tools available for data scientists to use to manipulate and study huge quantities of data, and it's important to always evaluate their effectiveness and keep trying new ones as they become available. +- **Library Used**: scikit-learn +- **Learn More**: [Feature Selection](https://machinelearningmastery.com/feature-selection-with-real-and-categorical-data/) -## summary +### 4. Basic Concepts of Statistics +- **Analytics Types**: Descriptive, Diagnostic, Predictive, Prescriptive +- **Probability**: Conditional, Independent Events, Bayesโ€™ Theorem +- **Central Tendency**: Mean, Mode, Variance, Skewness, Kurtosis, Standard Deviation +- **Variability**: Range, Percentiles, Quantiles, IQR, Variance +- **Relationships**: Causality, Covariance, Correlation +- **Probability Distribution**: PMF, PDF, CDF +- **Hypothesis Testing**: Null and Alternative Hypothesis, Z-Test, T-Test, ANOVA, Chi-Square Test +- **Regression**: Linear Regression, Multiple Linear Regression +![Statistics](https://miro.medium.com/v2/resize:fit:1400/1*9kRvwsN26fKAumtHt-WVgw.gif) -## useful urls -* https://www.kdnuggets.com/2020/06/8-basic-statistics-concepts.html -* https://www.coursera.org/learn/machine-learning-with-python -* https://www.w3schools.com/python/python_ml_getting_started.asp -* https://www.freecodecamp.org/learn/machine-learning-with-python/ +### 5. Data Science +Data science uses scientific methods, processes, algorithms, and systems to extract knowledge from data. -* https://www.greatlearning.in/great-lakes-pgpdsba?&utm_source=Google&utm_medium=Search&utm_campaign=6Cities_Exact_Data_Science_Search_New_DS&adgroup_id=101317851589&campaign_id=10174480218&Keyword=data%20scientist&placement=&utm_content=c&gclid=CjwKCAjwn6GGBhADEiwAruUcKqPCvPIk1X_5mVRXj5prdpSIULnd40QgTB4kChfiFgAL1kDErGeLHRoCapUQAvD_BwE +- **Importance**: Provides intelligence about consumers and campaigns, helps in security and fraud detection, and creates personalized user experiences. -## Get Started +![image_processing20191213-6403-1j99nlm](https://github.com/user-attachments/assets/a4168150-b5dc-4a68-a72d-7b7071d9c57d) -* This repo shows a good collection of Machine learning with python and data science with algorithms,projects,explanations from basic to advance level. -* It has topics based on machine learning, deep learning, sql, natural language proccessing, object detection, classification, recommendation system,chatbots and much more. -## Take a look at existing projects +### Six Major Areas of Data Science - -| Content List | - | --------------- | +Data science is a multifaceted field that involves several key areas. Each of these areas plays a crucial role in advancing the field and solving complex problems. Hereโ€™s a brief overview of the six major areas of data science: - +#### 1. Multidisciplinary Investigations -### Note: -* Above project list will be scheduled automatically,whenever new projects add to the repo it will add in above table. +Multidisciplinary investigations involve integrating knowledge and techniques from various disciplines to address complex problems. Data scientists often collaborate with experts from different fields such as economics, biology, social sciences, and engineering to gain a holistic understanding of the problem at hand. This approach helps in designing comprehensive solutions that are informed by diverse perspectives and methodologies. -## ๐Ÿ“– Code Of Conduct: +#### 2. Models and Methods for Data -You can find our Code of Conduct [here](https://github.com/Niketkumardheeryan/Hands-on-ML-Basic-to-Advance-/blob/master/CODE_OF_CONDUCT.md). +This area focuses on the development and application of statistical models and machine learning algorithms to analyze and interpret data. It includes techniques for predictive modeling, classification, clustering, and regression. Data scientists use these models to uncover patterns, make predictions, and inform decision-making processes. Methods can range from traditional statistical techniques to advanced machine learning algorithms and deep learning models. -## ๐Ÿ“ License +#### 3. Pedagogy -This project follows the [MIT License](https://choosealicense.com/licenses/mit/). +Pedagogy in data science refers to the methods and practices of teaching and learning within the field. This includes curriculum development, instructional strategies, and educational tools designed to enhance the learning experience for students and professionals. Effective pedagogy ensures that knowledge is effectively transferred and that learners are equipped with the skills needed to succeed in data science. +#### 4. Computing with Data +Computing with data involves the use of computational tools and technologies to handle, process, and analyze large datasets. This area covers topics such as data management, database systems, data warehousing, and distributed computing. It also includes programming skills in languages like Python, R, and SQL, and the use of software frameworks and platforms for data processing and analysis. -## Have a look - -* Give it a ๐ŸŒŸ if you โค this project. - - -* Take a look at the Existing Issues.
-* Create your own Issues, If you have new idea not listed in project.
-* Wait for the Issue to be assigned to you.
-* Fork the repository
+#### 5. Theory + +Theoretical aspects of data science involve the foundational principles and mathematical underpinnings of the field. This includes the study of probability, statistics, optimization, and information theory. Understanding these theoretical concepts is crucial for developing and applying data science methods effectively and for advancing the field through new theoretical insights. + +#### 6. Tool Evaluation + +Tool evaluation focuses on assessing and comparing various tools and technologies used in data science. This includes evaluating software packages, programming languages, and platforms based on criteria such as performance, usability, and scalability. Effective tool evaluation helps data scientists choose the best tools for their specific needs and ensures that the tools they use are reliable and effective. + + + +## ๐Ÿ“‚ Project Descriptions + +Here are some of the exciting projects featured in this repository: + +1. **[Alzheimer's Disease Predictor](#)** + A machine learning model to predict the likelihood of Alzheimer's disease based on patient data, using classification algorithms and feature selection techniques. + +2. **[Chatbot Using RASA](#)** + A conversational AI chatbot built with RASA, capable of handling various user queries and providing intelligent responses. - +3. **[COVID-19 Forecasting with Prophet](#)** + Utilize the Prophet library to forecast COVID-19 case trends and predict future outbreaks based on historical data. -* Clone the repository using-
+4. **[Fake News Detection](#)** + A project that uses NLP techniques to detect and classify fake news articles, employing various text processing and classification methods. -``` git clone https://github.com/Niketkumardheeryan/Hands-on-ML-Basic-to-Advance- ``` +5. **[Handwritten Digit Recognition](#)** + A deep learning model that recognizes handwritten digits using a Convolutional Neural Network (CNN) trained on the MNIST dataset. -## โš™๏ธ Contribution Guidelines -- Have a look at [Contibuting Guidelines](https://github.com/Niketkumardheeryan/Hands-on-ML-Basic-to-Advance-/blob/master/CONTRIBUTING_GUIDELINES.md) +6. **[Movie Genre Classification](#)** + A machine learning model that predicts movie genres based on descriptions using text classification techniques and feature extraction. + +7. **[Employee Attrition Prediction](#)** + A predictive model that identifies employees at risk of leaving a company, using historical HR data and various classification algorithms. + +8. **[Heart Disease Prediction](#)** + A predictive model for diagnosing heart disease based on patient attributes, utilizing statistical and machine learning techniques to improve diagnosis accuracy. + +## ๐Ÿ“œ Summary + +This repository offers a rich collection of machine learning and data science projects. It includes well-documented examples, practical projects, and extensive resources to help you understand and implement various machine learning techniques. + +## ๐Ÿ”— Useful URLs +- [8 Basic Statistics Concepts](https://www.kdnuggets.com/2020/06/8-basic-statistics-concepts.html) +- [Coursera: Machine Learning with Python](https://www.coursera.org/learn/machine-learning-with-python) +- [W3Schools: Python ML Getting Started](https://www.w3schools.com/python/python_ml_getting_started.asp) +- [freeCodeCamp: Machine Learning with Python](https://www.freecodecamp.org/learn/machine-learning-with-python/) +- [Great Learning: Data Science](https://www.greatlearning.in/great-lakes-pgpdsba?&utm_source=Google&utm_medium=Search&utm_campaign=6Cities_Exact_Data_Science_Search_New_DS&adgroup_id=101317851589&campaign_id=10174480218&Keyword=data%20scientist&placement=&utm_content=c&gclid=CjwKCAjwn6GGBhADEiwAruUcKqPCvPIk1X_5mVRXj5prdpSIULnd40QgTB4kChfiFgAL1kDErGeLHRoCapUQAvD_BwE) + +## ๐Ÿš€ Get Started +This repository showcases a diverse collection of machine learning projects and data science algorithms, ranging from basic to advanced levels. It includes topics on machine learning, deep learning, SQL, NLP, object detection, classification, recommendation systems, chatbots, and much more. + +### ๐Ÿ“– Code of Conduct +Please read our [Code of Conduct](CODE_OF_CONDUCT.md). + +### ๐Ÿ“ License +This project is licensed under the MIT License. + +### ๐ŸŒŸ Have a Look! +- Give this project a โญ if you love it! + + +![image](https://github.com/user-attachments/assets/5c0f81aa-e921-41ec-9b22-11f09e46bbca) + + +- Take a look at the Existing Issues. + +- Create your own Issues, If you have new idea not listed in project. + +- Wait for the Issue to be assigned to you. + +- Fork the repository +- Clone the repository using +``` +git clone https://github.com/Niketkumardheeryan/Hands-on-ML-Basic-to-Advance- +``` + +### โš™๏ธ Contribution Guidelines +- Check the [Contribution Guidelines](CONTRIBUTING.md) +- Take a look at the [Existing Issues](https://github.com/Niketkumardheeryan/Hands-on-ML-Basic-to-Advance-/issues) +- Create your [Pull Request](https://github.com/Niketkumardheeryan/Hands-on-ML-Basic-to-Advance-/pulls) + +Feel free to create new issues, fix bugs, and contribute to our projects. Join our community and help us build amazing machine learning solutions! + +Happy Coding! ๐Ÿ‘ฉโ€๐Ÿ’ป๐Ÿ‘จโ€๐Ÿ’ป ## Some awesome Contributors โœจ @@ -252,3 +230,4 @@ This project follows the [MIT License](https://choosealicense.com/licenses/mit/) + diff --git a/Thyroid Cancer Recurrence Prediction/Dataset/README.md b/Thyroid Cancer Recurrence Prediction/Dataset/README.md new file mode 100644 index 0000000000..cd1f6ab658 --- /dev/null +++ b/Thyroid Cancer Recurrence Prediction/Dataset/README.md @@ -0,0 +1,3 @@ +### Dataset link: + +* https://www.kaggle.com/datasets/jainaru/thyroid-disease-data/data \ No newline at end of file diff --git a/Thyroid Cancer Recurrence Prediction/Dataset/Thyroid_Disease_Data.csv b/Thyroid Cancer Recurrence Prediction/Dataset/Thyroid_Disease_Data.csv new file mode 100644 index 0000000000..457a21ec9e --- /dev/null +++ b/Thyroid Cancer Recurrence Prediction/Dataset/Thyroid_Disease_Data.csv @@ -0,0 +1,384 @@ +Age,Gender,Smoking,Hx Smoking,Hx Radiothreapy,Thyroid Function,Physical Examination,Adenopathy,Pathology,Focality,Risk,T,N,M,Stage,Response,Recurred +27,F,No,No,No,Euthyroid,Single nodular goiter-left,No,Micropapillary,Uni-Focal,Low,T1a,N0,M0,I,Indeterminate,No +34,F,No,Yes,No,Euthyroid,Multinodular goiter,No,Micropapillary,Uni-Focal,Low,T1a,N0,M0,I,Excellent,No +30,F,No,No,No,Euthyroid,Single nodular goiter-right,No,Micropapillary,Uni-Focal,Low,T1a,N0,M0,I,Excellent,No +62,F,No,No,No,Euthyroid,Single nodular goiter-right,No,Micropapillary,Uni-Focal,Low,T1a,N0,M0,I,Excellent,No +62,F,No,No,No,Euthyroid,Multinodular goiter,No,Micropapillary,Multi-Focal,Low,T1a,N0,M0,I,Excellent,No +52,M,Yes,No,No,Euthyroid,Multinodular goiter,No,Micropapillary,Multi-Focal,Low,T1a,N0,M0,I,Indeterminate,No +41,F,No,Yes,No,Clinical Hyperthyroidism,Single nodular goiter-right,No,Micropapillary,Uni-Focal,Low,T1a,N0,M0,I,Excellent,No +46,F,No,No,No,Euthyroid,Single nodular goiter-right,No,Micropapillary,Uni-Focal,Low,T1a,N0,M0,I,Excellent,No +51,F,No,No,No,Euthyroid,Single nodular goiter-right,No,Micropapillary,Uni-Focal,Low,T1a,N0,M0,I,Excellent,No +40,F,No,No,No,Euthyroid,Single nodular goiter-right,No,Micropapillary,Uni-Focal,Low,T1a,N0,M0,I,Excellent,No +75,F,No,No,No,Euthyroid,Single nodular goiter-right,No,Micropapillary,Uni-Focal,Low,T1a,N0,M0,I,Excellent,No +59,F,No,No,No,Euthyroid,Single nodular goiter-left,No,Micropapillary,Uni-Focal,Low,T1a,N0,M0,I,Excellent,No +49,F,No,No,No,Euthyroid,Multinodular goiter,No,Micropapillary,Uni-Focal,Low,T1a,N0,M0,I,Excellent,No +50,F,No,No,No,Clinical Hyperthyroidism,Multinodular goiter,No,Micropapillary,Uni-Focal,Low,T1a,N0,M0,I,Excellent,No +76,F,No,No,No,Clinical Hypothyroidism,Single nodular goiter-right,No,Micropapillary,Uni-Focal,Low,T1a,N0,M0,I,Excellent,No +42,F,No,No,No,Euthyroid,Single nodular goiter-right,No,Micropapillary,Uni-Focal,Low,T1a,N0,M0,I,Indeterminate,No +40,F,No,Yes,No,Euthyroid,Single nodular goiter-right,No,Micropapillary,Uni-Focal,Low,T1a,N0,M0,I,Excellent,No +44,F,No,No,No,Euthyroid,Multinodular goiter,No,Micropapillary,Uni-Focal,Low,T1a,N0,M0,I,Indeterminate,No +43,F,No,No,No,Euthyroid,Multinodular goiter,No,Micropapillary,Uni-Focal,Low,T1a,N0,M0,I,Excellent,No +52,F,No,No,No,Euthyroid,Multinodular goiter,No,Micropapillary,Multi-Focal,Low,T1a,N0,M0,I,Indeterminate,No +41,F,No,No,No,Euthyroid,Single nodular goiter-left,No,Micropapillary,Uni-Focal,Low,T1a,N0,M0,I,Excellent,No +44,F,No,No,No,Euthyroid,Single nodular goiter-left,No,Micropapillary,Uni-Focal,Low,T1a,N0,M0,I,Excellent,No +36,F,No,No,No,Euthyroid,Single nodular goiter-right,No,Micropapillary,Uni-Focal,Low,T1a,N0,M0,I,Excellent,No +70,F,No,No,No,Euthyroid,Single nodular goiter-right,No,Micropapillary,Uni-Focal,Low,T1a,N0,M0,I,Excellent,No +60,F,No,No,No,Euthyroid,Multinodular goiter,No,Micropapillary,Multi-Focal,Low,T1a,N0,M0,I,Excellent,No +33,F,No,No,No,Euthyroid,Single nodular goiter-right,No,Micropapillary,Uni-Focal,Low,T1a,N0,M0,I,Excellent,No +43,M,No,No,No,Subclinical Hyperthyroidism,Single nodular goiter-left,No,Micropapillary,Uni-Focal,Low,T1a,N0,M0,I,Excellent,No +26,M,No,No,No,Euthyroid,Single nodular goiter-left,No,Micropapillary,Uni-Focal,Low,T1a,N0,M0,I,Excellent,No +41,F,No,No,No,Euthyroid,Single nodular goiter-right,No,Micropapillary,Uni-Focal,Low,T1a,N0,M0,I,Excellent,No +37,F,No,Yes,No,Subclinical Hypothyroidism,Normal,No,Micropapillary,Uni-Focal,Low,T1a,N0,M0,I,Excellent,No +37,F,No,No,No,Euthyroid,Single nodular goiter-left,No,Micropapillary,Uni-Focal,Low,T1a,N0,M0,I,Excellent,No +30,F,No,No,No,Clinical Hyperthyroidism,Normal,No,Micropapillary,Uni-Focal,Low,T1a,N0,M0,I,Excellent,No +36,F,No,No,No,Euthyroid,Single nodular goiter-right,No,Micropapillary,Uni-Focal,Low,T1a,N0,M0,I,Excellent,No +55,F,No,No,No,Euthyroid,Multinodular goiter,No,Micropapillary,Uni-Focal,Low,T1a,N0,M0,I,Excellent,No +52,M,Yes,No,No,Euthyroid,Single nodular goiter-left,No,Micropapillary,Uni-Focal,Low,T1a,N0,M0,I,Excellent,No +37,F,No,No,No,Subclinical Hypothyroidism,Single nodular goiter-left,No,Micropapillary,Uni-Focal,Low,T1a,N0,M0,I,Excellent,No +31,F,No,No,No,Clinical Hyperthyroidism,Diffuse goiter,No,Micropapillary,Uni-Focal,Low,T1a,N0,M0,I,Excellent,No +43,M,No,No,No,Euthyroid,Multinodular goiter,No,Micropapillary,Multi-Focal,Low,T1a,N0,M0,I,Excellent,No +40,F,No,No,No,Euthyroid,Single nodular goiter-right,No,Micropapillary,Uni-Focal,Low,T1a,N0,M0,I,Excellent,No +34,F,No,No,No,Euthyroid,Diffuse goiter,No,Micropapillary,Uni-Focal,Low,T1a,N0,M0,I,Excellent,No +51,F,No,No,No,Euthyroid,Single nodular goiter-right,No,Micropapillary,Uni-Focal,Low,T1a,N0,M0,I,Excellent,No +45,F,No,No,No,Euthyroid,Single nodular goiter-left,No,Micropapillary,Uni-Focal,Low,T1a,N0,M0,I,Excellent,No +20,F,No,No,No,Euthyroid,Single nodular goiter-right,No,Micropapillary,Uni-Focal,Low,T1a,N0,M0,I,Excellent,No +38,F,No,No,No,Euthyroid,Multinodular goiter,No,Micropapillary,Uni-Focal,Low,T1a,N0,M0,I,Excellent,No +38,F,No,No,No,Clinical Hyperthyroidism,Diffuse goiter,No,Micropapillary,Uni-Focal,Low,T1a,N0,M0,I,Excellent,No +33,F,No,No,No,Euthyroid,Multinodular goiter,No,Micropapillary,Uni-Focal,Low,T1a,N0,M0,I,Excellent,No +31,F,No,No,No,Clinical Hypothyroidism,Multinodular goiter,No,Micropapillary,Uni-Focal,Intermediate,T1a,N0,M0,I,Excellent,No +31,F,No,No,No,Euthyroid,Multinodular goiter,Right,Papillary,Multi-Focal,Intermediate,T1a,N1b,M0,I,Excellent,No +26,F,No,No,No,Euthyroid,Normal,Extensive,Papillary,Uni-Focal,Intermediate,T1a,N1b,M0,I,Structural Incomplete,Yes +29,F,No,No,No,Euthyroid,Multinodular goiter,No,Follicular,Uni-Focal,Low,T1b,N0,M0,I,Excellent,No +43,F,No,No,No,Euthyroid,Single nodular goiter-right,No,Micropapillary,Uni-Focal,Low,T1b,N0,M0,I,Excellent,No +30,F,No,No,No,Subclinical Hyperthyroidism,Multinodular goiter,No,Papillary,Multi-Focal,Low,T1b,N0,M0,I,Excellent,No +25,F,No,No,No,Euthyroid,Multinodular goiter,No,Papillary,Multi-Focal,Low,T1b,N0,M0,I,Excellent,No +27,F,No,No,No,Euthyroid,Multinodular goiter,No,Papillary,Uni-Focal,Low,T1b,N0,M0,I,Excellent,No +25,F,No,No,No,Euthyroid,Single nodular goiter-left,No,Papillary,Uni-Focal,Low,T1b,N0,M0,I,Excellent,No +21,F,No,No,No,Euthyroid,Single nodular goiter-right,No,Papillary,Uni-Focal,Low,T1b,N0,M0,I,Indeterminate,No +43,F,No,Yes,No,Euthyroid,Single nodular goiter-right,No,Papillary,Uni-Focal,Low,T1b,N0,M0,I,Excellent,No +23,F,No,No,No,Euthyroid,Single nodular goiter-left,No,Papillary,Uni-Focal,Low,T1b,N0,M0,I,Excellent,No +23,F,No,No,No,Clinical Hyperthyroidism,Single nodular goiter-left,No,Papillary,Uni-Focal,Low,T1b,N0,M0,I,Excellent,No +43,F,No,No,No,Euthyroid,Single nodular goiter-left,No,Papillary,Uni-Focal,Low,T1b,N0,M0,I,Indeterminate,No +24,M,No,No,No,Euthyroid,Single nodular goiter-left,No,Papillary,Uni-Focal,Low,T1b,N0,M0,I,Excellent,No +35,F,No,No,No,Euthyroid,Single nodular goiter-right,No,Papillary,Uni-Focal,Low,T1b,N0,M0,I,Excellent,No +54,F,No,No,No,Euthyroid,Single nodular goiter-left,No,Papillary,Uni-Focal,Low,T1b,N0,M0,I,Excellent,No +54,F,No,No,No,Euthyroid,Multinodular goiter,No,Papillary,Uni-Focal,Low,T1b,N0,M0,I,Indeterminate,No +22,F,No,No,No,Subclinical Hyperthyroidism,Single nodular goiter-right,No,Papillary,Uni-Focal,Low,T1b,N0,M0,I,Excellent,No +38,F,No,No,No,Euthyroid,Multinodular goiter,No,Papillary,Multi-Focal,Low,T1b,N0,M0,I,Excellent,No +35,F,No,No,No,Euthyroid,Single nodular goiter-right,No,Papillary,Uni-Focal,Low,T1b,N0,M0,I,Excellent,No +51,F,No,No,No,Euthyroid,Single nodular goiter-left,No,Papillary,Uni-Focal,Low,T1b,N0,M0,I,Excellent,No +22,M,No,No,No,Euthyroid,Multinodular goiter,No,Papillary,Multi-Focal,Low,T1b,N0,M0,I,Excellent,No +51,F,No,No,No,Euthyroid,Single nodular goiter-left,No,Papillary,Uni-Focal,Low,T1b,N0,M0,I,Excellent,No +40,F,No,No,No,Euthyroid,Single nodular goiter-right,No,Papillary,Uni-Focal,Low,T1b,N0,M0,I,Excellent,No +69,F,No,No,No,Euthyroid,Single nodular goiter-left,No,Papillary,Uni-Focal,Low,T1b,N0,M0,I,Excellent,No +31,F,No,No,No,Euthyroid,Single nodular goiter-right,No,Papillary,Uni-Focal,Low,T1b,N0,M0,I,Excellent,No +29,F,No,No,No,Euthyroid,Single nodular goiter-right,No,Papillary,Uni-Focal,Low,T1b,N0,M0,I,Excellent,No +30,F,No,No,No,Euthyroid,Single nodular goiter-right,No,Papillary,Uni-Focal,Low,T1b,N0,M0,I,Excellent,No +28,F,No,No,No,Euthyroid,Multinodular goiter,No,Papillary,Uni-Focal,Low,T1b,N0,M0,I,Excellent,No +22,F,No,No,No,Clinical Hypothyroidism,Single nodular goiter-right,No,Papillary,Uni-Focal,Low,T1b,N0,M0,I,Excellent,No +29,F,No,No,No,Euthyroid,Single nodular goiter-right,No,Papillary,Uni-Focal,Low,T1b,N0,M0,I,Excellent,No +35,F,No,No,No,Euthyroid,Single nodular goiter-left,No,Papillary,Uni-Focal,Low,T1b,N0,M0,I,Excellent,No +50,F,No,No,No,Euthyroid,Multinodular goiter,No,Papillary,Multi-Focal,Low,T1b,N0,M0,I,Excellent,No +27,F,No,No,No,Clinical Hyperthyroidism,Diffuse goiter,No,Papillary,Uni-Focal,Low,T1b,N0,M0,I,Excellent,No +17,F,No,Yes,No,Euthyroid,Single nodular goiter-right,No,Papillary,Uni-Focal,Low,T1b,N0,M0,I,Excellent,No +27,F,No,No,No,Subclinical Hyperthyroidism,Single nodular goiter-right,No,Papillary,Uni-Focal,Low,T1b,N0,M0,I,Excellent,No +40,F,No,No,No,Euthyroid,Single nodular goiter-right,No,Papillary,Uni-Focal,Intermediate,T1b,N0,M0,I,Excellent,No +33,F,No,No,No,Euthyroid,Single nodular goiter-left,No,Papillary,Uni-Focal,Intermediate,T1b,N1b,M0,I,Indeterminate,No +25,F,No,Yes,Yes,Euthyroid,Single nodular goiter-right,No,Papillary,Uni-Focal,Low,T1b,N0,M0,I,Excellent,No +73,F,No,No,No,Euthyroid,Single nodular goiter-right,No,Papillary,Uni-Focal,Low,T1b,N0,M0,I,Excellent,No +36,F,No,No,No,Euthyroid,Multinodular goiter,No,Papillary,Multi-Focal,Low,T1b,N0,M0,I,Indeterminate,Yes +35,F,No,No,No,Euthyroid,Multinodular goiter,Right,Papillary,Multi-Focal,Intermediate,T1b,N1b,M0,I,Structural Incomplete,Yes +31,M,Yes,No,No,Euthyroid,Multinodular goiter,Right,Papillary,Multi-Focal,Intermediate,T1b,N1b,M0,I,Structural Incomplete,Yes +18,F,No,No,No,Euthyroid,Single nodular goiter-right,Right,Papillary,Uni-Focal,Intermediate,T1b,N1b,M0,I,Structural Incomplete,Yes +62,F,No,No,No,Euthyroid,Single nodular goiter-right,No,Follicular,Multi-Focal,Intermediate,T1b,N0,M0,I,Structural Incomplete,Yes +62,F,No,No,No,Euthyroid,Single nodular goiter-right,No,Hurthel cell,Uni-Focal,Low,T2,N0,M0,I,Excellent,No +39,F,No,No,No,Euthyroid,Diffuse goiter,No,Hurthel cell,Uni-Focal,Low,T2,N0,M0,I,Indeterminate,No +37,F,No,No,No,Euthyroid,Single nodular goiter-left,No,Hurthel cell,Multi-Focal,Low,T2,N0,M0,I,Excellent,No +26,F,No,Yes,No,Subclinical Hyperthyroidism,Single nodular goiter-right,No,Hurthel cell,Uni-Focal,Low,T2,N0,M0,I,Excellent,No +31,F,No,No,No,Euthyroid,Single nodular goiter-left,No,Hurthel cell,Uni-Focal,Low,T2,N0,M0,I,Indeterminate,No +24,F,No,No,No,Euthyroid,Single nodular goiter-right,No,Follicular,Uni-Focal,Low,T2,N0,M0,I,Excellent,No +57,F,Yes,No,No,Euthyroid,Multinodular goiter,No,Follicular,Uni-Focal,Low,T2,N0,M0,I,Excellent,No +28,F,No,No,No,Euthyroid,Single nodular goiter-right,No,Follicular,Uni-Focal,Low,T2,N0,M0,I,Excellent,No +44,M,Yes,No,No,Euthyroid,Single nodular goiter-right,No,Follicular,Uni-Focal,Low,T2,N0,M0,I,Excellent,No +42,F,No,No,No,Euthyroid,Single nodular goiter-left,No,Follicular,Uni-Focal,Low,T2,N0,M0,I,Indeterminate,No +27,F,No,No,No,Euthyroid,Single nodular goiter-right,No,Follicular,Uni-Focal,Low,T2,N0,M0,I,Excellent,No +51,F,No,No,No,Euthyroid,Single nodular goiter-right,No,Papillary,Uni-Focal,Low,T2,N0,M0,I,Excellent,No +33,F,No,No,No,Clinical Hypothyroidism,Single nodular goiter-right,Right,Papillary,Uni-Focal,Low,T2,N0,M0,I,Excellent,No +42,F,No,No,No,Euthyroid,Single nodular goiter-right,No,Papillary,Uni-Focal,Low,T2,N0,M0,I,Excellent,No +26,F,No,No,No,Euthyroid,Multinodular goiter,No,Papillary,Uni-Focal,Low,T2,N0,M0,I,Excellent,No +24,F,No,No,No,Euthyroid,Single nodular goiter-left,No,Papillary,Uni-Focal,Low,T2,N0,M0,I,Excellent,No +60,F,No,No,No,Euthyroid,Multinodular goiter,No,Papillary,Multi-Focal,Low,T2,N0,M0,I,Excellent,No +60,F,No,No,No,Euthyroid,Single nodular goiter-right,No,Papillary,Uni-Focal,Low,T2,N0,M0,I,Biochemical Incomplete,No +31,F,No,No,No,Euthyroid,Single nodular goiter-right,No,Papillary,Uni-Focal,Low,T2,N0,M0,I,Excellent,No +66,F,No,No,No,Euthyroid,Single nodular goiter-right,No,Papillary,Uni-Focal,Low,T2,N0,M0,I,Excellent,No +44,F,No,No,No,Euthyroid,Single nodular goiter-left,No,Papillary,Uni-Focal,Low,T2,N0,M0,I,Excellent,No +32,F,No,No,No,Euthyroid,Single nodular goiter-right,No,Papillary,Uni-Focal,Low,T2,N0,M0,I,Excellent,No +26,F,No,No,No,Euthyroid,Multinodular goiter,No,Papillary,Multi-Focal,Low,T2,N0,M0,I,Excellent,No +37,F,No,No,No,Euthyroid,Single nodular goiter-right,No,Papillary,Uni-Focal,Low,T2,N0,M0,I,Excellent,No +33,F,No,No,No,Euthyroid,Single nodular goiter-left,No,Papillary,Uni-Focal,Low,T2,N0,M0,I,Excellent,No +23,F,No,No,No,Euthyroid,Multinodular goiter,No,Papillary,Multi-Focal,Low,T2,N0,M0,I,Indeterminate,No +47,F,No,No,No,Euthyroid,Single nodular goiter-right,No,Papillary,Uni-Focal,Low,T2,N0,M0,I,Excellent,No +28,F,No,No,No,Euthyroid,Single nodular goiter-right,No,Papillary,Uni-Focal,Low,T2,N0,M0,I,Excellent,No +37,F,No,No,No,Euthyroid,Single nodular goiter-right,No,Papillary,Uni-Focal,Low,T2,N0,M0,I,Excellent,No +26,F,No,No,No,Euthyroid,Multinodular goiter,No,Papillary,Uni-Focal,Low,T2,N0,M0,I,Excellent,No +28,F,No,No,No,Euthyroid,Single nodular goiter-left,No,Papillary,Uni-Focal,Low,T2,N0,M0,I,Excellent,No +28,F,No,No,No,Euthyroid,Single nodular goiter-right,No,Papillary,Uni-Focal,Low,T2,N0,M0,I,Excellent,No +44,F,No,No,No,Euthyroid,Multinodular goiter,No,Papillary,Uni-Focal,Low,T2,N0,M0,I,Excellent,No +31,F,No,Yes,No,Euthyroid,Single nodular goiter-right,Right,Papillary,Uni-Focal,Low,T2,N0,M0,I,Excellent,No +27,F,No,No,No,Clinical Hypothyroidism,Single nodular goiter-right,No,Papillary,Uni-Focal,Low,T2,N0,M0,I,Excellent,No +56,F,No,No,No,Euthyroid,Single nodular goiter-right,No,Papillary,Uni-Focal,Low,T2,N0,M0,I,Biochemical Incomplete,No +63,F,No,No,No,Euthyroid,Single nodular goiter-left,No,Papillary,Uni-Focal,Low,T2,N0,M0,I,Excellent,No +24,F,No,No,No,Euthyroid,Single nodular goiter-left,No,Papillary,Uni-Focal,Low,T2,N0,M0,I,Biochemical Incomplete,No +30,F,No,No,No,Euthyroid,Single nodular goiter-left,No,Papillary,Uni-Focal,Low,T2,N0,M0,I,Excellent,No +31,F,No,No,No,Euthyroid,Single nodular goiter-left,No,Papillary,Uni-Focal,Low,T2,N0,M0,I,Excellent,No +32,F,No,No,No,Euthyroid,Single nodular goiter-right,No,Papillary,Uni-Focal,Low,T2,N0,M0,I,Excellent,No +28,F,No,No,No,Clinical Hyperthyroidism,Multinodular goiter,No,Papillary,Multi-Focal,Low,T2,N0,M0,I,Excellent,No +51,F,No,Yes,No,Euthyroid,Multinodular goiter,No,Papillary,Uni-Focal,Low,T2,N0,M0,I,Excellent,No +20,F,No,No,No,Euthyroid,Single nodular goiter-right,No,Papillary,Uni-Focal,Low,T2,N0,M0,I,Excellent,No +21,F,No,No,No,Euthyroid,Single nodular goiter-right,No,Papillary,Uni-Focal,Low,T2,N0,M0,I,Excellent,No +32,F,No,No,No,Euthyroid,Single nodular goiter-right,No,Papillary,Uni-Focal,Low,T2,N0,M0,I,Excellent,No +26,F,No,No,No,Euthyroid,Multinodular goiter,No,Papillary,Uni-Focal,Low,T2,N0,M0,I,Excellent,No +42,F,No,No,No,Euthyroid,Single nodular goiter-left,No,Papillary,Uni-Focal,Low,T2,N0,M0,I,Biochemical Incomplete,No +28,F,No,No,No,Euthyroid,Multinodular goiter,No,Papillary,Uni-Focal,Low,T2,N0,M0,I,Excellent,No +41,F,No,No,No,Euthyroid,Single nodular goiter-right,No,Papillary,Uni-Focal,Low,T2,N0,M0,I,Excellent,No +42,F,No,No,No,Euthyroid,Multinodular goiter,No,Papillary,Uni-Focal,Low,T2,N0,M0,I,Excellent,No +49,F,No,Yes,No,Euthyroid,Single nodular goiter-right,No,Papillary,Uni-Focal,Low,T2,N0,M0,I,Excellent,No +29,F,No,No,No,Euthyroid,Single nodular goiter-left,No,Papillary,Uni-Focal,Low,T2,N0,M0,I,Excellent,No +29,F,No,No,No,Euthyroid,Single nodular goiter-right,No,Papillary,Uni-Focal,Low,T2,N0,M0,I,Excellent,No +25,F,No,No,No,Euthyroid,Multinodular goiter,No,Papillary,Uni-Focal,Low,T2,N0,M0,I,Indeterminate,No +41,F,No,No,No,Euthyroid,Single nodular goiter-right,No,Papillary,Uni-Focal,Low,T2,N0,M0,I,Indeterminate,No +33,F,No,No,No,Euthyroid,Multinodular goiter,No,Papillary,Uni-Focal,Low,T2,N0,M0,I,Excellent,No +27,F,No,No,No,Euthyroid,Multinodular goiter,No,Papillary,Uni-Focal,Low,T2,N0,M0,I,Excellent,No +50,F,No,No,No,Euthyroid,Single nodular goiter-left,No,Papillary,Uni-Focal,Low,T2,N0,M0,I,Excellent,No +19,F,No,No,No,Euthyroid,Single nodular goiter-right,No,Papillary,Uni-Focal,Low,T2,N0,M0,I,Excellent,No +35,F,No,No,No,Euthyroid,Single nodular goiter-right,No,Papillary,Uni-Focal,Low,T2,N0,M0,I,Excellent,No +63,F,No,No,No,Euthyroid,Normal,No,Papillary,Uni-Focal,Low,T2,N0,M0,I,Biochemical Incomplete,No +24,F,No,No,No,Euthyroid,Single nodular goiter-right,No,Papillary,Uni-Focal,Low,T2,N0,M0,I,Excellent,No +36,F,No,No,No,Euthyroid,Single nodular goiter-right,No,Papillary,Uni-Focal,Low,T2,N0,M0,I,Excellent,No +31,M,Yes,No,No,Euthyroid,Single nodular goiter-left,No,Papillary,Uni-Focal,Low,T2,N0,M0,I,Excellent,No +24,M,No,No,No,Euthyroid,Single nodular goiter-right,No,Papillary,Uni-Focal,Low,T2,N0,M0,I,Excellent,No +33,F,No,No,No,Euthyroid,Single nodular goiter-right,No,Papillary,Uni-Focal,Low,T2,N0,M0,I,Excellent,No +24,F,No,No,No,Euthyroid,Multinodular goiter,No,Papillary,Uni-Focal,Low,T2,N0,M0,I,Excellent,No +28,F,No,No,No,Clinical Hypothyroidism,Single nodular goiter-right,No,Papillary,Uni-Focal,Low,T2,N0,M0,I,Excellent,No +22,F,No,No,No,Euthyroid,Single nodular goiter-right,No,Papillary,Uni-Focal,Low,T2,N0,M0,I,Excellent,No +27,F,No,No,No,Euthyroid,Single nodular goiter-right,No,Papillary,Uni-Focal,Low,T2,N0,M0,I,Excellent,No +28,F,No,No,No,Euthyroid,Single nodular goiter-right,No,Papillary,Uni-Focal,Low,T2,N0,M0,I,Indeterminate,No +29,F,No,No,No,Euthyroid,Single nodular goiter-left,No,Papillary,Multi-Focal,Low,T2,N0,M0,I,Excellent,No +40,F,No,No,No,Euthyroid,Multinodular goiter,No,Papillary,Multi-Focal,Low,T2,N0,M0,I,Excellent,No +31,F,No,No,No,Euthyroid,Single nodular goiter-right,No,Papillary,Uni-Focal,Low,T2,N0,M0,I,Excellent,No +55,F,No,No,No,Euthyroid,Single nodular goiter-left,No,Papillary,Uni-Focal,Low,T2,N0,M0,I,Excellent,No +21,F,No,No,No,Euthyroid,Single nodular goiter-right,No,Papillary,Uni-Focal,Low,T2,N0,M0,I,Excellent,No +40,M,Yes,No,No,Euthyroid,Multinodular goiter,No,Papillary,Uni-Focal,Low,T2,N0,M0,I,Excellent,No +38,F,No,No,No,Euthyroid,Single nodular goiter-right,No,Papillary,Uni-Focal,Low,T2,N0,M0,I,Excellent,No +21,F,No,No,No,Euthyroid,Single nodular goiter-left,No,Papillary,Uni-Focal,Low,T2,N0,M0,I,Excellent,No +31,M,Yes,No,No,Euthyroid,Single nodular goiter-right,No,Papillary,Uni-Focal,Low,T2,N0,M0,I,Excellent,No +30,F,No,No,No,Euthyroid,Normal,No,Papillary,Uni-Focal,Low,T2,N0,M0,I,Indeterminate,No +50,F,No,No,No,Euthyroid,Multinodular goiter,No,Papillary,Uni-Focal,Low,T2,N0,M0,I,Indeterminate,No +34,F,No,No,No,Euthyroid,Multinodular goiter,No,Papillary,Uni-Focal,Low,T2,N0,M0,I,Excellent,No +45,F,No,No,No,Euthyroid,Multinodular goiter,No,Papillary,Uni-Focal,Low,T2,N0,M0,I,Excellent,No +52,F,No,No,No,Euthyroid,Multinodular goiter,No,Papillary,Uni-Focal,Low,T2,N0,M0,I,Excellent,No +38,F,No,No,No,Euthyroid,Single nodular goiter-right,No,Papillary,Uni-Focal,Low,T2,N0,M0,I,Excellent,No +67,M,Yes,No,No,Euthyroid,Multinodular goiter,No,Papillary,Multi-Focal,Low,T2,N0,M0,I,Excellent,No +72,F,No,No,No,Subclinical Hypothyroidism,Single nodular goiter-right,No,Papillary,Uni-Focal,Low,T2,N0,M0,I,Indeterminate,No +45,F,No,No,No,Euthyroid,Multinodular goiter,No,Papillary,Multi-Focal,Low,T2,N0,M0,I,Excellent,No +45,F,No,No,No,Euthyroid,Multinodular goiter,No,Papillary,Multi-Focal,Low,T2,N0,M0,I,Biochemical Incomplete,No +26,F,No,No,No,Euthyroid,Multinodular goiter,No,Papillary,Uni-Focal,Low,T2,N0,M0,I,Excellent,No +67,F,No,No,No,Euthyroid,Single nodular goiter-left,No,Papillary,Uni-Focal,Low,T2,N0,M0,I,Excellent,No +56,F,No,No,No,Euthyroid,Single nodular goiter-right,No,Papillary,Uni-Focal,Low,T2,N0,M0,I,Excellent,No +30,F,No,No,No,Euthyroid,Single nodular goiter-right,No,Papillary,Uni-Focal,Low,T2,N0,M0,I,Excellent,No +34,F,No,No,No,Euthyroid,Multinodular goiter,No,Papillary,Uni-Focal,Low,T2,N0,M0,I,Excellent,No +50,F,No,No,No,Euthyroid,Single nodular goiter-right,No,Papillary,Uni-Focal,Low,T2,N0,M0,I,Excellent,No +42,F,No,No,No,Euthyroid,Multinodular goiter,No,Papillary,Uni-Focal,Low,T2,N0,M0,I,Excellent,No +35,F,No,No,No,Euthyroid,Multinodular goiter,No,Papillary,Multi-Focal,Low,T2,N0,M0,I,Excellent,No +23,F,No,No,No,Euthyroid,Multinodular goiter,No,Papillary,Multi-Focal,Low,T2,N0,M0,I,Excellent,No +44,F,No,No,No,Euthyroid,Multinodular goiter,No,Papillary,Multi-Focal,Low,T2,N0,M0,I,Excellent,No +23,F,No,No,No,Euthyroid,Single nodular goiter-left,Left,Papillary,Uni-Focal,Low,T2,N0,M0,I,Excellent,No +26,F,No,No,No,Euthyroid,Single nodular goiter-right,No,Papillary,Uni-Focal,Low,T2,N0,M0,I,Excellent,No +61,M,No,No,No,Subclinical Hypothyroidism,Single nodular goiter-left,No,Papillary,Uni-Focal,Low,T2,N0,M0,I,Excellent,No +22,F,No,No,No,Euthyroid,Single nodular goiter-right,No,Papillary,Uni-Focal,Low,T2,N0,M0,I,Excellent,No +31,F,No,No,No,Clinical Hyperthyroidism,Diffuse goiter,No,Papillary,Uni-Focal,Low,T2,N0,M0,I,Excellent,No +68,F,No,No,No,Clinical Hyperthyroidism,Diffuse goiter,No,Papillary,Uni-Focal,Low,T2,N0,M0,I,Excellent,No +57,M,No,No,No,Clinical Hyperthyroidism,Single nodular goiter-left,No,Papillary,Uni-Focal,Low,T2,N0,M0,I,Excellent,No +27,F,No,No,No,Euthyroid,Multinodular goiter,No,Papillary,Multi-Focal,Low,T2,N1b,M0,I,Excellent,No +25,F,No,No,No,Euthyroid,Single nodular goiter-right,Right,Papillary,Multi-Focal,Low,T2,N1b,M0,I,Excellent,No +20,M,No,No,No,Subclinical Hypothyroidism,Multinodular goiter,No,Papillary,Multi-Focal,Intermediate,T2,N1b,M0,I,Excellent,No +33,M,No,No,No,Euthyroid,Single nodular goiter-right,No,Papillary,Uni-Focal,Low,T2,N1b,M0,I,Excellent,No +36,F,No,No,No,Euthyroid,Single nodular goiter-right,Right,Papillary,Uni-Focal,Low,T2,N1b,M0,I,Excellent,No +36,F,No,No,No,Euthyroid,Single nodular goiter-right,Right,Papillary,Uni-Focal,Low,T2,N1b,M0,I,Indeterminate,No +40,F,No,No,No,Euthyroid,Multinodular goiter,Left,Papillary,Uni-Focal,Intermediate,T2,N1b,M0,I,Indeterminate,No +17,F,No,No,No,Euthyroid,Multinodular goiter,Right,Papillary,Uni-Focal,Intermediate,T2,N1b,M0,I,Indeterminate,No +24,F,No,No,No,Clinical Hypothyroidism,Multinodular goiter,Bilateral,Papillary,Multi-Focal,Intermediate,T2,N1b,M0,I,Excellent,No +38,F,No,No,No,Euthyroid,Single nodular goiter-right,Right,Papillary,Multi-Focal,Intermediate,T2,N1b,M0,I,Excellent,No +28,F,No,No,No,Euthyroid,Multinodular goiter,Right,Papillary,Uni-Focal,Intermediate,T2,N1b,M0,I,Excellent,No +36,F,No,No,No,Euthyroid,Single nodular goiter-right,Right,Papillary,Uni-Focal,Intermediate,T2,N1b,M0,I,Indeterminate,No +50,F,No,No,No,Euthyroid,Single nodular goiter-right,Right,Papillary,Uni-Focal,Intermediate,T2,N1b,M0,I,Indeterminate,No +51,M,No,No,No,Clinical Hyperthyroidism,Single nodular goiter-right,Right,Papillary,Uni-Focal,Intermediate,T2,N1b,M0,I,Indeterminate,No +55,F,No,No,No,Subclinical Hypothyroidism,Multinodular goiter,Bilateral,Papillary,Multi-Focal,Intermediate,T2,N1b,M0,II,Indeterminate,No +31,F,No,No,No,Euthyroid,Single nodular goiter-right,No,Papillary,Uni-Focal,Low,T2,N1a,M0,I,Excellent,No +33,F,No,No,No,Clinical Hypothyroidism,Single nodular goiter-right,No,Papillary,Uni-Focal,Low,T2,N1a,M0,I,Indeterminate,No +28,F,Yes,No,No,Clinical Hyperthyroidism,Single nodular goiter-right,No,Papillary,Uni-Focal,Low,T2,N1a,M0,I,Indeterminate,No +48,M,No,No,No,Euthyroid,Single nodular goiter-left,Left,Papillary,Uni-Focal,Intermediate,T2,N1a,M0,I,Indeterminate,No +40,F,No,No,No,Euthyroid,Single nodular goiter-right,No,Papillary,Uni-Focal,Low,T2,N1a,M0,I,Excellent,No +29,F,No,No,No,Euthyroid,Multinodular goiter,No,Papillary,Uni-Focal,Low,T2,N1a,M0,I,Indeterminate,No +20,F,No,No,No,Euthyroid,Multinodular goiter,No,Papillary,Uni-Focal,Intermediate,T2,N1a,M0,I,Excellent,No +35,F,No,No,No,Euthyroid,Multinodular goiter,No,Papillary,Uni-Focal,Low,T2,N0,M0,I,Indeterminate,No +56,F,No,No,No,Euthyroid,Single nodular goiter-right,No,Papillary,Uni-Focal,Low,T2,N0,M0,I,Structural Incomplete,Yes +20,M,No,No,No,Euthyroid,Single nodular goiter-right,Right,Papillary,Uni-Focal,Low,T2,N0,M0,I,Structural Incomplete,Yes +62,F,No,No,No,Clinical Hypothyroidism,Multinodular goiter,No,Papillary,Uni-Focal,Low,T2,N0,M0,I,Biochemical Incomplete,Yes +17,F,No,No,No,Euthyroid,Single nodular goiter-right,No,Papillary,Uni-Focal,High,T2,N0,M0,I,Structural Incomplete,Yes +21,F,No,No,No,Euthyroid,Single nodular goiter-right,Right,Papillary,Uni-Focal,Low,T2,N1b,M0,I,Structural Incomplete,Yes +20,M,No,No,No,Euthyroid,Single nodular goiter-right,Right,Papillary,Uni-Focal,Intermediate,T2,N1b,M0,I,Structural Incomplete,Yes +40,M,Yes,No,No,Euthyroid,Multinodular goiter,Bilateral,Papillary,Multi-Focal,Intermediate,T2,N1b,M0,I,Structural Incomplete,Yes +38,M,Yes,Yes,No,Euthyroid,Multinodular goiter,Right,Papillary,Multi-Focal,Intermediate,T2,N1b,M0,I,Structural Incomplete,Yes +21,F,No,No,No,Euthyroid,Single nodular goiter-left,Left,Papillary,Uni-Focal,Intermediate,T2,N1b,M0,I,Structural Incomplete,Yes +31,F,No,No,No,Euthyroid,Single nodular goiter-left,Left,Papillary,Uni-Focal,Intermediate,T2,N1b,M0,I,Structural Incomplete,Yes +34,F,No,No,No,Euthyroid,Single nodular goiter-right,Right,Papillary,Uni-Focal,Intermediate,T2,N1b,M0,I,Structural Incomplete,Yes +60,F,No,No,No,Euthyroid,Multinodular goiter,Bilateral,Papillary,Multi-Focal,Intermediate,T2,N1b,M0,I,Structural Incomplete,Yes +60,F,No,No,No,Euthyroid,Single nodular goiter-right,Right,Papillary,Multi-Focal,Intermediate,T2,N1b,M0,II,Structural Incomplete,Yes +62,F,No,No,No,Euthyroid,Single nodular goiter-right,Right,Papillary,Multi-Focal,Intermediate,T2,N1b,M0,II,Structural Incomplete,Yes +36,M,No,No,No,Clinical Hyperthyroidism,Multinodular goiter,No,Papillary,Uni-Focal,Intermediate,T2,N1a,M0,I,Indeterminate,Yes +29,F,Yes,No,No,Euthyroid,Single nodular goiter-left,No,Follicular,Uni-Focal,Low,T2,N0,M0,I,Structural Incomplete,Yes +33,M,No,No,No,Euthyroid,Multinodular goiter,No,Papillary,Uni-Focal,Low,T2,N0,M0,I,Structural Incomplete,Yes +75,M,Yes,No,Yes,Euthyroid,Single nodular goiter-left,No,Follicular,Multi-Focal,High,T2,N0,M1,IVB,Structural Incomplete,Yes +62,M,No,No,No,Euthyroid,Single nodular goiter-right,No,Papillary,Uni-Focal,Low,T2,N0,M0,I,Structural Incomplete,Yes +56,M,No,No,No,Euthyroid,Multinodular goiter,No,Papillary,Uni-Focal,Low,T2,N0,M0,I,Biochemical Incomplete,Yes +52,F,No,No,No,Euthyroid,Multinodular goiter,No,Follicular,Uni-Focal,Low,T3a,N0,M0,I,Biochemical Incomplete,No +35,F,No,No,No,Clinical Hyperthyroidism,Multinodular goiter,No,Papillary,Uni-Focal,Low,T3a,N0,M0,I,Excellent,No +34,F,No,No,No,Euthyroid,Multinodular goiter,Bilateral,Papillary,Uni-Focal,Intermediate,T3a,N1b,M0,I,Indeterminate,No +32,F,No,No,No,Euthyroid,Multinodular goiter,No,Hurthel cell,Multi-Focal,Low,T3a,N0,M0,I,Excellent,No +27,F,No,No,No,Clinical Hypothyroidism,Single nodular goiter-right,No,Hurthel cell,Multi-Focal,Low,T3a,N0,M0,I,Excellent,No +52,F,Yes,No,No,Euthyroid,Single nodular goiter-left,Bilateral,Hurthel cell,Multi-Focal,Low,T3a,N0,M0,I,Structural Incomplete,No +46,F,No,No,No,Euthyroid,Single nodular goiter-left,No,Hurthel cell,Multi-Focal,Low,T3a,N0,M0,I,Excellent,No +30,F,No,No,No,Subclinical Hypothyroidism,Normal,Right,Follicular,Uni-Focal,Low,T3a,N0,M0,I,Excellent,No +32,F,No,No,No,Euthyroid,Single nodular goiter-left,No,Follicular,Multi-Focal,Low,T3a,N0,M0,I,Indeterminate,No +25,F,No,No,No,Clinical Hyperthyroidism,Multinodular goiter,No,Follicular,Multi-Focal,Low,T3a,N0,M0,I,Excellent,No +38,F,No,No,No,Euthyroid,Multinodular goiter,No,Follicular,Multi-Focal,Low,T3a,N0,M0,I,Biochemical Incomplete,No +31,M,Yes,Yes,No,Euthyroid,Single nodular goiter-left,No,Follicular,Uni-Focal,Low,T3a,N0,M0,I,Indeterminate,No +37,F,No,No,No,Euthyroid,Single nodular goiter-right,No,Papillary,Multi-Focal,Low,T3a,N0,M0,I,Excellent,No +21,M,Yes,Yes,No,Euthyroid,Single nodular goiter-left,No,Papillary,Uni-Focal,Low,T3a,N0,M0,I,Biochemical Incomplete,No +34,F,No,No,No,Euthyroid,Single nodular goiter-left,No,Papillary,Uni-Focal,Low,T3a,N0,M0,I,Excellent,No +30,F,No,No,No,Euthyroid,Single nodular goiter-right,No,Papillary,Multi-Focal,Low,T3a,N0,M0,I,Biochemical Incomplete,No +48,F,No,No,No,Euthyroid,Single nodular goiter-right,No,Papillary,Multi-Focal,Low,T3a,N0,M0,I,Indeterminate,No +31,M,Yes,No,No,Euthyroid,Single nodular goiter-right,No,Papillary,Multi-Focal,Low,T3a,N0,M0,I,Excellent,No +52,F,No,No,No,Euthyroid,Single nodular goiter-left,No,Papillary,Multi-Focal,Low,T3a,N0,M0,I,Indeterminate,No +38,F,No,No,No,Euthyroid,Multinodular goiter,No,Papillary,Uni-Focal,Low,T3a,N0,M0,I,Excellent,No +41,F,No,No,No,Euthyroid,Single nodular goiter-right,No,Papillary,Multi-Focal,Low,T3a,N0,M0,I,Excellent,No +41,F,No,No,No,Euthyroid,Multinodular goiter,No,Papillary,Multi-Focal,Low,T3a,N0,M0,I,Biochemical Incomplete,No +70,F,No,No,No,Euthyroid,Single nodular goiter-left,No,Papillary,Multi-Focal,Low,T3a,N0,M0,I,Indeterminate,No +19,F,No,No,No,Euthyroid,Multinodular goiter,No,Papillary,Multi-Focal,Low,T3a,N0,M0,I,Excellent,No +41,M,No,No,No,Euthyroid,Single nodular goiter-left,No,Papillary,Uni-Focal,Low,T3a,N0,M0,I,Excellent,No +32,F,No,No,No,Euthyroid,Single nodular goiter-left,No,Papillary,Uni-Focal,Low,T3a,N0,M0,I,Excellent,No +35,F,No,No,No,Euthyroid,Multinodular goiter,No,Papillary,Multi-Focal,Low,T3a,N0,M0,I,Indeterminate,No +39,F,No,No,No,Euthyroid,Single nodular goiter-left,No,Papillary,Uni-Focal,Low,T3a,N0,M0,I,Indeterminate,No +45,F,No,No,No,Euthyroid,Single nodular goiter-left,No,Papillary,Uni-Focal,Low,T3a,N0,M0,I,Excellent,No +46,F,No,No,No,Euthyroid,Single nodular goiter-left,No,Papillary,Multi-Focal,Low,T3a,N0,M0,I,Indeterminate,No +45,F,No,No,No,Clinical Hypothyroidism,Single nodular goiter-left,No,Papillary,Multi-Focal,Low,T3a,N0,M0,I,Indeterminate,No +28,M,Yes,No,No,Euthyroid,Single nodular goiter-left,No,Papillary,Uni-Focal,Low,T3a,N0,M0,I,Indeterminate,No +31,M,No,No,No,Euthyroid,Single nodular goiter-right,No,Papillary,Uni-Focal,Low,T3a,N0,M0,I,Indeterminate,No +81,F,No,No,No,Euthyroid,Multinodular goiter,No,Papillary,Multi-Focal,Low,T3a,N0,M0,II,Excellent,No +41,M,Yes,No,No,Euthyroid,Single nodular goiter-right,No,Hurthel cell,Multi-Focal,Intermediate,T3a,N0,M0,I,Excellent,No +56,M,Yes,No,No,Euthyroid,Multinodular goiter,No,Hurthel cell,Multi-Focal,Intermediate,T3a,N0,M0,I,Indeterminate,No +47,F,No,No,No,Euthyroid,Multinodular goiter,No,Follicular,Uni-Focal,Intermediate,T3a,N0,M0,I,Indeterminate,No +37,F,No,No,No,Euthyroid,Single nodular goiter-right,No,Follicular,Uni-Focal,Intermediate,T3a,N0,M0,I,Excellent,No +32,F,No,No,No,Euthyroid,Multinodular goiter,No,Papillary,Multi-Focal,Intermediate,T3a,N0,M0,I,Biochemical Incomplete,No +53,F,No,No,No,Euthyroid,Multinodular goiter,No,Papillary,Uni-Focal,Intermediate,T3a,N0,M0,I,Indeterminate,No +30,F,No,No,No,Euthyroid,Single nodular goiter-left,No,Papillary,Multi-Focal,Intermediate,T3a,N0,M0,I,Excellent,No +34,F,No,No,No,Euthyroid,Single nodular goiter-right,No,Papillary,Uni-Focal,Intermediate,T3a,N0,M0,I,Excellent,No +62,F,No,No,No,Euthyroid,Single nodular goiter-left,No,Hurthel cell,Multi-Focal,Intermediate,T3a,N0,M0,II,Indeterminate,No +58,F,No,No,No,Clinical Hyperthyroidism,Multinodular goiter,No,Follicular,Multi-Focal,Intermediate,T3a,N0,M0,II,Indeterminate,No +55,M,No,No,No,Euthyroid,Multinodular goiter,No,Papillary,Multi-Focal,Intermediate,T3a,N0,M0,II,Indeterminate,No +21,F,No,No,No,Euthyroid,Single nodular goiter-left,Right,Papillary,Multi-Focal,Low,T3a,N1b,M0,I,Excellent,No +27,F,No,No,No,Euthyroid,Multinodular goiter,Right,Papillary,Multi-Focal,Intermediate,T3a,N1b,M0,I,Excellent,No +46,F,No,No,No,Euthyroid,Multinodular goiter,Bilateral,Papillary,Multi-Focal,Intermediate,T3a,N1b,M0,I,Indeterminate,No +44,F,No,No,No,Euthyroid,Multinodular goiter,Right,Papillary,Multi-Focal,Intermediate,T3a,N1b,M0,I,Excellent,No +29,F,No,No,No,Euthyroid,Single nodular goiter-left,Left,Papillary,Uni-Focal,Low,T3a,N1a,M0,I,Excellent,No +26,F,No,No,No,Subclinical Hypothyroidism,Multinodular goiter,Right,Papillary,Uni-Focal,Intermediate,T3a,N1a,M0,I,Indeterminate,No +42,M,No,No,No,Subclinical Hypothyroidism,Single nodular goiter-right,No,Papillary,Multi-Focal,Intermediate,T3a,N1a,M0,I,Indeterminate,No +56,F,No,No,No,Euthyroid,Single nodular goiter-right,No,Papillary,Multi-Focal,Intermediate,T3a,N1a,M0,II,Excellent,No +51,F,No,Yes,No,Euthyroid,Single nodular goiter-right,Right,Hurthel cell,Uni-Focal,Low,T3a,N0,M0,I,Indeterminate,No +61,F,No,No,No,Euthyroid,Single nodular goiter-right,No,Papillary,Uni-Focal,Intermediate,T3a,N0,M0,II,Excellent,No +42,M,No,No,No,Euthyroid,Single nodular goiter-right,No,Papillary,Multi-Focal,Low,T3a,N0,M0,I,Structural Incomplete,Yes +34,F,No,No,No,Euthyroid,Multinodular goiter,No,Papillary,Uni-Focal,Low,T3a,N0,M0,I,Structural Incomplete,Yes +67,F,No,No,No,Euthyroid,Multinodular goiter,No,Hurthel cell,Uni-Focal,Intermediate,T3a,N0,M0,II,Indeterminate,Yes +63,F,No,No,No,Euthyroid,Single nodular goiter-right,No,Follicular,Uni-Focal,Intermediate,T3a,N0,M0,II,Indeterminate,Yes +67,M,Yes,Yes,No,Euthyroid,Multinodular goiter,Bilateral,Papillary,Uni-Focal,Intermediate,T3a,N0,M0,II,Biochemical Incomplete,Yes +73,F,No,No,No,Euthyroid,Multinodular goiter,No,Papillary,Uni-Focal,Intermediate,T3a,N0,M0,II,Structural Incomplete,Yes +26,F,No,No,No,Euthyroid,Single nodular goiter-left,Left,Papillary,Uni-Focal,Intermediate,T3a,N1b,M1,I,Structural Incomplete,Yes +30,F,No,No,No,Euthyroid,Multinodular goiter,Right,Papillary,Uni-Focal,Intermediate,T3a,N1b,M0,I,Structural Incomplete,Yes +36,F,No,No,No,Euthyroid,Single nodular goiter-left,Left,Papillary,Multi-Focal,Intermediate,T3a,N1b,M0,I,Indeterminate,Yes +31,F,No,No,No,Euthyroid,Multinodular goiter,Bilateral,Papillary,Multi-Focal,Intermediate,T3a,N1b,M0,I,Structural Incomplete,Yes +40,F,No,No,No,Euthyroid,Single nodular goiter-right,Right,Papillary,Multi-Focal,Intermediate,T3a,N1b,M0,I,Structural Incomplete,Yes +49,F,No,No,No,Euthyroid,Single nodular goiter-right,Right,Papillary,Uni-Focal,Intermediate,T3a,N1b,M0,I,Structural Incomplete,Yes +38,M,Yes,No,No,Euthyroid,Multinodular goiter,Bilateral,Papillary,Uni-Focal,Intermediate,T3a,N1b,M0,I,Structural Incomplete,Yes +27,F,No,No,No,Euthyroid,Single nodular goiter-right,Bilateral,Papillary,Uni-Focal,Intermediate,T3a,N1b,M0,I,Structural Incomplete,Yes +27,M,No,No,No,Euthyroid,Multinodular goiter,Bilateral,Papillary,Multi-Focal,Intermediate,T3a,N1b,M0,I,Structural Incomplete,Yes +33,F,No,No,No,Euthyroid,Single nodular goiter-right,Right,Papillary,Multi-Focal,Intermediate,T3a,N1b,M0,I,Biochemical Incomplete,Yes +32,F,No,No,No,Euthyroid,Single nodular goiter-left,Left,Papillary,Multi-Focal,Intermediate,T3a,N1b,M0,I,Structural Incomplete,Yes +29,F,No,No,No,Euthyroid,Multinodular goiter,Right,Papillary,Multi-Focal,Intermediate,T3a,N1b,M0,I,Structural Incomplete,Yes +37,M,No,No,No,Euthyroid,Multinodular goiter,Bilateral,Papillary,Multi-Focal,Intermediate,T3a,N1b,M0,I,Structural Incomplete,Yes +48,F,No,No,No,Euthyroid,Multinodular goiter,Bilateral,Papillary,Multi-Focal,Intermediate,T3a,N1b,M0,I,Structural Incomplete,Yes +30,F,No,No,No,Euthyroid,Multinodular goiter,Bilateral,Papillary,Multi-Focal,Intermediate,T3a,N1b,M0,I,Structural Incomplete,Yes +33,M,No,No,No,Euthyroid,Multinodular goiter,Bilateral,Papillary,Uni-Focal,Intermediate,T3a,N1b,M0,I,Structural Incomplete,Yes +80,F,Yes,No,No,Euthyroid,Single nodular goiter-right,Right,Papillary,Multi-Focal,Intermediate,T3a,N1b,M0,II,Structural Incomplete,Yes +62,F,No,No,No,Euthyroid,Multinodular goiter,Right,Papillary,Multi-Focal,Intermediate,T3a,N1b,M0,II,Structural Incomplete,Yes +63,M,Yes,No,No,Euthyroid,Single nodular goiter-right,Right,Papillary,Multi-Focal,Intermediate,T3a,N1b,M0,II,Structural Incomplete,Yes +60,M,No,No,No,Euthyroid,Single nodular goiter-right,Bilateral,Papillary,Multi-Focal,Intermediate,T3a,N1b,M0,II,Structural Incomplete,Yes +79,M,Yes,No,No,Euthyroid,Multinodular goiter,Bilateral,Papillary,Multi-Focal,Intermediate,T3a,N1b,M0,II,Indeterminate,Yes +65,F,No,Yes,No,Euthyroid,Multinodular goiter,Bilateral,Papillary,Multi-Focal,Intermediate,T3a,N1b,M0,II,Biochemical Incomplete,Yes +35,F,No,No,No,Euthyroid,Single nodular goiter-right,Right,Papillary,Multi-Focal,Intermediate,T3a,N1a,M0,I,Biochemical Incomplete,Yes +58,F,No,No,No,Euthyroid,Multinodular goiter,No,Papillary,Multi-Focal,Intermediate,T3a,N1a,M0,II,Indeterminate,Yes +34,F,No,No,No,Euthyroid,Single nodular goiter-right,No,Papillary,Uni-Focal,High,T3a,N1a,M0,I,Biochemical Incomplete,Yes +56,F,No,No,No,Euthyroid,Single nodular goiter-left,No,Follicular,Multi-Focal,Low,T3a,N0,M0,I,Structural Incomplete,Yes +52,M,Yes,No,No,Euthyroid,Single nodular goiter-left,Right,Follicular,Multi-Focal,Intermediate,T3a,N0,M0,I,Biochemical Incomplete,Yes +51,F,No,No,No,Euthyroid,Single nodular goiter-left,No,Follicular,Uni-Focal,Intermediate,T3a,N0,M0,I,Structural Incomplete,Yes +31,F,No,No,No,Euthyroid,Single nodular goiter-left,No,Follicular,Uni-Focal,Intermediate,T3a,N1a,M0,I,Biochemical Incomplete,Yes +44,M,Yes,No,No,Euthyroid,Single nodular goiter-right,Right,Papillary,Multi-Focal,High,T3a,N1b,M1,II,Structural Incomplete,Yes +15,F,No,No,No,Euthyroid,Normal,Bilateral,Papillary,Multi-Focal,Intermediate,T3a,N1b,M0,I,Structural Incomplete,Yes +29,M,No,No,No,Euthyroid,Multinodular goiter,Extensive,Papillary,Multi-Focal,Intermediate,T3a,N1b,M0,I,Structural Incomplete,Yes +53,M,No,No,No,Euthyroid,Multinodular goiter,Bilateral,Papillary,Multi-Focal,Intermediate,T3a,N1b,M0,I,Structural Incomplete,Yes +45,F,No,No,No,Euthyroid,Single nodular goiter-left,Left,Papillary,Multi-Focal,Intermediate,T3a,N1b,M0,I,Structural Incomplete,Yes +38,F,No,No,No,Euthyroid,Single nodular goiter-left,Posterior,Papillary,Multi-Focal,High,T3a,N1b,M1,II,Structural Incomplete,Yes +48,F,No,No,No,Clinical Hyperthyroidism,Multinodular goiter,Left,Hurthel cell,Multi-Focal,Intermediate,T3b,N1a,M0,I,Structural Incomplete,No +42,F,No,No,No,Euthyroid,Multinodular goiter,No,Papillary,Multi-Focal,Intermediate,T3b,N0,M0,I,Indeterminate,No +23,F,No,Yes,No,Euthyroid,Single nodular goiter-right,Right,Papillary,Uni-Focal,Intermediate,T3b,N1a,M0,I,Structural Incomplete,Yes +22,F,No,No,No,Euthyroid,Multinodular goiter,Right,Papillary,Multi-Focal,Intermediate,T3b,N1a,M0,I,Structural Incomplete,Yes +44,F,No,No,No,Euthyroid,Single nodular goiter-left,Left,Papillary,Multi-Focal,Intermediate,T3b,N1b,M0,I,Structural Incomplete,Yes +31,F,No,No,No,Euthyroid,Single nodular goiter-left,Left,Papillary,Uni-Focal,Intermediate,T3b,N1b,M0,I,Excellent,Yes +25,F,No,No,No,Euthyroid,Multinodular goiter,Left,Papillary,Multi-Focal,Intermediate,T3b,N1b,M0,I,Structural Incomplete,Yes +32,M,No,Yes,No,Euthyroid,Multinodular goiter,Bilateral,Papillary,Multi-Focal,Intermediate,T3b,N1b,M0,I,Structural Incomplete,Yes +82,M,Yes,No,No,Euthyroid,Single nodular goiter-left,Left,Papillary,Uni-Focal,Intermediate,T3b,N1b,M0,II,Structural Incomplete,Yes +58,F,No,No,No,Subclinical Hypothyroidism,Multinodular goiter,Extensive,Papillary,Multi-Focal,Intermediate,T3b,N1b,M0,II,Structural Incomplete,Yes +68,M,Yes,Yes,No,Subclinical Hypothyroidism,Single nodular goiter-left,Bilateral,Papillary,Multi-Focal,Intermediate,T3b,N1b,M0,III,Structural Incomplete,Yes +37,F,No,No,No,Subclinical Hypothyroidism,Single nodular goiter-left,No,Papillary,Multi-Focal,Intermediate,T3b,N1a,M1,II,Structural Incomplete,Yes +59,M,Yes,Yes,No,Clinical Hypothyroidism,Multinodular goiter,No,Hurthel cell,Multi-Focal,Intermediate,T3b,N0,M0,I,Structural Incomplete,Yes +21,F,No,No,No,Euthyroid,Single nodular goiter-right,No,Papillary,Multi-Focal,Intermediate,T3b,N0,M0,I,Structural Incomplete,Yes +73,F,No,No,No,Euthyroid,Single nodular goiter-right,Right,Papillary,Multi-Focal,High,T3b,N1a,M1,IVB,Structural Incomplete,Yes +35,M,Yes,No,No,Euthyroid,Single nodular goiter-left,Left,Papillary,Multi-Focal,High,T3b,N1b,M1,II,Structural Incomplete,Yes +32,F,No,No,No,Euthyroid,Single nodular goiter-right,No,Papillary,Multi-Focal,Intermediate,T4a,N0,M0,I,Excellent,No +54,M,Yes,No,No,Euthyroid,Single nodular goiter-left,Right,Hurthel cell,Multi-Focal,Intermediate,T4a,N1b,M0,II,Structural Incomplete,Yes +26,F,Yes,No,No,Euthyroid,Single nodular goiter-left,Bilateral,Hurthel cell,Multi-Focal,High,T4a,N1b,M0,I,Structural Incomplete,Yes +53,F,No,No,No,Euthyroid,Multinodular goiter,Right,Papillary,Uni-Focal,High,T4a,N1b,M0,I,Structural Incomplete,Yes +35,F,No,No,No,Euthyroid,Multinodular goiter,Extensive,Papillary,Multi-Focal,High,T4a,N1b,M0,I,Structural Incomplete,Yes +49,M,No,No,No,Euthyroid,Multinodular goiter,Bilateral,Papillary,Multi-Focal,High,T4a,N1b,M0,I,Structural Incomplete,Yes +34,F,No,No,No,Euthyroid,Multinodular goiter,Right,Papillary,Uni-Focal,High,T4a,N1b,M0,I,Structural Incomplete,Yes +80,F,Yes,Yes,No,Euthyroid,Multinodular goiter,Right,Papillary,Uni-Focal,High,T4a,N1b,M0,III,Structural Incomplete,Yes +67,F,No,No,No,Euthyroid,Single nodular goiter-right,Right,Papillary,Multi-Focal,High,T4a,N1b,M0,III,Structural Incomplete,Yes +68,F,No,No,No,Euthyroid,Multinodular goiter,Bilateral,Papillary,Multi-Focal,High,T4a,N1b,M1,IVB,Structural Incomplete,Yes +71,F,Yes,No,No,Euthyroid,Single nodular goiter-left,No,Follicular,Multi-Focal,High,T4a,N0,M1,IVB,Structural Incomplete,Yes +64,F,No,Yes,No,Euthyroid,Multinodular goiter,No,Follicular,Multi-Focal,High,T4a,N0,M1,IVB,Structural Incomplete,Yes +80,M,Yes,No,No,Euthyroid,Single nodular goiter-left,No,Hurthel cell,Multi-Focal,Intermediate,T4a,N0,M0,II,Structural Incomplete,Yes +56,F,No,No,No,Euthyroid,Multinodular goiter,Posterior,Papillary,Multi-Focal,High,T4a,N1b,M0,II,Structural Incomplete,Yes +71,M,Yes,Yes,No,Subclinical Hypothyroidism,Multinodular goiter,Bilateral,Papillary,Multi-Focal,High,T4a,N1b,M0,III,Structural Incomplete,Yes +78,M,Yes,Yes,Yes,Clinical Hyperthyroidism,Multinodular goiter,No,Follicular,Multi-Focal,High,T4a,N0,M1,IVB,Structural Incomplete,Yes +51,F,No,No,No,Euthyroid,Multinodular goiter,No,Papillary,Multi-Focal,High,T4a,N1a,M1,II,Structural Incomplete,Yes +67,F,Yes,No,No,Subclinical Hypothyroidism,Multinodular goiter,No,Papillary,Multi-Focal,High,T4a,N0,M0,IVA,Biochemical Incomplete,Yes +31,M,Yes,No,Yes,Euthyroid,Single nodular goiter-left,Extensive,Papillary,Multi-Focal,High,T4a,N1b,M1,II,Structural Incomplete,Yes +62,M,Yes,No,No,Euthyroid,Single nodular goiter-left,Left,Papillary,Multi-Focal,High,T4a,N1b,M1,IVB,Structural Incomplete,Yes +59,F,No,No,No,Euthyroid,Multinodular goiter,Bilateral,Papillary,Multi-Focal,High,T4b,N1b,M0,IVB,Structural Incomplete,Yes +40,M,Yes,No,No,Euthyroid,Multinodular goiter,Bilateral,Papillary,Multi-Focal,High,T4b,N1b,M0,I,Structural Incomplete,Yes +46,M,Yes,No,No,Euthyroid,Single nodular goiter-left,Bilateral,Follicular,Uni-Focal,High,T4b,N1b,M1,II,Structural Incomplete,Yes +72,M,Yes,Yes,Yes,Euthyroid,Single nodular goiter-right,Right,Papillary,Uni-Focal,High,T4b,N1b,M1,IVB,Biochemical Incomplete,Yes +81,M,Yes,No,Yes,Euthyroid,Multinodular goiter,Extensive,Papillary,Multi-Focal,High,T4b,N1b,M1,IVB,Structural Incomplete,Yes +72,M,Yes,Yes,No,Euthyroid,Multinodular goiter,Bilateral,Papillary,Multi-Focal,High,T4b,N1b,M1,IVB,Structural Incomplete,Yes +61,M,Yes,Yes,Yes,Clinical Hyperthyroidism,Multinodular goiter,Extensive,Hurthel cell,Multi-Focal,High,T4b,N1b,M0,IVA,Structural Incomplete,Yes +67,M,Yes,No,No,Euthyroid,Multinodular goiter,Bilateral,Papillary,Multi-Focal,High,T4b,N1b,M0,IVA,Structural Incomplete,Yes diff --git a/Thyroid Cancer Recurrence Prediction/Dataset/final_data.csv b/Thyroid Cancer Recurrence Prediction/Dataset/final_data.csv new file mode 100644 index 0000000000..457a21ec9e --- /dev/null +++ b/Thyroid Cancer Recurrence Prediction/Dataset/final_data.csv @@ -0,0 +1,384 @@ +Age,Gender,Smoking,Hx Smoking,Hx Radiothreapy,Thyroid Function,Physical Examination,Adenopathy,Pathology,Focality,Risk,T,N,M,Stage,Response,Recurred +27,F,No,No,No,Euthyroid,Single nodular goiter-left,No,Micropapillary,Uni-Focal,Low,T1a,N0,M0,I,Indeterminate,No +34,F,No,Yes,No,Euthyroid,Multinodular goiter,No,Micropapillary,Uni-Focal,Low,T1a,N0,M0,I,Excellent,No +30,F,No,No,No,Euthyroid,Single nodular goiter-right,No,Micropapillary,Uni-Focal,Low,T1a,N0,M0,I,Excellent,No +62,F,No,No,No,Euthyroid,Single nodular goiter-right,No,Micropapillary,Uni-Focal,Low,T1a,N0,M0,I,Excellent,No +62,F,No,No,No,Euthyroid,Multinodular goiter,No,Micropapillary,Multi-Focal,Low,T1a,N0,M0,I,Excellent,No +52,M,Yes,No,No,Euthyroid,Multinodular goiter,No,Micropapillary,Multi-Focal,Low,T1a,N0,M0,I,Indeterminate,No +41,F,No,Yes,No,Clinical Hyperthyroidism,Single nodular goiter-right,No,Micropapillary,Uni-Focal,Low,T1a,N0,M0,I,Excellent,No +46,F,No,No,No,Euthyroid,Single nodular goiter-right,No,Micropapillary,Uni-Focal,Low,T1a,N0,M0,I,Excellent,No +51,F,No,No,No,Euthyroid,Single nodular goiter-right,No,Micropapillary,Uni-Focal,Low,T1a,N0,M0,I,Excellent,No +40,F,No,No,No,Euthyroid,Single nodular goiter-right,No,Micropapillary,Uni-Focal,Low,T1a,N0,M0,I,Excellent,No +75,F,No,No,No,Euthyroid,Single nodular goiter-right,No,Micropapillary,Uni-Focal,Low,T1a,N0,M0,I,Excellent,No +59,F,No,No,No,Euthyroid,Single nodular goiter-left,No,Micropapillary,Uni-Focal,Low,T1a,N0,M0,I,Excellent,No +49,F,No,No,No,Euthyroid,Multinodular goiter,No,Micropapillary,Uni-Focal,Low,T1a,N0,M0,I,Excellent,No +50,F,No,No,No,Clinical Hyperthyroidism,Multinodular goiter,No,Micropapillary,Uni-Focal,Low,T1a,N0,M0,I,Excellent,No +76,F,No,No,No,Clinical Hypothyroidism,Single nodular goiter-right,No,Micropapillary,Uni-Focal,Low,T1a,N0,M0,I,Excellent,No +42,F,No,No,No,Euthyroid,Single nodular goiter-right,No,Micropapillary,Uni-Focal,Low,T1a,N0,M0,I,Indeterminate,No +40,F,No,Yes,No,Euthyroid,Single nodular goiter-right,No,Micropapillary,Uni-Focal,Low,T1a,N0,M0,I,Excellent,No +44,F,No,No,No,Euthyroid,Multinodular goiter,No,Micropapillary,Uni-Focal,Low,T1a,N0,M0,I,Indeterminate,No +43,F,No,No,No,Euthyroid,Multinodular goiter,No,Micropapillary,Uni-Focal,Low,T1a,N0,M0,I,Excellent,No +52,F,No,No,No,Euthyroid,Multinodular goiter,No,Micropapillary,Multi-Focal,Low,T1a,N0,M0,I,Indeterminate,No +41,F,No,No,No,Euthyroid,Single nodular goiter-left,No,Micropapillary,Uni-Focal,Low,T1a,N0,M0,I,Excellent,No +44,F,No,No,No,Euthyroid,Single nodular goiter-left,No,Micropapillary,Uni-Focal,Low,T1a,N0,M0,I,Excellent,No +36,F,No,No,No,Euthyroid,Single nodular goiter-right,No,Micropapillary,Uni-Focal,Low,T1a,N0,M0,I,Excellent,No +70,F,No,No,No,Euthyroid,Single nodular goiter-right,No,Micropapillary,Uni-Focal,Low,T1a,N0,M0,I,Excellent,No +60,F,No,No,No,Euthyroid,Multinodular goiter,No,Micropapillary,Multi-Focal,Low,T1a,N0,M0,I,Excellent,No +33,F,No,No,No,Euthyroid,Single nodular goiter-right,No,Micropapillary,Uni-Focal,Low,T1a,N0,M0,I,Excellent,No +43,M,No,No,No,Subclinical Hyperthyroidism,Single nodular goiter-left,No,Micropapillary,Uni-Focal,Low,T1a,N0,M0,I,Excellent,No +26,M,No,No,No,Euthyroid,Single nodular goiter-left,No,Micropapillary,Uni-Focal,Low,T1a,N0,M0,I,Excellent,No +41,F,No,No,No,Euthyroid,Single nodular goiter-right,No,Micropapillary,Uni-Focal,Low,T1a,N0,M0,I,Excellent,No +37,F,No,Yes,No,Subclinical Hypothyroidism,Normal,No,Micropapillary,Uni-Focal,Low,T1a,N0,M0,I,Excellent,No +37,F,No,No,No,Euthyroid,Single nodular goiter-left,No,Micropapillary,Uni-Focal,Low,T1a,N0,M0,I,Excellent,No +30,F,No,No,No,Clinical Hyperthyroidism,Normal,No,Micropapillary,Uni-Focal,Low,T1a,N0,M0,I,Excellent,No +36,F,No,No,No,Euthyroid,Single nodular goiter-right,No,Micropapillary,Uni-Focal,Low,T1a,N0,M0,I,Excellent,No +55,F,No,No,No,Euthyroid,Multinodular goiter,No,Micropapillary,Uni-Focal,Low,T1a,N0,M0,I,Excellent,No +52,M,Yes,No,No,Euthyroid,Single nodular goiter-left,No,Micropapillary,Uni-Focal,Low,T1a,N0,M0,I,Excellent,No +37,F,No,No,No,Subclinical Hypothyroidism,Single nodular goiter-left,No,Micropapillary,Uni-Focal,Low,T1a,N0,M0,I,Excellent,No +31,F,No,No,No,Clinical Hyperthyroidism,Diffuse goiter,No,Micropapillary,Uni-Focal,Low,T1a,N0,M0,I,Excellent,No +43,M,No,No,No,Euthyroid,Multinodular goiter,No,Micropapillary,Multi-Focal,Low,T1a,N0,M0,I,Excellent,No +40,F,No,No,No,Euthyroid,Single nodular goiter-right,No,Micropapillary,Uni-Focal,Low,T1a,N0,M0,I,Excellent,No +34,F,No,No,No,Euthyroid,Diffuse goiter,No,Micropapillary,Uni-Focal,Low,T1a,N0,M0,I,Excellent,No +51,F,No,No,No,Euthyroid,Single nodular goiter-right,No,Micropapillary,Uni-Focal,Low,T1a,N0,M0,I,Excellent,No +45,F,No,No,No,Euthyroid,Single nodular goiter-left,No,Micropapillary,Uni-Focal,Low,T1a,N0,M0,I,Excellent,No +20,F,No,No,No,Euthyroid,Single nodular goiter-right,No,Micropapillary,Uni-Focal,Low,T1a,N0,M0,I,Excellent,No +38,F,No,No,No,Euthyroid,Multinodular goiter,No,Micropapillary,Uni-Focal,Low,T1a,N0,M0,I,Excellent,No +38,F,No,No,No,Clinical Hyperthyroidism,Diffuse goiter,No,Micropapillary,Uni-Focal,Low,T1a,N0,M0,I,Excellent,No +33,F,No,No,No,Euthyroid,Multinodular goiter,No,Micropapillary,Uni-Focal,Low,T1a,N0,M0,I,Excellent,No +31,F,No,No,No,Clinical Hypothyroidism,Multinodular goiter,No,Micropapillary,Uni-Focal,Intermediate,T1a,N0,M0,I,Excellent,No +31,F,No,No,No,Euthyroid,Multinodular goiter,Right,Papillary,Multi-Focal,Intermediate,T1a,N1b,M0,I,Excellent,No +26,F,No,No,No,Euthyroid,Normal,Extensive,Papillary,Uni-Focal,Intermediate,T1a,N1b,M0,I,Structural Incomplete,Yes +29,F,No,No,No,Euthyroid,Multinodular goiter,No,Follicular,Uni-Focal,Low,T1b,N0,M0,I,Excellent,No +43,F,No,No,No,Euthyroid,Single nodular goiter-right,No,Micropapillary,Uni-Focal,Low,T1b,N0,M0,I,Excellent,No +30,F,No,No,No,Subclinical Hyperthyroidism,Multinodular goiter,No,Papillary,Multi-Focal,Low,T1b,N0,M0,I,Excellent,No +25,F,No,No,No,Euthyroid,Multinodular goiter,No,Papillary,Multi-Focal,Low,T1b,N0,M0,I,Excellent,No +27,F,No,No,No,Euthyroid,Multinodular goiter,No,Papillary,Uni-Focal,Low,T1b,N0,M0,I,Excellent,No +25,F,No,No,No,Euthyroid,Single nodular goiter-left,No,Papillary,Uni-Focal,Low,T1b,N0,M0,I,Excellent,No +21,F,No,No,No,Euthyroid,Single nodular goiter-right,No,Papillary,Uni-Focal,Low,T1b,N0,M0,I,Indeterminate,No +43,F,No,Yes,No,Euthyroid,Single nodular goiter-right,No,Papillary,Uni-Focal,Low,T1b,N0,M0,I,Excellent,No +23,F,No,No,No,Euthyroid,Single nodular goiter-left,No,Papillary,Uni-Focal,Low,T1b,N0,M0,I,Excellent,No +23,F,No,No,No,Clinical Hyperthyroidism,Single nodular goiter-left,No,Papillary,Uni-Focal,Low,T1b,N0,M0,I,Excellent,No +43,F,No,No,No,Euthyroid,Single nodular goiter-left,No,Papillary,Uni-Focal,Low,T1b,N0,M0,I,Indeterminate,No +24,M,No,No,No,Euthyroid,Single nodular goiter-left,No,Papillary,Uni-Focal,Low,T1b,N0,M0,I,Excellent,No +35,F,No,No,No,Euthyroid,Single nodular goiter-right,No,Papillary,Uni-Focal,Low,T1b,N0,M0,I,Excellent,No +54,F,No,No,No,Euthyroid,Single nodular goiter-left,No,Papillary,Uni-Focal,Low,T1b,N0,M0,I,Excellent,No +54,F,No,No,No,Euthyroid,Multinodular goiter,No,Papillary,Uni-Focal,Low,T1b,N0,M0,I,Indeterminate,No +22,F,No,No,No,Subclinical Hyperthyroidism,Single nodular goiter-right,No,Papillary,Uni-Focal,Low,T1b,N0,M0,I,Excellent,No +38,F,No,No,No,Euthyroid,Multinodular goiter,No,Papillary,Multi-Focal,Low,T1b,N0,M0,I,Excellent,No +35,F,No,No,No,Euthyroid,Single nodular goiter-right,No,Papillary,Uni-Focal,Low,T1b,N0,M0,I,Excellent,No +51,F,No,No,No,Euthyroid,Single nodular goiter-left,No,Papillary,Uni-Focal,Low,T1b,N0,M0,I,Excellent,No +22,M,No,No,No,Euthyroid,Multinodular goiter,No,Papillary,Multi-Focal,Low,T1b,N0,M0,I,Excellent,No +51,F,No,No,No,Euthyroid,Single nodular goiter-left,No,Papillary,Uni-Focal,Low,T1b,N0,M0,I,Excellent,No +40,F,No,No,No,Euthyroid,Single nodular goiter-right,No,Papillary,Uni-Focal,Low,T1b,N0,M0,I,Excellent,No +69,F,No,No,No,Euthyroid,Single nodular goiter-left,No,Papillary,Uni-Focal,Low,T1b,N0,M0,I,Excellent,No +31,F,No,No,No,Euthyroid,Single nodular goiter-right,No,Papillary,Uni-Focal,Low,T1b,N0,M0,I,Excellent,No +29,F,No,No,No,Euthyroid,Single nodular goiter-right,No,Papillary,Uni-Focal,Low,T1b,N0,M0,I,Excellent,No +30,F,No,No,No,Euthyroid,Single nodular goiter-right,No,Papillary,Uni-Focal,Low,T1b,N0,M0,I,Excellent,No +28,F,No,No,No,Euthyroid,Multinodular goiter,No,Papillary,Uni-Focal,Low,T1b,N0,M0,I,Excellent,No +22,F,No,No,No,Clinical Hypothyroidism,Single nodular goiter-right,No,Papillary,Uni-Focal,Low,T1b,N0,M0,I,Excellent,No +29,F,No,No,No,Euthyroid,Single nodular goiter-right,No,Papillary,Uni-Focal,Low,T1b,N0,M0,I,Excellent,No +35,F,No,No,No,Euthyroid,Single nodular goiter-left,No,Papillary,Uni-Focal,Low,T1b,N0,M0,I,Excellent,No +50,F,No,No,No,Euthyroid,Multinodular goiter,No,Papillary,Multi-Focal,Low,T1b,N0,M0,I,Excellent,No +27,F,No,No,No,Clinical Hyperthyroidism,Diffuse goiter,No,Papillary,Uni-Focal,Low,T1b,N0,M0,I,Excellent,No +17,F,No,Yes,No,Euthyroid,Single nodular goiter-right,No,Papillary,Uni-Focal,Low,T1b,N0,M0,I,Excellent,No +27,F,No,No,No,Subclinical Hyperthyroidism,Single nodular goiter-right,No,Papillary,Uni-Focal,Low,T1b,N0,M0,I,Excellent,No +40,F,No,No,No,Euthyroid,Single nodular goiter-right,No,Papillary,Uni-Focal,Intermediate,T1b,N0,M0,I,Excellent,No +33,F,No,No,No,Euthyroid,Single nodular goiter-left,No,Papillary,Uni-Focal,Intermediate,T1b,N1b,M0,I,Indeterminate,No +25,F,No,Yes,Yes,Euthyroid,Single nodular goiter-right,No,Papillary,Uni-Focal,Low,T1b,N0,M0,I,Excellent,No +73,F,No,No,No,Euthyroid,Single nodular goiter-right,No,Papillary,Uni-Focal,Low,T1b,N0,M0,I,Excellent,No +36,F,No,No,No,Euthyroid,Multinodular goiter,No,Papillary,Multi-Focal,Low,T1b,N0,M0,I,Indeterminate,Yes +35,F,No,No,No,Euthyroid,Multinodular goiter,Right,Papillary,Multi-Focal,Intermediate,T1b,N1b,M0,I,Structural Incomplete,Yes +31,M,Yes,No,No,Euthyroid,Multinodular goiter,Right,Papillary,Multi-Focal,Intermediate,T1b,N1b,M0,I,Structural Incomplete,Yes +18,F,No,No,No,Euthyroid,Single nodular goiter-right,Right,Papillary,Uni-Focal,Intermediate,T1b,N1b,M0,I,Structural Incomplete,Yes +62,F,No,No,No,Euthyroid,Single nodular goiter-right,No,Follicular,Multi-Focal,Intermediate,T1b,N0,M0,I,Structural Incomplete,Yes +62,F,No,No,No,Euthyroid,Single nodular goiter-right,No,Hurthel cell,Uni-Focal,Low,T2,N0,M0,I,Excellent,No +39,F,No,No,No,Euthyroid,Diffuse goiter,No,Hurthel cell,Uni-Focal,Low,T2,N0,M0,I,Indeterminate,No +37,F,No,No,No,Euthyroid,Single nodular goiter-left,No,Hurthel cell,Multi-Focal,Low,T2,N0,M0,I,Excellent,No +26,F,No,Yes,No,Subclinical Hyperthyroidism,Single nodular goiter-right,No,Hurthel cell,Uni-Focal,Low,T2,N0,M0,I,Excellent,No +31,F,No,No,No,Euthyroid,Single nodular goiter-left,No,Hurthel cell,Uni-Focal,Low,T2,N0,M0,I,Indeterminate,No +24,F,No,No,No,Euthyroid,Single nodular goiter-right,No,Follicular,Uni-Focal,Low,T2,N0,M0,I,Excellent,No +57,F,Yes,No,No,Euthyroid,Multinodular goiter,No,Follicular,Uni-Focal,Low,T2,N0,M0,I,Excellent,No +28,F,No,No,No,Euthyroid,Single nodular goiter-right,No,Follicular,Uni-Focal,Low,T2,N0,M0,I,Excellent,No +44,M,Yes,No,No,Euthyroid,Single nodular goiter-right,No,Follicular,Uni-Focal,Low,T2,N0,M0,I,Excellent,No +42,F,No,No,No,Euthyroid,Single nodular goiter-left,No,Follicular,Uni-Focal,Low,T2,N0,M0,I,Indeterminate,No +27,F,No,No,No,Euthyroid,Single nodular goiter-right,No,Follicular,Uni-Focal,Low,T2,N0,M0,I,Excellent,No +51,F,No,No,No,Euthyroid,Single nodular goiter-right,No,Papillary,Uni-Focal,Low,T2,N0,M0,I,Excellent,No +33,F,No,No,No,Clinical Hypothyroidism,Single nodular goiter-right,Right,Papillary,Uni-Focal,Low,T2,N0,M0,I,Excellent,No +42,F,No,No,No,Euthyroid,Single nodular goiter-right,No,Papillary,Uni-Focal,Low,T2,N0,M0,I,Excellent,No +26,F,No,No,No,Euthyroid,Multinodular goiter,No,Papillary,Uni-Focal,Low,T2,N0,M0,I,Excellent,No +24,F,No,No,No,Euthyroid,Single nodular goiter-left,No,Papillary,Uni-Focal,Low,T2,N0,M0,I,Excellent,No +60,F,No,No,No,Euthyroid,Multinodular goiter,No,Papillary,Multi-Focal,Low,T2,N0,M0,I,Excellent,No +60,F,No,No,No,Euthyroid,Single nodular goiter-right,No,Papillary,Uni-Focal,Low,T2,N0,M0,I,Biochemical Incomplete,No +31,F,No,No,No,Euthyroid,Single nodular goiter-right,No,Papillary,Uni-Focal,Low,T2,N0,M0,I,Excellent,No +66,F,No,No,No,Euthyroid,Single nodular goiter-right,No,Papillary,Uni-Focal,Low,T2,N0,M0,I,Excellent,No +44,F,No,No,No,Euthyroid,Single nodular goiter-left,No,Papillary,Uni-Focal,Low,T2,N0,M0,I,Excellent,No +32,F,No,No,No,Euthyroid,Single nodular goiter-right,No,Papillary,Uni-Focal,Low,T2,N0,M0,I,Excellent,No +26,F,No,No,No,Euthyroid,Multinodular goiter,No,Papillary,Multi-Focal,Low,T2,N0,M0,I,Excellent,No +37,F,No,No,No,Euthyroid,Single nodular goiter-right,No,Papillary,Uni-Focal,Low,T2,N0,M0,I,Excellent,No +33,F,No,No,No,Euthyroid,Single nodular goiter-left,No,Papillary,Uni-Focal,Low,T2,N0,M0,I,Excellent,No +23,F,No,No,No,Euthyroid,Multinodular goiter,No,Papillary,Multi-Focal,Low,T2,N0,M0,I,Indeterminate,No +47,F,No,No,No,Euthyroid,Single nodular goiter-right,No,Papillary,Uni-Focal,Low,T2,N0,M0,I,Excellent,No +28,F,No,No,No,Euthyroid,Single nodular goiter-right,No,Papillary,Uni-Focal,Low,T2,N0,M0,I,Excellent,No +37,F,No,No,No,Euthyroid,Single nodular goiter-right,No,Papillary,Uni-Focal,Low,T2,N0,M0,I,Excellent,No +26,F,No,No,No,Euthyroid,Multinodular goiter,No,Papillary,Uni-Focal,Low,T2,N0,M0,I,Excellent,No +28,F,No,No,No,Euthyroid,Single nodular goiter-left,No,Papillary,Uni-Focal,Low,T2,N0,M0,I,Excellent,No +28,F,No,No,No,Euthyroid,Single nodular goiter-right,No,Papillary,Uni-Focal,Low,T2,N0,M0,I,Excellent,No +44,F,No,No,No,Euthyroid,Multinodular goiter,No,Papillary,Uni-Focal,Low,T2,N0,M0,I,Excellent,No +31,F,No,Yes,No,Euthyroid,Single nodular goiter-right,Right,Papillary,Uni-Focal,Low,T2,N0,M0,I,Excellent,No +27,F,No,No,No,Clinical Hypothyroidism,Single nodular goiter-right,No,Papillary,Uni-Focal,Low,T2,N0,M0,I,Excellent,No +56,F,No,No,No,Euthyroid,Single nodular goiter-right,No,Papillary,Uni-Focal,Low,T2,N0,M0,I,Biochemical Incomplete,No +63,F,No,No,No,Euthyroid,Single nodular goiter-left,No,Papillary,Uni-Focal,Low,T2,N0,M0,I,Excellent,No +24,F,No,No,No,Euthyroid,Single nodular goiter-left,No,Papillary,Uni-Focal,Low,T2,N0,M0,I,Biochemical Incomplete,No +30,F,No,No,No,Euthyroid,Single nodular goiter-left,No,Papillary,Uni-Focal,Low,T2,N0,M0,I,Excellent,No +31,F,No,No,No,Euthyroid,Single nodular goiter-left,No,Papillary,Uni-Focal,Low,T2,N0,M0,I,Excellent,No +32,F,No,No,No,Euthyroid,Single nodular goiter-right,No,Papillary,Uni-Focal,Low,T2,N0,M0,I,Excellent,No +28,F,No,No,No,Clinical Hyperthyroidism,Multinodular goiter,No,Papillary,Multi-Focal,Low,T2,N0,M0,I,Excellent,No +51,F,No,Yes,No,Euthyroid,Multinodular goiter,No,Papillary,Uni-Focal,Low,T2,N0,M0,I,Excellent,No +20,F,No,No,No,Euthyroid,Single nodular goiter-right,No,Papillary,Uni-Focal,Low,T2,N0,M0,I,Excellent,No +21,F,No,No,No,Euthyroid,Single nodular goiter-right,No,Papillary,Uni-Focal,Low,T2,N0,M0,I,Excellent,No +32,F,No,No,No,Euthyroid,Single nodular goiter-right,No,Papillary,Uni-Focal,Low,T2,N0,M0,I,Excellent,No +26,F,No,No,No,Euthyroid,Multinodular goiter,No,Papillary,Uni-Focal,Low,T2,N0,M0,I,Excellent,No +42,F,No,No,No,Euthyroid,Single nodular goiter-left,No,Papillary,Uni-Focal,Low,T2,N0,M0,I,Biochemical Incomplete,No +28,F,No,No,No,Euthyroid,Multinodular goiter,No,Papillary,Uni-Focal,Low,T2,N0,M0,I,Excellent,No +41,F,No,No,No,Euthyroid,Single nodular goiter-right,No,Papillary,Uni-Focal,Low,T2,N0,M0,I,Excellent,No +42,F,No,No,No,Euthyroid,Multinodular goiter,No,Papillary,Uni-Focal,Low,T2,N0,M0,I,Excellent,No +49,F,No,Yes,No,Euthyroid,Single nodular goiter-right,No,Papillary,Uni-Focal,Low,T2,N0,M0,I,Excellent,No +29,F,No,No,No,Euthyroid,Single nodular goiter-left,No,Papillary,Uni-Focal,Low,T2,N0,M0,I,Excellent,No +29,F,No,No,No,Euthyroid,Single nodular goiter-right,No,Papillary,Uni-Focal,Low,T2,N0,M0,I,Excellent,No +25,F,No,No,No,Euthyroid,Multinodular goiter,No,Papillary,Uni-Focal,Low,T2,N0,M0,I,Indeterminate,No +41,F,No,No,No,Euthyroid,Single nodular goiter-right,No,Papillary,Uni-Focal,Low,T2,N0,M0,I,Indeterminate,No +33,F,No,No,No,Euthyroid,Multinodular goiter,No,Papillary,Uni-Focal,Low,T2,N0,M0,I,Excellent,No +27,F,No,No,No,Euthyroid,Multinodular goiter,No,Papillary,Uni-Focal,Low,T2,N0,M0,I,Excellent,No +50,F,No,No,No,Euthyroid,Single nodular goiter-left,No,Papillary,Uni-Focal,Low,T2,N0,M0,I,Excellent,No +19,F,No,No,No,Euthyroid,Single nodular goiter-right,No,Papillary,Uni-Focal,Low,T2,N0,M0,I,Excellent,No +35,F,No,No,No,Euthyroid,Single nodular goiter-right,No,Papillary,Uni-Focal,Low,T2,N0,M0,I,Excellent,No +63,F,No,No,No,Euthyroid,Normal,No,Papillary,Uni-Focal,Low,T2,N0,M0,I,Biochemical Incomplete,No +24,F,No,No,No,Euthyroid,Single nodular goiter-right,No,Papillary,Uni-Focal,Low,T2,N0,M0,I,Excellent,No +36,F,No,No,No,Euthyroid,Single nodular goiter-right,No,Papillary,Uni-Focal,Low,T2,N0,M0,I,Excellent,No +31,M,Yes,No,No,Euthyroid,Single nodular goiter-left,No,Papillary,Uni-Focal,Low,T2,N0,M0,I,Excellent,No +24,M,No,No,No,Euthyroid,Single nodular goiter-right,No,Papillary,Uni-Focal,Low,T2,N0,M0,I,Excellent,No +33,F,No,No,No,Euthyroid,Single nodular goiter-right,No,Papillary,Uni-Focal,Low,T2,N0,M0,I,Excellent,No +24,F,No,No,No,Euthyroid,Multinodular goiter,No,Papillary,Uni-Focal,Low,T2,N0,M0,I,Excellent,No +28,F,No,No,No,Clinical Hypothyroidism,Single nodular goiter-right,No,Papillary,Uni-Focal,Low,T2,N0,M0,I,Excellent,No +22,F,No,No,No,Euthyroid,Single nodular goiter-right,No,Papillary,Uni-Focal,Low,T2,N0,M0,I,Excellent,No +27,F,No,No,No,Euthyroid,Single nodular goiter-right,No,Papillary,Uni-Focal,Low,T2,N0,M0,I,Excellent,No +28,F,No,No,No,Euthyroid,Single nodular goiter-right,No,Papillary,Uni-Focal,Low,T2,N0,M0,I,Indeterminate,No +29,F,No,No,No,Euthyroid,Single nodular goiter-left,No,Papillary,Multi-Focal,Low,T2,N0,M0,I,Excellent,No +40,F,No,No,No,Euthyroid,Multinodular goiter,No,Papillary,Multi-Focal,Low,T2,N0,M0,I,Excellent,No +31,F,No,No,No,Euthyroid,Single nodular goiter-right,No,Papillary,Uni-Focal,Low,T2,N0,M0,I,Excellent,No +55,F,No,No,No,Euthyroid,Single nodular goiter-left,No,Papillary,Uni-Focal,Low,T2,N0,M0,I,Excellent,No +21,F,No,No,No,Euthyroid,Single nodular goiter-right,No,Papillary,Uni-Focal,Low,T2,N0,M0,I,Excellent,No +40,M,Yes,No,No,Euthyroid,Multinodular goiter,No,Papillary,Uni-Focal,Low,T2,N0,M0,I,Excellent,No +38,F,No,No,No,Euthyroid,Single nodular goiter-right,No,Papillary,Uni-Focal,Low,T2,N0,M0,I,Excellent,No +21,F,No,No,No,Euthyroid,Single nodular goiter-left,No,Papillary,Uni-Focal,Low,T2,N0,M0,I,Excellent,No +31,M,Yes,No,No,Euthyroid,Single nodular goiter-right,No,Papillary,Uni-Focal,Low,T2,N0,M0,I,Excellent,No +30,F,No,No,No,Euthyroid,Normal,No,Papillary,Uni-Focal,Low,T2,N0,M0,I,Indeterminate,No +50,F,No,No,No,Euthyroid,Multinodular goiter,No,Papillary,Uni-Focal,Low,T2,N0,M0,I,Indeterminate,No +34,F,No,No,No,Euthyroid,Multinodular goiter,No,Papillary,Uni-Focal,Low,T2,N0,M0,I,Excellent,No +45,F,No,No,No,Euthyroid,Multinodular goiter,No,Papillary,Uni-Focal,Low,T2,N0,M0,I,Excellent,No +52,F,No,No,No,Euthyroid,Multinodular goiter,No,Papillary,Uni-Focal,Low,T2,N0,M0,I,Excellent,No +38,F,No,No,No,Euthyroid,Single nodular goiter-right,No,Papillary,Uni-Focal,Low,T2,N0,M0,I,Excellent,No +67,M,Yes,No,No,Euthyroid,Multinodular goiter,No,Papillary,Multi-Focal,Low,T2,N0,M0,I,Excellent,No +72,F,No,No,No,Subclinical Hypothyroidism,Single nodular goiter-right,No,Papillary,Uni-Focal,Low,T2,N0,M0,I,Indeterminate,No +45,F,No,No,No,Euthyroid,Multinodular goiter,No,Papillary,Multi-Focal,Low,T2,N0,M0,I,Excellent,No +45,F,No,No,No,Euthyroid,Multinodular goiter,No,Papillary,Multi-Focal,Low,T2,N0,M0,I,Biochemical Incomplete,No +26,F,No,No,No,Euthyroid,Multinodular goiter,No,Papillary,Uni-Focal,Low,T2,N0,M0,I,Excellent,No +67,F,No,No,No,Euthyroid,Single nodular goiter-left,No,Papillary,Uni-Focal,Low,T2,N0,M0,I,Excellent,No +56,F,No,No,No,Euthyroid,Single nodular goiter-right,No,Papillary,Uni-Focal,Low,T2,N0,M0,I,Excellent,No +30,F,No,No,No,Euthyroid,Single nodular goiter-right,No,Papillary,Uni-Focal,Low,T2,N0,M0,I,Excellent,No +34,F,No,No,No,Euthyroid,Multinodular goiter,No,Papillary,Uni-Focal,Low,T2,N0,M0,I,Excellent,No +50,F,No,No,No,Euthyroid,Single nodular goiter-right,No,Papillary,Uni-Focal,Low,T2,N0,M0,I,Excellent,No +42,F,No,No,No,Euthyroid,Multinodular goiter,No,Papillary,Uni-Focal,Low,T2,N0,M0,I,Excellent,No +35,F,No,No,No,Euthyroid,Multinodular goiter,No,Papillary,Multi-Focal,Low,T2,N0,M0,I,Excellent,No +23,F,No,No,No,Euthyroid,Multinodular goiter,No,Papillary,Multi-Focal,Low,T2,N0,M0,I,Excellent,No +44,F,No,No,No,Euthyroid,Multinodular goiter,No,Papillary,Multi-Focal,Low,T2,N0,M0,I,Excellent,No +23,F,No,No,No,Euthyroid,Single nodular goiter-left,Left,Papillary,Uni-Focal,Low,T2,N0,M0,I,Excellent,No +26,F,No,No,No,Euthyroid,Single nodular goiter-right,No,Papillary,Uni-Focal,Low,T2,N0,M0,I,Excellent,No +61,M,No,No,No,Subclinical Hypothyroidism,Single nodular goiter-left,No,Papillary,Uni-Focal,Low,T2,N0,M0,I,Excellent,No +22,F,No,No,No,Euthyroid,Single nodular goiter-right,No,Papillary,Uni-Focal,Low,T2,N0,M0,I,Excellent,No +31,F,No,No,No,Clinical Hyperthyroidism,Diffuse goiter,No,Papillary,Uni-Focal,Low,T2,N0,M0,I,Excellent,No +68,F,No,No,No,Clinical Hyperthyroidism,Diffuse goiter,No,Papillary,Uni-Focal,Low,T2,N0,M0,I,Excellent,No +57,M,No,No,No,Clinical Hyperthyroidism,Single nodular goiter-left,No,Papillary,Uni-Focal,Low,T2,N0,M0,I,Excellent,No +27,F,No,No,No,Euthyroid,Multinodular goiter,No,Papillary,Multi-Focal,Low,T2,N1b,M0,I,Excellent,No +25,F,No,No,No,Euthyroid,Single nodular goiter-right,Right,Papillary,Multi-Focal,Low,T2,N1b,M0,I,Excellent,No +20,M,No,No,No,Subclinical Hypothyroidism,Multinodular goiter,No,Papillary,Multi-Focal,Intermediate,T2,N1b,M0,I,Excellent,No +33,M,No,No,No,Euthyroid,Single nodular goiter-right,No,Papillary,Uni-Focal,Low,T2,N1b,M0,I,Excellent,No +36,F,No,No,No,Euthyroid,Single nodular goiter-right,Right,Papillary,Uni-Focal,Low,T2,N1b,M0,I,Excellent,No +36,F,No,No,No,Euthyroid,Single nodular goiter-right,Right,Papillary,Uni-Focal,Low,T2,N1b,M0,I,Indeterminate,No +40,F,No,No,No,Euthyroid,Multinodular goiter,Left,Papillary,Uni-Focal,Intermediate,T2,N1b,M0,I,Indeterminate,No +17,F,No,No,No,Euthyroid,Multinodular goiter,Right,Papillary,Uni-Focal,Intermediate,T2,N1b,M0,I,Indeterminate,No +24,F,No,No,No,Clinical Hypothyroidism,Multinodular goiter,Bilateral,Papillary,Multi-Focal,Intermediate,T2,N1b,M0,I,Excellent,No +38,F,No,No,No,Euthyroid,Single nodular goiter-right,Right,Papillary,Multi-Focal,Intermediate,T2,N1b,M0,I,Excellent,No +28,F,No,No,No,Euthyroid,Multinodular goiter,Right,Papillary,Uni-Focal,Intermediate,T2,N1b,M0,I,Excellent,No +36,F,No,No,No,Euthyroid,Single nodular goiter-right,Right,Papillary,Uni-Focal,Intermediate,T2,N1b,M0,I,Indeterminate,No +50,F,No,No,No,Euthyroid,Single nodular goiter-right,Right,Papillary,Uni-Focal,Intermediate,T2,N1b,M0,I,Indeterminate,No +51,M,No,No,No,Clinical Hyperthyroidism,Single nodular goiter-right,Right,Papillary,Uni-Focal,Intermediate,T2,N1b,M0,I,Indeterminate,No +55,F,No,No,No,Subclinical Hypothyroidism,Multinodular goiter,Bilateral,Papillary,Multi-Focal,Intermediate,T2,N1b,M0,II,Indeterminate,No +31,F,No,No,No,Euthyroid,Single nodular goiter-right,No,Papillary,Uni-Focal,Low,T2,N1a,M0,I,Excellent,No +33,F,No,No,No,Clinical Hypothyroidism,Single nodular goiter-right,No,Papillary,Uni-Focal,Low,T2,N1a,M0,I,Indeterminate,No +28,F,Yes,No,No,Clinical Hyperthyroidism,Single nodular goiter-right,No,Papillary,Uni-Focal,Low,T2,N1a,M0,I,Indeterminate,No +48,M,No,No,No,Euthyroid,Single nodular goiter-left,Left,Papillary,Uni-Focal,Intermediate,T2,N1a,M0,I,Indeterminate,No +40,F,No,No,No,Euthyroid,Single nodular goiter-right,No,Papillary,Uni-Focal,Low,T2,N1a,M0,I,Excellent,No +29,F,No,No,No,Euthyroid,Multinodular goiter,No,Papillary,Uni-Focal,Low,T2,N1a,M0,I,Indeterminate,No +20,F,No,No,No,Euthyroid,Multinodular goiter,No,Papillary,Uni-Focal,Intermediate,T2,N1a,M0,I,Excellent,No +35,F,No,No,No,Euthyroid,Multinodular goiter,No,Papillary,Uni-Focal,Low,T2,N0,M0,I,Indeterminate,No +56,F,No,No,No,Euthyroid,Single nodular goiter-right,No,Papillary,Uni-Focal,Low,T2,N0,M0,I,Structural Incomplete,Yes +20,M,No,No,No,Euthyroid,Single nodular goiter-right,Right,Papillary,Uni-Focal,Low,T2,N0,M0,I,Structural Incomplete,Yes +62,F,No,No,No,Clinical Hypothyroidism,Multinodular goiter,No,Papillary,Uni-Focal,Low,T2,N0,M0,I,Biochemical Incomplete,Yes +17,F,No,No,No,Euthyroid,Single nodular goiter-right,No,Papillary,Uni-Focal,High,T2,N0,M0,I,Structural Incomplete,Yes +21,F,No,No,No,Euthyroid,Single nodular goiter-right,Right,Papillary,Uni-Focal,Low,T2,N1b,M0,I,Structural Incomplete,Yes +20,M,No,No,No,Euthyroid,Single nodular goiter-right,Right,Papillary,Uni-Focal,Intermediate,T2,N1b,M0,I,Structural Incomplete,Yes +40,M,Yes,No,No,Euthyroid,Multinodular goiter,Bilateral,Papillary,Multi-Focal,Intermediate,T2,N1b,M0,I,Structural Incomplete,Yes +38,M,Yes,Yes,No,Euthyroid,Multinodular goiter,Right,Papillary,Multi-Focal,Intermediate,T2,N1b,M0,I,Structural Incomplete,Yes +21,F,No,No,No,Euthyroid,Single nodular goiter-left,Left,Papillary,Uni-Focal,Intermediate,T2,N1b,M0,I,Structural Incomplete,Yes +31,F,No,No,No,Euthyroid,Single nodular goiter-left,Left,Papillary,Uni-Focal,Intermediate,T2,N1b,M0,I,Structural Incomplete,Yes +34,F,No,No,No,Euthyroid,Single nodular goiter-right,Right,Papillary,Uni-Focal,Intermediate,T2,N1b,M0,I,Structural Incomplete,Yes +60,F,No,No,No,Euthyroid,Multinodular goiter,Bilateral,Papillary,Multi-Focal,Intermediate,T2,N1b,M0,I,Structural Incomplete,Yes +60,F,No,No,No,Euthyroid,Single nodular goiter-right,Right,Papillary,Multi-Focal,Intermediate,T2,N1b,M0,II,Structural Incomplete,Yes +62,F,No,No,No,Euthyroid,Single nodular goiter-right,Right,Papillary,Multi-Focal,Intermediate,T2,N1b,M0,II,Structural Incomplete,Yes +36,M,No,No,No,Clinical Hyperthyroidism,Multinodular goiter,No,Papillary,Uni-Focal,Intermediate,T2,N1a,M0,I,Indeterminate,Yes +29,F,Yes,No,No,Euthyroid,Single nodular goiter-left,No,Follicular,Uni-Focal,Low,T2,N0,M0,I,Structural Incomplete,Yes +33,M,No,No,No,Euthyroid,Multinodular goiter,No,Papillary,Uni-Focal,Low,T2,N0,M0,I,Structural Incomplete,Yes +75,M,Yes,No,Yes,Euthyroid,Single nodular goiter-left,No,Follicular,Multi-Focal,High,T2,N0,M1,IVB,Structural Incomplete,Yes +62,M,No,No,No,Euthyroid,Single nodular goiter-right,No,Papillary,Uni-Focal,Low,T2,N0,M0,I,Structural Incomplete,Yes +56,M,No,No,No,Euthyroid,Multinodular goiter,No,Papillary,Uni-Focal,Low,T2,N0,M0,I,Biochemical Incomplete,Yes +52,F,No,No,No,Euthyroid,Multinodular goiter,No,Follicular,Uni-Focal,Low,T3a,N0,M0,I,Biochemical Incomplete,No +35,F,No,No,No,Clinical Hyperthyroidism,Multinodular goiter,No,Papillary,Uni-Focal,Low,T3a,N0,M0,I,Excellent,No +34,F,No,No,No,Euthyroid,Multinodular goiter,Bilateral,Papillary,Uni-Focal,Intermediate,T3a,N1b,M0,I,Indeterminate,No +32,F,No,No,No,Euthyroid,Multinodular goiter,No,Hurthel cell,Multi-Focal,Low,T3a,N0,M0,I,Excellent,No +27,F,No,No,No,Clinical Hypothyroidism,Single nodular goiter-right,No,Hurthel cell,Multi-Focal,Low,T3a,N0,M0,I,Excellent,No +52,F,Yes,No,No,Euthyroid,Single nodular goiter-left,Bilateral,Hurthel cell,Multi-Focal,Low,T3a,N0,M0,I,Structural Incomplete,No +46,F,No,No,No,Euthyroid,Single nodular goiter-left,No,Hurthel cell,Multi-Focal,Low,T3a,N0,M0,I,Excellent,No +30,F,No,No,No,Subclinical Hypothyroidism,Normal,Right,Follicular,Uni-Focal,Low,T3a,N0,M0,I,Excellent,No +32,F,No,No,No,Euthyroid,Single nodular goiter-left,No,Follicular,Multi-Focal,Low,T3a,N0,M0,I,Indeterminate,No +25,F,No,No,No,Clinical Hyperthyroidism,Multinodular goiter,No,Follicular,Multi-Focal,Low,T3a,N0,M0,I,Excellent,No +38,F,No,No,No,Euthyroid,Multinodular goiter,No,Follicular,Multi-Focal,Low,T3a,N0,M0,I,Biochemical Incomplete,No +31,M,Yes,Yes,No,Euthyroid,Single nodular goiter-left,No,Follicular,Uni-Focal,Low,T3a,N0,M0,I,Indeterminate,No +37,F,No,No,No,Euthyroid,Single nodular goiter-right,No,Papillary,Multi-Focal,Low,T3a,N0,M0,I,Excellent,No +21,M,Yes,Yes,No,Euthyroid,Single nodular goiter-left,No,Papillary,Uni-Focal,Low,T3a,N0,M0,I,Biochemical Incomplete,No +34,F,No,No,No,Euthyroid,Single nodular goiter-left,No,Papillary,Uni-Focal,Low,T3a,N0,M0,I,Excellent,No +30,F,No,No,No,Euthyroid,Single nodular goiter-right,No,Papillary,Multi-Focal,Low,T3a,N0,M0,I,Biochemical Incomplete,No +48,F,No,No,No,Euthyroid,Single nodular goiter-right,No,Papillary,Multi-Focal,Low,T3a,N0,M0,I,Indeterminate,No +31,M,Yes,No,No,Euthyroid,Single nodular goiter-right,No,Papillary,Multi-Focal,Low,T3a,N0,M0,I,Excellent,No +52,F,No,No,No,Euthyroid,Single nodular goiter-left,No,Papillary,Multi-Focal,Low,T3a,N0,M0,I,Indeterminate,No +38,F,No,No,No,Euthyroid,Multinodular goiter,No,Papillary,Uni-Focal,Low,T3a,N0,M0,I,Excellent,No +41,F,No,No,No,Euthyroid,Single nodular goiter-right,No,Papillary,Multi-Focal,Low,T3a,N0,M0,I,Excellent,No +41,F,No,No,No,Euthyroid,Multinodular goiter,No,Papillary,Multi-Focal,Low,T3a,N0,M0,I,Biochemical Incomplete,No +70,F,No,No,No,Euthyroid,Single nodular goiter-left,No,Papillary,Multi-Focal,Low,T3a,N0,M0,I,Indeterminate,No +19,F,No,No,No,Euthyroid,Multinodular goiter,No,Papillary,Multi-Focal,Low,T3a,N0,M0,I,Excellent,No +41,M,No,No,No,Euthyroid,Single nodular goiter-left,No,Papillary,Uni-Focal,Low,T3a,N0,M0,I,Excellent,No +32,F,No,No,No,Euthyroid,Single nodular goiter-left,No,Papillary,Uni-Focal,Low,T3a,N0,M0,I,Excellent,No +35,F,No,No,No,Euthyroid,Multinodular goiter,No,Papillary,Multi-Focal,Low,T3a,N0,M0,I,Indeterminate,No +39,F,No,No,No,Euthyroid,Single nodular goiter-left,No,Papillary,Uni-Focal,Low,T3a,N0,M0,I,Indeterminate,No +45,F,No,No,No,Euthyroid,Single nodular goiter-left,No,Papillary,Uni-Focal,Low,T3a,N0,M0,I,Excellent,No +46,F,No,No,No,Euthyroid,Single nodular goiter-left,No,Papillary,Multi-Focal,Low,T3a,N0,M0,I,Indeterminate,No +45,F,No,No,No,Clinical Hypothyroidism,Single nodular goiter-left,No,Papillary,Multi-Focal,Low,T3a,N0,M0,I,Indeterminate,No +28,M,Yes,No,No,Euthyroid,Single nodular goiter-left,No,Papillary,Uni-Focal,Low,T3a,N0,M0,I,Indeterminate,No +31,M,No,No,No,Euthyroid,Single nodular goiter-right,No,Papillary,Uni-Focal,Low,T3a,N0,M0,I,Indeterminate,No +81,F,No,No,No,Euthyroid,Multinodular goiter,No,Papillary,Multi-Focal,Low,T3a,N0,M0,II,Excellent,No +41,M,Yes,No,No,Euthyroid,Single nodular goiter-right,No,Hurthel cell,Multi-Focal,Intermediate,T3a,N0,M0,I,Excellent,No +56,M,Yes,No,No,Euthyroid,Multinodular goiter,No,Hurthel cell,Multi-Focal,Intermediate,T3a,N0,M0,I,Indeterminate,No +47,F,No,No,No,Euthyroid,Multinodular goiter,No,Follicular,Uni-Focal,Intermediate,T3a,N0,M0,I,Indeterminate,No +37,F,No,No,No,Euthyroid,Single nodular goiter-right,No,Follicular,Uni-Focal,Intermediate,T3a,N0,M0,I,Excellent,No +32,F,No,No,No,Euthyroid,Multinodular goiter,No,Papillary,Multi-Focal,Intermediate,T3a,N0,M0,I,Biochemical Incomplete,No +53,F,No,No,No,Euthyroid,Multinodular goiter,No,Papillary,Uni-Focal,Intermediate,T3a,N0,M0,I,Indeterminate,No +30,F,No,No,No,Euthyroid,Single nodular goiter-left,No,Papillary,Multi-Focal,Intermediate,T3a,N0,M0,I,Excellent,No +34,F,No,No,No,Euthyroid,Single nodular goiter-right,No,Papillary,Uni-Focal,Intermediate,T3a,N0,M0,I,Excellent,No +62,F,No,No,No,Euthyroid,Single nodular goiter-left,No,Hurthel cell,Multi-Focal,Intermediate,T3a,N0,M0,II,Indeterminate,No +58,F,No,No,No,Clinical Hyperthyroidism,Multinodular goiter,No,Follicular,Multi-Focal,Intermediate,T3a,N0,M0,II,Indeterminate,No +55,M,No,No,No,Euthyroid,Multinodular goiter,No,Papillary,Multi-Focal,Intermediate,T3a,N0,M0,II,Indeterminate,No +21,F,No,No,No,Euthyroid,Single nodular goiter-left,Right,Papillary,Multi-Focal,Low,T3a,N1b,M0,I,Excellent,No +27,F,No,No,No,Euthyroid,Multinodular goiter,Right,Papillary,Multi-Focal,Intermediate,T3a,N1b,M0,I,Excellent,No +46,F,No,No,No,Euthyroid,Multinodular goiter,Bilateral,Papillary,Multi-Focal,Intermediate,T3a,N1b,M0,I,Indeterminate,No +44,F,No,No,No,Euthyroid,Multinodular goiter,Right,Papillary,Multi-Focal,Intermediate,T3a,N1b,M0,I,Excellent,No +29,F,No,No,No,Euthyroid,Single nodular goiter-left,Left,Papillary,Uni-Focal,Low,T3a,N1a,M0,I,Excellent,No +26,F,No,No,No,Subclinical Hypothyroidism,Multinodular goiter,Right,Papillary,Uni-Focal,Intermediate,T3a,N1a,M0,I,Indeterminate,No +42,M,No,No,No,Subclinical Hypothyroidism,Single nodular goiter-right,No,Papillary,Multi-Focal,Intermediate,T3a,N1a,M0,I,Indeterminate,No +56,F,No,No,No,Euthyroid,Single nodular goiter-right,No,Papillary,Multi-Focal,Intermediate,T3a,N1a,M0,II,Excellent,No +51,F,No,Yes,No,Euthyroid,Single nodular goiter-right,Right,Hurthel cell,Uni-Focal,Low,T3a,N0,M0,I,Indeterminate,No +61,F,No,No,No,Euthyroid,Single nodular goiter-right,No,Papillary,Uni-Focal,Intermediate,T3a,N0,M0,II,Excellent,No +42,M,No,No,No,Euthyroid,Single nodular goiter-right,No,Papillary,Multi-Focal,Low,T3a,N0,M0,I,Structural Incomplete,Yes +34,F,No,No,No,Euthyroid,Multinodular goiter,No,Papillary,Uni-Focal,Low,T3a,N0,M0,I,Structural Incomplete,Yes +67,F,No,No,No,Euthyroid,Multinodular goiter,No,Hurthel cell,Uni-Focal,Intermediate,T3a,N0,M0,II,Indeterminate,Yes +63,F,No,No,No,Euthyroid,Single nodular goiter-right,No,Follicular,Uni-Focal,Intermediate,T3a,N0,M0,II,Indeterminate,Yes +67,M,Yes,Yes,No,Euthyroid,Multinodular goiter,Bilateral,Papillary,Uni-Focal,Intermediate,T3a,N0,M0,II,Biochemical Incomplete,Yes +73,F,No,No,No,Euthyroid,Multinodular goiter,No,Papillary,Uni-Focal,Intermediate,T3a,N0,M0,II,Structural Incomplete,Yes +26,F,No,No,No,Euthyroid,Single nodular goiter-left,Left,Papillary,Uni-Focal,Intermediate,T3a,N1b,M1,I,Structural Incomplete,Yes +30,F,No,No,No,Euthyroid,Multinodular goiter,Right,Papillary,Uni-Focal,Intermediate,T3a,N1b,M0,I,Structural Incomplete,Yes +36,F,No,No,No,Euthyroid,Single nodular goiter-left,Left,Papillary,Multi-Focal,Intermediate,T3a,N1b,M0,I,Indeterminate,Yes +31,F,No,No,No,Euthyroid,Multinodular goiter,Bilateral,Papillary,Multi-Focal,Intermediate,T3a,N1b,M0,I,Structural Incomplete,Yes +40,F,No,No,No,Euthyroid,Single nodular goiter-right,Right,Papillary,Multi-Focal,Intermediate,T3a,N1b,M0,I,Structural Incomplete,Yes +49,F,No,No,No,Euthyroid,Single nodular goiter-right,Right,Papillary,Uni-Focal,Intermediate,T3a,N1b,M0,I,Structural Incomplete,Yes +38,M,Yes,No,No,Euthyroid,Multinodular goiter,Bilateral,Papillary,Uni-Focal,Intermediate,T3a,N1b,M0,I,Structural Incomplete,Yes +27,F,No,No,No,Euthyroid,Single nodular goiter-right,Bilateral,Papillary,Uni-Focal,Intermediate,T3a,N1b,M0,I,Structural Incomplete,Yes +27,M,No,No,No,Euthyroid,Multinodular goiter,Bilateral,Papillary,Multi-Focal,Intermediate,T3a,N1b,M0,I,Structural Incomplete,Yes +33,F,No,No,No,Euthyroid,Single nodular goiter-right,Right,Papillary,Multi-Focal,Intermediate,T3a,N1b,M0,I,Biochemical Incomplete,Yes +32,F,No,No,No,Euthyroid,Single nodular goiter-left,Left,Papillary,Multi-Focal,Intermediate,T3a,N1b,M0,I,Structural Incomplete,Yes +29,F,No,No,No,Euthyroid,Multinodular goiter,Right,Papillary,Multi-Focal,Intermediate,T3a,N1b,M0,I,Structural Incomplete,Yes +37,M,No,No,No,Euthyroid,Multinodular goiter,Bilateral,Papillary,Multi-Focal,Intermediate,T3a,N1b,M0,I,Structural Incomplete,Yes +48,F,No,No,No,Euthyroid,Multinodular goiter,Bilateral,Papillary,Multi-Focal,Intermediate,T3a,N1b,M0,I,Structural Incomplete,Yes +30,F,No,No,No,Euthyroid,Multinodular goiter,Bilateral,Papillary,Multi-Focal,Intermediate,T3a,N1b,M0,I,Structural Incomplete,Yes +33,M,No,No,No,Euthyroid,Multinodular goiter,Bilateral,Papillary,Uni-Focal,Intermediate,T3a,N1b,M0,I,Structural Incomplete,Yes +80,F,Yes,No,No,Euthyroid,Single nodular goiter-right,Right,Papillary,Multi-Focal,Intermediate,T3a,N1b,M0,II,Structural Incomplete,Yes +62,F,No,No,No,Euthyroid,Multinodular goiter,Right,Papillary,Multi-Focal,Intermediate,T3a,N1b,M0,II,Structural Incomplete,Yes +63,M,Yes,No,No,Euthyroid,Single nodular goiter-right,Right,Papillary,Multi-Focal,Intermediate,T3a,N1b,M0,II,Structural Incomplete,Yes +60,M,No,No,No,Euthyroid,Single nodular goiter-right,Bilateral,Papillary,Multi-Focal,Intermediate,T3a,N1b,M0,II,Structural Incomplete,Yes +79,M,Yes,No,No,Euthyroid,Multinodular goiter,Bilateral,Papillary,Multi-Focal,Intermediate,T3a,N1b,M0,II,Indeterminate,Yes +65,F,No,Yes,No,Euthyroid,Multinodular goiter,Bilateral,Papillary,Multi-Focal,Intermediate,T3a,N1b,M0,II,Biochemical Incomplete,Yes +35,F,No,No,No,Euthyroid,Single nodular goiter-right,Right,Papillary,Multi-Focal,Intermediate,T3a,N1a,M0,I,Biochemical Incomplete,Yes +58,F,No,No,No,Euthyroid,Multinodular goiter,No,Papillary,Multi-Focal,Intermediate,T3a,N1a,M0,II,Indeterminate,Yes +34,F,No,No,No,Euthyroid,Single nodular goiter-right,No,Papillary,Uni-Focal,High,T3a,N1a,M0,I,Biochemical Incomplete,Yes +56,F,No,No,No,Euthyroid,Single nodular goiter-left,No,Follicular,Multi-Focal,Low,T3a,N0,M0,I,Structural Incomplete,Yes +52,M,Yes,No,No,Euthyroid,Single nodular goiter-left,Right,Follicular,Multi-Focal,Intermediate,T3a,N0,M0,I,Biochemical Incomplete,Yes +51,F,No,No,No,Euthyroid,Single nodular goiter-left,No,Follicular,Uni-Focal,Intermediate,T3a,N0,M0,I,Structural Incomplete,Yes +31,F,No,No,No,Euthyroid,Single nodular goiter-left,No,Follicular,Uni-Focal,Intermediate,T3a,N1a,M0,I,Biochemical Incomplete,Yes +44,M,Yes,No,No,Euthyroid,Single nodular goiter-right,Right,Papillary,Multi-Focal,High,T3a,N1b,M1,II,Structural Incomplete,Yes +15,F,No,No,No,Euthyroid,Normal,Bilateral,Papillary,Multi-Focal,Intermediate,T3a,N1b,M0,I,Structural Incomplete,Yes +29,M,No,No,No,Euthyroid,Multinodular goiter,Extensive,Papillary,Multi-Focal,Intermediate,T3a,N1b,M0,I,Structural Incomplete,Yes +53,M,No,No,No,Euthyroid,Multinodular goiter,Bilateral,Papillary,Multi-Focal,Intermediate,T3a,N1b,M0,I,Structural Incomplete,Yes +45,F,No,No,No,Euthyroid,Single nodular goiter-left,Left,Papillary,Multi-Focal,Intermediate,T3a,N1b,M0,I,Structural Incomplete,Yes +38,F,No,No,No,Euthyroid,Single nodular goiter-left,Posterior,Papillary,Multi-Focal,High,T3a,N1b,M1,II,Structural Incomplete,Yes +48,F,No,No,No,Clinical Hyperthyroidism,Multinodular goiter,Left,Hurthel cell,Multi-Focal,Intermediate,T3b,N1a,M0,I,Structural Incomplete,No +42,F,No,No,No,Euthyroid,Multinodular goiter,No,Papillary,Multi-Focal,Intermediate,T3b,N0,M0,I,Indeterminate,No +23,F,No,Yes,No,Euthyroid,Single nodular goiter-right,Right,Papillary,Uni-Focal,Intermediate,T3b,N1a,M0,I,Structural Incomplete,Yes +22,F,No,No,No,Euthyroid,Multinodular goiter,Right,Papillary,Multi-Focal,Intermediate,T3b,N1a,M0,I,Structural Incomplete,Yes +44,F,No,No,No,Euthyroid,Single nodular goiter-left,Left,Papillary,Multi-Focal,Intermediate,T3b,N1b,M0,I,Structural Incomplete,Yes +31,F,No,No,No,Euthyroid,Single nodular goiter-left,Left,Papillary,Uni-Focal,Intermediate,T3b,N1b,M0,I,Excellent,Yes +25,F,No,No,No,Euthyroid,Multinodular goiter,Left,Papillary,Multi-Focal,Intermediate,T3b,N1b,M0,I,Structural Incomplete,Yes +32,M,No,Yes,No,Euthyroid,Multinodular goiter,Bilateral,Papillary,Multi-Focal,Intermediate,T3b,N1b,M0,I,Structural Incomplete,Yes +82,M,Yes,No,No,Euthyroid,Single nodular goiter-left,Left,Papillary,Uni-Focal,Intermediate,T3b,N1b,M0,II,Structural Incomplete,Yes +58,F,No,No,No,Subclinical Hypothyroidism,Multinodular goiter,Extensive,Papillary,Multi-Focal,Intermediate,T3b,N1b,M0,II,Structural Incomplete,Yes +68,M,Yes,Yes,No,Subclinical Hypothyroidism,Single nodular goiter-left,Bilateral,Papillary,Multi-Focal,Intermediate,T3b,N1b,M0,III,Structural Incomplete,Yes +37,F,No,No,No,Subclinical Hypothyroidism,Single nodular goiter-left,No,Papillary,Multi-Focal,Intermediate,T3b,N1a,M1,II,Structural Incomplete,Yes +59,M,Yes,Yes,No,Clinical Hypothyroidism,Multinodular goiter,No,Hurthel cell,Multi-Focal,Intermediate,T3b,N0,M0,I,Structural Incomplete,Yes +21,F,No,No,No,Euthyroid,Single nodular goiter-right,No,Papillary,Multi-Focal,Intermediate,T3b,N0,M0,I,Structural Incomplete,Yes +73,F,No,No,No,Euthyroid,Single nodular goiter-right,Right,Papillary,Multi-Focal,High,T3b,N1a,M1,IVB,Structural Incomplete,Yes +35,M,Yes,No,No,Euthyroid,Single nodular goiter-left,Left,Papillary,Multi-Focal,High,T3b,N1b,M1,II,Structural Incomplete,Yes +32,F,No,No,No,Euthyroid,Single nodular goiter-right,No,Papillary,Multi-Focal,Intermediate,T4a,N0,M0,I,Excellent,No +54,M,Yes,No,No,Euthyroid,Single nodular goiter-left,Right,Hurthel cell,Multi-Focal,Intermediate,T4a,N1b,M0,II,Structural Incomplete,Yes +26,F,Yes,No,No,Euthyroid,Single nodular goiter-left,Bilateral,Hurthel cell,Multi-Focal,High,T4a,N1b,M0,I,Structural Incomplete,Yes +53,F,No,No,No,Euthyroid,Multinodular goiter,Right,Papillary,Uni-Focal,High,T4a,N1b,M0,I,Structural Incomplete,Yes +35,F,No,No,No,Euthyroid,Multinodular goiter,Extensive,Papillary,Multi-Focal,High,T4a,N1b,M0,I,Structural Incomplete,Yes +49,M,No,No,No,Euthyroid,Multinodular goiter,Bilateral,Papillary,Multi-Focal,High,T4a,N1b,M0,I,Structural Incomplete,Yes +34,F,No,No,No,Euthyroid,Multinodular goiter,Right,Papillary,Uni-Focal,High,T4a,N1b,M0,I,Structural Incomplete,Yes +80,F,Yes,Yes,No,Euthyroid,Multinodular goiter,Right,Papillary,Uni-Focal,High,T4a,N1b,M0,III,Structural Incomplete,Yes +67,F,No,No,No,Euthyroid,Single nodular goiter-right,Right,Papillary,Multi-Focal,High,T4a,N1b,M0,III,Structural Incomplete,Yes +68,F,No,No,No,Euthyroid,Multinodular goiter,Bilateral,Papillary,Multi-Focal,High,T4a,N1b,M1,IVB,Structural Incomplete,Yes +71,F,Yes,No,No,Euthyroid,Single nodular goiter-left,No,Follicular,Multi-Focal,High,T4a,N0,M1,IVB,Structural Incomplete,Yes +64,F,No,Yes,No,Euthyroid,Multinodular goiter,No,Follicular,Multi-Focal,High,T4a,N0,M1,IVB,Structural Incomplete,Yes +80,M,Yes,No,No,Euthyroid,Single nodular goiter-left,No,Hurthel cell,Multi-Focal,Intermediate,T4a,N0,M0,II,Structural Incomplete,Yes +56,F,No,No,No,Euthyroid,Multinodular goiter,Posterior,Papillary,Multi-Focal,High,T4a,N1b,M0,II,Structural Incomplete,Yes +71,M,Yes,Yes,No,Subclinical Hypothyroidism,Multinodular goiter,Bilateral,Papillary,Multi-Focal,High,T4a,N1b,M0,III,Structural Incomplete,Yes +78,M,Yes,Yes,Yes,Clinical Hyperthyroidism,Multinodular goiter,No,Follicular,Multi-Focal,High,T4a,N0,M1,IVB,Structural Incomplete,Yes +51,F,No,No,No,Euthyroid,Multinodular goiter,No,Papillary,Multi-Focal,High,T4a,N1a,M1,II,Structural Incomplete,Yes +67,F,Yes,No,No,Subclinical Hypothyroidism,Multinodular goiter,No,Papillary,Multi-Focal,High,T4a,N0,M0,IVA,Biochemical Incomplete,Yes +31,M,Yes,No,Yes,Euthyroid,Single nodular goiter-left,Extensive,Papillary,Multi-Focal,High,T4a,N1b,M1,II,Structural Incomplete,Yes +62,M,Yes,No,No,Euthyroid,Single nodular goiter-left,Left,Papillary,Multi-Focal,High,T4a,N1b,M1,IVB,Structural Incomplete,Yes +59,F,No,No,No,Euthyroid,Multinodular goiter,Bilateral,Papillary,Multi-Focal,High,T4b,N1b,M0,IVB,Structural Incomplete,Yes +40,M,Yes,No,No,Euthyroid,Multinodular goiter,Bilateral,Papillary,Multi-Focal,High,T4b,N1b,M0,I,Structural Incomplete,Yes +46,M,Yes,No,No,Euthyroid,Single nodular goiter-left,Bilateral,Follicular,Uni-Focal,High,T4b,N1b,M1,II,Structural Incomplete,Yes +72,M,Yes,Yes,Yes,Euthyroid,Single nodular goiter-right,Right,Papillary,Uni-Focal,High,T4b,N1b,M1,IVB,Biochemical Incomplete,Yes +81,M,Yes,No,Yes,Euthyroid,Multinodular goiter,Extensive,Papillary,Multi-Focal,High,T4b,N1b,M1,IVB,Structural Incomplete,Yes +72,M,Yes,Yes,No,Euthyroid,Multinodular goiter,Bilateral,Papillary,Multi-Focal,High,T4b,N1b,M1,IVB,Structural Incomplete,Yes +61,M,Yes,Yes,Yes,Clinical Hyperthyroidism,Multinodular goiter,Extensive,Hurthel cell,Multi-Focal,High,T4b,N1b,M0,IVA,Structural Incomplete,Yes +67,M,Yes,No,No,Euthyroid,Multinodular goiter,Bilateral,Papillary,Multi-Focal,High,T4b,N1b,M0,IVA,Structural Incomplete,Yes diff --git a/Thyroid Cancer Recurrence Prediction/Dataset/final_test.csv b/Thyroid Cancer Recurrence Prediction/Dataset/final_test.csv new file mode 100644 index 0000000000..f85f745f2c --- /dev/null +++ b/Thyroid Cancer Recurrence Prediction/Dataset/final_test.csv @@ -0,0 +1,78 @@ +Age,Gender,Smoking,Hx Smoking,Hx Radiothreapy,Thyroid Function,Physical Examination,Adenopathy,Pathology,Focality,Risk,T,N,M,Stage,Response,Recurred +32,F,No,No,No,Euthyroid,Single nodular goiter-left,No,Papillary,Uni-Focal,Low,T3a,N0,M0,I,Excellent,No +30,F,No,No,No,Subclinical Hypothyroidism,Normal,Right,Follicular,Uni-Focal,Low,T3a,N0,M0,I,Excellent,No +30,F,No,No,No,Euthyroid,Multinodular goiter,Bilateral,Papillary,Multi-Focal,Intermediate,T3a,N1b,M0,I,Structural Incomplete,Yes +51,F,No,No,No,Euthyroid,Single nodular goiter-left,No,Follicular,Uni-Focal,Intermediate,T3a,N0,M0,I,Structural Incomplete,Yes +43,F,No,Yes,No,Euthyroid,Single nodular goiter-right,No,Papillary,Uni-Focal,Low,T1b,N0,M0,I,Excellent,No +51,F,No,No,No,Euthyroid,Multinodular goiter,No,Papillary,Multi-Focal,High,T4a,N1a,M1,II,Structural Incomplete,Yes +55,F,No,No,No,Euthyroid,Multinodular goiter,No,Micropapillary,Uni-Focal,Low,T1a,N0,M0,I,Excellent,No +26,F,No,No,No,Euthyroid,Multinodular goiter,No,Papillary,Multi-Focal,Low,T2,N0,M0,I,Excellent,No +62,M,Yes,No,No,Euthyroid,Single nodular goiter-left,Left,Papillary,Multi-Focal,High,T4a,N1b,M1,IVB,Structural Incomplete,Yes +29,F,Yes,No,No,Euthyroid,Single nodular goiter-left,No,Follicular,Uni-Focal,Low,T2,N0,M0,I,Structural Incomplete,Yes +34,F,No,No,No,Euthyroid,Multinodular goiter,Bilateral,Papillary,Uni-Focal,Intermediate,T3a,N1b,M0,I,Indeterminate,No +47,F,No,No,No,Euthyroid,Single nodular goiter-right,No,Papillary,Uni-Focal,Low,T2,N0,M0,I,Excellent,No +61,M,No,No,No,Subclinical Hypothyroidism,Single nodular goiter-left,No,Papillary,Uni-Focal,Low,T2,N0,M0,I,Excellent,No +52,F,No,No,No,Euthyroid,Single nodular goiter-left,No,Papillary,Multi-Focal,Low,T3a,N0,M0,I,Indeterminate,No +31,F,No,No,No,Euthyroid,Single nodular goiter-right,No,Papillary,Uni-Focal,Low,T2,N0,M0,I,Excellent,No +34,F,No,No,No,Euthyroid,Multinodular goiter,No,Papillary,Uni-Focal,Low,T2,N0,M0,I,Excellent,No +35,F,No,No,No,Euthyroid,Single nodular goiter-right,No,Papillary,Uni-Focal,Low,T2,N0,M0,I,Excellent,No +71,M,Yes,Yes,No,Subclinical Hypothyroidism,Multinodular goiter,Bilateral,Papillary,Multi-Focal,High,T4a,N1b,M0,III,Structural Incomplete,Yes +64,F,No,Yes,No,Euthyroid,Multinodular goiter,No,Follicular,Multi-Focal,High,T4a,N0,M1,IVB,Structural Incomplete,Yes +27,F,No,No,No,Clinical Hypothyroidism,Single nodular goiter-right,No,Hurthel cell,Multi-Focal,Low,T3a,N0,M0,I,Excellent,No +20,F,No,No,No,Euthyroid,Single nodular goiter-right,No,Micropapillary,Uni-Focal,Low,T1a,N0,M0,I,Excellent,No +34,F,No,No,No,Euthyroid,Diffuse goiter,No,Micropapillary,Uni-Focal,Low,T1a,N0,M0,I,Excellent,No +40,F,No,No,No,Euthyroid,Single nodular goiter-right,No,Micropapillary,Uni-Focal,Low,T1a,N0,M0,I,Excellent,No +39,F,No,No,No,Euthyroid,Diffuse goiter,No,Hurthel cell,Uni-Focal,Low,T2,N0,M0,I,Indeterminate,No +42,F,No,No,No,Euthyroid,Single nodular goiter-right,No,Micropapillary,Uni-Focal,Low,T1a,N0,M0,I,Indeterminate,No +21,F,No,No,No,Euthyroid,Single nodular goiter-right,No,Papillary,Uni-Focal,Low,T1b,N0,M0,I,Indeterminate,No +29,F,No,No,No,Euthyroid,Single nodular goiter-right,No,Papillary,Uni-Focal,Low,T2,N0,M0,I,Excellent,No +32,F,No,No,No,Euthyroid,Single nodular goiter-right,No,Papillary,Multi-Focal,Intermediate,T4a,N0,M0,I,Excellent,No +27,F,No,No,No,Euthyroid,Single nodular goiter-left,No,Micropapillary,Uni-Focal,Low,T1a,N0,M0,I,Indeterminate,No +34,F,No,No,No,Euthyroid,Multinodular goiter,No,Papillary,Uni-Focal,Low,T3a,N0,M0,I,Structural Incomplete,Yes +60,F,No,No,No,Euthyroid,Multinodular goiter,No,Papillary,Multi-Focal,Low,T2,N0,M0,I,Excellent,No +33,F,No,No,No,Euthyroid,Single nodular goiter-right,No,Micropapillary,Uni-Focal,Low,T1a,N0,M0,I,Excellent,No +79,M,Yes,No,No,Euthyroid,Multinodular goiter,Bilateral,Papillary,Multi-Focal,Intermediate,T3a,N1b,M0,II,Indeterminate,Yes +35,F,No,No,No,Euthyroid,Single nodular goiter-left,No,Papillary,Uni-Focal,Low,T1b,N0,M0,I,Excellent,No +32,F,No,No,No,Euthyroid,Single nodular goiter-right,No,Papillary,Uni-Focal,Low,T2,N0,M0,I,Excellent,No +35,F,No,No,No,Euthyroid,Single nodular goiter-right,Right,Papillary,Multi-Focal,Intermediate,T3a,N1a,M0,I,Biochemical Incomplete,Yes +45,F,No,No,No,Euthyroid,Multinodular goiter,No,Papillary,Multi-Focal,Low,T2,N0,M0,I,Excellent,No +31,F,No,No,No,Clinical Hypothyroidism,Multinodular goiter,No,Micropapillary,Uni-Focal,Intermediate,T1a,N0,M0,I,Excellent,No +25,F,No,No,No,Euthyroid,Multinodular goiter,Left,Papillary,Multi-Focal,Intermediate,T3b,N1b,M0,I,Structural Incomplete,Yes +31,F,No,No,No,Euthyroid,Multinodular goiter,Bilateral,Papillary,Multi-Focal,Intermediate,T3a,N1b,M0,I,Structural Incomplete,Yes +27,F,No,No,No,Subclinical Hyperthyroidism,Single nodular goiter-right,No,Papillary,Uni-Focal,Low,T1b,N0,M0,I,Excellent,No +32,F,No,No,No,Euthyroid,Single nodular goiter-right,No,Papillary,Uni-Focal,Low,T2,N0,M0,I,Excellent,No +33,F,No,No,No,Euthyroid,Single nodular goiter-left,No,Papillary,Uni-Focal,Low,T2,N0,M0,I,Excellent,No +33,F,No,No,No,Euthyroid,Single nodular goiter-right,No,Papillary,Uni-Focal,Low,T2,N0,M0,I,Excellent,No +42,F,No,No,No,Euthyroid,Single nodular goiter-left,No,Papillary,Uni-Focal,Low,T2,N0,M0,I,Biochemical Incomplete,No +36,F,No,No,No,Euthyroid,Single nodular goiter-right,No,Micropapillary,Uni-Focal,Low,T1a,N0,M0,I,Excellent,No +30,F,No,No,No,Clinical Hyperthyroidism,Normal,No,Micropapillary,Uni-Focal,Low,T1a,N0,M0,I,Excellent,No +29,F,No,No,No,Euthyroid,Single nodular goiter-right,No,Papillary,Uni-Focal,Low,T1b,N0,M0,I,Excellent,No +18,F,No,No,No,Euthyroid,Single nodular goiter-right,Right,Papillary,Uni-Focal,Intermediate,T1b,N1b,M0,I,Structural Incomplete,Yes +23,F,No,No,No,Euthyroid,Single nodular goiter-left,No,Papillary,Uni-Focal,Low,T1b,N0,M0,I,Excellent,No +37,F,No,No,No,Euthyroid,Single nodular goiter-left,No,Micropapillary,Uni-Focal,Low,T1a,N0,M0,I,Excellent,No +31,F,No,No,No,Euthyroid,Single nodular goiter-right,No,Papillary,Uni-Focal,Low,T1b,N0,M0,I,Excellent,No +15,F,No,No,No,Euthyroid,Normal,Bilateral,Papillary,Multi-Focal,Intermediate,T3a,N1b,M0,I,Structural Incomplete,Yes +68,F,No,No,No,Clinical Hyperthyroidism,Diffuse goiter,No,Papillary,Uni-Focal,Low,T2,N0,M0,I,Excellent,No +27,F,No,No,No,Clinical Hypothyroidism,Single nodular goiter-right,No,Papillary,Uni-Focal,Low,T2,N0,M0,I,Excellent,No +30,F,No,No,No,Euthyroid,Single nodular goiter-left,No,Papillary,Multi-Focal,Intermediate,T3a,N0,M0,I,Excellent,No +28,F,No,No,No,Euthyroid,Multinodular goiter,Right,Papillary,Uni-Focal,Intermediate,T2,N1b,M0,I,Excellent,No +29,F,No,No,No,Euthyroid,Single nodular goiter-right,No,Papillary,Uni-Focal,Low,T1b,N0,M0,I,Excellent,No +52,M,Yes,No,No,Euthyroid,Multinodular goiter,No,Micropapillary,Multi-Focal,Low,T1a,N0,M0,I,Indeterminate,No +45,F,No,No,No,Euthyroid,Multinodular goiter,No,Papillary,Uni-Focal,Low,T2,N0,M0,I,Excellent,No +33,F,No,No,No,Euthyroid,Multinodular goiter,No,Micropapillary,Uni-Focal,Low,T1a,N0,M0,I,Excellent,No +46,F,No,No,No,Euthyroid,Single nodular goiter-left,No,Hurthel cell,Multi-Focal,Low,T3a,N0,M0,I,Excellent,No +22,F,No,No,No,Clinical Hypothyroidism,Single nodular goiter-right,No,Papillary,Uni-Focal,Low,T1b,N0,M0,I,Excellent,No +38,F,No,No,No,Euthyroid,Multinodular goiter,No,Papillary,Uni-Focal,Low,T3a,N0,M0,I,Excellent,No +21,F,No,No,No,Euthyroid,Single nodular goiter-left,Left,Papillary,Uni-Focal,Intermediate,T2,N1b,M0,I,Structural Incomplete,Yes +62,F,No,No,No,Clinical Hypothyroidism,Multinodular goiter,No,Papillary,Uni-Focal,Low,T2,N0,M0,I,Biochemical Incomplete,Yes +73,F,No,No,No,Euthyroid,Single nodular goiter-right,Right,Papillary,Multi-Focal,High,T3b,N1a,M1,IVB,Structural Incomplete,Yes +44,F,No,No,No,Euthyroid,Multinodular goiter,No,Papillary,Uni-Focal,Low,T2,N0,M0,I,Excellent,No +81,M,Yes,No,Yes,Euthyroid,Multinodular goiter,Extensive,Papillary,Multi-Focal,High,T4b,N1b,M1,IVB,Structural Incomplete,Yes +62,F,No,No,No,Euthyroid,Single nodular goiter-right,No,Micropapillary,Uni-Focal,Low,T1a,N0,M0,I,Excellent,No +43,F,No,No,No,Euthyroid,Multinodular goiter,No,Micropapillary,Uni-Focal,Low,T1a,N0,M0,I,Excellent,No +41,F,No,No,No,Euthyroid,Single nodular goiter-right,No,Papillary,Uni-Focal,Low,T2,N0,M0,I,Excellent,No +33,F,No,No,No,Clinical Hypothyroidism,Single nodular goiter-right,Right,Papillary,Uni-Focal,Low,T2,N0,M0,I,Excellent,No +55,F,No,No,No,Euthyroid,Single nodular goiter-left,No,Papillary,Uni-Focal,Low,T2,N0,M0,I,Excellent,No +54,F,No,No,No,Euthyroid,Multinodular goiter,No,Papillary,Uni-Focal,Low,T1b,N0,M0,I,Indeterminate,No +34,F,No,No,No,Euthyroid,Single nodular goiter-right,Right,Papillary,Uni-Focal,Intermediate,T2,N1b,M0,I,Structural Incomplete,Yes +33,F,No,No,No,Euthyroid,Single nodular goiter-left,No,Papillary,Uni-Focal,Intermediate,T1b,N1b,M0,I,Indeterminate,No diff --git a/Thyroid Cancer Recurrence Prediction/Dataset/final_train.csv b/Thyroid Cancer Recurrence Prediction/Dataset/final_train.csv new file mode 100644 index 0000000000..4e7a126e7d --- /dev/null +++ b/Thyroid Cancer Recurrence Prediction/Dataset/final_train.csv @@ -0,0 +1,307 @@ +Age,Gender,Smoking,Hx Smoking,Hx Radiothreapy,Thyroid Function,Physical Examination,Adenopathy,Pathology,Focality,Risk,T,N,M,Stage,Response,Recurred +40,F,No,No,No,Euthyroid,Multinodular goiter,No,Papillary,Multi-Focal,Low,T2,N0,M0,I,Excellent,No +62,F,No,No,No,Euthyroid,Multinodular goiter,Right,Papillary,Multi-Focal,Intermediate,T3a,N1b,M0,II,Structural Incomplete,Yes +29,F,No,No,No,Euthyroid,Multinodular goiter,No,Papillary,Uni-Focal,Low,T2,N1a,M0,I,Indeterminate,No +37,F,No,No,No,Euthyroid,Single nodular goiter-left,No,Hurthel cell,Multi-Focal,Low,T2,N0,M0,I,Excellent,No +31,F,No,No,No,Euthyroid,Single nodular goiter-left,Left,Papillary,Uni-Focal,Intermediate,T2,N1b,M0,I,Structural Incomplete,Yes +30,F,No,No,No,Euthyroid,Multinodular goiter,Right,Papillary,Uni-Focal,Intermediate,T3a,N1b,M0,I,Structural Incomplete,Yes +48,M,No,No,No,Euthyroid,Single nodular goiter-left,Left,Papillary,Uni-Focal,Intermediate,T2,N1a,M0,I,Indeterminate,No +40,M,Yes,No,No,Euthyroid,Multinodular goiter,Bilateral,Papillary,Multi-Focal,Intermediate,T2,N1b,M0,I,Structural Incomplete,Yes +26,F,Yes,No,No,Euthyroid,Single nodular goiter-left,Bilateral,Hurthel cell,Multi-Focal,High,T4a,N1b,M0,I,Structural Incomplete,Yes +35,M,Yes,No,No,Euthyroid,Single nodular goiter-left,Left,Papillary,Multi-Focal,High,T3b,N1b,M1,II,Structural Incomplete,Yes +20,M,No,No,No,Euthyroid,Single nodular goiter-right,Right,Papillary,Uni-Focal,Low,T2,N0,M0,I,Structural Incomplete,Yes +28,F,No,No,No,Euthyroid,Multinodular goiter,No,Papillary,Uni-Focal,Low,T1b,N0,M0,I,Excellent,No +21,F,No,No,No,Euthyroid,Single nodular goiter-left,Right,Papillary,Multi-Focal,Low,T3a,N1b,M0,I,Excellent,No +38,M,Yes,No,No,Euthyroid,Multinodular goiter,Bilateral,Papillary,Uni-Focal,Intermediate,T3a,N1b,M0,I,Structural Incomplete,Yes +40,F,No,Yes,No,Euthyroid,Single nodular goiter-right,No,Micropapillary,Uni-Focal,Low,T1a,N0,M0,I,Excellent,No +35,F,No,No,No,Euthyroid,Single nodular goiter-right,No,Papillary,Uni-Focal,Low,T1b,N0,M0,I,Excellent,No +67,F,No,No,No,Euthyroid,Multinodular goiter,No,Hurthel cell,Uni-Focal,Intermediate,T3a,N0,M0,II,Indeterminate,Yes +46,F,No,No,No,Euthyroid,Single nodular goiter-right,No,Micropapillary,Uni-Focal,Low,T1a,N0,M0,I,Excellent,No +52,F,No,No,No,Euthyroid,Multinodular goiter,No,Micropapillary,Multi-Focal,Low,T1a,N0,M0,I,Indeterminate,No +31,F,No,No,No,Euthyroid,Single nodular goiter-left,No,Papillary,Uni-Focal,Low,T2,N0,M0,I,Excellent,No +48,F,No,No,No,Clinical Hyperthyroidism,Multinodular goiter,Left,Hurthel cell,Multi-Focal,Intermediate,T3b,N1a,M0,I,Structural Incomplete,No +44,M,Yes,No,No,Euthyroid,Single nodular goiter-right,Right,Papillary,Multi-Focal,High,T3a,N1b,M1,II,Structural Incomplete,Yes +42,F,No,No,No,Euthyroid,Single nodular goiter-left,No,Follicular,Uni-Focal,Low,T2,N0,M0,I,Indeterminate,No +31,M,Yes,No,No,Euthyroid,Single nodular goiter-right,No,Papillary,Uni-Focal,Low,T2,N0,M0,I,Excellent,No +19,F,No,No,No,Euthyroid,Multinodular goiter,No,Papillary,Multi-Focal,Low,T3a,N0,M0,I,Excellent,No +78,M,Yes,Yes,Yes,Clinical Hyperthyroidism,Multinodular goiter,No,Follicular,Multi-Focal,High,T4a,N0,M1,IVB,Structural Incomplete,Yes +62,F,No,No,No,Euthyroid,Single nodular goiter-left,No,Hurthel cell,Multi-Focal,Intermediate,T3a,N0,M0,II,Indeterminate,No +24,M,No,No,No,Euthyroid,Single nodular goiter-left,No,Papillary,Uni-Focal,Low,T1b,N0,M0,I,Excellent,No +50,F,No,No,No,Euthyroid,Multinodular goiter,No,Papillary,Multi-Focal,Low,T1b,N0,M0,I,Excellent,No +53,M,No,No,No,Euthyroid,Multinodular goiter,Bilateral,Papillary,Multi-Focal,Intermediate,T3a,N1b,M0,I,Structural Incomplete,Yes +52,F,No,No,No,Euthyroid,Multinodular goiter,No,Papillary,Uni-Focal,Low,T2,N0,M0,I,Excellent,No +80,F,Yes,No,No,Euthyroid,Single nodular goiter-right,Right,Papillary,Multi-Focal,Intermediate,T3a,N1b,M0,II,Structural Incomplete,Yes +33,F,No,No,No,Euthyroid,Multinodular goiter,No,Papillary,Uni-Focal,Low,T2,N0,M0,I,Excellent,No +60,F,No,No,No,Euthyroid,Single nodular goiter-right,No,Papillary,Uni-Focal,Low,T2,N0,M0,I,Biochemical Incomplete,No +44,F,No,No,No,Euthyroid,Multinodular goiter,No,Micropapillary,Uni-Focal,Low,T1a,N0,M0,I,Indeterminate,No +30,F,No,No,No,Euthyroid,Normal,No,Papillary,Uni-Focal,Low,T2,N0,M0,I,Indeterminate,No +60,F,No,No,No,Euthyroid,Multinodular goiter,No,Micropapillary,Multi-Focal,Low,T1a,N0,M0,I,Excellent,No +33,M,No,No,No,Euthyroid,Single nodular goiter-right,No,Papillary,Uni-Focal,Low,T2,N1b,M0,I,Excellent,No +29,M,No,No,No,Euthyroid,Multinodular goiter,Extensive,Papillary,Multi-Focal,Intermediate,T3a,N1b,M0,I,Structural Incomplete,Yes +28,F,No,No,No,Euthyroid,Multinodular goiter,No,Papillary,Uni-Focal,Low,T2,N0,M0,I,Excellent,No +32,F,No,No,No,Euthyroid,Single nodular goiter-right,No,Papillary,Uni-Focal,Low,T2,N0,M0,I,Excellent,No +38,F,No,No,No,Euthyroid,Multinodular goiter,No,Follicular,Multi-Focal,Low,T3a,N0,M0,I,Biochemical Incomplete,No +63,F,No,No,No,Euthyroid,Normal,No,Papillary,Uni-Focal,Low,T2,N0,M0,I,Biochemical Incomplete,No +33,M,No,No,No,Euthyroid,Multinodular goiter,No,Papillary,Uni-Focal,Low,T2,N0,M0,I,Structural Incomplete,Yes +52,F,Yes,No,No,Euthyroid,Single nodular goiter-left,Bilateral,Hurthel cell,Multi-Focal,Low,T3a,N0,M0,I,Structural Incomplete,No +72,M,Yes,Yes,Yes,Euthyroid,Single nodular goiter-right,Right,Papillary,Uni-Focal,High,T4b,N1b,M1,IVB,Biochemical Incomplete,Yes +24,F,No,No,No,Clinical Hypothyroidism,Multinodular goiter,Bilateral,Papillary,Multi-Focal,Intermediate,T2,N1b,M0,I,Excellent,No +21,F,No,No,No,Euthyroid,Single nodular goiter-right,Right,Papillary,Uni-Focal,Low,T2,N1b,M0,I,Structural Incomplete,Yes +45,F,No,No,No,Euthyroid,Single nodular goiter-left,Left,Papillary,Multi-Focal,Intermediate,T3a,N1b,M0,I,Structural Incomplete,Yes +21,F,No,No,No,Euthyroid,Single nodular goiter-right,No,Papillary,Uni-Focal,Low,T2,N0,M0,I,Excellent,No +37,F,No,No,No,Euthyroid,Single nodular goiter-right,No,Follicular,Uni-Focal,Intermediate,T3a,N0,M0,I,Excellent,No +28,F,No,No,No,Euthyroid,Single nodular goiter-right,No,Papillary,Uni-Focal,Low,T2,N0,M0,I,Excellent,No +45,F,No,No,No,Euthyroid,Multinodular goiter,No,Papillary,Multi-Focal,Low,T2,N0,M0,I,Biochemical Incomplete,No +44,F,No,No,No,Euthyroid,Multinodular goiter,No,Papillary,Multi-Focal,Low,T2,N0,M0,I,Excellent,No +29,F,No,No,No,Euthyroid,Single nodular goiter-left,Left,Papillary,Uni-Focal,Low,T3a,N1a,M0,I,Excellent,No +28,F,No,No,No,Euthyroid,Single nodular goiter-right,No,Papillary,Uni-Focal,Low,T2,N0,M0,I,Indeterminate,No +42,M,No,No,No,Subclinical Hypothyroidism,Single nodular goiter-right,No,Papillary,Multi-Focal,Intermediate,T3a,N1a,M0,I,Indeterminate,No +31,F,No,No,No,Clinical Hyperthyroidism,Diffuse goiter,No,Micropapillary,Uni-Focal,Low,T1a,N0,M0,I,Excellent,No +67,M,Yes,Yes,No,Euthyroid,Multinodular goiter,Bilateral,Papillary,Uni-Focal,Intermediate,T3a,N0,M0,II,Biochemical Incomplete,Yes +36,F,No,No,No,Euthyroid,Single nodular goiter-right,Right,Papillary,Uni-Focal,Intermediate,T2,N1b,M0,I,Indeterminate,No +54,M,Yes,No,No,Euthyroid,Single nodular goiter-left,Right,Hurthel cell,Multi-Focal,Intermediate,T4a,N1b,M0,II,Structural Incomplete,Yes +28,M,Yes,No,No,Euthyroid,Single nodular goiter-left,No,Papillary,Uni-Focal,Low,T3a,N0,M0,I,Indeterminate,No +43,F,No,No,No,Euthyroid,Single nodular goiter-left,No,Papillary,Uni-Focal,Low,T1b,N0,M0,I,Indeterminate,No +66,F,No,No,No,Euthyroid,Single nodular goiter-right,No,Papillary,Uni-Focal,Low,T2,N0,M0,I,Excellent,No +36,F,No,No,No,Euthyroid,Single nodular goiter-right,No,Papillary,Uni-Focal,Low,T2,N0,M0,I,Excellent,No +41,F,No,Yes,No,Clinical Hyperthyroidism,Single nodular goiter-right,No,Micropapillary,Uni-Focal,Low,T1a,N0,M0,I,Excellent,No +49,M,No,No,No,Euthyroid,Multinodular goiter,Bilateral,Papillary,Multi-Focal,High,T4a,N1b,M0,I,Structural Incomplete,Yes +38,F,No,No,No,Euthyroid,Single nodular goiter-left,Posterior,Papillary,Multi-Focal,High,T3a,N1b,M1,II,Structural Incomplete,Yes +75,F,No,No,No,Euthyroid,Single nodular goiter-right,No,Micropapillary,Uni-Focal,Low,T1a,N0,M0,I,Excellent,No +72,F,No,No,No,Subclinical Hypothyroidism,Single nodular goiter-right,No,Papillary,Uni-Focal,Low,T2,N0,M0,I,Indeterminate,No +51,F,No,No,No,Euthyroid,Single nodular goiter-right,No,Papillary,Uni-Focal,Low,T2,N0,M0,I,Excellent,No +17,F,No,Yes,No,Euthyroid,Single nodular goiter-right,No,Papillary,Uni-Focal,Low,T1b,N0,M0,I,Excellent,No +26,F,No,No,No,Euthyroid,Single nodular goiter-right,No,Papillary,Uni-Focal,Low,T2,N0,M0,I,Excellent,No +46,F,No,No,No,Euthyroid,Single nodular goiter-left,No,Papillary,Multi-Focal,Low,T3a,N0,M0,I,Indeterminate,No +22,F,No,No,No,Euthyroid,Single nodular goiter-right,No,Papillary,Uni-Focal,Low,T2,N0,M0,I,Excellent,No +32,F,No,No,No,Euthyroid,Single nodular goiter-left,Left,Papillary,Multi-Focal,Intermediate,T3a,N1b,M0,I,Structural Incomplete,Yes +24,M,No,No,No,Euthyroid,Single nodular goiter-right,No,Papillary,Uni-Focal,Low,T2,N0,M0,I,Excellent,No +61,F,No,No,No,Euthyroid,Single nodular goiter-right,No,Papillary,Uni-Focal,Intermediate,T3a,N0,M0,II,Excellent,No +31,M,Yes,No,No,Euthyroid,Multinodular goiter,Right,Papillary,Multi-Focal,Intermediate,T1b,N1b,M0,I,Structural Incomplete,Yes +53,F,No,No,No,Euthyroid,Multinodular goiter,No,Papillary,Uni-Focal,Intermediate,T3a,N0,M0,I,Indeterminate,No +41,F,No,No,No,Euthyroid,Single nodular goiter-right,No,Papillary,Uni-Focal,Low,T2,N0,M0,I,Indeterminate,No +41,M,Yes,No,No,Euthyroid,Single nodular goiter-right,No,Hurthel cell,Multi-Focal,Intermediate,T3a,N0,M0,I,Excellent,No +62,F,No,No,No,Euthyroid,Single nodular goiter-right,No,Hurthel cell,Uni-Focal,Low,T2,N0,M0,I,Excellent,No +51,F,No,No,No,Euthyroid,Single nodular goiter-left,No,Papillary,Uni-Focal,Low,T1b,N0,M0,I,Excellent,No +28,F,No,No,No,Euthyroid,Single nodular goiter-right,No,Papillary,Uni-Focal,Low,T2,N0,M0,I,Excellent,No +31,F,No,No,No,Euthyroid,Single nodular goiter-left,No,Hurthel cell,Uni-Focal,Low,T2,N0,M0,I,Indeterminate,No +49,F,No,Yes,No,Euthyroid,Single nodular goiter-right,No,Papillary,Uni-Focal,Low,T2,N0,M0,I,Excellent,No +46,F,No,No,No,Euthyroid,Multinodular goiter,Bilateral,Papillary,Multi-Focal,Intermediate,T3a,N1b,M0,I,Indeterminate,No +24,F,No,No,No,Euthyroid,Single nodular goiter-right,No,Follicular,Uni-Focal,Low,T2,N0,M0,I,Excellent,No +32,F,No,No,No,Euthyroid,Multinodular goiter,No,Papillary,Multi-Focal,Intermediate,T3a,N0,M0,I,Biochemical Incomplete,No +22,M,No,No,No,Euthyroid,Multinodular goiter,No,Papillary,Multi-Focal,Low,T1b,N0,M0,I,Excellent,No +70,F,No,No,No,Euthyroid,Single nodular goiter-right,No,Micropapillary,Uni-Focal,Low,T1a,N0,M0,I,Excellent,No +43,M,No,No,No,Euthyroid,Multinodular goiter,No,Micropapillary,Multi-Focal,Low,T1a,N0,M0,I,Excellent,No +29,F,No,No,No,Euthyroid,Single nodular goiter-left,No,Papillary,Uni-Focal,Low,T2,N0,M0,I,Excellent,No +28,F,No,No,No,Euthyroid,Single nodular goiter-left,No,Papillary,Uni-Focal,Low,T2,N0,M0,I,Excellent,No +51,F,No,No,No,Euthyroid,Single nodular goiter-left,No,Papillary,Uni-Focal,Low,T1b,N0,M0,I,Excellent,No +82,M,Yes,No,No,Euthyroid,Single nodular goiter-left,Left,Papillary,Uni-Focal,Intermediate,T3b,N1b,M0,II,Structural Incomplete,Yes +20,M,No,No,No,Subclinical Hypothyroidism,Multinodular goiter,No,Papillary,Multi-Focal,Intermediate,T2,N1b,M0,I,Excellent,No +70,F,No,No,No,Euthyroid,Single nodular goiter-left,No,Papillary,Multi-Focal,Low,T3a,N0,M0,I,Indeterminate,No +27,M,No,No,No,Euthyroid,Multinodular goiter,Bilateral,Papillary,Multi-Focal,Intermediate,T3a,N1b,M0,I,Structural Incomplete,Yes +46,M,Yes,No,No,Euthyroid,Single nodular goiter-left,Bilateral,Follicular,Uni-Focal,High,T4b,N1b,M1,II,Structural Incomplete,Yes +31,F,No,Yes,No,Euthyroid,Single nodular goiter-right,Right,Papillary,Uni-Focal,Low,T2,N0,M0,I,Excellent,No +25,F,No,No,No,Euthyroid,Multinodular goiter,No,Papillary,Uni-Focal,Low,T2,N0,M0,I,Indeterminate,No +35,F,No,No,No,Euthyroid,Multinodular goiter,No,Papillary,Uni-Focal,Low,T2,N0,M0,I,Indeterminate,No +73,F,No,No,No,Euthyroid,Single nodular goiter-right,No,Papillary,Uni-Focal,Low,T1b,N0,M0,I,Excellent,No +63,M,Yes,No,No,Euthyroid,Single nodular goiter-right,Right,Papillary,Multi-Focal,Intermediate,T3a,N1b,M0,II,Structural Incomplete,Yes +23,F,No,No,No,Euthyroid,Single nodular goiter-left,Left,Papillary,Uni-Focal,Low,T2,N0,M0,I,Excellent,No +60,M,No,No,No,Euthyroid,Single nodular goiter-right,Bilateral,Papillary,Multi-Focal,Intermediate,T3a,N1b,M0,II,Structural Incomplete,Yes +40,F,No,No,No,Euthyroid,Single nodular goiter-right,No,Papillary,Uni-Focal,Low,T2,N1a,M0,I,Excellent,No +35,F,No,No,No,Clinical Hyperthyroidism,Multinodular goiter,No,Papillary,Uni-Focal,Low,T3a,N0,M0,I,Excellent,No +27,F,No,No,No,Euthyroid,Multinodular goiter,Right,Papillary,Multi-Focal,Intermediate,T3a,N1b,M0,I,Excellent,No +26,F,No,No,No,Euthyroid,Multinodular goiter,No,Papillary,Uni-Focal,Low,T2,N0,M0,I,Excellent,No +34,F,No,No,No,Euthyroid,Multinodular goiter,Right,Papillary,Uni-Focal,High,T4a,N1b,M0,I,Structural Incomplete,Yes +45,F,No,No,No,Euthyroid,Single nodular goiter-left,No,Papillary,Uni-Focal,Low,T3a,N0,M0,I,Excellent,No +23,F,No,Yes,No,Euthyroid,Single nodular goiter-right,Right,Papillary,Uni-Focal,Intermediate,T3b,N1a,M0,I,Structural Incomplete,Yes +27,F,No,No,No,Euthyroid,Single nodular goiter-right,Bilateral,Papillary,Uni-Focal,Intermediate,T3a,N1b,M0,I,Structural Incomplete,Yes +24,F,No,No,No,Euthyroid,Single nodular goiter-left,No,Papillary,Uni-Focal,Low,T2,N0,M0,I,Biochemical Incomplete,No +40,F,No,No,No,Euthyroid,Single nodular goiter-right,No,Micropapillary,Uni-Focal,Low,T1a,N0,M0,I,Excellent,No +59,F,No,No,No,Euthyroid,Single nodular goiter-left,No,Micropapillary,Uni-Focal,Low,T1a,N0,M0,I,Excellent,No +30,F,No,No,No,Euthyroid,Single nodular goiter-right,No,Papillary,Multi-Focal,Low,T3a,N0,M0,I,Biochemical Incomplete,No +56,F,No,No,No,Euthyroid,Single nodular goiter-right,No,Papillary,Uni-Focal,Low,T2,N0,M0,I,Excellent,No +38,F,No,No,No,Euthyroid,Single nodular goiter-right,Right,Papillary,Multi-Focal,Intermediate,T2,N1b,M0,I,Excellent,No +44,F,No,No,No,Euthyroid,Single nodular goiter-left,No,Papillary,Uni-Focal,Low,T2,N0,M0,I,Excellent,No +67,M,Yes,No,No,Euthyroid,Multinodular goiter,No,Papillary,Multi-Focal,Low,T2,N0,M0,I,Excellent,No +68,F,No,No,No,Euthyroid,Multinodular goiter,Bilateral,Papillary,Multi-Focal,High,T4a,N1b,M1,IVB,Structural Incomplete,Yes +32,F,No,No,No,Euthyroid,Multinodular goiter,No,Hurthel cell,Multi-Focal,Low,T3a,N0,M0,I,Excellent,No +23,F,No,No,No,Euthyroid,Multinodular goiter,No,Papillary,Multi-Focal,Low,T2,N0,M0,I,Indeterminate,No +21,F,No,No,No,Euthyroid,Single nodular goiter-right,No,Papillary,Multi-Focal,Intermediate,T3b,N0,M0,I,Structural Incomplete,Yes +56,F,No,No,No,Euthyroid,Multinodular goiter,Posterior,Papillary,Multi-Focal,High,T4a,N1b,M0,II,Structural Incomplete,Yes +31,M,No,No,No,Euthyroid,Single nodular goiter-right,No,Papillary,Uni-Focal,Low,T3a,N0,M0,I,Indeterminate,No +32,M,No,Yes,No,Euthyroid,Multinodular goiter,Bilateral,Papillary,Multi-Focal,Intermediate,T3b,N1b,M0,I,Structural Incomplete,Yes +29,F,No,No,No,Euthyroid,Single nodular goiter-left,No,Papillary,Multi-Focal,Low,T2,N0,M0,I,Excellent,No +36,M,No,No,No,Clinical Hyperthyroidism,Multinodular goiter,No,Papillary,Uni-Focal,Intermediate,T2,N1a,M0,I,Indeterminate,Yes +21,F,No,No,No,Euthyroid,Single nodular goiter-right,No,Papillary,Uni-Focal,Low,T2,N0,M0,I,Excellent,No +24,F,No,No,No,Euthyroid,Single nodular goiter-right,No,Papillary,Uni-Focal,Low,T2,N0,M0,I,Excellent,No +57,M,No,No,No,Clinical Hyperthyroidism,Single nodular goiter-left,No,Papillary,Uni-Focal,Low,T2,N0,M0,I,Excellent,No +31,F,No,No,No,Clinical Hyperthyroidism,Diffuse goiter,No,Papillary,Uni-Focal,Low,T2,N0,M0,I,Excellent,No +59,F,No,No,No,Euthyroid,Multinodular goiter,Bilateral,Papillary,Multi-Focal,High,T4b,N1b,M0,IVB,Structural Incomplete,Yes +30,F,No,No,No,Euthyroid,Single nodular goiter-right,No,Micropapillary,Uni-Focal,Low,T1a,N0,M0,I,Excellent,No +36,F,No,No,No,Euthyroid,Single nodular goiter-right,Right,Papillary,Uni-Focal,Low,T2,N1b,M0,I,Excellent,No +37,F,No,No,No,Euthyroid,Single nodular goiter-right,No,Papillary,Uni-Focal,Low,T2,N0,M0,I,Excellent,No +53,F,No,No,No,Euthyroid,Multinodular goiter,Right,Papillary,Uni-Focal,High,T4a,N1b,M0,I,Structural Incomplete,Yes +56,F,No,No,No,Euthyroid,Single nodular goiter-right,No,Papillary,Uni-Focal,Low,T2,N0,M0,I,Structural Incomplete,Yes +43,M,No,No,No,Subclinical Hyperthyroidism,Single nodular goiter-left,No,Micropapillary,Uni-Focal,Low,T1a,N0,M0,I,Excellent,No +37,F,No,No,No,Euthyroid,Single nodular goiter-right,No,Papillary,Uni-Focal,Low,T2,N0,M0,I,Excellent,No +80,F,Yes,Yes,No,Euthyroid,Multinodular goiter,Right,Papillary,Uni-Focal,High,T4a,N1b,M0,III,Structural Incomplete,Yes +37,F,No,No,No,Euthyroid,Single nodular goiter-right,No,Papillary,Multi-Focal,Low,T3a,N0,M0,I,Excellent,No +63,F,No,No,No,Euthyroid,Single nodular goiter-right,No,Follicular,Uni-Focal,Intermediate,T3a,N0,M0,II,Indeterminate,Yes +56,F,No,No,No,Euthyroid,Single nodular goiter-left,No,Follicular,Multi-Focal,Low,T3a,N0,M0,I,Structural Incomplete,Yes +56,F,No,No,No,Euthyroid,Single nodular goiter-right,No,Papillary,Uni-Focal,Low,T2,N0,M0,I,Biochemical Incomplete,No +30,F,No,No,No,Euthyroid,Single nodular goiter-right,No,Papillary,Uni-Focal,Low,T1b,N0,M0,I,Excellent,No +71,F,Yes,No,No,Euthyroid,Single nodular goiter-left,No,Follicular,Multi-Focal,High,T4a,N0,M1,IVB,Structural Incomplete,Yes +37,F,No,Yes,No,Subclinical Hypothyroidism,Normal,No,Micropapillary,Uni-Focal,Low,T1a,N0,M0,I,Excellent,No +40,F,No,No,No,Euthyroid,Single nodular goiter-right,No,Papillary,Uni-Focal,Intermediate,T1b,N0,M0,I,Excellent,No +37,M,No,No,No,Euthyroid,Multinodular goiter,Bilateral,Papillary,Multi-Focal,Intermediate,T3a,N1b,M0,I,Structural Incomplete,Yes +24,F,No,No,No,Euthyroid,Single nodular goiter-left,No,Papillary,Uni-Focal,Low,T2,N0,M0,I,Excellent,No +60,F,No,No,No,Euthyroid,Multinodular goiter,Bilateral,Papillary,Multi-Focal,Intermediate,T2,N1b,M0,I,Structural Incomplete,Yes +31,F,No,No,No,Euthyroid,Single nodular goiter-left,No,Follicular,Uni-Focal,Intermediate,T3a,N1a,M0,I,Biochemical Incomplete,Yes +28,F,No,No,No,Clinical Hyperthyroidism,Multinodular goiter,No,Papillary,Multi-Focal,Low,T2,N0,M0,I,Excellent,No +67,F,No,No,No,Euthyroid,Single nodular goiter-left,No,Papillary,Uni-Focal,Low,T2,N0,M0,I,Excellent,No +56,M,Yes,No,No,Euthyroid,Multinodular goiter,No,Hurthel cell,Multi-Focal,Intermediate,T3a,N0,M0,I,Indeterminate,No +38,F,No,No,No,Clinical Hyperthyroidism,Diffuse goiter,No,Micropapillary,Uni-Focal,Low,T1a,N0,M0,I,Excellent,No +59,M,Yes,Yes,No,Clinical Hypothyroidism,Multinodular goiter,No,Hurthel cell,Multi-Focal,Intermediate,T3b,N0,M0,I,Structural Incomplete,Yes +38,F,No,No,No,Euthyroid,Multinodular goiter,No,Papillary,Multi-Focal,Low,T1b,N0,M0,I,Excellent,No +34,F,No,No,No,Euthyroid,Single nodular goiter-right,No,Papillary,Uni-Focal,Intermediate,T3a,N0,M0,I,Excellent,No +25,F,No,Yes,Yes,Euthyroid,Single nodular goiter-right,No,Papillary,Uni-Focal,Low,T1b,N0,M0,I,Excellent,No +56,M,No,No,No,Euthyroid,Multinodular goiter,No,Papillary,Uni-Focal,Low,T2,N0,M0,I,Biochemical Incomplete,Yes +30,F,No,No,No,Euthyroid,Single nodular goiter-right,No,Papillary,Uni-Focal,Low,T2,N0,M0,I,Excellent,No +40,F,No,No,No,Euthyroid,Single nodular goiter-right,No,Papillary,Uni-Focal,Low,T1b,N0,M0,I,Excellent,No +24,F,No,No,No,Euthyroid,Multinodular goiter,No,Papillary,Uni-Focal,Low,T2,N0,M0,I,Excellent,No +49,F,No,No,No,Euthyroid,Multinodular goiter,No,Micropapillary,Uni-Focal,Low,T1a,N0,M0,I,Excellent,No +37,F,No,No,No,Subclinical Hypothyroidism,Single nodular goiter-left,No,Micropapillary,Uni-Focal,Low,T1a,N0,M0,I,Excellent,No +41,F,No,No,No,Euthyroid,Single nodular goiter-right,No,Micropapillary,Uni-Focal,Low,T1a,N0,M0,I,Excellent,No +38,F,No,No,No,Euthyroid,Single nodular goiter-right,No,Papillary,Uni-Focal,Low,T2,N0,M0,I,Excellent,No +42,F,No,No,No,Euthyroid,Multinodular goiter,No,Papillary,Uni-Focal,Low,T2,N0,M0,I,Excellent,No +26,F,No,No,No,Euthyroid,Single nodular goiter-left,Left,Papillary,Uni-Focal,Intermediate,T3a,N1b,M1,I,Structural Incomplete,Yes +55,M,No,No,No,Euthyroid,Multinodular goiter,No,Papillary,Multi-Focal,Intermediate,T3a,N0,M0,II,Indeterminate,No +50,F,No,No,No,Euthyroid,Single nodular goiter-left,No,Papillary,Uni-Focal,Low,T2,N0,M0,I,Excellent,No +20,M,No,No,No,Euthyroid,Single nodular goiter-right,Right,Papillary,Uni-Focal,Intermediate,T2,N1b,M0,I,Structural Incomplete,Yes +20,F,No,No,No,Euthyroid,Multinodular goiter,No,Papillary,Uni-Focal,Intermediate,T2,N1a,M0,I,Excellent,No +26,F,No,Yes,No,Subclinical Hyperthyroidism,Single nodular goiter-right,No,Hurthel cell,Uni-Focal,Low,T2,N0,M0,I,Excellent,No +30,F,No,No,No,Subclinical Hyperthyroidism,Multinodular goiter,No,Papillary,Multi-Focal,Low,T1b,N0,M0,I,Excellent,No +75,M,Yes,No,Yes,Euthyroid,Single nodular goiter-left,No,Follicular,Multi-Focal,High,T2,N0,M1,IVB,Structural Incomplete,Yes +58,F,No,No,No,Clinical Hyperthyroidism,Multinodular goiter,No,Follicular,Multi-Focal,Intermediate,T3a,N0,M0,II,Indeterminate,No +44,F,No,No,No,Euthyroid,Multinodular goiter,Right,Papillary,Multi-Focal,Intermediate,T3a,N1b,M0,I,Excellent,No +38,F,No,No,No,Euthyroid,Single nodular goiter-right,No,Papillary,Uni-Focal,Low,T2,N0,M0,I,Excellent,No +45,F,No,No,No,Euthyroid,Single nodular goiter-left,No,Micropapillary,Uni-Focal,Low,T1a,N0,M0,I,Excellent,No +51,F,No,Yes,No,Euthyroid,Single nodular goiter-right,Right,Hurthel cell,Uni-Focal,Low,T3a,N0,M0,I,Indeterminate,No +40,F,No,No,No,Euthyroid,Multinodular goiter,Left,Papillary,Uni-Focal,Intermediate,T2,N1b,M0,I,Indeterminate,No +31,M,Yes,Yes,No,Euthyroid,Single nodular goiter-left,No,Follicular,Uni-Focal,Low,T3a,N0,M0,I,Indeterminate,No +48,F,No,No,No,Euthyroid,Multinodular goiter,Bilateral,Papillary,Multi-Focal,Intermediate,T3a,N1b,M0,I,Structural Incomplete,Yes +62,F,No,No,No,Euthyroid,Multinodular goiter,No,Micropapillary,Multi-Focal,Low,T1a,N0,M0,I,Excellent,No +21,M,Yes,Yes,No,Euthyroid,Single nodular goiter-left,No,Papillary,Uni-Focal,Low,T3a,N0,M0,I,Biochemical Incomplete,No +22,F,No,No,No,Euthyroid,Multinodular goiter,Right,Papillary,Multi-Focal,Intermediate,T3b,N1a,M0,I,Structural Incomplete,Yes +44,M,Yes,No,No,Euthyroid,Single nodular goiter-right,No,Follicular,Uni-Focal,Low,T2,N0,M0,I,Excellent,No +17,F,No,No,No,Euthyroid,Single nodular goiter-right,No,Papillary,Uni-Focal,High,T2,N0,M0,I,Structural Incomplete,Yes +58,F,No,No,No,Euthyroid,Multinodular goiter,No,Papillary,Multi-Focal,Intermediate,T3a,N1a,M0,II,Indeterminate,Yes +51,M,No,No,No,Clinical Hyperthyroidism,Single nodular goiter-right,Right,Papillary,Uni-Focal,Intermediate,T2,N1b,M0,I,Indeterminate,No +21,F,No,No,No,Euthyroid,Single nodular goiter-left,No,Papillary,Uni-Focal,Low,T2,N0,M0,I,Excellent,No +57,F,Yes,No,No,Euthyroid,Multinodular goiter,No,Follicular,Uni-Focal,Low,T2,N0,M0,I,Excellent,No +31,F,No,No,No,Euthyroid,Single nodular goiter-right,No,Papillary,Uni-Focal,Low,T2,N1a,M0,I,Excellent,No +35,F,No,No,No,Euthyroid,Single nodular goiter-right,No,Papillary,Uni-Focal,Low,T1b,N0,M0,I,Excellent,No +31,F,No,No,No,Euthyroid,Multinodular goiter,Right,Papillary,Multi-Focal,Intermediate,T1a,N1b,M0,I,Excellent,No +36,F,No,No,No,Euthyroid,Single nodular goiter-right,No,Micropapillary,Uni-Focal,Low,T1a,N0,M0,I,Excellent,No +41,M,No,No,No,Euthyroid,Single nodular goiter-left,No,Papillary,Uni-Focal,Low,T3a,N0,M0,I,Excellent,No +27,F,No,No,No,Euthyroid,Multinodular goiter,No,Papillary,Multi-Focal,Low,T2,N1b,M0,I,Excellent,No +42,F,No,No,No,Euthyroid,Multinodular goiter,No,Papillary,Multi-Focal,Intermediate,T3b,N0,M0,I,Indeterminate,No +26,M,No,No,No,Euthyroid,Single nodular goiter-left,No,Micropapillary,Uni-Focal,Low,T1a,N0,M0,I,Excellent,No +42,M,No,No,No,Euthyroid,Single nodular goiter-right,No,Papillary,Multi-Focal,Low,T3a,N0,M0,I,Structural Incomplete,Yes +38,M,Yes,Yes,No,Euthyroid,Multinodular goiter,Right,Papillary,Multi-Focal,Intermediate,T2,N1b,M0,I,Structural Incomplete,Yes +31,M,Yes,No,No,Euthyroid,Single nodular goiter-right,No,Papillary,Multi-Focal,Low,T3a,N0,M0,I,Excellent,No +27,F,No,No,No,Euthyroid,Single nodular goiter-right,No,Papillary,Uni-Focal,Low,T2,N0,M0,I,Excellent,No +65,F,No,Yes,No,Euthyroid,Multinodular goiter,Bilateral,Papillary,Multi-Focal,Intermediate,T3a,N1b,M0,II,Biochemical Incomplete,Yes +26,F,No,No,No,Euthyroid,Multinodular goiter,No,Papillary,Uni-Focal,Low,T2,N0,M0,I,Excellent,No +54,F,No,No,No,Euthyroid,Single nodular goiter-left,No,Papillary,Uni-Focal,Low,T1b,N0,M0,I,Excellent,No +20,F,No,No,No,Euthyroid,Single nodular goiter-right,No,Papillary,Uni-Focal,Low,T2,N0,M0,I,Excellent,No +63,F,No,No,No,Euthyroid,Single nodular goiter-left,No,Papillary,Uni-Focal,Low,T2,N0,M0,I,Excellent,No +51,F,No,No,No,Euthyroid,Single nodular goiter-right,No,Micropapillary,Uni-Focal,Low,T1a,N0,M0,I,Excellent,No +22,F,No,No,No,Subclinical Hyperthyroidism,Single nodular goiter-right,No,Papillary,Uni-Focal,Low,T1b,N0,M0,I,Excellent,No +76,F,No,No,No,Clinical Hypothyroidism,Single nodular goiter-right,No,Micropapillary,Uni-Focal,Low,T1a,N0,M0,I,Excellent,No +31,M,Yes,No,No,Euthyroid,Single nodular goiter-left,No,Papillary,Uni-Focal,Low,T2,N0,M0,I,Excellent,No +51,F,No,No,No,Euthyroid,Single nodular goiter-right,No,Micropapillary,Uni-Focal,Low,T1a,N0,M0,I,Excellent,No +37,F,No,No,No,Subclinical Hypothyroidism,Single nodular goiter-left,No,Papillary,Multi-Focal,Intermediate,T3b,N1a,M1,II,Structural Incomplete,Yes +67,F,No,No,No,Euthyroid,Single nodular goiter-right,Right,Papillary,Multi-Focal,High,T4a,N1b,M0,III,Structural Incomplete,Yes +33,F,No,No,No,Clinical Hypothyroidism,Single nodular goiter-right,No,Papillary,Uni-Focal,Low,T2,N1a,M0,I,Indeterminate,No +47,F,No,No,No,Euthyroid,Multinodular goiter,No,Follicular,Uni-Focal,Intermediate,T3a,N0,M0,I,Indeterminate,No +67,F,Yes,No,No,Subclinical Hypothyroidism,Multinodular goiter,No,Papillary,Multi-Focal,High,T4a,N0,M0,IVA,Biochemical Incomplete,Yes +62,F,No,No,No,Euthyroid,Single nodular goiter-right,Right,Papillary,Multi-Focal,Intermediate,T2,N1b,M0,II,Structural Incomplete,Yes +17,F,No,No,No,Euthyroid,Multinodular goiter,Right,Papillary,Uni-Focal,Intermediate,T2,N1b,M0,I,Indeterminate,No +50,F,No,No,No,Euthyroid,Single nodular goiter-right,Right,Papillary,Uni-Focal,Intermediate,T2,N1b,M0,I,Indeterminate,No +56,F,No,No,No,Euthyroid,Single nodular goiter-right,No,Papillary,Multi-Focal,Intermediate,T3a,N1a,M0,II,Excellent,No +61,M,Yes,Yes,Yes,Clinical Hyperthyroidism,Multinodular goiter,Extensive,Hurthel cell,Multi-Focal,High,T4b,N1b,M0,IVA,Structural Incomplete,Yes +32,F,No,No,No,Euthyroid,Single nodular goiter-left,No,Follicular,Multi-Focal,Low,T3a,N0,M0,I,Indeterminate,No +31,M,Yes,No,Yes,Euthyroid,Single nodular goiter-left,Extensive,Papillary,Multi-Focal,High,T4a,N1b,M1,II,Structural Incomplete,Yes +68,M,Yes,Yes,No,Subclinical Hypothyroidism,Single nodular goiter-left,Bilateral,Papillary,Multi-Focal,Intermediate,T3b,N1b,M0,III,Structural Incomplete,Yes +73,F,No,No,No,Euthyroid,Multinodular goiter,No,Papillary,Uni-Focal,Intermediate,T3a,N0,M0,II,Structural Incomplete,Yes +35,F,No,No,No,Euthyroid,Multinodular goiter,No,Papillary,Multi-Focal,Low,T3a,N0,M0,I,Indeterminate,No +25,F,No,No,No,Euthyroid,Single nodular goiter-right,Right,Papillary,Multi-Focal,Low,T2,N1b,M0,I,Excellent,No +22,F,No,No,No,Euthyroid,Single nodular goiter-right,No,Papillary,Uni-Focal,Low,T2,N0,M0,I,Excellent,No +38,F,No,No,No,Euthyroid,Multinodular goiter,No,Micropapillary,Uni-Focal,Low,T1a,N0,M0,I,Excellent,No +28,F,Yes,No,No,Clinical Hyperthyroidism,Single nodular goiter-right,No,Papillary,Uni-Focal,Low,T2,N1a,M0,I,Indeterminate,No +35,F,No,No,No,Euthyroid,Multinodular goiter,No,Papillary,Multi-Focal,Low,T2,N0,M0,I,Excellent,No +49,F,No,No,No,Euthyroid,Single nodular goiter-right,Right,Papillary,Uni-Focal,Intermediate,T3a,N1b,M0,I,Structural Incomplete,Yes +48,F,No,No,No,Euthyroid,Single nodular goiter-right,No,Papillary,Multi-Focal,Low,T3a,N0,M0,I,Indeterminate,No +42,F,No,No,No,Euthyroid,Single nodular goiter-right,No,Papillary,Uni-Focal,Low,T2,N0,M0,I,Excellent,No +27,F,No,No,No,Euthyroid,Multinodular goiter,No,Papillary,Uni-Focal,Low,T1b,N0,M0,I,Excellent,No +34,F,No,Yes,No,Euthyroid,Multinodular goiter,No,Micropapillary,Uni-Focal,Low,T1a,N0,M0,I,Excellent,No +29,F,No,No,No,Euthyroid,Multinodular goiter,No,Follicular,Uni-Focal,Low,T1b,N0,M0,I,Excellent,No +27,F,No,No,No,Clinical Hyperthyroidism,Diffuse goiter,No,Papillary,Uni-Focal,Low,T1b,N0,M0,I,Excellent,No +36,F,No,No,No,Euthyroid,Single nodular goiter-right,Right,Papillary,Uni-Focal,Low,T2,N1b,M0,I,Indeterminate,No +52,M,Yes,No,No,Euthyroid,Single nodular goiter-left,No,Micropapillary,Uni-Focal,Low,T1a,N0,M0,I,Excellent,No +41,F,No,No,No,Euthyroid,Single nodular goiter-right,No,Papillary,Multi-Focal,Low,T3a,N0,M0,I,Excellent,No +62,F,No,No,No,Euthyroid,Single nodular goiter-right,No,Follicular,Multi-Focal,Intermediate,T1b,N0,M0,I,Structural Incomplete,Yes +25,F,No,No,No,Euthyroid,Multinodular goiter,No,Papillary,Multi-Focal,Low,T1b,N0,M0,I,Excellent,No +41,F,No,No,No,Euthyroid,Multinodular goiter,No,Papillary,Multi-Focal,Low,T3a,N0,M0,I,Biochemical Incomplete,No +62,M,No,No,No,Euthyroid,Single nodular goiter-right,No,Papillary,Uni-Focal,Low,T2,N0,M0,I,Structural Incomplete,Yes +50,F,No,No,No,Clinical Hyperthyroidism,Multinodular goiter,No,Micropapillary,Uni-Focal,Low,T1a,N0,M0,I,Excellent,No +29,F,No,No,No,Euthyroid,Multinodular goiter,Right,Papillary,Multi-Focal,Intermediate,T3a,N1b,M0,I,Structural Incomplete,Yes +35,F,No,No,No,Euthyroid,Multinodular goiter,Right,Papillary,Multi-Focal,Intermediate,T1b,N1b,M0,I,Structural Incomplete,Yes +45,F,No,No,No,Clinical Hypothyroidism,Single nodular goiter-left,No,Papillary,Multi-Focal,Low,T3a,N0,M0,I,Indeterminate,No +31,F,No,No,No,Euthyroid,Single nodular goiter-right,No,Papillary,Uni-Focal,Low,T2,N0,M0,I,Excellent,No +34,F,No,No,No,Euthyroid,Single nodular goiter-right,No,Papillary,Uni-Focal,High,T3a,N1a,M0,I,Biochemical Incomplete,Yes +40,M,Yes,No,No,Euthyroid,Multinodular goiter,Bilateral,Papillary,Multi-Focal,High,T4b,N1b,M0,I,Structural Incomplete,Yes +51,F,No,Yes,No,Euthyroid,Multinodular goiter,No,Papillary,Uni-Focal,Low,T2,N0,M0,I,Excellent,No +36,F,No,No,No,Euthyroid,Single nodular goiter-left,Left,Papillary,Multi-Focal,Intermediate,T3a,N1b,M0,I,Indeterminate,Yes +80,M,Yes,No,No,Euthyroid,Single nodular goiter-left,No,Hurthel cell,Multi-Focal,Intermediate,T4a,N0,M0,II,Structural Incomplete,Yes +33,M,No,No,No,Euthyroid,Multinodular goiter,Bilateral,Papillary,Uni-Focal,Intermediate,T3a,N1b,M0,I,Structural Incomplete,Yes +52,F,No,No,No,Euthyroid,Multinodular goiter,No,Follicular,Uni-Focal,Low,T3a,N0,M0,I,Biochemical Incomplete,No +25,F,No,No,No,Euthyroid,Single nodular goiter-left,No,Papillary,Uni-Focal,Low,T1b,N0,M0,I,Excellent,No +43,F,No,No,No,Euthyroid,Single nodular goiter-right,No,Micropapillary,Uni-Focal,Low,T1b,N0,M0,I,Excellent,No +50,F,No,No,No,Euthyroid,Multinodular goiter,No,Papillary,Uni-Focal,Low,T2,N0,M0,I,Indeterminate,No +42,F,No,No,No,Euthyroid,Multinodular goiter,No,Papillary,Uni-Focal,Low,T2,N0,M0,I,Excellent,No +72,M,Yes,Yes,No,Euthyroid,Multinodular goiter,Bilateral,Papillary,Multi-Focal,High,T4b,N1b,M1,IVB,Structural Incomplete,Yes +34,F,No,No,No,Euthyroid,Multinodular goiter,No,Papillary,Uni-Focal,Low,T2,N0,M0,I,Excellent,No +40,M,Yes,No,No,Euthyroid,Multinodular goiter,No,Papillary,Uni-Focal,Low,T2,N0,M0,I,Excellent,No +23,F,No,No,No,Clinical Hyperthyroidism,Single nodular goiter-left,No,Papillary,Uni-Focal,Low,T1b,N0,M0,I,Excellent,No +26,F,No,No,No,Euthyroid,Normal,Extensive,Papillary,Uni-Focal,Intermediate,T1a,N1b,M0,I,Structural Incomplete,Yes +31,F,No,No,No,Euthyroid,Single nodular goiter-left,Left,Papillary,Uni-Focal,Intermediate,T3b,N1b,M0,I,Excellent,Yes +60,F,No,No,No,Euthyroid,Single nodular goiter-right,Right,Papillary,Multi-Focal,Intermediate,T2,N1b,M0,II,Structural Incomplete,Yes +25,F,No,No,No,Clinical Hyperthyroidism,Multinodular goiter,No,Follicular,Multi-Focal,Low,T3a,N0,M0,I,Excellent,No +44,F,No,No,No,Euthyroid,Single nodular goiter-left,No,Micropapillary,Uni-Focal,Low,T1a,N0,M0,I,Excellent,No +33,F,No,No,No,Euthyroid,Single nodular goiter-right,Right,Papillary,Multi-Focal,Intermediate,T3a,N1b,M0,I,Biochemical Incomplete,Yes +28,F,No,No,No,Clinical Hypothyroidism,Single nodular goiter-right,No,Papillary,Uni-Focal,Low,T2,N0,M0,I,Excellent,No +81,F,No,No,No,Euthyroid,Multinodular goiter,No,Papillary,Multi-Focal,Low,T3a,N0,M0,II,Excellent,No +23,F,No,No,No,Euthyroid,Multinodular goiter,No,Papillary,Multi-Focal,Low,T2,N0,M0,I,Excellent,No +26,F,No,No,No,Subclinical Hypothyroidism,Multinodular goiter,Right,Papillary,Uni-Focal,Intermediate,T3a,N1a,M0,I,Indeterminate,No +44,F,No,No,No,Euthyroid,Single nodular goiter-left,Left,Papillary,Multi-Focal,Intermediate,T3b,N1b,M0,I,Structural Incomplete,Yes +34,F,No,No,No,Euthyroid,Single nodular goiter-left,No,Papillary,Uni-Focal,Low,T3a,N0,M0,I,Excellent,No +40,F,No,No,No,Euthyroid,Single nodular goiter-right,Right,Papillary,Multi-Focal,Intermediate,T3a,N1b,M0,I,Structural Incomplete,Yes +27,F,No,No,No,Euthyroid,Multinodular goiter,No,Papillary,Uni-Focal,Low,T2,N0,M0,I,Excellent,No +30,F,No,No,No,Euthyroid,Single nodular goiter-left,No,Papillary,Uni-Focal,Low,T2,N0,M0,I,Excellent,No +19,F,No,No,No,Euthyroid,Single nodular goiter-right,No,Papillary,Uni-Focal,Low,T2,N0,M0,I,Excellent,No +35,F,No,No,No,Euthyroid,Multinodular goiter,Extensive,Papillary,Multi-Focal,High,T4a,N1b,M0,I,Structural Incomplete,Yes +28,F,No,No,No,Euthyroid,Single nodular goiter-right,No,Follicular,Uni-Focal,Low,T2,N0,M0,I,Excellent,No +36,F,No,No,No,Euthyroid,Multinodular goiter,No,Papillary,Multi-Focal,Low,T1b,N0,M0,I,Indeterminate,Yes +52,M,Yes,No,No,Euthyroid,Single nodular goiter-left,Right,Follicular,Multi-Focal,Intermediate,T3a,N0,M0,I,Biochemical Incomplete,Yes +55,F,No,No,No,Subclinical Hypothyroidism,Multinodular goiter,Bilateral,Papillary,Multi-Focal,Intermediate,T2,N1b,M0,II,Indeterminate,No +26,F,No,No,No,Euthyroid,Multinodular goiter,No,Papillary,Uni-Focal,Low,T2,N0,M0,I,Excellent,No +67,M,Yes,No,No,Euthyroid,Multinodular goiter,Bilateral,Papillary,Multi-Focal,High,T4b,N1b,M0,IVA,Structural Incomplete,Yes +41,F,No,No,No,Euthyroid,Single nodular goiter-left,No,Micropapillary,Uni-Focal,Low,T1a,N0,M0,I,Excellent,No +50,F,No,No,No,Euthyroid,Single nodular goiter-right,No,Papillary,Uni-Focal,Low,T2,N0,M0,I,Excellent,No +69,F,No,No,No,Euthyroid,Single nodular goiter-left,No,Papillary,Uni-Focal,Low,T1b,N0,M0,I,Excellent,No +26,F,No,No,No,Euthyroid,Multinodular goiter,No,Papillary,Uni-Focal,Low,T2,N0,M0,I,Excellent,No +39,F,No,No,No,Euthyroid,Single nodular goiter-left,No,Papillary,Uni-Focal,Low,T3a,N0,M0,I,Indeterminate,No +58,F,No,No,No,Subclinical Hypothyroidism,Multinodular goiter,Extensive,Papillary,Multi-Focal,Intermediate,T3b,N1b,M0,II,Structural Incomplete,Yes +27,F,No,No,No,Euthyroid,Single nodular goiter-right,No,Follicular,Uni-Focal,Low,T2,N0,M0,I,Excellent,No diff --git a/Thyroid Cancer Recurrence Prediction/Images/Adenopathy_Distribution.png b/Thyroid Cancer Recurrence Prediction/Images/Adenopathy_Distribution.png new file mode 100644 index 0000000000..8b65612673 Binary files /dev/null and b/Thyroid Cancer Recurrence Prediction/Images/Adenopathy_Distribution.png differ diff --git a/Thyroid Cancer Recurrence Prediction/Images/Age_Distribution.png b/Thyroid Cancer Recurrence Prediction/Images/Age_Distribution.png new file mode 100644 index 0000000000..206f932bb8 Binary files /dev/null and b/Thyroid Cancer Recurrence Prediction/Images/Age_Distribution.png differ diff --git a/Thyroid Cancer Recurrence Prediction/Images/Age_Distribution_by_Smoking_Status.png b/Thyroid Cancer Recurrence Prediction/Images/Age_Distribution_by_Smoking_Status.png new file mode 100644 index 0000000000..52679ad62d Binary files /dev/null and b/Thyroid Cancer Recurrence Prediction/Images/Age_Distribution_by_Smoking_Status.png differ diff --git a/Thyroid Cancer Recurrence Prediction/Images/Correlation_Matrix.png b/Thyroid Cancer Recurrence Prediction/Images/Correlation_Matrix.png new file mode 100644 index 0000000000..abca87ec4c Binary files /dev/null and b/Thyroid Cancer Recurrence Prediction/Images/Correlation_Matrix.png differ diff --git a/Thyroid Cancer Recurrence Prediction/Images/Gender_Distribution.png b/Thyroid Cancer Recurrence Prediction/Images/Gender_Distribution.png new file mode 100644 index 0000000000..3dedf7ed70 Binary files /dev/null and b/Thyroid Cancer Recurrence Prediction/Images/Gender_Distribution.png differ diff --git a/Thyroid Cancer Recurrence Prediction/Images/MLP_Model_Accuracy.png b/Thyroid Cancer Recurrence Prediction/Images/MLP_Model_Accuracy.png new file mode 100644 index 0000000000..ffab509064 Binary files /dev/null and b/Thyroid Cancer Recurrence Prediction/Images/MLP_Model_Accuracy.png differ diff --git a/Thyroid Cancer Recurrence Prediction/Images/MosaicPlot.png b/Thyroid Cancer Recurrence Prediction/Images/MosaicPlot.png new file mode 100644 index 0000000000..c006611398 Binary files /dev/null and b/Thyroid Cancer Recurrence Prediction/Images/MosaicPlot.png differ diff --git a/Thyroid Cancer Recurrence Prediction/Images/Thyroid_Cancer_Recurrence_Dataset_EDA.png b/Thyroid Cancer Recurrence Prediction/Images/Thyroid_Cancer_Recurrence_Dataset_EDA.png new file mode 100644 index 0000000000..5c602a8fa1 Binary files /dev/null and b/Thyroid Cancer Recurrence Prediction/Images/Thyroid_Cancer_Recurrence_Dataset_EDA.png differ diff --git a/Thyroid Cancer Recurrence Prediction/Model/Profile_Report.html b/Thyroid Cancer Recurrence Prediction/Model/Profile_Report.html new file mode 100644 index 0000000000..869f4513cf --- /dev/null +++ b/Thyroid Cancer Recurrence Prediction/Model/Profile_Report.html @@ -0,0 +1,16162 @@ +EDA Report for Thyroid Cancer Recurrence Dataset

Overview

Dataset statistics

Number of variables17
Number of observations383
Missing cells0
Missing cells (%)0.0%
Duplicate rows16
Duplicate rows (%)4.2%
Total size in memory51.0 KiB
Average record size in memory136.3 B

Variable types

Numeric1
Categorical12
Boolean4

Alerts

Dataset has 16 (4.2%) duplicate rowsDuplicates
Hx Smoking is highly imbalanced (62.3%)Imbalance
Hx Radiothreapy is highly imbalanced (86.8%)Imbalance
Thyroid Function is highly imbalanced (64.9%)Imbalance
M is highly imbalanced (72.6%)Imbalance
Stage is highly imbalanced (67.9%)Imbalance

Reproduction

Analysis started2024-06-05 22:15:53.096619
Analysis finished2024-06-05 22:15:53.725874
Duration0.63 seconds
Software versionydata-profiling v4.8.3
Download configurationconfig.json

Variables

Age
Real number (ℝ)

Distinct65
Distinct (%)17.0%
Missing0
Missing (%)0.0%
Infinite0
Infinite (%)0.0%
Mean40.866841
Minimum15
Maximum82
Zeros0
Zeros (%)0.0%
Negative0
Negative (%)0.0%
Memory size3.1 KiB
2024-06-06T03:45:53.810935image/svg+xmlMatplotlib v3.8.4, https://matplotlib.org/

Quantile statistics

Minimum15
5-th percentile21
Q129
median37
Q351
95-th percentile70
Maximum82
Range67
Interquartile range (IQR)22

Descriptive statistics

Standard deviation15.134494
Coefficient of variation (CV)0.37033677
Kurtosis-0.27154098
Mean40.866841
Median Absolute Deviation (MAD)10
Skewness0.71973186
Sum15652
Variance229.0529
MonotonicityNot monotonic
2024-06-06T03:45:53.928368image/svg+xmlMatplotlib v3.8.4, https://matplotlib.org/
Histogram with fixed size bins (bins=50)
ValueCountFrequency (%)
31 22
 
5.7%
27 13
 
3.4%
40 12
 
3.1%
26 12
 
3.1%
28 12
 
3.1%
35 12
 
3.1%
30 12
 
3.1%
33 12
 
3.1%
34 11
 
2.9%
29 11
 
2.9%
Other values (55) 254
66.3%
ValueCountFrequency (%)
15 1
 
0.3%
17 3
 
0.8%
18 1
 
0.3%
19 2
 
0.5%
20 6
1.6%
21 9
2.3%
22 6
1.6%
23 6
1.6%
24 8
2.1%
25 7
1.8%
ValueCountFrequency (%)
82 1
 
0.3%
81 2
0.5%
80 3
0.8%
79 1
 
0.3%
78 1
 
0.3%
76 1
 
0.3%
75 2
0.5%
73 3
0.8%
72 3
0.8%
71 2
0.5%

Gender
Categorical

Distinct2
Distinct (%)0.5%
Missing0
Missing (%)0.0%
Memory size3.1 KiB
F
312 
M
71 

Length

Max length1
Median length1
Mean length1
Min length1

Characters and Unicode

Total characters383
Distinct characters2
Distinct categories1 ?
Distinct scripts1 ?
Distinct blocks1 ?
The Unicode Standard assigns character properties to each code point, which can be used to analyse textual variables.

Unique

Unique0 ?
Unique (%)0.0%

Sample

1st rowF
2nd rowF
3rd rowF
4th rowF
5th rowF

Common Values

ValueCountFrequency (%)
F 312
81.5%
M 71
 
18.5%

Length

2024-06-06T03:45:54.031151image/svg+xmlMatplotlib v3.8.4, https://matplotlib.org/
Histogram of lengths of the category

Common Values (Plot)

2024-06-06T03:45:54.108402image/svg+xmlMatplotlib v3.8.4, https://matplotlib.org/
ValueCountFrequency (%)
f 312
81.5%
m 71
 
18.5%

Most occurring characters

ValueCountFrequency (%)
F 312
81.5%
M 71
 
18.5%

Most occurring categories

ValueCountFrequency (%)
(unknown) 383
100.0%

Most frequent character per category

(unknown)
ValueCountFrequency (%)
F 312
81.5%
M 71
 
18.5%

Most occurring scripts

ValueCountFrequency (%)
(unknown) 383
100.0%

Most frequent character per script

(unknown)
ValueCountFrequency (%)
F 312
81.5%
M 71
 
18.5%

Most occurring blocks

ValueCountFrequency (%)
(unknown) 383
100.0%

Most frequent character per block

(unknown)
ValueCountFrequency (%)
F 312
81.5%
M 71
 
18.5%

Smoking
Boolean

Distinct2
Distinct (%)0.5%
Missing0
Missing (%)0.0%
Memory size515.0 B
False
334 
True
49 
ValueCountFrequency (%)
False 334
87.2%
True 49
 
12.8%
2024-06-06T03:45:54.184427image/svg+xmlMatplotlib v3.8.4, https://matplotlib.org/

Hx Smoking
Boolean

IMBALANCE 

Distinct2
Distinct (%)0.5%
Missing0
Missing (%)0.0%
Memory size515.0 B
False
355 
True
 
28
ValueCountFrequency (%)
False 355
92.7%
True 28
 
7.3%
2024-06-06T03:45:54.256301image/svg+xmlMatplotlib v3.8.4, https://matplotlib.org/

Hx Radiothreapy
Boolean

IMBALANCE 

Distinct2
Distinct (%)0.5%
Missing0
Missing (%)0.0%
Memory size515.0 B
False
376 
True
 
7
ValueCountFrequency (%)
False 376
98.2%
True 7
 
1.8%
2024-06-06T03:45:54.328169image/svg+xmlMatplotlib v3.8.4, https://matplotlib.org/

Thyroid Function
Categorical

IMBALANCE 

Distinct5
Distinct (%)1.3%
Missing0
Missing (%)0.0%
Memory size3.1 KiB
Euthyroid
332 
Clinical Hyperthyroidism
 
20
Subclinical Hypothyroidism
 
14
Clinical Hypothyroidism
 
12
Subclinical Hyperthyroidism
 
5

Length

Max length27
Median length9
Mean length11.078329
Min length9

Characters and Unicode

Total characters4243
Distinct characters22
Distinct categories1 ?
Distinct scripts1 ?
Distinct blocks1 ?
The Unicode Standard assigns character properties to each code point, which can be used to analyse textual variables.

Unique

Unique0 ?
Unique (%)0.0%

Sample

1st rowEuthyroid
2nd rowEuthyroid
3rd rowEuthyroid
4th rowEuthyroid
5th rowEuthyroid

Common Values

ValueCountFrequency (%)
Euthyroid 332
86.7%
Clinical Hyperthyroidism 20
 
5.2%
Subclinical Hypothyroidism 14
 
3.7%
Clinical Hypothyroidism 12
 
3.1%
Subclinical Hyperthyroidism 5
 
1.3%

Length

2024-06-06T03:45:54.435973image/svg+xmlMatplotlib v3.8.4, https://matplotlib.org/
Histogram of lengths of the category

Common Values (Plot)

2024-06-06T03:45:54.543231image/svg+xmlMatplotlib v3.8.4, https://matplotlib.org/
ValueCountFrequency (%)
euthyroid 332
76.5%
clinical 32
 
7.4%
hypothyroidism 26
 
6.0%
hyperthyroidism 25
 
5.8%
subclinical 19
 
4.4%

Most occurring characters

ValueCountFrequency (%)
i 536
12.6%
y 434
10.2%
o 409
9.6%
r 408
9.6%
t 383
9.0%
h 383
9.0%
d 383
9.0%
u 351
8.3%
E 332
7.8%
l 102
 
2.4%
Other values (12) 522
12.3%

Most occurring categories

ValueCountFrequency (%)
(unknown) 4243
100.0%

Most frequent character per category

(unknown)
ValueCountFrequency (%)
i 536
12.6%
y 434
10.2%
o 409
9.6%
r 408
9.6%
t 383
9.0%
h 383
9.0%
d 383
9.0%
u 351
8.3%
E 332
7.8%
l 102
 
2.4%
Other values (12) 522
12.3%

Most occurring scripts

ValueCountFrequency (%)
(unknown) 4243
100.0%

Most frequent character per script

(unknown)
ValueCountFrequency (%)
i 536
12.6%
y 434
10.2%
o 409
9.6%
r 408
9.6%
t 383
9.0%
h 383
9.0%
d 383
9.0%
u 351
8.3%
E 332
7.8%
l 102
 
2.4%
Other values (12) 522
12.3%

Most occurring blocks

ValueCountFrequency (%)
(unknown) 4243
100.0%

Most frequent character per block

(unknown)
ValueCountFrequency (%)
i 536
12.6%
y 434
10.2%
o 409
9.6%
r 408
9.6%
t 383
9.0%
h 383
9.0%
d 383
9.0%
u 351
8.3%
E 332
7.8%
l 102
 
2.4%
Other values (12) 522
12.3%
Distinct5
Distinct (%)1.3%
Missing0
Missing (%)0.0%
Memory size3.1 KiB
Multinodular goiter
140 
Single nodular goiter-right
140 
Single nodular goiter-left
89 
Normal
 
7
Diffuse goiter
 
7

Length

Max length27
Median length26
Mean length23.221932
Min length6

Characters and Unicode

Total characters8894
Distinct characters21
Distinct categories1 ?
Distinct scripts1 ?
Distinct blocks1 ?
The Unicode Standard assigns character properties to each code point, which can be used to analyse textual variables.

Unique

Unique0 ?
Unique (%)0.0%

Sample

1st rowSingle nodular goiter-left
2nd rowMultinodular goiter
3rd rowSingle nodular goiter-right
4th rowSingle nodular goiter-right
5th rowMultinodular goiter

Common Values

ValueCountFrequency (%)
Multinodular goiter 140
36.6%
Single nodular goiter-right 140
36.6%
Single nodular goiter-left 89
23.2%
Normal 7
 
1.8%
Diffuse goiter 7
 
1.8%

Length

2024-06-06T03:45:54.639218image/svg+xmlMatplotlib v3.8.4, https://matplotlib.org/
Histogram of lengths of the category

Common Values (Plot)

2024-06-06T03:45:54.725877image/svg+xmlMatplotlib v3.8.4, https://matplotlib.org/
ValueCountFrequency (%)
single 229
23.2%
nodular 229
23.2%
goiter 147
14.9%
multinodular 140
14.2%
goiter-right 140
14.2%
goiter-left 89
 
9.0%
normal 7
 
0.7%
diffuse 7
 
0.7%

Most occurring characters

ValueCountFrequency (%)
i 892
10.0%
r 892
10.0%
l 834
9.4%
o 752
8.5%
t 745
8.4%
g 745
8.4%
e 701
7.9%
605
 
6.8%
n 598
 
6.7%
u 516
 
5.8%
Other values (11) 1614
18.1%

Most occurring categories

ValueCountFrequency (%)
(unknown) 8894
100.0%

Most frequent character per category

(unknown)
ValueCountFrequency (%)
i 892
10.0%
r 892
10.0%
l 834
9.4%
o 752
8.5%
t 745
8.4%
g 745
8.4%
e 701
7.9%
605
 
6.8%
n 598
 
6.7%
u 516
 
5.8%
Other values (11) 1614
18.1%

Most occurring scripts

ValueCountFrequency (%)
(unknown) 8894
100.0%

Most frequent character per script

(unknown)
ValueCountFrequency (%)
i 892
10.0%
r 892
10.0%
l 834
9.4%
o 752
8.5%
t 745
8.4%
g 745
8.4%
e 701
7.9%
605
 
6.8%
n 598
 
6.7%
u 516
 
5.8%
Other values (11) 1614
18.1%

Most occurring blocks

ValueCountFrequency (%)
(unknown) 8894
100.0%

Most frequent character per block

(unknown)
ValueCountFrequency (%)
i 892
10.0%
r 892
10.0%
l 834
9.4%
o 752
8.5%
t 745
8.4%
g 745
8.4%
e 701
7.9%
605
 
6.8%
n 598
 
6.7%
u 516
 
5.8%
Other values (11) 1614
18.1%

Adenopathy
Categorical

Distinct6
Distinct (%)1.6%
Missing0
Missing (%)0.0%
Memory size3.1 KiB
No
277 
Right
48 
Bilateral
32 
Left
 
17
Extensive
 
7

Length

Max length9
Median length2
Mean length3.2140992
Min length2

Characters and Unicode

Total characters1231
Distinct characters20
Distinct categories1 ?
Distinct scripts1 ?
Distinct blocks1 ?
The Unicode Standard assigns character properties to each code point, which can be used to analyse textual variables.

Unique

Unique0 ?
Unique (%)0.0%

Sample

1st rowNo
2nd rowNo
3rd rowNo
4th rowNo
5th rowNo

Common Values

ValueCountFrequency (%)
No 277
72.3%
Right 48
 
12.5%
Bilateral 32
 
8.4%
Left 17
 
4.4%
Extensive 7
 
1.8%
Posterior 2
 
0.5%

Length

2024-06-06T03:45:54.831563image/svg+xmlMatplotlib v3.8.4, https://matplotlib.org/
Histogram of lengths of the category

Common Values (Plot)

2024-06-06T03:45:54.923889image/svg+xmlMatplotlib v3.8.4, https://matplotlib.org/
ValueCountFrequency (%)
no 277
72.3%
right 48
 
12.5%
bilateral 32
 
8.4%
left 17
 
4.4%
extensive 7
 
1.8%
posterior 2
 
0.5%

Most occurring characters

ValueCountFrequency (%)
o 281
22.8%
N 277
22.5%
t 106
 
8.6%
i 89
 
7.2%
e 65
 
5.3%
l 64
 
5.2%
a 64
 
5.2%
h 48
 
3.9%
g 48
 
3.9%
R 48
 
3.9%
Other values (10) 141
11.5%

Most occurring categories

ValueCountFrequency (%)
(unknown) 1231
100.0%

Most frequent character per category

(unknown)
ValueCountFrequency (%)
o 281
22.8%
N 277
22.5%
t 106
 
8.6%
i 89
 
7.2%
e 65
 
5.3%
l 64
 
5.2%
a 64
 
5.2%
h 48
 
3.9%
g 48
 
3.9%
R 48
 
3.9%
Other values (10) 141
11.5%

Most occurring scripts

ValueCountFrequency (%)
(unknown) 1231
100.0%

Most frequent character per script

(unknown)
ValueCountFrequency (%)
o 281
22.8%
N 277
22.5%
t 106
 
8.6%
i 89
 
7.2%
e 65
 
5.3%
l 64
 
5.2%
a 64
 
5.2%
h 48
 
3.9%
g 48
 
3.9%
R 48
 
3.9%
Other values (10) 141
11.5%

Most occurring blocks

ValueCountFrequency (%)
(unknown) 1231
100.0%

Most frequent character per block

(unknown)
ValueCountFrequency (%)
o 281
22.8%
N 277
22.5%
t 106
 
8.6%
i 89
 
7.2%
e 65
 
5.3%
l 64
 
5.2%
a 64
 
5.2%
h 48
 
3.9%
g 48
 
3.9%
R 48
 
3.9%
Other values (10) 141
11.5%

Pathology
Categorical

Distinct4
Distinct (%)1.0%
Missing0
Missing (%)0.0%
Memory size3.1 KiB
Papillary
287 
Micropapillary
48 
Follicular
 
28
Hurthel cell
 
20

Length

Max length14
Median length9
Mean length9.8563969
Min length9

Characters and Unicode

Total characters3775
Distinct characters17
Distinct categories1 ?
Distinct scripts1 ?
Distinct blocks1 ?
The Unicode Standard assigns character properties to each code point, which can be used to analyse textual variables.

Unique

Unique0 ?
Unique (%)0.0%

Sample

1st rowMicropapillary
2nd rowMicropapillary
3rd rowMicropapillary
4th rowMicropapillary
5th rowMicropapillary

Common Values

ValueCountFrequency (%)
Papillary 287
74.9%
Micropapillary 48
 
12.5%
Follicular 28
 
7.3%
Hurthel cell 20
 
5.2%

Length

2024-06-06T03:45:55.026457image/svg+xmlMatplotlib v3.8.4, https://matplotlib.org/
Histogram of lengths of the category

Common Values (Plot)

2024-06-06T03:45:55.114664image/svg+xmlMatplotlib v3.8.4, https://matplotlib.org/
ValueCountFrequency (%)
papillary 287
71.2%
micropapillary 48
 
11.9%
follicular 28
 
6.9%
hurthel 20
 
5.0%
cell 20
 
5.0%

Most occurring characters

ValueCountFrequency (%)
l 814
21.6%
a 698
18.5%
r 431
11.4%
i 411
10.9%
p 383
10.1%
y 335
8.9%
P 287
 
7.6%
c 96
 
2.5%
o 76
 
2.0%
M 48
 
1.3%
Other values (7) 196
 
5.2%

Most occurring categories

ValueCountFrequency (%)
(unknown) 3775
100.0%

Most frequent character per category

(unknown)
ValueCountFrequency (%)
l 814
21.6%
a 698
18.5%
r 431
11.4%
i 411
10.9%
p 383
10.1%
y 335
8.9%
P 287
 
7.6%
c 96
 
2.5%
o 76
 
2.0%
M 48
 
1.3%
Other values (7) 196
 
5.2%

Most occurring scripts

ValueCountFrequency (%)
(unknown) 3775
100.0%

Most frequent character per script

(unknown)
ValueCountFrequency (%)
l 814
21.6%
a 698
18.5%
r 431
11.4%
i 411
10.9%
p 383
10.1%
y 335
8.9%
P 287
 
7.6%
c 96
 
2.5%
o 76
 
2.0%
M 48
 
1.3%
Other values (7) 196
 
5.2%

Most occurring blocks

ValueCountFrequency (%)
(unknown) 3775
100.0%

Most frequent character per block

(unknown)
ValueCountFrequency (%)
l 814
21.6%
a 698
18.5%
r 431
11.4%
i 411
10.9%
p 383
10.1%
y 335
8.9%
P 287
 
7.6%
c 96
 
2.5%
o 76
 
2.0%
M 48
 
1.3%
Other values (7) 196
 
5.2%

Focality
Categorical

Distinct2
Distinct (%)0.5%
Missing0
Missing (%)0.0%
Memory size3.1 KiB
Uni-Focal
247 
Multi-Focal
136 

Length

Max length11
Median length9
Mean length9.7101828
Min length9

Characters and Unicode

Total characters3719
Distinct characters12
Distinct categories1 ?
Distinct scripts1 ?
Distinct blocks1 ?
The Unicode Standard assigns character properties to each code point, which can be used to analyse textual variables.

Unique

Unique0 ?
Unique (%)0.0%

Sample

1st rowUni-Focal
2nd rowUni-Focal
3rd rowUni-Focal
4th rowUni-Focal
5th rowMulti-Focal

Common Values

ValueCountFrequency (%)
Uni-Focal 247
64.5%
Multi-Focal 136
35.5%

Length

2024-06-06T03:45:55.227547image/svg+xmlMatplotlib v3.8.4, https://matplotlib.org/
Histogram of lengths of the category

Common Values (Plot)

2024-06-06T03:45:55.318152image/svg+xmlMatplotlib v3.8.4, https://matplotlib.org/
ValueCountFrequency (%)
uni-focal 247
64.5%
multi-focal 136
35.5%

Most occurring characters

ValueCountFrequency (%)
l 519
14.0%
i 383
10.3%
- 383
10.3%
F 383
10.3%
o 383
10.3%
c 383
10.3%
a 383
10.3%
U 247
6.6%
n 247
6.6%
M 136
 
3.7%
Other values (2) 272
7.3%

Most occurring categories

ValueCountFrequency (%)
(unknown) 3719
100.0%

Most frequent character per category

(unknown)
ValueCountFrequency (%)
l 519
14.0%
i 383
10.3%
- 383
10.3%
F 383
10.3%
o 383
10.3%
c 383
10.3%
a 383
10.3%
U 247
6.6%
n 247
6.6%
M 136
 
3.7%
Other values (2) 272
7.3%

Most occurring scripts

ValueCountFrequency (%)
(unknown) 3719
100.0%

Most frequent character per script

(unknown)
ValueCountFrequency (%)
l 519
14.0%
i 383
10.3%
- 383
10.3%
F 383
10.3%
o 383
10.3%
c 383
10.3%
a 383
10.3%
U 247
6.6%
n 247
6.6%
M 136
 
3.7%
Other values (2) 272
7.3%

Most occurring blocks

ValueCountFrequency (%)
(unknown) 3719
100.0%

Most frequent character per block

(unknown)
ValueCountFrequency (%)
l 519
14.0%
i 383
10.3%
- 383
10.3%
F 383
10.3%
o 383
10.3%
c 383
10.3%
a 383
10.3%
U 247
6.6%
n 247
6.6%
M 136
 
3.7%
Other values (2) 272
7.3%

Risk
Categorical

Distinct3
Distinct (%)0.8%
Missing0
Missing (%)0.0%
Memory size3.1 KiB
Low
249 
Intermediate
102 
High
32 

Length

Max length12
Median length3
Mean length5.4804178
Min length3

Characters and Unicode

Total characters2099
Distinct characters15
Distinct categories1 ?
Distinct scripts1 ?
Distinct blocks1 ?
The Unicode Standard assigns character properties to each code point, which can be used to analyse textual variables.

Unique

Unique0 ?
Unique (%)0.0%

Sample

1st rowLow
2nd rowLow
3rd rowLow
4th rowLow
5th rowLow

Common Values

ValueCountFrequency (%)
Low 249
65.0%
Intermediate 102
26.6%
High 32
 
8.4%

Length

2024-06-06T03:45:55.430007image/svg+xmlMatplotlib v3.8.4, https://matplotlib.org/
Histogram of lengths of the category

Common Values (Plot)

2024-06-06T03:45:55.522249image/svg+xmlMatplotlib v3.8.4, https://matplotlib.org/
ValueCountFrequency (%)
low 249
65.0%
intermediate 102
26.6%
high 32
 
8.4%

Most occurring characters

ValueCountFrequency (%)
e 306
14.6%
L 249
11.9%
o 249
11.9%
w 249
11.9%
t 204
9.7%
i 134
6.4%
I 102
 
4.9%
n 102
 
4.9%
r 102
 
4.9%
m 102
 
4.9%
Other values (5) 300
14.3%

Most occurring categories

ValueCountFrequency (%)
(unknown) 2099
100.0%

Most frequent character per category

(unknown)
ValueCountFrequency (%)
e 306
14.6%
L 249
11.9%
o 249
11.9%
w 249
11.9%
t 204
9.7%
i 134
6.4%
I 102
 
4.9%
n 102
 
4.9%
r 102
 
4.9%
m 102
 
4.9%
Other values (5) 300
14.3%

Most occurring scripts

ValueCountFrequency (%)
(unknown) 2099
100.0%

Most frequent character per script

(unknown)
ValueCountFrequency (%)
e 306
14.6%
L 249
11.9%
o 249
11.9%
w 249
11.9%
t 204
9.7%
i 134
6.4%
I 102
 
4.9%
n 102
 
4.9%
r 102
 
4.9%
m 102
 
4.9%
Other values (5) 300
14.3%

Most occurring blocks

ValueCountFrequency (%)
(unknown) 2099
100.0%

Most frequent character per block

(unknown)
ValueCountFrequency (%)
e 306
14.6%
L 249
11.9%
o 249
11.9%
w 249
11.9%
t 204
9.7%
i 134
6.4%
I 102
 
4.9%
n 102
 
4.9%
r 102
 
4.9%
m 102
 
4.9%
Other values (5) 300
14.3%

T
Categorical

Distinct7
Distinct (%)1.8%
Missing0
Missing (%)0.0%
Memory size3.1 KiB
T2
151 
T3a
96 
T1a
49 
T1b
43 
T4a
20 
Other values (2)
24 

Length

Max length3
Median length3
Mean length2.6057441
Min length2

Characters and Unicode

Total characters998
Distinct characters7
Distinct categories1 ?
Distinct scripts1 ?
Distinct blocks1 ?
The Unicode Standard assigns character properties to each code point, which can be used to analyse textual variables.

Unique

Unique0 ?
Unique (%)0.0%

Sample

1st rowT1a
2nd rowT1a
3rd rowT1a
4th rowT1a
5th rowT1a

Common Values

ValueCountFrequency (%)
T2 151
39.4%
T3a 96
25.1%
T1a 49
 
12.8%
T1b 43
 
11.2%
T4a 20
 
5.2%
T3b 16
 
4.2%
T4b 8
 
2.1%

Length

2024-06-06T03:45:55.612236image/svg+xmlMatplotlib v3.8.4, https://matplotlib.org/
Histogram of lengths of the category

Common Values (Plot)

2024-06-06T03:45:55.710254image/svg+xmlMatplotlib v3.8.4, https://matplotlib.org/
ValueCountFrequency (%)
t2 151
39.4%
t3a 96
25.1%
t1a 49
 
12.8%
t1b 43
 
11.2%
t4a 20
 
5.2%
t3b 16
 
4.2%
t4b 8
 
2.1%

Most occurring characters

ValueCountFrequency (%)
T 383
38.4%
a 165
16.5%
2 151
 
15.1%
3 112
 
11.2%
1 92
 
9.2%
b 67
 
6.7%
4 28
 
2.8%

Most occurring categories

ValueCountFrequency (%)
(unknown) 998
100.0%

Most frequent character per category

(unknown)
ValueCountFrequency (%)
T 383
38.4%
a 165
16.5%
2 151
 
15.1%
3 112
 
11.2%
1 92
 
9.2%
b 67
 
6.7%
4 28
 
2.8%

Most occurring scripts

ValueCountFrequency (%)
(unknown) 998
100.0%

Most frequent character per script

(unknown)
ValueCountFrequency (%)
T 383
38.4%
a 165
16.5%
2 151
 
15.1%
3 112
 
11.2%
1 92
 
9.2%
b 67
 
6.7%
4 28
 
2.8%

Most occurring blocks

ValueCountFrequency (%)
(unknown) 998
100.0%

Most frequent character per block

(unknown)
ValueCountFrequency (%)
T 383
38.4%
a 165
16.5%
2 151
 
15.1%
3 112
 
11.2%
1 92
 
9.2%
b 67
 
6.7%
4 28
 
2.8%

N
Categorical

Distinct3
Distinct (%)0.8%
Missing0
Missing (%)0.0%
Memory size3.1 KiB
N0
268 
N1b
93 
N1a
 
22

Length

Max length3
Median length2
Mean length2.3002611
Min length2

Characters and Unicode

Total characters881
Distinct characters5
Distinct categories1 ?
Distinct scripts1 ?
Distinct blocks1 ?
The Unicode Standard assigns character properties to each code point, which can be used to analyse textual variables.

Unique

Unique0 ?
Unique (%)0.0%

Sample

1st rowN0
2nd rowN0
3rd rowN0
4th rowN0
5th rowN0

Common Values

ValueCountFrequency (%)
N0 268
70.0%
N1b 93
 
24.3%
N1a 22
 
5.7%

Length

2024-06-06T03:45:56.000315image/svg+xmlMatplotlib v3.8.4, https://matplotlib.org/
Histogram of lengths of the category

Common Values (Plot)

2024-06-06T03:45:56.083086image/svg+xmlMatplotlib v3.8.4, https://matplotlib.org/
ValueCountFrequency (%)
n0 268
70.0%
n1b 93
 
24.3%
n1a 22
 
5.7%

Most occurring characters

ValueCountFrequency (%)
N 383
43.5%
0 268
30.4%
1 115
 
13.1%
b 93
 
10.6%
a 22
 
2.5%

Most occurring categories

ValueCountFrequency (%)
(unknown) 881
100.0%

Most frequent character per category

(unknown)
ValueCountFrequency (%)
N 383
43.5%
0 268
30.4%
1 115
 
13.1%
b 93
 
10.6%
a 22
 
2.5%

Most occurring scripts

ValueCountFrequency (%)
(unknown) 881
100.0%

Most frequent character per script

(unknown)
ValueCountFrequency (%)
N 383
43.5%
0 268
30.4%
1 115
 
13.1%
b 93
 
10.6%
a 22
 
2.5%

Most occurring blocks

ValueCountFrequency (%)
(unknown) 881
100.0%

Most frequent character per block

(unknown)
ValueCountFrequency (%)
N 383
43.5%
0 268
30.4%
1 115
 
13.1%
b 93
 
10.6%
a 22
 
2.5%

M
Categorical

IMBALANCE 

Distinct2
Distinct (%)0.5%
Missing0
Missing (%)0.0%
Memory size3.1 KiB
M0
365 
M1
 
18

Length

Max length2
Median length2
Mean length2
Min length2

Characters and Unicode

Total characters766
Distinct characters3
Distinct categories1 ?
Distinct scripts1 ?
Distinct blocks1 ?
The Unicode Standard assigns character properties to each code point, which can be used to analyse textual variables.

Unique

Unique0 ?
Unique (%)0.0%

Sample

1st rowM0
2nd rowM0
3rd rowM0
4th rowM0
5th rowM0

Common Values

ValueCountFrequency (%)
M0 365
95.3%
M1 18
 
4.7%

Length

2024-06-06T03:45:56.170335image/svg+xmlMatplotlib v3.8.4, https://matplotlib.org/
Histogram of lengths of the category

Common Values (Plot)

2024-06-06T03:45:56.258902image/svg+xmlMatplotlib v3.8.4, https://matplotlib.org/
ValueCountFrequency (%)
m0 365
95.3%
m1 18
 
4.7%

Most occurring characters

ValueCountFrequency (%)
M 383
50.0%
0 365
47.7%
1 18
 
2.3%

Most occurring categories

ValueCountFrequency (%)
(unknown) 766
100.0%

Most frequent character per category

(unknown)
ValueCountFrequency (%)
M 383
50.0%
0 365
47.7%
1 18
 
2.3%

Most occurring scripts

ValueCountFrequency (%)
(unknown) 766
100.0%

Most frequent character per script

(unknown)
ValueCountFrequency (%)
M 383
50.0%
0 365
47.7%
1 18
 
2.3%

Most occurring blocks

ValueCountFrequency (%)
(unknown) 766
100.0%

Most frequent character per block

(unknown)
ValueCountFrequency (%)
M 383
50.0%
0 365
47.7%
1 18
 
2.3%

Stage
Categorical

IMBALANCE 

Distinct5
Distinct (%)1.3%
Missing0
Missing (%)0.0%
Memory size3.1 KiB
I
333 
II
 
32
IVB
 
11
III
 
4
IVA
 
3

Length

Max length3
Median length1
Mean length1.1775457
Min length1

Characters and Unicode

Total characters451
Distinct characters4
Distinct categories1 ?
Distinct scripts1 ?
Distinct blocks1 ?
The Unicode Standard assigns character properties to each code point, which can be used to analyse textual variables.

Unique

Unique0 ?
Unique (%)0.0%

Sample

1st rowI
2nd rowI
3rd rowI
4th rowI
5th rowI

Common Values

ValueCountFrequency (%)
I 333
86.9%
II 32
 
8.4%
IVB 11
 
2.9%
III 4
 
1.0%
IVA 3
 
0.8%

Length

2024-06-06T03:45:56.350372image/svg+xmlMatplotlib v3.8.4, https://matplotlib.org/
Histogram of lengths of the category

Common Values (Plot)

2024-06-06T03:45:56.444838image/svg+xmlMatplotlib v3.8.4, https://matplotlib.org/
ValueCountFrequency (%)
i 333
86.9%
ii 32
 
8.4%
ivb 11
 
2.9%
iii 4
 
1.0%
iva 3
 
0.8%

Most occurring characters

ValueCountFrequency (%)
I 423
93.8%
V 14
 
3.1%
B 11
 
2.4%
A 3
 
0.7%

Most occurring categories

ValueCountFrequency (%)
(unknown) 451
100.0%

Most frequent character per category

(unknown)
ValueCountFrequency (%)
I 423
93.8%
V 14
 
3.1%
B 11
 
2.4%
A 3
 
0.7%

Most occurring scripts

ValueCountFrequency (%)
(unknown) 451
100.0%

Most frequent character per script

(unknown)
ValueCountFrequency (%)
I 423
93.8%
V 14
 
3.1%
B 11
 
2.4%
A 3
 
0.7%

Most occurring blocks

ValueCountFrequency (%)
(unknown) 451
100.0%

Most frequent character per block

(unknown)
ValueCountFrequency (%)
I 423
93.8%
V 14
 
3.1%
B 11
 
2.4%
A 3
 
0.7%

Response
Categorical

Distinct4
Distinct (%)1.0%
Missing0
Missing (%)0.0%
Memory size3.1 KiB
Excellent
208 
Structural Incomplete
91 
Indeterminate
61 
Biochemical Incomplete
23 

Length

Max length22
Median length9
Mean length13.26893
Min length9

Characters and Unicode

Total characters5082
Distinct characters20
Distinct categories1 ?
Distinct scripts1 ?
Distinct blocks1 ?
The Unicode Standard assigns character properties to each code point, which can be used to analyse textual variables.

Unique

Unique0 ?
Unique (%)0.0%

Sample

1st rowIndeterminate
2nd rowExcellent
3rd rowExcellent
4th rowExcellent
5th rowExcellent

Common Values

ValueCountFrequency (%)
Excellent 208
54.3%
Structural Incomplete 91
23.8%
Indeterminate 61
 
15.9%
Biochemical Incomplete 23
 
6.0%

Length

2024-06-06T03:45:56.544941image/svg+xmlMatplotlib v3.8.4, https://matplotlib.org/
Histogram of lengths of the category

Common Values (Plot)

2024-06-06T03:45:56.632534image/svg+xmlMatplotlib v3.8.4, https://matplotlib.org/
ValueCountFrequency (%)
excellent 208
41.9%
incomplete 114
22.9%
structural 91
18.3%
indeterminate 61
 
12.3%
biochemical 23
 
4.6%

Most occurring characters

ValueCountFrequency (%)
e 850
16.7%
l 644
12.7%
t 626
12.3%
c 459
9.0%
n 444
8.7%
r 243
 
4.8%
E 208
 
4.1%
x 208
 
4.1%
m 198
 
3.9%
u 182
 
3.6%
Other values (10) 1020
20.1%

Most occurring categories

ValueCountFrequency (%)
(unknown) 5082
100.0%

Most frequent character per category

(unknown)
ValueCountFrequency (%)
e 850
16.7%
l 644
12.7%
t 626
12.3%
c 459
9.0%
n 444
8.7%
r 243
 
4.8%
E 208
 
4.1%
x 208
 
4.1%
m 198
 
3.9%
u 182
 
3.6%
Other values (10) 1020
20.1%

Most occurring scripts

ValueCountFrequency (%)
(unknown) 5082
100.0%

Most frequent character per script

(unknown)
ValueCountFrequency (%)
e 850
16.7%
l 644
12.7%
t 626
12.3%
c 459
9.0%
n 444
8.7%
r 243
 
4.8%
E 208
 
4.1%
x 208
 
4.1%
m 198
 
3.9%
u 182
 
3.6%
Other values (10) 1020
20.1%

Most occurring blocks

ValueCountFrequency (%)
(unknown) 5082
100.0%

Most frequent character per block

(unknown)
ValueCountFrequency (%)
e 850
16.7%
l 644
12.7%
t 626
12.3%
c 459
9.0%
n 444
8.7%
r 243
 
4.8%
E 208
 
4.1%
x 208
 
4.1%
m 198
 
3.9%
u 182
 
3.6%
Other values (10) 1020
20.1%

Recurred
Boolean

Distinct2
Distinct (%)0.5%
Missing0
Missing (%)0.0%
Memory size515.0 B
False
275 
True
108 
ValueCountFrequency (%)
False 275
71.8%
True 108
 
28.2%
2024-06-06T03:45:56.717908image/svg+xmlMatplotlib v3.8.4, https://matplotlib.org/

Interactions

2024-06-06T03:45:53.288665image/svg+xmlMatplotlib v3.8.4, https://matplotlib.org/

Missing values

2024-06-06T03:45:53.414267image/svg+xmlMatplotlib v3.8.4, https://matplotlib.org/
A simple visualization of nullity by column.
2024-06-06T03:45:53.630997image/svg+xmlMatplotlib v3.8.4, https://matplotlib.org/
Nullity matrix is a data-dense display which lets you quickly visually pick out patterns in data completion.

Sample

AgeGenderSmokingHx SmokingHx RadiothreapyThyroid FunctionPhysical ExaminationAdenopathyPathologyFocalityRiskTNMStageResponseRecurred
027FNoNoNoEuthyroidSingle nodular goiter-leftNoMicropapillaryUni-FocalLowT1aN0M0IIndeterminateNo
134FNoYesNoEuthyroidMultinodular goiterNoMicropapillaryUni-FocalLowT1aN0M0IExcellentNo
230FNoNoNoEuthyroidSingle nodular goiter-rightNoMicropapillaryUni-FocalLowT1aN0M0IExcellentNo
362FNoNoNoEuthyroidSingle nodular goiter-rightNoMicropapillaryUni-FocalLowT1aN0M0IExcellentNo
462FNoNoNoEuthyroidMultinodular goiterNoMicropapillaryMulti-FocalLowT1aN0M0IExcellentNo
552MYesNoNoEuthyroidMultinodular goiterNoMicropapillaryMulti-FocalLowT1aN0M0IIndeterminateNo
641FNoYesNoClinical HyperthyroidismSingle nodular goiter-rightNoMicropapillaryUni-FocalLowT1aN0M0IExcellentNo
746FNoNoNoEuthyroidSingle nodular goiter-rightNoMicropapillaryUni-FocalLowT1aN0M0IExcellentNo
851FNoNoNoEuthyroidSingle nodular goiter-rightNoMicropapillaryUni-FocalLowT1aN0M0IExcellentNo
940FNoNoNoEuthyroidSingle nodular goiter-rightNoMicropapillaryUni-FocalLowT1aN0M0IExcellentNo
AgeGenderSmokingHx SmokingHx RadiothreapyThyroid FunctionPhysical ExaminationAdenopathyPathologyFocalityRiskTNMStageResponseRecurred
37331MYesNoYesEuthyroidSingle nodular goiter-leftExtensivePapillaryMulti-FocalHighT4aN1bM1IIStructural IncompleteYes
37462MYesNoNoEuthyroidSingle nodular goiter-leftLeftPapillaryMulti-FocalHighT4aN1bM1IVBStructural IncompleteYes
37559FNoNoNoEuthyroidMultinodular goiterBilateralPapillaryMulti-FocalHighT4bN1bM0IVBStructural IncompleteYes
37640MYesNoNoEuthyroidMultinodular goiterBilateralPapillaryMulti-FocalHighT4bN1bM0IStructural IncompleteYes
37746MYesNoNoEuthyroidSingle nodular goiter-leftBilateralFollicularUni-FocalHighT4bN1bM1IIStructural IncompleteYes
37872MYesYesYesEuthyroidSingle nodular goiter-rightRightPapillaryUni-FocalHighT4bN1bM1IVBBiochemical IncompleteYes
37981MYesNoYesEuthyroidMultinodular goiterExtensivePapillaryMulti-FocalHighT4bN1bM1IVBStructural IncompleteYes
38072MYesYesNoEuthyroidMultinodular goiterBilateralPapillaryMulti-FocalHighT4bN1bM1IVBStructural IncompleteYes
38161MYesYesYesClinical HyperthyroidismMultinodular goiterExtensiveHurthel cellMulti-FocalHighT4bN1bM0IVAStructural IncompleteYes
38267MYesNoNoEuthyroidMultinodular goiterBilateralPapillaryMulti-FocalHighT4bN1bM0IVAStructural IncompleteYes

Duplicate rows

Most frequently occurring

AgeGenderSmokingHx SmokingHx RadiothreapyThyroid FunctionPhysical ExaminationAdenopathyPathologyFocalityRiskTNMStageResponseRecurred# duplicates
226FNoNoNoEuthyroidMultinodular goiterNoPapillaryUni-FocalLowT2N0M0IExcellentNo4
632FNoNoNoEuthyroidSingle nodular goiter-rightNoPapillaryUni-FocalLowT2N0M0IExcellentNo3
021FNoNoNoEuthyroidSingle nodular goiter-rightNoPapillaryUni-FocalLowT2N0M0IExcellentNo2
122FNoNoNoEuthyroidSingle nodular goiter-rightNoPapillaryUni-FocalLowT2N0M0IExcellentNo2
328FNoNoNoEuthyroidSingle nodular goiter-rightNoPapillaryUni-FocalLowT2N0M0IExcellentNo2
429FNoNoNoEuthyroidSingle nodular goiter-rightNoPapillaryUni-FocalLowT1bN0M0IExcellentNo2
531FNoNoNoEuthyroidSingle nodular goiter-rightNoPapillaryUni-FocalLowT2N0M0IExcellentNo2
734FNoNoNoEuthyroidMultinodular goiterNoPapillaryUni-FocalLowT2N0M0IExcellentNo2
835FNoNoNoEuthyroidSingle nodular goiter-rightNoPapillaryUni-FocalLowT1bN0M0IExcellentNo2
936FNoNoNoEuthyroidSingle nodular goiter-rightNoMicropapillaryUni-FocalLowT1aN0M0IExcellentNo2
\ No newline at end of file diff --git a/Thyroid Cancer Recurrence Prediction/Model/Thyroid_Cancer_Recurrence_Dataset_EDA.ipynb b/Thyroid Cancer Recurrence Prediction/Model/Thyroid_Cancer_Recurrence_Dataset_EDA.ipynb new file mode 100644 index 0000000000..880fc7fb19 --- /dev/null +++ b/Thyroid Cancer Recurrence Prediction/Model/Thyroid_Cancer_Recurrence_Dataset_EDA.ipynb @@ -0,0 +1,16916 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 82, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Requirement already satisfied: pandas in c:\\users\\arpit\\desktop\\thyroid cancer recurrence prediction\\env\\lib\\site-packages (2.2.2)\n", + "Requirement already satisfied: ydata-profiling in c:\\users\\arpit\\desktop\\thyroid cancer recurrence prediction\\env\\lib\\site-packages (4.8.3)\n", + "Requirement already satisfied: ipywidgets in c:\\users\\arpit\\desktop\\thyroid cancer recurrence prediction\\env\\lib\\site-packages (8.1.3)\n", + "Requirement already satisfied: seaborn in c:\\users\\arpit\\desktop\\thyroid cancer recurrence prediction\\env\\lib\\site-packages (0.13.2)\n", + "Requirement already satisfied: pyqt6 in c:\\users\\arpit\\desktop\\thyroid cancer recurrence prediction\\env\\lib\\site-packages (6.7.0)\n", + "Requirement already satisfied: lifelines in c:\\users\\arpit\\desktop\\thyroid cancer recurrence prediction\\env\\lib\\site-packages (0.28.0)\n", + "Requirement already satisfied: numpy>=1.23.2 in c:\\users\\arpit\\desktop\\thyroid cancer recurrence prediction\\env\\lib\\site-packages (from pandas) (1.26.4)\n", + "Requirement already satisfied: python-dateutil>=2.8.2 in c:\\users\\arpit\\desktop\\thyroid cancer recurrence prediction\\env\\lib\\site-packages (from pandas) (2.9.0.post0)\n", + "Requirement already satisfied: pytz>=2020.1 in c:\\users\\arpit\\desktop\\thyroid cancer recurrence prediction\\env\\lib\\site-packages (from pandas) (2024.1)\n", + "Requirement already satisfied: tzdata>=2022.7 in c:\\users\\arpit\\desktop\\thyroid cancer recurrence prediction\\env\\lib\\site-packages (from pandas) (2024.1)\n", + "Requirement already satisfied: scipy<1.14,>=1.4.1 in c:\\users\\arpit\\desktop\\thyroid cancer recurrence prediction\\env\\lib\\site-packages (from ydata-profiling) (1.13.1)\n", + "Requirement already satisfied: matplotlib<3.9,>=3.2 in c:\\users\\arpit\\desktop\\thyroid cancer recurrence prediction\\env\\lib\\site-packages (from ydata-profiling) (3.8.4)\n", + "Requirement already satisfied: pydantic>=2 in c:\\users\\arpit\\desktop\\thyroid cancer recurrence prediction\\env\\lib\\site-packages (from ydata-profiling) (2.7.3)\n", + "Requirement already satisfied: PyYAML<6.1,>=5.0.0 in c:\\users\\arpit\\desktop\\thyroid cancer recurrence prediction\\env\\lib\\site-packages (from ydata-profiling) (6.0.1)\n", + "Requirement already satisfied: jinja2<3.2,>=2.11.1 in c:\\users\\arpit\\desktop\\thyroid cancer recurrence prediction\\env\\lib\\site-packages (from ydata-profiling) (3.1.4)\n", + "Requirement already satisfied: visions<0.7.7,>=0.7.5 in c:\\users\\arpit\\desktop\\thyroid cancer recurrence prediction\\env\\lib\\site-packages (from visions[type_image_path]<0.7.7,>=0.7.5->ydata-profiling) (0.7.6)\n", + "Requirement already satisfied: htmlmin==0.1.12 in c:\\users\\arpit\\desktop\\thyroid cancer recurrence prediction\\env\\lib\\site-packages (from ydata-profiling) (0.1.12)\n", + "Requirement already satisfied: phik<0.13,>=0.11.1 in c:\\users\\arpit\\desktop\\thyroid cancer recurrence prediction\\env\\lib\\site-packages (from ydata-profiling) (0.12.4)\n", + "Requirement already satisfied: requests<3,>=2.24.0 in c:\\users\\arpit\\desktop\\thyroid cancer recurrence prediction\\env\\lib\\site-packages (from ydata-profiling) (2.32.3)\n", + "Requirement already satisfied: tqdm<5,>=4.48.2 in c:\\users\\arpit\\desktop\\thyroid cancer recurrence prediction\\env\\lib\\site-packages (from ydata-profiling) (4.66.4)\n", + "Requirement already satisfied: multimethod<2,>=1.4 in c:\\users\\arpit\\desktop\\thyroid cancer recurrence prediction\\env\\lib\\site-packages (from ydata-profiling) (1.11.2)\n", + "Requirement already satisfied: statsmodels<1,>=0.13.2 in c:\\users\\arpit\\desktop\\thyroid cancer recurrence prediction\\env\\lib\\site-packages (from ydata-profiling) (0.14.2)\n", + "Requirement already satisfied: typeguard<5,>=3 in c:\\users\\arpit\\desktop\\thyroid cancer recurrence prediction\\env\\lib\\site-packages (from ydata-profiling) (4.3.0)\n", + "Requirement already satisfied: imagehash==4.3.1 in c:\\users\\arpit\\desktop\\thyroid cancer recurrence prediction\\env\\lib\\site-packages (from ydata-profiling) (4.3.1)\n", + "Requirement already satisfied: wordcloud>=1.9.1 in c:\\users\\arpit\\desktop\\thyroid cancer recurrence prediction\\env\\lib\\site-packages (from ydata-profiling) (1.9.3)\n", + "Requirement already satisfied: dacite>=1.8 in c:\\users\\arpit\\desktop\\thyroid cancer recurrence prediction\\env\\lib\\site-packages (from ydata-profiling) (1.8.1)\n", + "Requirement already satisfied: numba<1,>=0.56.0 in c:\\users\\arpit\\desktop\\thyroid cancer recurrence prediction\\env\\lib\\site-packages (from ydata-profiling) (0.59.1)\n", + "Requirement already satisfied: PyWavelets in c:\\users\\arpit\\desktop\\thyroid cancer recurrence prediction\\env\\lib\\site-packages (from imagehash==4.3.1->ydata-profiling) (1.6.0)\n", + "Requirement already satisfied: pillow in c:\\users\\arpit\\desktop\\thyroid cancer recurrence prediction\\env\\lib\\site-packages (from imagehash==4.3.1->ydata-profiling) (10.3.0)\n", + "Requirement already satisfied: comm>=0.1.3 in c:\\users\\arpit\\desktop\\thyroid cancer recurrence prediction\\env\\lib\\site-packages (from ipywidgets) (0.2.2)\n", + "Requirement already satisfied: ipython>=6.1.0 in c:\\users\\arpit\\desktop\\thyroid cancer recurrence prediction\\env\\lib\\site-packages (from ipywidgets) (8.25.0)\n", + "Requirement already satisfied: traitlets>=4.3.1 in c:\\users\\arpit\\desktop\\thyroid cancer recurrence prediction\\env\\lib\\site-packages (from ipywidgets) (5.14.3)\n", + "Requirement already satisfied: widgetsnbextension~=4.0.11 in c:\\users\\arpit\\desktop\\thyroid cancer recurrence prediction\\env\\lib\\site-packages (from ipywidgets) (4.0.11)\n", + "Requirement already satisfied: jupyterlab-widgets~=3.0.11 in c:\\users\\arpit\\desktop\\thyroid cancer recurrence prediction\\env\\lib\\site-packages (from ipywidgets) (3.0.11)\n", + "Requirement already satisfied: PyQt6-sip<14,>=13.6 in c:\\users\\arpit\\desktop\\thyroid cancer recurrence prediction\\env\\lib\\site-packages (from pyqt6) (13.6.0)\n", + "Requirement already satisfied: PyQt6-Qt6<6.8.0,>=6.7.0 in c:\\users\\arpit\\desktop\\thyroid cancer recurrence prediction\\env\\lib\\site-packages (from pyqt6) (6.7.1)\n", + "Requirement already satisfied: autograd>=1.5 in c:\\users\\arpit\\desktop\\thyroid cancer recurrence prediction\\env\\lib\\site-packages (from lifelines) (1.6.2)\n", + "Requirement already satisfied: autograd-gamma>=0.3 in c:\\users\\arpit\\desktop\\thyroid cancer recurrence prediction\\env\\lib\\site-packages (from lifelines) (0.5.0)\n", + "Requirement already satisfied: formulaic>=0.2.2 in c:\\users\\arpit\\desktop\\thyroid cancer recurrence prediction\\env\\lib\\site-packages (from lifelines) (1.0.1)\n", + "Requirement already satisfied: future>=0.15.2 in c:\\users\\arpit\\desktop\\thyroid cancer recurrence prediction\\env\\lib\\site-packages (from autograd>=1.5->lifelines) (1.0.0)\n", + "Requirement already satisfied: interface-meta>=1.2.0 in c:\\users\\arpit\\desktop\\thyroid cancer recurrence prediction\\env\\lib\\site-packages (from formulaic>=0.2.2->lifelines) (1.3.0)\n", + "Requirement already satisfied: typing-extensions>=4.2.0 in c:\\users\\arpit\\desktop\\thyroid cancer recurrence prediction\\env\\lib\\site-packages (from formulaic>=0.2.2->lifelines) (4.12.1)\n", + "Requirement already satisfied: wrapt>=1.0 in c:\\users\\arpit\\desktop\\thyroid cancer recurrence prediction\\env\\lib\\site-packages (from formulaic>=0.2.2->lifelines) (1.16.0)\n", + "Requirement already satisfied: decorator in c:\\users\\arpit\\desktop\\thyroid cancer recurrence prediction\\env\\lib\\site-packages (from ipython>=6.1.0->ipywidgets) (5.1.1)\n", + "Requirement already satisfied: jedi>=0.16 in c:\\users\\arpit\\desktop\\thyroid cancer recurrence prediction\\env\\lib\\site-packages (from ipython>=6.1.0->ipywidgets) (0.19.1)\n", + "Requirement already satisfied: matplotlib-inline in c:\\users\\arpit\\desktop\\thyroid cancer recurrence prediction\\env\\lib\\site-packages (from ipython>=6.1.0->ipywidgets) (0.1.7)\n", + "Requirement already satisfied: prompt-toolkit<3.1.0,>=3.0.41 in c:\\users\\arpit\\desktop\\thyroid cancer recurrence prediction\\env\\lib\\site-packages (from ipython>=6.1.0->ipywidgets) (3.0.46)\n", + "Requirement already satisfied: pygments>=2.4.0 in c:\\users\\arpit\\desktop\\thyroid cancer recurrence prediction\\env\\lib\\site-packages (from ipython>=6.1.0->ipywidgets) (2.18.0)\n", + "Requirement already satisfied: stack-data in c:\\users\\arpit\\desktop\\thyroid cancer recurrence prediction\\env\\lib\\site-packages (from ipython>=6.1.0->ipywidgets) (0.6.3)\n", + "Requirement already satisfied: colorama in c:\\users\\arpit\\desktop\\thyroid cancer recurrence prediction\\env\\lib\\site-packages (from ipython>=6.1.0->ipywidgets) (0.4.6)\n", + "Requirement already satisfied: MarkupSafe>=2.0 in c:\\users\\arpit\\desktop\\thyroid cancer recurrence prediction\\env\\lib\\site-packages (from jinja2<3.2,>=2.11.1->ydata-profiling) (2.1.5)\n", + "Requirement already satisfied: contourpy>=1.0.1 in c:\\users\\arpit\\desktop\\thyroid cancer recurrence prediction\\env\\lib\\site-packages (from matplotlib<3.9,>=3.2->ydata-profiling) (1.2.1)\n", + "Requirement already satisfied: cycler>=0.10 in c:\\users\\arpit\\desktop\\thyroid cancer recurrence prediction\\env\\lib\\site-packages (from matplotlib<3.9,>=3.2->ydata-profiling) (0.12.1)\n", + "Requirement already satisfied: fonttools>=4.22.0 in c:\\users\\arpit\\desktop\\thyroid cancer recurrence prediction\\env\\lib\\site-packages (from matplotlib<3.9,>=3.2->ydata-profiling) (4.53.0)\n", + "Requirement already satisfied: kiwisolver>=1.3.1 in c:\\users\\arpit\\desktop\\thyroid cancer recurrence prediction\\env\\lib\\site-packages (from matplotlib<3.9,>=3.2->ydata-profiling) (1.4.5)\n", + "Requirement already satisfied: packaging>=20.0 in c:\\users\\arpit\\desktop\\thyroid cancer recurrence prediction\\env\\lib\\site-packages (from matplotlib<3.9,>=3.2->ydata-profiling) (24.0)\n", + "Requirement already satisfied: pyparsing>=2.3.1 in c:\\users\\arpit\\desktop\\thyroid cancer recurrence prediction\\env\\lib\\site-packages (from matplotlib<3.9,>=3.2->ydata-profiling) (3.1.2)\n", + "Requirement already satisfied: llvmlite<0.43,>=0.42.0dev0 in c:\\users\\arpit\\desktop\\thyroid cancer recurrence prediction\\env\\lib\\site-packages (from numba<1,>=0.56.0->ydata-profiling) (0.42.0)\n", + "Requirement already satisfied: joblib>=0.14.1 in c:\\users\\arpit\\desktop\\thyroid cancer recurrence prediction\\env\\lib\\site-packages (from phik<0.13,>=0.11.1->ydata-profiling) (1.4.2)\n", + "Requirement already satisfied: annotated-types>=0.4.0 in c:\\users\\arpit\\desktop\\thyroid cancer recurrence prediction\\env\\lib\\site-packages (from pydantic>=2->ydata-profiling) (0.7.0)\n", + "Requirement already satisfied: pydantic-core==2.18.4 in c:\\users\\arpit\\desktop\\thyroid cancer recurrence prediction\\env\\lib\\site-packages (from pydantic>=2->ydata-profiling) (2.18.4)\n", + "Requirement already satisfied: six>=1.5 in c:\\users\\arpit\\desktop\\thyroid cancer recurrence prediction\\env\\lib\\site-packages (from python-dateutil>=2.8.2->pandas) (1.16.0)\n", + "Requirement already satisfied: charset-normalizer<4,>=2 in c:\\users\\arpit\\desktop\\thyroid cancer recurrence prediction\\env\\lib\\site-packages (from requests<3,>=2.24.0->ydata-profiling) (3.3.2)\n", + "Requirement already satisfied: idna<4,>=2.5 in c:\\users\\arpit\\desktop\\thyroid cancer recurrence prediction\\env\\lib\\site-packages (from requests<3,>=2.24.0->ydata-profiling) (3.7)\n", + "Requirement already satisfied: urllib3<3,>=1.21.1 in c:\\users\\arpit\\desktop\\thyroid cancer recurrence prediction\\env\\lib\\site-packages (from requests<3,>=2.24.0->ydata-profiling) (2.2.1)\n", + "Requirement already satisfied: certifi>=2017.4.17 in c:\\users\\arpit\\desktop\\thyroid cancer recurrence prediction\\env\\lib\\site-packages (from requests<3,>=2.24.0->ydata-profiling) (2024.6.2)\n", + "Requirement already satisfied: patsy>=0.5.6 in c:\\users\\arpit\\desktop\\thyroid cancer recurrence prediction\\env\\lib\\site-packages (from statsmodels<1,>=0.13.2->ydata-profiling) (0.5.6)\n", + "Requirement already satisfied: attrs>=19.3.0 in c:\\users\\arpit\\desktop\\thyroid cancer recurrence prediction\\env\\lib\\site-packages (from visions<0.7.7,>=0.7.5->visions[type_image_path]<0.7.7,>=0.7.5->ydata-profiling) (23.2.0)\n", + "Requirement already satisfied: networkx>=2.4 in c:\\users\\arpit\\desktop\\thyroid cancer recurrence prediction\\env\\lib\\site-packages (from visions<0.7.7,>=0.7.5->visions[type_image_path]<0.7.7,>=0.7.5->ydata-profiling) (3.3)\n", + "Requirement already satisfied: parso<0.9.0,>=0.8.3 in c:\\users\\arpit\\desktop\\thyroid cancer recurrence prediction\\env\\lib\\site-packages (from jedi>=0.16->ipython>=6.1.0->ipywidgets) (0.8.4)\n", + "Requirement already satisfied: wcwidth in c:\\users\\arpit\\desktop\\thyroid cancer recurrence prediction\\env\\lib\\site-packages (from prompt-toolkit<3.1.0,>=3.0.41->ipython>=6.1.0->ipywidgets) (0.2.13)\n", + "Requirement already satisfied: executing>=1.2.0 in c:\\users\\arpit\\desktop\\thyroid cancer recurrence prediction\\env\\lib\\site-packages (from stack-data->ipython>=6.1.0->ipywidgets) (2.0.1)\n", + "Requirement already satisfied: asttokens>=2.1.0 in c:\\users\\arpit\\desktop\\thyroid cancer recurrence prediction\\env\\lib\\site-packages (from stack-data->ipython>=6.1.0->ipywidgets) (2.4.1)\n", + "Requirement already satisfied: pure-eval in c:\\users\\arpit\\desktop\\thyroid cancer recurrence prediction\\env\\lib\\site-packages (from stack-data->ipython>=6.1.0->ipywidgets) (0.2.2)\n", + "Note: you may need to restart the kernel to use updated packages.\n" + ] + } + ], + "source": [ + "%pip install pandas ydata-profiling ipywidgets seaborn pyqt6 lifelines" + ] + }, + { + "cell_type": "code", + "execution_count": 83, + "metadata": {}, + "outputs": [], + "source": [ + "import pandas as pd\n", + "import seaborn as sns\n", + "from ydata_profiling import ProfileReport\n", + "import matplotlib\n", + "# matplotlib.use('Agg')\n", + "import matplotlib.pyplot as plt" + ] + }, + { + "cell_type": "code", + "execution_count": 84, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
AgeGenderSmokingHx SmokingHx RadiothreapyThyroid FunctionPhysical ExaminationAdenopathyPathologyFocalityRiskTNMStageResponseRecurred
027FNoNoNoEuthyroidSingle nodular goiter-leftNoMicropapillaryUni-FocalLowT1aN0M0IIndeterminateNo
134FNoYesNoEuthyroidMultinodular goiterNoMicropapillaryUni-FocalLowT1aN0M0IExcellentNo
230FNoNoNoEuthyroidSingle nodular goiter-rightNoMicropapillaryUni-FocalLowT1aN0M0IExcellentNo
362FNoNoNoEuthyroidSingle nodular goiter-rightNoMicropapillaryUni-FocalLowT1aN0M0IExcellentNo
462FNoNoNoEuthyroidMultinodular goiterNoMicropapillaryMulti-FocalLowT1aN0M0IExcellentNo
\n", + "
" + ], + "text/plain": [ + " Age Gender Smoking Hx Smoking Hx Radiothreapy Thyroid Function \\\n", + "0 27 F No No No Euthyroid \n", + "1 34 F No Yes No Euthyroid \n", + "2 30 F No No No Euthyroid \n", + "3 62 F No No No Euthyroid \n", + "4 62 F No No No Euthyroid \n", + "\n", + " Physical Examination Adenopathy Pathology Focality Risk \\\n", + "0 Single nodular goiter-left No Micropapillary Uni-Focal Low \n", + "1 Multinodular goiter No Micropapillary Uni-Focal Low \n", + "2 Single nodular goiter-right No Micropapillary Uni-Focal Low \n", + "3 Single nodular goiter-right No Micropapillary Uni-Focal Low \n", + "4 Multinodular goiter No Micropapillary Multi-Focal Low \n", + "\n", + " T N M Stage Response Recurred \n", + "0 T1a N0 M0 I Indeterminate No \n", + "1 T1a N0 M0 I Excellent No \n", + "2 T1a N0 M0 I Excellent No \n", + "3 T1a N0 M0 I Excellent No \n", + "4 T1a N0 M0 I Excellent No " + ] + }, + "execution_count": 84, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df = pd.read_csv('../Dataset/Thyroid_Disease_Data.csv')\n", + "df.head()" + ] + }, + { + "cell_type": "code", + "execution_count": 85, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "Index(['Age', 'Gender', 'Smoking', 'Hx Smoking', 'Hx Radiothreapy',\n", + " 'Thyroid Function', 'Physical Examination', 'Adenopathy', 'Pathology',\n", + " 'Focality', 'Risk', 'T', 'N', 'M', 'Stage', 'Response', 'Recurred'],\n", + " dtype='object')" + ] + }, + "execution_count": 85, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df.columns" + ] + }, + { + "cell_type": "code", + "execution_count": 86, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
Age
count383.000000
mean40.866841
std15.134494
min15.000000
25%29.000000
50%37.000000
75%51.000000
max82.000000
\n", + "
" + ], + "text/plain": [ + " Age\n", + "count 383.000000\n", + "mean 40.866841\n", + "std 15.134494\n", + "min 15.000000\n", + "25% 29.000000\n", + "50% 37.000000\n", + "75% 51.000000\n", + "max 82.000000" + ] + }, + "execution_count": 86, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df.describe()" + ] + }, + { + "cell_type": "code", + "execution_count": 87, + "metadata": {}, + "outputs": [ + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "0d51fb17fe7a4411aac160548e8e1f2d", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "Summarize dataset: 0%| | 0/5 [00:00" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/plain": [] + }, + "execution_count": 87, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "report = ProfileReport(df, title='EDA Report for Thyroid Cancer Recurrence Dataset')\n", + "report.to_file(output_file='Profile_Report.html')\n", + "report" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Age Distribution" + ] + }, + { + "cell_type": "code", + "execution_count": 88, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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0TnnnKPHH3/8pMtK7969T/i+qampR11v1L9/f0k65vVLneXw4cOSpAEDBhx1W1paWuvt3/D19VVUVFS7Y2FhYadUJgHAm3BNEgD0cMuXL1deXp4WLVqkRYsWHXX7woULddFFF53UY7rdbknSz3/+c02ePPmY9znV8eI7duyQzWb71hJz11136fLLL9e7776rjz/+WA8++KDmzZun5cuXa+TIkSf0PH5+fqeU838dbyJeVw5NOJ0TAAHAG1CSAKCHW7hwoaKjozV//vyjbluyZIneeecdPf/88/Lz81NKSopWrFih2tradqtJ+/fvb/dzffr0kST5+Pho0qRJnZ7Z5XJp5cqVGj9+/HFXkr7Rt29f3XPPPbrnnnu0b98+jRgxQk8++aReffVVSccvLR3xzQpa28fcu3evpCPT6qQjKzaSVF5e3m6Ywv+u9pxMtpSUFEnSnj17dMEFF7S7bc+ePa23AwA6B6fbAUAPVldXpyVLluiyyy7TNddcc9TX7bffrqqqqtax3ZMnT1ZTU5P++c9/tj6G2+0+qmBFR0frvPPO09///nfl5eUd9bxFRUUdzlxaWqrrr79eLS0trVPfjqW2tlb19fXtjvXt21dBQUFqaGhoPRYQEKDy8vIO52krNzdX77zzTuv3lZWVeuWVVzRixAjFxsa2ZpCkL774ovV+NTU1evnll496vBPNNmbMGEVHR+v5559v92dbunSpMjIyNGXKlI7+kQAAx8BKEgD0YO+//76qqqp0xRVXHPP2M888s3Vj2enTp+uqq67SGWecoXvuuUf79+9XWlqa3n//fZWWlkpqv/Ixf/58TZw4UUOHDtWPf/xj9enTRwUFBVqzZo2ys7OVnp7+nfn27t2rV199VYZhqLKyUunp6Vq8eLGqq6v11FNP6eKLL/7Wn73wwgt17bXXatCgQbLb7XrnnXdUUFCg6667rvV+o0eP1nPPPac//OEPSk1NVXR09FGrMSeqf//+uuWWW7RhwwbFxMToxRdfVEFBgRYsWNB6n4suukjJycm65ZZb9Itf/EI2m00vvviioqKi5HK52j3eiWbz8fHRY489pptvvlnnnnuurr/++tYR4L169dLdd9/doT8PAOA4TJ6uBwA4jS6//HLD19fXqKmpOe59brrpJsPHx8coLi42DMMwioqKjBtuuMEICgoyQkJCjJtuusn46quv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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "ax = plt.figure(figsize=(10, 6))\n", + "sns.histplot(df['Age'], bins=20, kde=True)\n", + "plt.title('Age Distribution')\n", + "plt.xlabel('Age')\n", + "plt.ylabel('Frequency')\n", + "plt.show()\n", + "\n", + "fig = ax.get_figure()\n", + "fig.savefig('../Images/Age_Distribution.png')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Gender Distribution" + ] + }, + { + "cell_type": "code", + "execution_count": 89, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAA1IAAAIjCAYAAAAJLyrXAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguNCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8fJSN1AAAACXBIWXMAAA9hAAAPYQGoP6dpAAA2EUlEQVR4nO3deZQVhZ334W+ztWzdiOyKLOICxhUd7BgTjCgCOjFijIkLLqPRgDOKmgxxNwvjkug7BjWeJJCZhFdjXjUJiStGnYzEBccFtwgviooNKIEGlEbgvn/kcN90AEMRoBt4nnPuOdyqulW/23hsP9atuhWlUqkUAAAANlizxh4AAABgayOkAAAAChJSAAAABQkpAACAgoQUAABAQUIKAACgICEFAABQkJACAAAoSEgBAAAUJKQA2CJ69+6d008/vbHHWK+KiopcddVVm/04jz76aCoqKvLoo4+Wlw0ePDif+MQnNvuxk+SNN95IRUVFJk2atEWOB7CtElIA25jZs2dnzJgx2WOPPdKmTZu0adMmAwYMyOjRo/PCCy809nhbRO/evVNRUZGKioo0a9YsHTp0yD777JNzzjknTz755CY7zuTJk3PTTTdtsv1tSk15NoBtQUWpVCo19hAAbBpTpkzJF7/4xbRo0SInn3xy9ttvvzRr1iyvvvpq7r777rz55puZPXt2evXqtcVn6927dwYPHrxFzoT07t07O+64Yy666KIkyZIlS/LKK6/krrvuSm1tbS688MJ873vfa/Ca5cuXp0WLFmnRosUGH+eYY47JjBkz8sYbb2zwa1avXp0VK1akVatWadbsz/8/c/DgwXnvvfcyY8aMDd7Pxs5WKpVSX1+fli1bpnnz5pvseADbmw3/bQFAkzZr1qycdNJJ6dWrV6ZOnZru3bs3WH/ttdfmlltuKf/H+9Zs5cqVWb16dVq1arXebXbeeeeccsopDZZde+21+fKXv5wbb7wxu+++e84777zyuh122GGzzZv8OdTWxNPmPtbHqaioaNTjA2wrtv7fpgAkSa677rosW7YsEydOXCuikqRFixb553/+5/Ts2bPB8ldffTUnnHBCOnbsmB122CEHHXRQfvWrXzXYZtKkSamoqMh///d/Z+zYsencuXPatm2bz3/+81mwYEGDbUulUr71rW9ll112SZs2bXL44YfnpZdeWufMixYtygUXXJCePXumsrIy/fr1y7XXXpvVq1eXt1lzTc8NN9yQm266KbvttlsqKyvz8ssvF/4ZtW7dOv/5n/+Zjh075tvf/nb+8kMZf32N1JIlS3LBBRekd+/eqaysTJcuXXLkkUfm2WefTfLns0i/+c1v8uabb5Y/Rti7d+8k//86qDvuuCOXXXZZdt5557Rp0yZ1dXXrvEZqjenTp+eTn/xkWrdunT59+uS2225rsH7N38Nfn2X6631+3Gzru0bqkUceyWGHHZa2bdumQ4cO+dznPpdXXnmlwTZXXXVVKioqMnPmzJx++unp0KFDqqurc8YZZ+SDDz7YsL8EgG2EM1IA24gpU6akX79+GTRo0Aa/5qWXXsqhhx6anXfeOf/6r/+atm3b5uc//3mOO+64/J//83/y+c9/vsH2559/fnbcccdceeWVeeONN3LTTTdlzJgxufPOO8vbXHHFFfnWt76V4cOHZ/jw4Xn22Wdz1FFHZcWKFQ329cEHH+Qzn/lM3nnnnXzlK1/JrrvumieeeCLjxo3Lu+++u9b1PRMnTszy5ctzzjnnpLKyMh07diz+Q0rSrl27fP7zn8+PfvSjvPzyy9l7773Xud25556bX/ziFxkzZkwGDBiQ999/P7///e/zyiuv5MADD8yll16axYsX5+23386NN95Y3vdf+uY3v5lWrVrl4osvTn19/ceeQfvTn/6U4cOH58QTT8yXvvSl/PznP895552XVq1a5cwzzyz0Hjdktr/08MMPZ9iwYenbt2+uuuqqfPjhh7n55ptz6KGH5tlnny1H2Bonnnhi+vTpk/Hjx+fZZ5/ND3/4w3Tp0iXXXnttoTkBtmolALZ6ixcvLiUpHXfccWut+9Of/lRasGBB+fHBBx+U1x1xxBGlffbZp7R8+fLystWrV5c++clPlnbffffysokTJ5aSlIYMGVJavXp1efmFF15Yat68eWnRokWlUqlUmj9/fqlVq1alESNGNNjuG9/4RilJadSoUeVl3/zmN0tt27Yt/fGPf2ww77/+67+WmjdvXpozZ06pVCqVZs+eXUpSqqqqKs2fP3+Dfh69evUqjRgxYr3rb7zxxlKS0i9/+cvysiSlK6+8svy8urq6NHr06I89zogRI0q9evVaa/nvfve7UpJS3759G/y8/3Ld7373u/Kyz3zmM6Ukpe9+97vlZfX19aX999+/1KVLl9KKFStKpdL//3uYPXv239zn+mZb8/OcOHFiedma47z//vvlZc8//3ypWbNmpdNOO6287MorrywlKZ155pkN9vn5z3++tNNOO611LIBtmY/2AWwD6urqkqz7rMPgwYPTuXPn8mPChAlJkoULF+aRRx7JiSeemCVLluS9997Le++9l/fffz9Dhw7N66+/nnfeeafBvs4555xUVFSUnx922GFZtWpV3nzzzSR/PrOxYsWKnH/++Q22u+CCC9aa66677sphhx2WHXfcsXzs9957L0OGDMmqVavy+OOPN9h+5MiR6dy588b9gP7Kmp/TkiVL1rtNhw4d8uSTT2bu3LkbfZxRo0aldevWG7RtixYt8pWvfKX8vFWrVvnKV76S+fPnZ/r06Rs9w9/y7rvv5rnnnsvpp5/e4CzfvvvumyOPPDK//e1v13rNueee2+D5YYcdlvfff7/8zyHA9sBH+wC2Ae3bt0+SLF26dK11P/jBD7JkyZLMmzevwc0XZs6cmVKplMsvvzyXX375Ovc7f/787LzzzuXnu+66a4P1O+64Y5I/fywtSTmodt999wbbde7cubztGq+//npeeOGF9cbR/PnzGzzv06fPOrfbGGt+Tmt+buty3XXXZdSoUenZs2cGDhyY4cOH57TTTkvfvn03+DhFZu7Ro0fatm3bYNkee+yR5M/XNR1yyCEbvK8i1vyd7bnnnmut69+/fx544IEsW7aswWwf989BVVXVZpkToKkRUgDbgOrq6nTv3n2dt89ec83UX9+gYM0NHS6++OIMHTp0nfvt169fg+fru112aSO+SWP16tU58sgj87WvfW2d69dExBobemZnQ6z5Of31+/tLJ554Yg477LDcc889efDBB3P99dfn2muvzd13351hw4Zt0HE25cxJGpzl+0urVq3apMf5WzblPwcAWyshBbCNGDFiRH74wx/mqaeeyj/8wz/8ze3XnFlp2bJlhgwZsklmWPP9VK+//nqDMzcLFiwon7VaY7fddsvSpUs32bE31NKlS3PPPfekZ8+e6d+//8du271793z1q1/NV7/61cyfPz8HHnhgvv3tb5dDan1hszHmzp271pmfP/7xj0lSvtnDmjM/ixYtavDaNWeV/tKGzrbm7+y1115ba92rr76aTp06rXWmDAC3PwfYZnzta19LmzZtcuaZZ2bevHlrrf/rswVdunTJ4MGD84Mf/CDvvvvuWtv/9W3NN8SQIUPSsmXL3HzzzQ2O99d34Ev+fMZn2rRpeeCBB9Zat2jRoqxcubLw8f+WDz/8MKeeemoWLlyYSy+99GPP8CxevLjBsi5duqRHjx6pr68vL2vbtu1a222slStX5gc/+EH5+YoVK/KDH/wgnTt3zsCBA5P8OT6TNLh+bNWqVbn99tvX2t+Gzta9e/fsv//++clPftIg0GbMmJEHH3www4cP39i3BLBNc0YKYBux++67Z/LkyfnSl76UPffcMyeffHL222+/lEqlzJ49O5MnT06zZs2yyy67lF8zYcKEfOpTn8o+++yTs88+O3379s28efMybdq0vP3223n++ecLzdC5c+dcfPHFGT9+fI455pgMHz48//M//5P77rsvnTp1arDtJZdckl/96lc55phjcvrpp2fgwIFZtmxZXnzxxfziF7/IG2+8sdZrinjnnXfy05/+NMmfz0K9/PLLueuuu1JbW5uLLrqowY0d/tqSJUuyyy675IQTTsh+++2Xdu3a5eGHH87TTz+d7373u+XtBg4cmDvvvDNjx47NwQcfnHbt2uXYY4/dqHl79OiRa6+9Nm+88Ub22GOP3HnnnXnuuedy++23p2XLlkmSvffeO4ccckjGjRuXhQsXpmPHjrnjjjvWGZ1FZrv++uszbNiw1NTU5Kyzzirf/ry6urrBd2sB8Bca85aBAGx6M2fOLJ133nmlfv36lXbYYYdS69atS3vttVfp3HPPLT333HNrbT9r1qzSaaedVurWrVupZcuWpZ133rl0zDHHlH7xi1+Ut1lz2+2nn366wWvXddvtVatWla6++upS9+7dS61bty4NHjy4NGPGjFKvXr0a3P68VCqVlixZUho3blypX79+pVatWpU6depU+uQnP1m64YYbyrf8XnO77uuvv36Dfwa9evUqJSklKVVUVJSqqqpKe++9d+nss88uPfnkk+t8Tf7i9uf19fWlSy65pLTffvuV2rdvX2rbtm1pv/32K91yyy0NXrN06dLSl7/85VKHDh1KScq3G1/zc7nrrrvWOs76bn++9957l5555plSTU1NaYcddij16tWr9P3vf3+t18+aNas0ZMiQUmVlZalr166lb3zjG6WHHnporX2ub7Z13f68VCqVHn744dKhhx5aat26damqqqp07LHHll5++eUG26y5/fmCBQsaLF/fbdkBtmUVpZIrQwEAAIpwjRQAAEBBQgoAAKAgIQUAAFCQkAIAAChISAEAABQkpAAAAAryhbxJVq9enblz56Z9+/br/ZZ7AABg21cqlbJkyZL06NEjzZqt/7yTkEoyd+7c9OzZs7HHAAAAmoi33noru+yyy3rXC6kk7du3T/LnH1ZVVVUjTwMAADSWurq69OzZs9wI6yOkkvLH+aqqqoQUAADwNy/5cbMJAACAgoQUAABAQUIKAACgICEFAABQkJACAAAoSEgBAAAUJKQAAAAKElIAAAAFCSkAAICChBQAAEBBQgoAAKAgIQUAAFCQkAIAAChISAEAABQkpAAAAAoSUgAAAAUJKQAAgIKEFAAAQEFCCgAAoKAWjT0AH2/gJf/R2CMAbFLTrz+tsUcAgL+bM1IAAAAFCSkAAICChBQAAEBBQgoAAKAgIQUAAFCQkAIAAChISAEAABQkpAAAAAoSUgAAAAUJKQAAgIKEFAAAQEFCCgAAoKBGDalbb701++67b6qqqlJVVZWamprcd9995fXLly/P6NGjs9NOO6Vdu3YZOXJk5s2b12Afc+bMyYgRI9KmTZt06dIll1xySVauXLml3woAALAdadSQ2mWXXfJv//ZvmT59ep555pl89rOfzec+97m89NJLSZILL7wwv/71r3PXXXflsccey9y5c3P88ceXX79q1aqMGDEiK1asyBNPPJGf/OQnmTRpUq644orGeksAAMB2oKJUKpUae4i/1LFjx1x//fU54YQT0rlz50yePDknnHBCkuTVV19N//79M23atBxyyCG57777cswxx2Tu3Lnp2rVrkuS2227L17/+9SxYsCCtWrXaoGPW1dWluro6ixcvTlVV1WZ7bxtj4CX/0dgjAGxS068/rbFHAID12tA2aDLXSK1atSp33HFHli1blpqamkyfPj0fffRRhgwZUt5mr732yq677ppp06YlSaZNm5Z99tmnHFFJMnTo0NTV1ZXPaq1LfX196urqGjwAAAA2VKOH1Isvvph27dqlsrIy5557bu65554MGDAgtbW1adWqVTp06NBg+65du6a2tjZJUltb2yCi1qxfs259xo8fn+rq6vKjZ8+em/ZNAQAA27RGD6k999wzzz33XJ588smcd955GTVqVF5++eXNesxx48Zl8eLF5cdbb721WY8HAABsW1o09gCtWrVKv379kiQDBw7M008/nf/1v/5XvvjFL2bFihVZtGhRg7NS8+bNS7du3ZIk3bp1y1NPPdVgf2vu6rdmm3WprKxMZWXlJn4nAADA9qLRz0j9tdWrV6e+vj4DBw5My5YtM3Xq1PK61157LXPmzElNTU2SpKamJi+++GLmz59f3uahhx5KVVVVBgwYsMVnBwAAtg+NekZq3LhxGTZsWHbdddcsWbIkkydPzqOPPpoHHngg1dXVOeusszJ27Nh07NgxVVVVOf/881NTU5NDDjkkSXLUUUdlwIABOfXUU3PdddeltrY2l112WUaPHu2MEwAAsNk0akjNnz8/p512Wt59991UV1dn3333zQMPPJAjjzwySXLjjTemWbNmGTlyZOrr6zN06NDccsst5dc3b948U6ZMyXnnnZeampq0bds2o0aNyjXXXNNYbwkAANgONLnvkWoMvkcKYMvxPVIANGVb3fdIAQAAbC2EFAAAQEFCCgAAoCAhBQAAUJCQAgAAKEhIAQAAFCSkAAAAChJSAAAABQkpAACAgoQUAABAQUIKAACgICEFAABQkJACAAAoSEgBAAAUJKQAAAAKElIAAAAFCSkAAICChBQAAEBBQgoAAKAgIQUAAFCQkAIAAChISAEAABQkpAAAAAoSUgAAAAUJKQAAgIKEFAAAQEFCCgAAoCAhBQAAUJCQAgAAKEhIAQAAFCSkAAAAChJSAAAABQkpAACAgoQUAABAQUIKAACgICEFAABQkJACAAAoSEgBAAAUJKQAAAAKElIAAAAFCSkAAICChBQAAEBBQgoAAKAgIQUAAFCQkAIAAChISAEAABQkpAAAAAoSUgAAAAUJKQAAgIKEFAAAQEFCCgAAoCAhBQAAUJCQAgAAKEhIAQAAFCSkAAAAChJSAAAABQkpAACAgoQUAABAQUIKAACgoEYNqfHjx+fggw9O+/bt06VLlxx33HF57bXXGmwzePDgVFRUNHice+65DbaZM2dORowYkTZt2qRLly655JJLsnLlyi35VgAAgO1Ii8Y8+GOPPZbRo0fn4IMPzsqVK/ONb3wjRx11VF5++eW0bdu2vN3ZZ5+da665pvy8TZs25T+vWrUqI0aMSLdu3fLEE0/k3XffzWmnnZaWLVvmO9/5zhZ9PwAAwPahUUPq/vvvb/B80qRJ6dKlS6ZPn55Pf/rT5eVt2rRJt27d1rmPBx98MC+//HIefvjhdO3aNfvvv3+++c1v5utf/3quuuqqtGrVarO+BwAAYPvTpK6RWrx4cZKkY8eODZb/7Gc/S6dOnfKJT3wi48aNywcffFBeN23atOyzzz7p2rVrednQoUNTV1eXl156aZ3Hqa+vT11dXYMHAADAhmrUM1J/afXq1bngggty6KGH5hOf+ER5+Ze//OX06tUrPXr0yAsvvJCvf/3ree2113L33XcnSWpraxtEVJLy89ra2nUea/z48bn66qs30zsBAAC2dU0mpEaPHp0ZM2bk97//fYPl55xzTvnP++yzT7p3754jjjgis2bNym677bZRxxo3blzGjh1bfl5XV5eePXtu3OAAAMB2p0l8tG/MmDGZMmVKfve732WXXXb52G0HDRqUJJk5c2aSpFu3bpk3b16DbdY8X991VZWVlamqqmrwAAAA2FCNGlKlUiljxozJPffck0ceeSR9+vT5m6957rnnkiTdu3dPktTU1OTFF1/M/Pnzy9s89NBDqaqqyoABAzbL3AAAwPatUT/aN3r06EyePDm//OUv0759+/I1TdXV1WndunVmzZqVyZMnZ/jw4dlpp53ywgsv5MILL8ynP/3p7LvvvkmSo446KgMGDMipp56a6667LrW1tbnssssyevToVFZWNubbAwAAtlGNekbq1ltvzeLFizN48OB07969/LjzzjuTJK1atcrDDz+co446KnvttVcuuuiijBw5Mr/+9a/L+2jevHmmTJmS5s2bp6amJqecckpOO+20Bt87BQAAsCk16hmpUqn0set79uyZxx577G/up1evXvntb3+7qcYCAAD4WE3iZhMAAABbEyEFAABQkJACAAAoSEgBAAAUJKQAAAAKElIAAAAFCSkAAICChBQAAEBBQgoAAKAgIQUAAFCQkAIAAChISAEAABQkpAAAAAoSUgAAAAUJKQAAgIKEFAAAQEFCCgAAoCAhBQAAUJCQAgAAKEhIAQAAFCSkAAAAChJSAAAABQkpAACAgoQUAABAQUIKAACgICEFAABQkJACAAAoSEgBAAAUJKQAAAAKElIAAAAFCSkAAICChBQAAEBBQgoAAKAgIQUAAFCQkAIAAChISAEAABQkpAAAAAoSUgAAAAUJKQAAgIKEFAAAQEFCCgAAoCAhBQAAUJCQAgAAKEhIAQAAFCSkAAAAChJSAAAABQkpAACAgoQUAABAQUIKAACgICEFAABQkJACAAAoSEgBAAAUJKQAAAAKElIAAAAFCSkAAICChBQAAEBBQgoAAKAgIQUAAFCQkAIAAChISAEAABTUqCE1fvz4HHzwwWnfvn26dOmS4447Lq+99lqDbZYvX57Ro0dnp512Srt27TJy5MjMmzevwTZz5szJiBEj0qZNm3Tp0iWXXHJJVq5cuSXfCgAAsB1p1JB67LHHMnr06PzhD3/IQw89lI8++ihHHXVUli1bVt7mwgsvzK9//evcddddeeyxxzJ37twcf/zx5fWrVq3KiBEjsmLFijzxxBP5yU9+kkmTJuWKK65ojLcEAABsBypKpVKpsYdYY8GCBenSpUsee+yxfPrTn87ixYvTuXPnTJ48OSeccEKS5NVXX03//v0zbdq0HHLIIbnvvvtyzDHHZO7cuenatWuS5LbbbsvXv/71LFiwIK1atfqbx62rq0t1dXUWL16cqqqqzfoeixp4yX809ggAm9T0609r7BEAYL02tA2a1DVSixcvTpJ07NgxSTJ9+vR89NFHGTJkSHmbvfbaK7vuumumTZuWJJk2bVr22WefckQlydChQ1NXV5eXXnppncepr69PXV1dgwcAAMCGajIhtXr16lxwwQU59NBD84lPfCJJUltbm1atWqVDhw4Ntu3atWtqa2vL2/xlRK1Zv2bduowfPz7V1dXlR8+ePTfxuwEAALZlTSakRo8enRkzZuSOO+7Y7McaN25cFi9eXH689dZbm/2YAADAtqNFYw+QJGPGjMmUKVPy+OOPZ5dddikv79atW1asWJFFixY1OCs1b968dOvWrbzNU0891WB/a+7qt2abv1ZZWZnKyspN/C4AAIDtRaOekSqVShkzZkzuueeePPLII+nTp0+D9QMHDkzLli0zderU8rLXXnstc+bMSU1NTZKkpqYmL774YubPn1/e5qGHHkpVVVUGDBiwZd4IAACwXWnUM1KjR4/O5MmT88tf/jLt27cvX9NUXV2d1q1bp7q6OmeddVbGjh2bjh07pqqqKueff35qampyyCGHJEmOOuqoDBgwIKeeemquu+661NbW5rLLLsvo0aOddQIAADaLRg2pW2+9NUkyePDgBssnTpyY008/PUly4403plmzZhk5cmTq6+szdOjQ3HLLLeVtmzdvnilTpuS8885LTU1N2rZtm1GjRuWaa67ZUm8DAADYzjSp75FqLL5HCmDL8T1SADRlW+X3SAEAAGwNhBQAAEBBQgoAAKAgIQUAAFCQkAIAAChISAEAABQkpAAAAAoSUgAAAAUJKQAAgIKEFAAAQEFCCgAAoCAhBQAAUJCQAgAAKEhIAQAAFCSkAAAAChJSAAAABQkpAACAgoQUAABAQUIKAACgICEFAABQkJACAAAoSEgBAAAUJKQAAAAKElIAAAAFCSkAAICChBQAAEBBGxVSffv2zfvvv7/W8kWLFqVv375/91AAAABN2UaF1BtvvJFVq1attby+vj7vvPPO3z0UAABAU9aiyMa/+tWvyn9+4IEHUl1dXX6+atWqTJ06Nb17995kwwEAADRFhULquOOOS5JUVFRk1KhRDda1bNkyvXv3zne/+91NNhwAAEBTVCikVq9enSTp06dPnn766XTq1GmzDAUAANCUFQqpNWbPnr2p5wAAANhqbFRIJcnUqVMzderUzJ8/v3ymao0f//jHf/dgAAAATdVGhdTVV1+da665JgcddFC6d++eioqKTT0XAABAk7VRIXXbbbdl0qRJOfXUUzf1PAAAAE3eRn2P1IoVK/LJT35yU88CAACwVdiokPqnf/qnTJ48eVPPAgAAsFXYqI/2LV++PLfffnsefvjh7LvvvmnZsmWD9d/73vc2yXAAAABN0UaF1AsvvJD9998/STJjxowG69x4AgAA2NZtVEj97ne/29RzAAAAbDU26hopAACA7dlGnZE6/PDDP/YjfI888shGDwQAANDUbVRIrbk+ao2PPvoozz33XGbMmJFRo0ZtirkAAACarI0KqRtvvHGdy6+66qosXbr07xoIAACgqduk10idcsop+fGPf7wpdwkAANDkbNKQmjZtWnbYYYdNuUsAAIAmZ6M+2nf88cc3eF4qlfLuu+/mmWeeyeWXX75JBgMAAGiqNiqkqqurGzxv1qxZ9txzz1xzzTU56qijNslgAAAATdVGhdTEiRM39RwAAABbjY0KqTWmT5+eV155JUmy995754ADDtgkQwEAADRlGxVS8+fPz0knnZRHH300HTp0SJIsWrQohx9+eO6444507tx5U84IAADQpGzUXfvOP//8LFmyJC+99FIWLlyYhQsXZsaMGamrq8s///M/b+oZAQAAmpSNOiN1//335+GHH07//v3LywYMGJAJEya42QQAALDN26gzUqtXr07Lli3XWt6yZcusXr367x4KAACgKduokPrsZz+bf/mXf8ncuXPLy955551ceOGFOeKIIzbZcAAAAE3RRoXU97///dTV1aV3797Zbbfdsttuu6VPnz6pq6vLzTffvKlnBAAAaFI26hqpnj175tlnn83DDz+cV199NUnSv3//DBkyZJMOBwAA0BQVOiP1yCOPZMCAAamrq0tFRUWOPPLInH/++Tn//PNz8MEHZ++9985//dd/ba5ZAQAAmoRCIXXTTTfl7LPPTlVV1Vrrqqur85WvfCXf+973NtlwAAAATVGhkHr++edz9NFHr3f9UUcdlenTp2/w/h5//PEce+yx6dGjRyoqKnLvvfc2WH/66aenoqKiweOvj79w4cKcfPLJqaqqSocOHXLWWWdl6dKlRd4WAABAIYVCat68eeu87fkaLVq0yIIFCzZ4f8uWLct+++2XCRMmrHebo48+Ou+++2758b//9/9usP7kk0/OSy+9lIceeihTpkzJ448/nnPOOWeDZwAAACiq0M0mdt5558yYMSP9+vVb5/oXXngh3bt33+D9DRs2LMOGDfvYbSorK9OtW7d1rnvllVdy//335+mnn85BBx2UJLn55pszfPjw3HDDDenRo8cGzwIAALChCp2RGj58eC6//PIsX758rXUffvhhrrzyyhxzzDGbbLgkefTRR9OlS5fsueeeOe+88/L++++X102bNi0dOnQoR1SSDBkyJM2aNcuTTz653n3W19enrq6uwQMAAGBDFTojddlll+Xuu+/OHnvskTFjxmTPPfdMkrz66quZMGFCVq1alUsvvXSTDXf00Ufn+OOPT58+fTJr1qx84xvfyLBhwzJt2rQ0b948tbW16dKlS8M31KJFOnbsmNra2vXud/z48bn66qs32ZwAAMD2pVBIde3aNU888UTOO++8jBs3LqVSKUlSUVGRoUOHZsKECenatesmG+6kk04q/3mfffbJvvvum9122y2PPvpojjjiiI3e77hx4zJ27Njy87q6uvTs2fPvmhUAANh+FP5C3l69euW3v/1t/vSnP2XmzJkplUrZfffds+OOO26O+Rro27dvOnXqlJkzZ+aII45It27dMn/+/AbbrFy5MgsXLlzvdVXJn6+7qqys3NzjAgAA26jCIbXGjjvumIMPPnhTzvI3vf3223n//ffLN7SoqanJokWLMn369AwcODDJn780ePXq1Rk0aNAWnQ0AANh+bHRIbQpLly7NzJkzy89nz56d5557Lh07dkzHjh1z9dVXZ+TIkenWrVtmzZqVr33ta+nXr1+GDh2aJOnfv3+OPvronH322bntttvy0UcfZcyYMTnppJPcsQ8AANhsCt21b1N75plncsABB+SAAw5IkowdOzYHHHBArrjiijRv3jwvvPBC/vEf/zF77LFHzjrrrAwcODD/9V//1eBjeT/72c+y11575Ygjjsjw4cPzqU99KrfffntjvSUAAGA70KhnpAYPHly+YcW6PPDAA39zHx07dszkyZM35VgAAAAfq1HPSAEAAGyNhBQAAEBBQgoAAKAgIQUAAFCQkAIAAChISAEAABQkpAAAAAoSUgAAAAUJKQAAgIKEFAAAQEFCCgAAoCAhBQAAUJCQAgAAKEhIAQAAFCSkAAAAChJSAAAABQkpAACAgoQUAABAQUIKAACgICEFAABQkJACAAAoSEgBAAAUJKQAAAAKElIAAAAFCSkAAICChBQAAEBBQgoAAKAgIQUAAFCQkAIAAChISAEAABQkpAAAAAoSUgAAAAUJKQAAgIKEFAAAQEFCCgAAoCAhBQAAUJCQAgAAKEhIAQAAFCSkAAAAChJSAAAABQkpAACAgoQUAABAQUIKAACgICEFAABQkJACAAAoSEgBAAAUJKQAAAAKElIAAAAFCSkAAICChBQAAEBBQgoAAKAgIQUAAFCQkAIAAChISAEAABQkpAAAAAoSUgAAAAUJKQAAgIKEFAAAQEFCCgAAoCAhBQAAUFCjhtTjjz+eY489Nj169EhFRUXuvffeButLpVKuuOKKdO/ePa1bt86QIUPy+uuvN9hm4cKFOfnkk1NVVZUOHTrkrLPOytKlS7fguwAAALY3jRpSy5Yty3777ZcJEyasc/11112Xf//3f89tt92WJ598Mm3bts3QoUOzfPny8jYnn3xyXnrppTz00EOZMmVKHn/88Zxzzjlb6i0AAADboRaNefBhw4Zl2LBh61xXKpVy00035bLLLsvnPve5JMl//Md/pGvXrrn33ntz0kkn5ZVXXsn999+fp59+OgcddFCS5Oabb87w4cNzww03pEePHlvsvQAAANuPJnuN1OzZs1NbW5shQ4aUl1VXV2fQoEGZNm1akmTatGnp0KFDOaKSZMiQIWnWrFmefPLJ9e67vr4+dXV1DR4AAAAbqsmGVG1tbZKka9euDZZ37dq1vK62tjZdunRpsL5Fixbp2LFjeZt1GT9+fKqrq8uPnj17buLpAQCAbVmTDanNady4cVm8eHH58dZbbzX2SAAAwFakyYZUt27dkiTz5s1rsHzevHnldd26dcv8+fMbrF+5cmUWLlxY3mZdKisrU1VV1eABAACwoZpsSPXp0yfdunXL1KlTy8vq6ury5JNPpqamJklSU1OTRYsWZfr06eVtHnnkkaxevTqDBg3a4jMDAADbh0a9a9/SpUszc+bM8vPZs2fnueeeS8eOHbPrrrvmggsuyLe+9a3svvvu6dOnTy6//PL06NEjxx13XJKkf//+Ofroo3P22Wfntttuy0cffZQxY8bkpJNOcsc+AABgs2nUkHrmmWdy+OGHl5+PHTs2STJq1KhMmjQpX/va17Js2bKcc845WbRoUT71qU/l/vvvzw477FB+zc9+9rOMGTMmRxxxRJo1a5aRI0fm3//937f4ewEAALYfFaVSqdTYQzS2urq6VFdXZ/HixU3ueqmBl/xHY48AsElNv/60xh4BANZrQ9ugyV4jBQAA0FQJKQAAgIKEFAAAQEFCCgAAoCAhBQAAUJCQAgAAKEhIAQAAFCSkAAAAChJSAAAABQkpAACAgoQUAABAQUIKAACgICEFAABQkJACAAAoSEgBAAAUJKQAAAAKElIAAAAFCSkAAICChBQAAEBBQgoAAKAgIQUAAFCQkAIAAChISAEAABQkpAAAAAoSUgAAAAUJKQAAgIKEFAAAQEFCCgAAoCAhBQAAUJCQAgAAKEhIAQAAFCSkAAAAChJSAAAABQkpAACAglo09gAAwN828JL/aOwRADap6def1tgj/F2ckQIAAChISAEAABQkpAAAAAoSUgAAAAUJKQAAgIKEFAAAQEFCCgAAoCAhBQAAUJCQAgAAKEhIAQAAFCSkAAAAChJSAAAABQkpAACAgoQUAABAQUIKAACgICEFAABQkJACAAAoSEgBAAAUJKQAAAAKElIAAAAFCSkAAICChBQAAEBBQgoAAKAgIQUAAFBQkw6pq666KhUVFQ0ee+21V3n98uXLM3r06Oy0005p165dRo4cmXnz5jXixAAAwPagSYdUkuy999559913y4/f//735XUXXnhh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wFajolQqlRp7CAAAgK2J258DAAAUJKQAAAAKElIAAAAFCSkAAICChBQAAEBBQgoAAKAgIQUAAFCQkAIAAChISAHABho8eHAuuOCCxh4DgCZASAGwVamtrc2//Mu/pF+/ftlhhx3StWvXHHroobn11lvzwQcfNPZ4AGwnWjT2AACwof7v//2/OfTQQ9OhQ4d85zvfyT777JPKysq8+OKLuf3227PzzjvnH//xHxt7zPVatWpVKioq0qyZ/48JsLXzb3IAthpf/epX06JFizzzzDM58cQT079///Tt2zef+9zn8pvf/CbHHntskmTRokX5p3/6p3Tu3DlVVVX57Gc/m+eff768n6uuuir7779//vM//zO9e/dOdXV1TjrppCxZsqS8zbJly3LaaaelXbt26d69e7773e+uNU99fX0uvvji7Lzzzmnbtm0GDRqURx99tLx+0qRJ6dChQ371q19lwIABqayszJw5czbfDwiALUZIAbBVeP/99/Pggw9m9OjRadu27Tq3qaioSJJ84QtfyPz583Pfffdl+vTpOfDAA3PEEUdk4cKF5W1nzZqVe++9N1OmTMmUKVPy2GOP5d/+7d/K6y+55JI89thj+eUvf5kHH3wwjz76aJ599tkGxxszZkymTZuWO+64Iy+88EK+8IUv5Oijj87rr79e3uaDDz7Itddemx/+8Id56aWX0qVLl035YwGgkfhoHwBbhZkzZ6ZUKmXPPfdssLxTp05Zvnx5kmT06NE59thj89RTT2X+/PmprKxMktxwww25995784tf/CLnnHNOkmT16tWZNGlS2rdvnyQ59dRTM3Xq1Hz729/O0qVL86Mf/Sg//elPc8QRRyRJfvKTn2SXXXYpH3fOnDmZOHFi5syZkx49eiRJLr744tx///2ZOHFivvOd7yRJPvroo9xyyy3Zb7/9NuNPB4AtTUgBsFV76qmnsnr16px88smpr6/P888/n6VLl2annXZqsN2HH36YWbNmlZ/37t27HFFJ0r1798yfPz/Jn89WrVixIoMGDSqv79ixY4OIe/HFF7Nq1arsscceDY5TX1/f4NitWrXKvvvuu2neLABNhpACYKvQr1+/VFRU5LXXXmuwvG/fvkmS1q1bJ0mWLl2a7t27N7hWaY0OHTqU/9yyZcsG6yoqKrJ69eoNnmfp0qVp3rx5pk+fnubNmzdY165du/KfW7duXf7IIQDbDiEFwFZhp512ypFHHpnvf//7Of/889d7ndSBBx6Y2tratGjRIr17996oY+22225p2bJlnnzyyey6665Jkj/96U/54x//mM985jNJkgMOOCCrVq3K/Pnzc9hhh23UcQDYernZBABbjVtuuSUrV67MQQcdlDvvvDOvvPJKXnvttfz0pz/Nq6++mubNm2fIkCGpqanJcccdlwcffDBvvPFGnnjiiVx66aV55plnNug47dq1y1lnnZVLLrkkjzzySGbMmJHTTz+9wW3L99hjj5x88sk57bTTcvfdd2f27Nl56qmnMn78+PzmN7/ZXD8CAJoIZ6QA2Grstttu+Z//+Z985zvfybhx4/L222+nsrIyAwYMyMUXX5yvfvWrqaioyG9/+9tceumlOeOMM7JgwYJ069Ytn/70p9O1a9cNPtb111+fpUuX5thjj0379u1z0UUXZfHixQ22mThxYr71rW/loosuyjvvvJNOnTrlkEMOyTHHHLOp3zoATUxFqVQqNfYQAAAAWxMf7QMAAChISAEAABQkpAAAAAoSUgAAAAUJKQAAgIKEFAAAQEFCCgAAoCAhBQAAUJCQAgAAKEhIAQAAFCSkAAAACvp/FUrnJwewCqIAAAAASUVORK5CYII=", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "plt.figure(figsize=(10, 6))\n", + "ax = sns.countplot(x='Gender', data=df)\n", + "plt.title('Gender Distribution')\n", + "plt.xlabel('Gender')\n", + "plt.ylabel('Count')\n", + "plt.show()\n", + "\n", + "fig = ax.get_figure()\n", + "fig.savefig('../Images/Gender_Distribution.png')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Age Distribution by Smoking Status" + ] + }, + { + "cell_type": "code", + "execution_count": 90, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAA0kAAAIjCAYAAADWYVDIAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguNCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8fJSN1AAAACXBIWXMAAA9hAAAPYQGoP6dpAABGtklEQVR4nO3de3zP9eP///trm+01Zhuyg2xzyGxO70bF8HaclpBTRN7O3yhSoZO3qNRyKKnknDcqhxL2RiEpU06hEHnPIYzYHLc5bbQ9f3/08/o8X7axYXvO3K6Xy/OSPZ7P1+N1f73sld33fD0fL5thGIYAAAAAAJIkF6sDAAAAAEBhQkkCAAAAABNKEgAAAACYUJIAAAAAwISSBAAAAAAmlCQAAAAAMKEkAQAAAIAJJQkAAAAATChJAAAAAGBCSQKAAnLo0CHZbDbNnj073+9r9uzZstlsOnTokGOsQoUKat26db7ftyStXbtWNptNa9euLZD7MyvIx1mYXP0737p163WPe+ONN2Sz2QooFQDcmShJAO4okydPls1mU926da2OIpvN5tjc3NxUunRp1alTR88//7x+//3323Y/kydPLpBidTMKc7b8dvLkST3//PMKCwuTp6en/Pz89NBDD+mVV17R+fPnrY5XaC1btkyNGzeWn5+fihcvrkqVKqlz585auXKl45hjx47pjTfe0Pbt22/6fr755hu98cYbtx4YwF3JZhiGYXUIAMitBg0a6NixYzp06JD27dun++67z7IsNptNLVq0UI8ePWQYhlJSUrRjxw4tXLhQFy5c0NixYzVkyBDH8YZhKD09XcWKFZOrq2uu76dGjRq655578nRWJiMjQ1euXJGHh4fjrEGFChVUo0YNLV++PNfz3Gy2zMxMXb58We7u7nJxKdjfx+XH47zWmTNnFBERodTUVPXp00dhYWE6ffq0du7cqeXLl2vnzp2qUKFCvt1/dmbPnq3evXtry5YteuCBB3I87q+//tJff/0lu91egOn+9t577+mll15S48aN1bZtWxUvXlz79+/Xd999p3/84x+Owr1161Y9+OCDmjVrlnr16nVT9/Xss89q0qRJ4sccADfDzeoAAJBbBw8e1IYNG7R48WL1799fc+fO1euvv25pptDQUP3rX/9yGhszZozatGmjoUOHKiwsTI8++qikv0tVfv9geuHCBZUo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Us2bN1fr1q21atUq+fr66tChQ1q6dKkuXLiQ7/cPALAWZ5IAAE6Sk5P1448/auzYsWratKlCQkL00EMPadiwYXrsscccx9lsNk2bNk2tW7dW8eLFFR4ero0bN2r//v1q0qSJSpQoofr16+vAgQNO80+ZMkWVK1eWu7u7qlatqs8+++y6eV5//XUFBgZq586dkrK+3c5ms+mTTz5R+/btVbx4cVWpUkVLly51mmPp0qWqUqWK7Ha7mjZtqjlz5lz3LND69euVkpKiTz75RBEREapYsaKaNm2qCRMmqGLFijp06JCaNm0qSSpVqpRsNpt69eolSVq5cqUaNmwoX19flSlTRq1bt3Z6DipWrChJioiIkM1mU5MmTSRJTZo00QsvvOCUo127do55JWny5MmOx+Hv76/HH3/8us8dAODmUJIAAE68vLzk5eWl2NhYpaenX/fYt956Sz169ND27dsVFhamJ598Uv3799ewYcO0detWGYahZ5991nH8kiVL9Pzzz2vo0KHatWuX+vfvr969e+uHH37IMrdhGBo0aJA+/fRT/fjjj6pVq1aOOd5880117txZO3fu1KOPPqpu3brpzJkzkqSDBw/q8ccfV7t27bRjxw71799fw4cPv+7jCggI0F9//aUlS5bIMIws+4OCgrRo0SJJUnx8vI4fP64PP/xQknThwgUNGTJEW7du1Zo1a+Ti4qL27dsrMzNTkvTzzz9Lkr777jsdP35cixcvvm6Wq7Zu3arnnntOo0aNUnx8vFauXKlGjRrl6rYAgDwyAAC4xldffWWUKlXKsNvtRv369Y1hw4YZO3bscDpGkvHaa685vt64caMhyZg5c6ZjbP78+Ybdbnd8Xb9+feOpp55ymqdTp07Go48+6jTvwoULjSeffNIIDw83jh496nR8SEiIMWHChBxznD9/3pBkrFixwjAMw3jllVeMGjVqOM0xfPhwQ5Jx9uzZHJ+Df//734abm5tRunRp45FHHjHGjRtnJCYmOvb/8MMPN5zDMAzj5MmThiTjt99+MwzDMA4ePGhIMn799Ven4xo3bmw8//zzTmNt27Y1evbsaRiGYSxatMjw9vY2UlNTr3t/AIBbx5kkAEAWHTt21LFjx7R06VI98sgjWrt2rWrXrq3Zs2c7HWc+u+Pv7y9JqlmzptNYWlqaUlNTJUl79uxRgwYNnOZo0KCB9uzZ4zQ2ePBgbd68WevWrdO99957w7zmHCVKlJC3t7djgYX4+Hg9+OCDTsc/9NBDN5wzJiZGiYmJmjp1qqpXr66pU6cqLCxMv/3223Vvt2/fPnXt2lWVKlWSt7e3KlSoIElKSEi44X1eT4sWLRQSEqJKlSqpe/fumjt3ri5evHhLcwIAskdJAgBky263q0WLFhoxYoQ2bNigXr166fXXX3c6plixYo4/22y2HMeuvtUst1q0aKE///xTq1atytXx5vu8er95vc/slClTRp06ddJ7772nPXv2qFy5cnrvvfeue5s2bdrozJkzmjFjhjZv3qzNmzdLki5fvnzd27m4uGR5a9+VK1ccfy5ZsqR++eUXzZ8/X4GBgRo5cqT+8Y9/5Hl1PQDAjVGSAAC5Uq1atVte2S08PDzLMuLr169XtWrVnMYee+wxzZs3T//v//0/LViw4Jbus2rVqtq6davT2JYtW/I8j7u7uypXrux4Dtzd3SVJGRkZjmNOnz6t+Ph4vfbaa2revLnCw8N19uzZLPNcezvp71X7jh8/7vg6IyNDu3btcjrGzc1NUVFRGjdunHbu3KlDhw7p+++/z/NjAQBcH0uAAwCcnD59Wp06dVKfPn1Uq1YtlSxZUlu3btW4cePUtm3bW5r7pZdeUufOnRUREaGoqCgtW7ZMixcv1nfffZfl2Pbt2+uzzz5T9+7d5ebmdtMrufXv31/vv/++XnnlFfXt21fbt293vG3w6pmuay1fvlwLFixQly5dFBoaKsMwtGzZMn3zzTeaNWuWJCkkJEQ2m03Lly/Xo48+Kk9PT5UqVUplypTR9OnTFRgYqISEBL366qtOc/v5+cnT01MrV65U+fLlZbfb5ePjo2bNmmnIkCH6+uuvVblyZb3//vtOZ4mWL1+uP/74Q40aNVKpUqX0zTffKDMzU1WrVr2p5wUAkDPOJAEAnHh5ealu3bqaMGGCGjVqpBo1amjEiBF66qmn9PHHH9/S3O3atdOHH36o9957T9WrV9e0adM0a9YsxzLY13r88cc1Z84cde/ePderwF2rYsWK+uqrr7R48WLVqlVLU6ZMcaxu5+Hhke1tqlWrpuLFi2vo0KG6//77Va9ePX355Zf65JNP1L17d0nSvffeqzfffFOvvvqq/P399eyzz8rFxUULFizQtm3bVKNGDQ0ePFjvvvuu09xubm766KOPNG3aNJUrV85RPPv06aOePXuqR48eaty4sSpVquRYZlySfH19tXjxYjVr1kzh4eGaOnWq5s+fr+rVq9/U8wIAyJnNuPYN0AAAFHExMTGaOnWqjhw5YnUUAEAhxNvtAABF3uTJk/Xggw+qTJkyWr9+vd59912nz28CAMCMkgQAKPL27dunt99+W2fOnFFwcLCGDh2qYcOGWR0LAFBI8XY7AAAAADBh4QYAAAAAMKEkAQAAAIAJJQkAAAAATChJAAAAAGBCSQIAAAAAE0oSAAAAAJhQkgAAAADAhJIEAAAAACb/H6na1zBJrac7AAAAAElFTkSuQmCC", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "plt.figure(figsize=(10, 6))\n", + "ax = sns.boxplot(x='Smoking', y='Age', data=df)\n", + "plt.title('Age Distribution by Smoking Status')\n", + "plt.xlabel('Smoking Status')\n", + "plt.ylabel('Age')\n", + "plt.savefig('../Images/Age_Distribution_by_Smoking_Status.png')\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Correlation Matrix" + ] + }, + { + "cell_type": "code", + "execution_count": 91, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAhUAAAGzCAYAAACYSeUQAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguNCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8fJSN1AAAACXBIWXMAAA9hAAAPYQGoP6dpAAA84ElEQVR4nO3de1xVZd7///fGYoMikCcO5gGx1FKhTJHM00Qx6HhnUpmOjxAP5fzIRqnbYiQxq2FuO6h3alqZmEajTkZjlqbg4XYiLY3McXQUSSYUUmeURMHDXr8/+rqnvcBkrxaB4+v5eKzHtK917Wtfa88ffPx8ruvaDsMwDAEAAPxEPvU9AQAA8J+BoAIAANiCoAIAANiCoAIAANiCoAIAANiCoAIAANiCoAIAANiCoAIAANiCoAIAANiCoALwQlZWlhwOh77++mvbxvz666/lcDiUlZVl25hXugEDBmjAgAH1PQ0AXiKoQL0rLCzUI488og4dOsjPz0+BgYHq06eP5syZozNnztT39GyTnZ2t2bNn1/c0PIwePVoOh0OBgYE1ftf79++Xw+GQw+HQiy++6PX4hw8f1vTp01VQUGDDbAE0dNfU9wRwdVuzZo3uv/9+OZ1OPfTQQ+ratavOnj2rrVu36r//+7/117/+Va+99lp9T9MW2dnZ2r17tyZNmuTR3q5dO505c0bXXnttvczrmmuu0enTp7V69Wo98MADHvfefvtt+fn5qbKy0tLYhw8f1jPPPKP27dsrOjq61u/7+OOPLX0egPpFUIF6U1RUpAcffFDt2rVTXl6ewsLC3PdSUlJ04MABrVmz5id/jmEYqqyslL+/f7V7lZWV8vX1lY9P/SXtHA6H/Pz86u3znU6n+vTpo3feeadaUJGdna3Bgwfr3Xff/Vnmcvr0aTVu3Fi+vr4/y+cBsBflD9SbmTNn6tSpU1q0aJFHQHFRx44d9dvf/tb9+vz583r22WcVGRkpp9Op9u3b63e/+52qqqo83te+fXv96le/0rp163TbbbfJ399fCxcu1KZNm+RwOPTHP/5R6enpat26tRo3bqzy8nJJ0rZt2/TLX/5SQUFBaty4sfr376+//OUvl32O999/X4MHD1Z4eLicTqciIyP17LPP6sKFC+4+AwYM0Jo1a3To0CF3OaF9+/aSLr2mIi8vT3379lWTJk0UHByse+65R3/72988+kyfPl0Oh0MHDhzQ6NGjFRwcrKCgICUnJ+v06dOXnftFI0eO1EcffaQTJ0642z777DPt379fI0eOrNb/n//8p5544gl169ZNAQEBCgwMVEJCgr788kt3n02bNqlnz56SpOTkZPdzX3zOAQMGqGvXrtqxY4f69eunxo0b63e/+5373g/XVCQlJcnPz6/a88fHx+u6667T4cOHa/2sAOoOmQrUm9WrV6tDhw66/fbba9V/3LhxWrJkie677z49/vjj2rZtmzIzM/W3v/1N7733nkffffv2acSIEXrkkUc0fvx4derUyX3v2Wefla+vr5544glVVVXJ19dXeXl5SkhIUI8ePZSRkSEfHx8tXrxYv/jFL/R///d/6tWr1yXnlZWVpYCAAKWmpiogIEB5eXmaNm2aysvL9cILL0iSpk6dqpMnT+qbb77RrFmzJEkBAQGXHHPDhg1KSEhQhw4dNH36dJ05c0avvPKK+vTpo507d7oDkoseeOABRUREKDMzUzt37tQbb7yhVq1a6X/+539q9d0OGzZMEyZM0KpVqzRmzBhJ32cpOnfurFtvvbVa/4MHDyonJ0f333+/IiIiVFZWpoULF6p///7as2ePwsPD1aVLF82YMUPTpk3Tww8/rL59+0qSx//fx48fV0JCgh588EGNGjVKISEhNc5vzpw5ysvLU1JSkvLz89WoUSMtXLhQH3/8sZYuXarw8PBaPSeAOmYA9eDkyZOGJOOee+6pVf+CggJDkjFu3DiP9ieeeMKQZOTl5bnb2rVrZ0gy1q5d69F348aNhiSjQ4cOxunTp93tLpfLuOGGG4z4+HjD5XK520+fPm1EREQYd911l7tt8eLFhiSjqKjIo5/ZI488YjRu3NiorKx0tw0ePNho165dtb5FRUWGJGPx4sXutujoaKNVq1bG8ePH3W1ffvml4ePjYzz00EPutoyMDEOSMWbMGI8x7733XqN58+bVPsssKSnJaNKkiWEYhnHfffcZd955p2EYhnHhwgUjNDTUeOaZZ9zze+GFF9zvq6ysNC5cuFDtOZxOpzFjxgx322effVbt2S7q37+/IclYsGBBjff69+/v0bZu3TpDkvHcc88ZBw8eNAICAoyhQ4de9hkB/Hwof6BeXCw5NG3atFb9P/zwQ0lSamqqR/vjjz8uSdXWXkRERCg+Pr7GsZKSkjzWVxQU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lD+sIagAAMCE3R/WEFQAAGBisKbCEtZUAAAAW5CpAADAxMWaCksIKgAAMGFNhTWUPwAAaEDmzZun9u3by8/PTzExMdq+ffsl+547d04zZsxQZGSk/Pz8FBUVpbVr13r0ad++vRwOR7UrJSXF3WfAgAHV7k+YMMHruZOpAADApL4Wai5fvlypqalasGCBYmJiNHv2bMXHx2vfvn1q1apVtf7p6elatmyZXn/9dXXu3Fnr1q3Tvffeq08++US33HKLJOmzzz7ThQsX3O/ZvXu37rrrLt1///0eY40fP14zZsxwv27cuLHX83cYRsNY41p48GB9TwEAcIWI7NChTsf/+Muzto11d5RvrfvGxMSoZ8+emjt3riTJ5XKpTZs2mjhxop566qlq/cPDwzV16lSPrENiYqL8/f21bNmyGj9j0qRJ+uCDD7R//345HN+XeQYMGKDo6GjNnj3biyerjvIHAAB1qKqqSuXl5R5XVVVVtX5nz57Vjh07FBcX527z8fFRXFyc8vPzLzm2n5+fR5u/v7+2bt1aY/+zZ89q2bJlGjNmjDuguOjtt99WixYt1LVrV6Wlpen06dPePipBBQAAZi7DviszM1NBQUEeV2ZmZrXPPHbsmC5cuKCQkBCP9pCQEJWWltY4z/j4eL388svav3+/XC6X1q9fr1WrVunIkSM19s/JydGJEyc0evRoj/aRI0dq2bJl2rhxo9LS0rR06VKNGjXK6++NNRUAAJjYufsjLS1NqampHm1Op9OWsefMmaPx48erc+fOcjgcioyMVHJyst58880a+y9atEgJCQkKDw/3aH/44Yfd/92tWzeFhYXpzjvvVGFhoSIjI2s9HzIVAADUIafTqcDAQI+rpqCiRYsWatSokcrKyjzay8rKFBoaWuPYLVu2VE5OjioqKnTo0CHt3btXAQEB6lDDmpNDhw5pw4YNGjdu3GXnHBMTI0k6cOBAbR7RjaACAAATw7Dvqi1fX1/16NFDubm57jaXy6Xc3FzFxsb+6Hv9/PzUunVrnT9/Xu+++67uueeean0WL16sVq1aafDgwZedS0FBgSQpLCys9g8gyh8AAFRTXydqpqamKikpSbfddpt69eql2bNnq6KiQsnJyZKkhx56SK1bt3avydi2bZtKSkoUHR2tkpISTZ8+XS6XS1OmTPEY1+VyafHixUpKStI113j+6S8s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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "corr_matrix = df.corr(numeric_only=True)\n", + "ax = sns.heatmap(corr_matrix, annot=True, cmap='coolwarm')\n", + "plt.title('Correlation Matrix')\n", + "plt.show()\n", + "\n", + "fig = ax.get_figure()\n", + "fig.savefig('../Images/Correlation_Matrix.png')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Adenopathy Distribution" + ] + }, + { + "cell_type": "code", + "execution_count": 92, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "ax = df['Adenopathy'].value_counts().plot.pie(autopct='%1.1f%%', startangle=90)\n", + "plt.title('Adenopathy Distribution')\n", + "plt.ylabel('') # To remove the y-axis label\n", + "plt.show()\n", + "\n", + "fig = ax.get_figure()\n", + "fig.savefig('../Images/Adenopathy_Distribution.png')" + ] + }, + { + "cell_type": "code", + "execution_count": 93, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "fig = sns.pairplot(df[['Age', 'T', 'N', 'M', 'Thyroid Function']])\n", + "plt.show()\n", + "fig.savefig('../Images/Thyroid_Cancer_Recurrence_Dataset_EDA.png')" + ] + }, + { + "cell_type": "code", + "execution_count": 94, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "C:\\Users\\arpit\\AppData\\Local\\Temp\\ipykernel_7492\\2860901793.py:5: UserWarning: FigureCanvasAgg is non-interactive, and thus cannot be shown\n", + " fig.show()\n" + ] + }, + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAiMAAAGzCAYAAAD9pBdvAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguNCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8fJSN1AAAACXBIWXMAAA9hAAAPYQGoP6dpAAAsSElEQVR4nO3deVxVdf7H8fcF5IKsguCKgGLuplmumQuumY6aWpoZarvlz8aaqZxxydKaFi0dK1vUmXKcUrPRMs20XDIty9Qit5DMTEQRFBDk8v390XDHK+AKfUFfz8fjPh6ec773nM85917vm+/5nnscxhgjAAAAS7xsFwAAAK5shBEAAGAVYQQAAFhFGAEAAFYRRgAAgFWEEQAAYBVhBAAAWEUYAQAAVhFGAACAVYQRXNEcDocmTpz4u24zJiZGCQkJv9u2fu/9Kw02XqfSNnHiRDkcDttlXJSYmBjddNNN52x3Ob5uKB2EEZSouXPnyuFwyOFwaP369YWWG2MUFRUlh8NxXv+ZlScF++1wOOTl5aXq1aurW7du+vTTT0tk/b/88osmTpyorVu3lsj6irJt2zYNHz5csbGx8vPzU2BgoJo1a6Y//elP+vHHH0ttuzi7pUuXqkOHDoqMjFTFihVVu3ZtDRo0SB999JHt0oAS4WO7AFye/Pz8NH/+fF1//fUe8z/77DP9/PPPcjqdlirzlJ2dLR+fkvsYdO3aVcOGDZMxRklJSZo1a5Y6d+6sDz74QD179rykdf/yyy+aNGmSYmJi1KxZs5Ip+DSvvfaa7rvvPlWuXFm33Xab6tevr7y8PO3YsUP/+Mc/NH36dGVnZ8vb27vEt43iPffcc3rkkUfUoUMHPfbYY6pYsaL27NmjVatWacGCBerRo4ftEotV0p8vXL54l6BU3HjjjXr33Xf10ksvefxnNH/+fLVo0UKpqakWq/sfPz+/El3fVVddpaFDh7qn+/Xrp6ZNm2r69OmXHEZK0+eff6777rtP7dq107JlyxQUFOSx/Pnnn9dTTz1lqbqSdfLkSfn6+srLq+x3DOfl5Wny5Mnq2rWrVq5cWWh5SkqKharOX0l/vnD5KvufRpRLgwcP1pEjR/Txxx+75+Xm5mrhwoUaMmRIkc/JzMzU2LFjFRUVJafTqXr16um5557TmTeW/vjjj3X99dcrNDRUgYGBqlevnh5//HGP7YwfP14tWrRQSEiIAgIC1L59e61Zs6bQNos6p33gwAGNHDlS1atXl9PpVGxsrO677z7l5uZe8HFo0qSJKleurKSkpLO2+/HHHzVw4ECFhYWpYsWKat26tT744AP38k8//VTXXXedJGn48OHu00Fz58694JqKMmnSJDkcDr399tuFgoj025fK5MmTC/WKbNq0ST169FBISIgqVqyoDh06aMOGDR5tCsZG7NmzRwkJCQoNDVVISIiGDx+urKwsj7Y5OTl66KGHFBERoaCgIPXp00c///xzkTUfOHBAI0aMUJUqVeR0OtWoUSO9+eabHm0+/fRTORwOLViwQH/5y19Uo0YNVaxYURkZGcUei+eee05t27ZVeHi4/P391aJFCy1cuLBQO4fDoQceeEBLlixR48aN3TUUdepk/fr1uu666+Tn56c6dero1VdfLXb7p0tNTVVGRobatWtX5PLIyMhC+/rOO+9o0qRJqlGjhoKCgjRgwAClp6crJydHY8aMUWRkpAIDAzV8+HDl5OR4rK8g/NSpU0dOp1MxMTF6/PHHC7Uryrx58+Tj46NHHnnE4xid/vm6kPdCdna2Ro8ercqVK7vfCwcOHGAcymWKnhGUipiYGLVp00b/+te/3D0Cy5cvV3p6um699Va99NJLHu2NMerTp4/WrFmjkSNHqlmzZlqxYoUeeeQRHThwQNOmTZMkfffdd7rpppvUtGlTPfHEE3I6ndqzZ4/HF2BGRoZef/11DR48WHfddZeOHz+uN954Q927d9fmzZvPeorjl19+UcuWLXXs2DHdfffdql+/vg4cOKCFCxcqKytLvr6+F3Qc0tLSlJaWpri4uGLbHDp0SG3btlVWVpZGjx6t8PBwzZs3T3369NHChQvVr18/NWjQQE888YTGjx+vu+++W+3bt5cktW3b9oLqKUpWVpZWr16tjh07qmbNmuf9vNWrV6tnz55q0aKFJkyYIC8vL82ZM0edO3fWunXr1LJlS4/2gwYNUmxsrKZOnaqvv/5ar7/+uiIjI/XMM8+429x555166623NGTIELVt21arV69Wr169Cm370KFDat26tTsQREREaPny5Ro5cqQyMjI0ZswYj/aTJ0+Wr6+vHn74YeXk5Jz1dXzxxRfVp08f3XbbbcrNzdWCBQs0cOBALVu2rFAt69ev1+LFi3X//fcrKChIL730km6++Wb9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HR2tHj16yMvLS8HBwVq7dq2mT5+ujIwMRUdH6/nnn1fPnj0vaDsPrFpFgMEVKe7llzVnzhx98cUX6t+/v8YmJGjy5MlauHChJkyYoIMHD+r666/X66+/rsjISB0+fFjDhg3Txo0b5ePjo65du+pf//qX7d0AgCKVi5+DT0xMVMOGDfX9998TRnBFMsaoffv2qly5shITE7Vt2zZ9++236t+/v5YvX6769etr3Lhx+vHHH7Vw4UI9+uijysjI0EsvvSSXy6UtW7aobdu2tncDKBNiJxUeq4jSkZuSq19m/XLO7+9ycaO8AjOHDVMkg1lxhbo6N1ez3n9ftzdtqqd79NDSnTtVz89Pi0ePliT55OXpvQ0bNL5DB21MTlZKZqYe/vprVfL3lyR9bLN4oAyYsGaN7RJQjHIVRoArWeR/B4NXrlhRkpSek6Nthw5pw08/udt4ORw6kZurtlFRWpOUpDlbt6qCl5fa1aqla6pVs1I3AJwLYQQop4KdTnWKjVXbqKgil/esW1c969bV/vR0zfv2W8WEhirsv70kAFCWlMjVNAB+f82qVtXmAwf0639vl5B16pR++O/9oHYdOaKj2dkyxsjPx0cO/dZrAgBlET0jQDlVKyRE3erU0XuJiUo7eVL+Pj5qFBmp+pUr60hWlj7YtUtZp04pwNdXPeLiFOrnZ7tkACgSYQQoRyZ27Ogx3TAiQg0jIgq1axMVpTbFnL4BgLKG0zQAAMAqwggAALCKMAIAAKwijAAAAKsIIwAAwCrCCAAAsIowAgAArCKMAAAAqwgjAADAKsIIAACwijACAACsIowAAACrCCMAAMAqwggAALCKMAIAAKwijAAAAKsIIwAAwCrCCAAAsIowAgAArCKMAAAAqwgjAADAKsIIAACwijACAACsIowAAACrCCMAAMAqwggAALCKMAIAAKwijAAAAKsIIwAAwCrCCAAAsIowAgAArCKMAAAAqwgjAADAKsIIAACwijACAACsIowAAACrCCMAAMAqwggAALCKMAIAAKwijAAAAKsIIwAAwCrCCAAAsIowAgAArCKMAAAAqwgjAADAKsIIAACwijACAACsIowAAACrCCMAAMAqwggAALCKMAIAAKwijAAAAKsIIwAAwCrCCAAAsIowAgAArCKMAAAAqwgjAADAKsIIAACwijACAACsIowAAACrCCMAAMAqwggAALCKMAIAAKwijAAAAKsIIwAAwCrCCAAAsIowAgAArCKMAAAAqwgjAADAKsIIAACwijACAACsIowAAACrCCMAAMAqwggAAGXQ/mn7lfxUsvJz893z8nPzlTwlWfun7bdYWckjjAAAUEZ5B3kr64cs93TWzix5B3pbrKh0EEYAACijApoEKHNbpns6c1umApsGWqyodBBGAAAoo/xj/ZWbkitXpkuuTJdyD+XKr7af7bJKnI/tAgAAQDEcUkDDAGXu+K13pGKDipLDck2lgJ4RAADKsIAmAcrcnqnM7ZfnKRqJMAIAQJnmrOGUK9slV7ZLzhpO2+WUCk7TAABQxkXeEmm7hFJFGAEAoIzzjfS1XUKpIowAAFAGRT0UVeR8vyi/YpeVV4wZAQAAVhFGAACAVYQRAABgFWEEAABYRRgBAABWEUYAALAsZUGKjq446jEvfWO6Dr5xUMYYS1X9fggjAABYFnZjmE5sPaGcgzmSpLz0PKWvTVd473A5HJfhzWjOwO+MAABgmU+wj0I7h+rI0iOqdmc1HfnwiIKuC5JvpK8yv8vUsU+PyXXcJWctpyr3qSzvQG+5Ml1KfS9VJ/eflMPLIf86/ooYEGF7Vy4KYQQAgDIg6NogZW7LVMq/U3Qq9ZQiB0Yq5+ccHf3oqKoMraIKlSso7ZM0HfngiCJviVT65+nyCfVRrcG1JCPl/JJjexcuGqdpAAAoAxwOh8J7hyt7Z7bCbwyXw8eh498c/62HpIqvHN4OhXYIVdbOLBmXkcPbIdcJl/Iy8uTwccivlp/tXbho9IwAAFBGFNyDpkLlCpIkV7pLmdsylb4h3d3G4fVbCAlpG6K0NWn6dc6vclRwKKRdiIKuCbJS96UijAAAUEZ5B3srtFOoQtqGFLk8vGe4wnuG6+T+kzo075D8YvxUIazC71zlpeM0DQAAZVRgs0Ad33xcub/mSpJcWS5l/ZAlScralaVTR0/JGCMvPy/J8VuvSXlEzwgAAGWUXy0/VepWSYffO6y8tDx5+XspoFGAKtavqFNHTunIB0eUn5Uv7wBvhfUIk09o+fxaL59VAwBwmYqZGOMxHdAwQAENAwq1C2kTopA2RZ++KW84TQMAAKwijAAAAKsIIwAAwCrCCAAAsIowAgAArCKMAAAAqwgjAADAKsIIAACwijACAACsIowAAACrCCMAAMAqwggAALCKMAIAAKwijAAAAKsIIwAAwCrCCAAAsIowAgAArCKMAAAAqwgjAADAKsIIAACwijACAACsIowAAACrCCMAAMAqwggAALCKMAIAAKwijAAAAKsIIwAAwCrCCAAAsIowAgAArCKMAAAAqwgjAADAKsIIAACwijACAACsIowAAACrCCMAAMAqwggAALCKMAIAAKwijAAAAKsIIwAAwCrCCAAAsIowAgAArCKMAAAAqwgjAADAKsIIAACwijACAACsIowAAACrCCMAAMAqwggAALCKMAIAAKwijAAAAKsIIwAAwCrCCAAAsIowAgAArCKMAAAAqwgjAADAKsIIAACwijACAACsIowAAACrCCMAAMAqwggAALCKMAIAAKwijAAAAKt8bBcA4NJM27hRmadOyfHfaV9vbz3Srp3VmgDgQhBGgMvA7U2bKjo01HYZAHBROE0DAACsIowAAACrOE0DXAbe3r7dPWakebVq6hEXZ7UeALgQhBHgMnBbkyaMGQFQbnGaBgAAWEUYAQAAVhFGAACAVZcURhISEuRwOPT00097zF+yZIkcDkcxzwJQkh5q04bxIgDKtUvuGfHz89MzzzyjtLS0kqgHAABcYS45jHTp0kVVq1bV1KlTi22zaNEiNWrUSE6nUzExMXr++efPus6cnBxlZGS4HydOnLjUMgEAQBl1yWHE29tbU6ZM0YwZM/Tzzz8XWr5lyxYNGjRIt956q7Zv366JEyfqr3/9q+bOnVvsOqdOnaqQkBD3o2XLlpdaJgAAKKNKZABrv3791KxZM02YMKHQshdeeEHx8fH661//qquuukoJCQl64IEH9Oyzzxa7vscee0zp6enux+bNm0uiTAAAUAaV2NU0zzzzjObNm6fExESP+YmJiWp3xh1E27Vrp927d8vlchW5LqfTqeDgYPcjMDCwpMoEAABlTImFkRtuuEHdu3fXY489VlKrBHCGaRs3atrGjXLl57vnLd25U2uSkixWBQCXpkR/Dv7pp59Ws2bNVK9ePfe8Bg0aaMOGDR7tNmzYoKuuukre3t4luXngipDjcumbX3/VtdWr2y4FAEpEiYaRJk2a6LbbbtNLL73knjd27Fhdd911mjx5sm655RZt3LhRM2fO1KxZs0py08AVo03NmlqXnKzmVavK28uzc3PzgQP6fP9+5bpcqlOpknpddZX8fLgFFYCyrcR/gfWJJ55Q/mldyNdcc43eeecdLViwQI0bN9b48eP1xBNPKCEhoaQ3DVwRYkJDFeLnp62//uoxf+/Ro1qbnKwhTZpoTOvWysvP1/Lduy1VCQDn75L+ZCrq8tyYmBjl5OR4zLv55pt18803X8qmAJymY0yM/rNzp5pVreqetyMlRS2qVVNkQIAkKb52bb3y1VfqW78+v4gMoEzj3jRAOVS7UiUF+fp69I4cz81ViJ+fezrE6VRefr6y8/JslAgA540wApRTHWNitO6nn5RvjCQpyNdX6SdPupen5+TIx8tL/owZAVDGEUaAcqpOWJgCfX31Q2qqJKlRZKS2HDyow5mZynW5tDopSY0iIjhFA6DMI4wA5VjHmBj3aZi4sDC1r1VLb2/frmkbN8rL4VCPuDjLFQLAudF/C5QjD7Vp4zEdFxamiR07uqdb1aypVjVr/s5VAcCloWcEAABYRRgBAABWEUYAAIBVhBEAAGAVA1gBAFeUpAnc5fr3kpiYqIazGp6zHWEEAHBF6TSpk+0SrhgnUk6cVztO0wAAAKsIIwAAwCrCCAAAsIowAgAArCKMAAAAqwgjAADAKsIIAACwijACAACsIowAAACrCCMAAMAqwggAALCKMAIAAKwijAAAAKsIIwAAwCrCCAAAsIowAgAArCKMAAAAqwgjAADAKsIIAACwijACAACsIowAAACrCCMAAMAqwggAALCKMAIAAKwijAAAAKsIIwAAwCrCCAAAsIowAgAArCKMAAAAqwgjAADAKsIIAACwijACAACsIowAAACrCCMAAMAqwggAALCKMAIAAKwijAAAAKsIIwAAwCrCCAAAsIowAgAArCKMAAAAqwgjAADAKsIIAACwijACAACsIowAAACrCCMAAMAqwggAALCKMAIAAKwijAAAAKsIIwAAwCrCCAAAsIowAgAArCKMAAAAqwgjAADAKsIIAACwijACAACsIowAAACrCCMAAMAqwggAALCKMAIAAKwijAAAAKsIIwAAwCrCCAAAsIowAgAArCKMAAAAqwgjAADAKsIIAACwijACAACsIowAAFAGbZy2UWufWitXrss9z5Xr0rop67Rx2kaLlZU8wggAAGWUM8ip1B9S3dOpO1PlG+hrsaLSQRgBAKCMimwSqUPbDrmnD207pCpNq1isqHQQRgAAKKMqxVZSZkqmcjNzlZuZ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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "from statsmodels.graphics.mosaicplot import mosaic\n", + "\n", + "fig, ax = mosaic(df, ['Gender', 'Smoking'])\n", + "plt.title('Mosaic Plot | Gender and Smoking')\n", + "fig.show()\n", + "fig.savefig('../Images/MosaicPlot.png', bbox_inches='tight')" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.11.9" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/Thyroid Cancer Recurrence Prediction/Model/Thyroid_Cancer_Recurrence_Prediction_w_DL.ipynb b/Thyroid Cancer Recurrence Prediction/Model/Thyroid_Cancer_Recurrence_Prediction_w_DL.ipynb new file mode 100644 index 0000000000..232e53d587 --- /dev/null +++ b/Thyroid Cancer Recurrence Prediction/Model/Thyroid_Cancer_Recurrence_Prediction_w_DL.ipynb @@ -0,0 +1,1092 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# AutoGluon Model" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Looking in indexes: https://pypi.org/simple, https://pypi.ngc.nvidia.com\n", + "Requirement already satisfied: pip in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (24.0)\n", + "Note: you may need to restart the kernel to use updated packages.\n", + "Looking in indexes: https://pypi.org/simple, https://pypi.ngc.nvidia.com\n", + "Requirement already satisfied: setuptools in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (60.2.0)\n", + "Collecting setuptools\n", + " Downloading setuptools-70.0.0-py3-none-any.whl.metadata (5.9 kB)\n", + "Requirement already satisfied: wheel in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (0.43.0)\n", + "Downloading setuptools-70.0.0-py3-none-any.whl (863 kB)\n", + " ---------------------------------------- 0.0/863.4 kB ? eta -:--:--\n", + " - -------------------------------------- 30.7/863.4 kB 1.3 MB/s eta 0:00:01\n", + " ------------------- -------------------- 430.1/863.4 kB 6.8 MB/s eta 0:00:01\n", + " ---------------------------------------- 863.4/863.4 kB 9.1 MB/s eta 0:00:00\n", + "Installing collected packages: setuptools\n", + " Attempting uninstall: setuptools\n", + " Found existing installation: setuptools 60.2.0\n", + " Uninstalling setuptools-60.2.0:\n", + " Successfully uninstalled setuptools-60.2.0\n", + "Successfully installed setuptools-70.0.0\n", + "Note: you may need to restart the kernel to use updated packages.\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "ERROR: pip's dependency resolver does not currently take into account all the packages that are installed. This behaviour is the source of the following dependency conflicts.\n", + "openxlab 0.1.0 requires setuptools~=60.2.0, but you have setuptools 70.0.0 which is incompatible.\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Looking in indexes: https://pypi.org/simple, https://pypi.ngc.nvidia.com\n", + "Requirement already satisfied: autogluon in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (1.1.0)\n", + "Requirement already satisfied: scikit-learn in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (1.4.0)\n", + "Requirement already satisfied: autogluon.core==1.1.0 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from autogluon.core[all]==1.1.0->autogluon) (1.1.0)\n", + "Requirement already satisfied: autogluon.features==1.1.0 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from autogluon) (1.1.0)\n", + "Requirement already satisfied: autogluon.tabular==1.1.0 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from autogluon.tabular[all]==1.1.0->autogluon) (1.1.0)\n", + "Requirement already satisfied: autogluon.multimodal==1.1.0 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from autogluon) (1.1.0)\n", + "Requirement already satisfied: autogluon.timeseries==1.1.0 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from autogluon.timeseries[all]==1.1.0->autogluon) (1.1.0)\n", + "Requirement already satisfied: numpy<1.29,>=1.21 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from autogluon.core==1.1.0->autogluon.core[all]==1.1.0->autogluon) (1.26.4)\n", + "Requirement already satisfied: scipy<1.13,>=1.5.4 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from autogluon.core==1.1.0->autogluon.core[all]==1.1.0->autogluon) (1.12.0)\n", + "Requirement already satisfied: networkx<4,>=3.0 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from autogluon.core==1.1.0->autogluon.core[all]==1.1.0->autogluon) (3.3)\n", + "Requirement already satisfied: pandas<2.3.0,>=2.0.0 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from autogluon.core==1.1.0->autogluon.core[all]==1.1.0->autogluon) (2.2.2)\n", + "Requirement already satisfied: tqdm<5,>=4.38 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from autogluon.core==1.1.0->autogluon.core[all]==1.1.0->autogluon) (4.65.2)\n", + "Requirement already satisfied: requests in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from autogluon.core==1.1.0->autogluon.core[all]==1.1.0->autogluon) (2.28.2)\n", + "Requirement already satisfied: matplotlib in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from autogluon.core==1.1.0->autogluon.core[all]==1.1.0->autogluon) (3.9.0)\n", + "Requirement already satisfied: boto3<2,>=1.10 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from autogluon.core==1.1.0->autogluon.core[all]==1.1.0->autogluon) (1.34.117)\n", + "Requirement already satisfied: autogluon.common==1.1.0 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from autogluon.core==1.1.0->autogluon.core[all]==1.1.0->autogluon) (1.1.0)\n", + "Requirement already satisfied: ray<2.11,>=2.10.0 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from ray[default,tune]<2.11,>=2.10.0; extra == \"all\"->autogluon.core[all]==1.1.0->autogluon) (2.10.0)\n", + "Requirement already satisfied: hyperopt<0.2.8,>=0.2.7 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from autogluon.core[all]==1.1.0->autogluon) (0.2.7)\n", + "Requirement already satisfied: Pillow<11,>=10.0.1 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from autogluon.multimodal==1.1.0->autogluon) (10.3.0)\n", + "Requirement already satisfied: torch<2.2,>=2.1 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from autogluon.multimodal==1.1.0->autogluon) (2.1.2)\n", + "Requirement already satisfied: lightning<2.2,>=2.1 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from autogluon.multimodal==1.1.0->autogluon) (2.1.4)\n", + "Requirement already satisfied: transformers<4.39.0,>=4.38.0 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from transformers[sentencepiece]<4.39.0,>=4.38.0->autogluon.multimodal==1.1.0->autogluon) (4.38.2)\n", + "Requirement already satisfied: accelerate<0.22.0,>=0.21.0 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from autogluon.multimodal==1.1.0->autogluon) (0.21.0)\n", + "Requirement already satisfied: jsonschema<4.22,>=4.18 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from autogluon.multimodal==1.1.0->autogluon) (4.21.1)\n", + "Requirement already satisfied: seqeval<1.3.0,>=1.2.2 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from autogluon.multimodal==1.1.0->autogluon) (1.2.2)\n", + "Requirement already satisfied: evaluate<0.5.0,>=0.4.0 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from autogluon.multimodal==1.1.0->autogluon) (0.4.2)\n", + "Requirement already satisfied: timm<0.10.0,>=0.9.5 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from autogluon.multimodal==1.1.0->autogluon) (0.9.16)\n", + "Requirement already satisfied: torchvision<0.17.0,>=0.16.0 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from autogluon.multimodal==1.1.0->autogluon) (0.16.2)\n", + "Requirement already satisfied: scikit-image<0.21.0,>=0.19.1 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from autogluon.multimodal==1.1.0->autogluon) (0.20.0)\n", + "Requirement already satisfied: text-unidecode<1.4,>=1.3 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from autogluon.multimodal==1.1.0->autogluon) (1.3)\n", + "Requirement already satisfied: torchmetrics<1.3.0,>=1.2.0 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from autogluon.multimodal==1.1.0->autogluon) (1.2.1)\n", + "Requirement already satisfied: nptyping<2.5.0,>=1.4.4 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from autogluon.multimodal==1.1.0->autogluon) (2.4.1)\n", + "Requirement already satisfied: omegaconf<2.3.0,>=2.1.1 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from autogluon.multimodal==1.1.0->autogluon) (2.2.3)\n", + "Requirement already satisfied: pytorch-metric-learning<2.4,>=1.3.0 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from autogluon.multimodal==1.1.0->autogluon) (2.3.0)\n", + "Requirement already satisfied: nlpaug<1.2.0,>=1.1.10 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from autogluon.multimodal==1.1.0->autogluon) (1.1.11)\n", + "Requirement already satisfied: nltk<4.0.0,>=3.4.5 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from autogluon.multimodal==1.1.0->autogluon) (3.8.1)\n", + "Requirement already satisfied: openmim<0.4.0,>=0.3.7 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from autogluon.multimodal==1.1.0->autogluon) (0.3.9)\n", + "Requirement already satisfied: defusedxml<0.7.2,>=0.7.1 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from autogluon.multimodal==1.1.0->autogluon) (0.7.1)\n", + "Requirement already satisfied: jinja2<3.2,>=3.0.3 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from autogluon.multimodal==1.1.0->autogluon) (3.1.4)\n", + "Requirement already satisfied: tensorboard<3,>=2.9 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from autogluon.multimodal==1.1.0->autogluon) (2.16.2)\n", + "Requirement already satisfied: pytesseract<0.3.11,>=0.3.9 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from autogluon.multimodal==1.1.0->autogluon) (0.3.10)\n", + "Requirement already satisfied: nvidia-ml-py3==7.352.0 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from autogluon.multimodal==1.1.0->autogluon) (7.352.0)\n", + "Requirement already satisfied: pdf2image<1.19,>=1.17.0 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from autogluon.multimodal==1.1.0->autogluon) (1.17.0)\n", + "Requirement already satisfied: xgboost<2.1,>=1.6 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from autogluon.tabular[all]==1.1.0->autogluon) (2.0.3)\n", + "Requirement already satisfied: fastai<2.8,>=2.3.1 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from autogluon.tabular[all]==1.1.0->autogluon) (2.7.15)\n", + "Requirement already satisfied: lightgbm<4.4,>=3.3 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from autogluon.tabular[all]==1.1.0->autogluon) (4.3.0)\n", + "Requirement already satisfied: catboost<1.3,>=1.1 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from autogluon.tabular[all]==1.1.0->autogluon) (1.2.5)\n", + "Requirement already satisfied: joblib<2,>=1.1 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from autogluon.timeseries==1.1.0->autogluon.timeseries[all]==1.1.0->autogluon) (1.4.2)\n", + "Requirement already satisfied: pytorch-lightning<2.2,>=2.1 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from autogluon.timeseries==1.1.0->autogluon.timeseries[all]==1.1.0->autogluon) (2.1.4)\n", + "Requirement already satisfied: gluonts<0.14.4,>=0.14.0 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from autogluon.timeseries==1.1.0->autogluon.timeseries[all]==1.1.0->autogluon) (0.14.3)\n", + "Requirement already satisfied: statsforecast<1.5,>=1.4.0 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from autogluon.timeseries==1.1.0->autogluon.timeseries[all]==1.1.0->autogluon) (1.4.0)\n", + "Requirement already satisfied: mlforecast<0.10.1,>=0.10.0 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from autogluon.timeseries==1.1.0->autogluon.timeseries[all]==1.1.0->autogluon) (0.10.0)\n", + "Requirement already satisfied: utilsforecast<0.0.11,>=0.0.10 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from autogluon.timeseries==1.1.0->autogluon.timeseries[all]==1.1.0->autogluon) (0.0.10)\n", + "Requirement already satisfied: orjson~=3.9 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from autogluon.timeseries==1.1.0->autogluon.timeseries[all]==1.1.0->autogluon) (3.10.3)\n", + "Requirement already satisfied: optimum<1.19,>=1.17 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from optimum[onnxruntime]<1.19,>=1.17; extra == \"all\"->autogluon.timeseries[all]==1.1.0->autogluon) (1.18.1)\n", + "Requirement already satisfied: psutil<6,>=5.7.3 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from autogluon.common==1.1.0->autogluon.core==1.1.0->autogluon.core[all]==1.1.0->autogluon) (5.9.8)\n", + "Requirement already satisfied: setuptools in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from autogluon.common==1.1.0->autogluon.core==1.1.0->autogluon.core[all]==1.1.0->autogluon) (70.0.0)\n", + "Requirement already satisfied: threadpoolctl>=2.0.0 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from scikit-learn) (3.5.0)\n", + "Requirement already satisfied: packaging>=20.0 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from accelerate<0.22.0,>=0.21.0->autogluon.multimodal==1.1.0->autogluon) (24.0)\n", + "Requirement already satisfied: pyyaml in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from accelerate<0.22.0,>=0.21.0->autogluon.multimodal==1.1.0->autogluon) (6.0.1)\n", + "Requirement already satisfied: botocore<1.35.0,>=1.34.117 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from boto3<2,>=1.10->autogluon.core==1.1.0->autogluon.core[all]==1.1.0->autogluon) (1.34.117)\n", + "Requirement already satisfied: jmespath<2.0.0,>=0.7.1 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from boto3<2,>=1.10->autogluon.core==1.1.0->autogluon.core[all]==1.1.0->autogluon) (0.10.0)\n", + "Requirement already satisfied: s3transfer<0.11.0,>=0.10.0 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from boto3<2,>=1.10->autogluon.core==1.1.0->autogluon.core[all]==1.1.0->autogluon) (0.10.1)\n", + "Requirement already satisfied: graphviz in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from catboost<1.3,>=1.1->autogluon.tabular[all]==1.1.0->autogluon) (0.20.3)\n", + "Requirement already satisfied: plotly in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from catboost<1.3,>=1.1->autogluon.tabular[all]==1.1.0->autogluon) (5.22.0)\n", + "Requirement already satisfied: six in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from catboost<1.3,>=1.1->autogluon.tabular[all]==1.1.0->autogluon) (1.16.0)\n", + "Requirement already satisfied: datasets>=2.0.0 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from evaluate<0.5.0,>=0.4.0->autogluon.multimodal==1.1.0->autogluon) (2.19.1)\n", + "Requirement already satisfied: dill in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from evaluate<0.5.0,>=0.4.0->autogluon.multimodal==1.1.0->autogluon) (0.3.8)\n", + "Requirement already satisfied: xxhash in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from evaluate<0.5.0,>=0.4.0->autogluon.multimodal==1.1.0->autogluon) (3.4.1)\n", + "Requirement already satisfied: multiprocess in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from evaluate<0.5.0,>=0.4.0->autogluon.multimodal==1.1.0->autogluon) (0.70.16)\n", + "Requirement already satisfied: fsspec>=2021.05.0 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from fsspec[http]>=2021.05.0->evaluate<0.5.0,>=0.4.0->autogluon.multimodal==1.1.0->autogluon) (2024.3.1)\n", + "Requirement already satisfied: huggingface-hub>=0.7.0 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from evaluate<0.5.0,>=0.4.0->autogluon.multimodal==1.1.0->autogluon) (0.23.2)\n", + "Requirement already satisfied: pip in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from fastai<2.8,>=2.3.1->autogluon.tabular[all]==1.1.0->autogluon) (24.0)\n", + "Requirement already satisfied: fastdownload<2,>=0.0.5 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from fastai<2.8,>=2.3.1->autogluon.tabular[all]==1.1.0->autogluon) (0.0.7)\n", + "Requirement already satisfied: fastcore<1.6,>=1.5.29 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from fastai<2.8,>=2.3.1->autogluon.tabular[all]==1.1.0->autogluon) (1.5.42)\n", + "Requirement already satisfied: fastprogress>=0.2.4 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from fastai<2.8,>=2.3.1->autogluon.tabular[all]==1.1.0->autogluon) (1.0.3)\n", + "Requirement already satisfied: spacy<4 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from fastai<2.8,>=2.3.1->autogluon.tabular[all]==1.1.0->autogluon) (3.7.4)\n", + "Requirement already satisfied: pydantic<3,>=1.7 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from gluonts<0.14.4,>=0.14.0->autogluon.timeseries==1.1.0->autogluon.timeseries[all]==1.1.0->autogluon) (2.7.2)\n", + "Requirement already satisfied: toolz~=0.10 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from gluonts<0.14.4,>=0.14.0->autogluon.timeseries==1.1.0->autogluon.timeseries[all]==1.1.0->autogluon) (0.12.1)\n", + "Requirement already satisfied: typing-extensions~=4.0 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from gluonts<0.14.4,>=0.14.0->autogluon.timeseries==1.1.0->autogluon.timeseries[all]==1.1.0->autogluon) (4.12.0)\n", + "Requirement already satisfied: future in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from hyperopt<0.2.8,>=0.2.7->autogluon.core[all]==1.1.0->autogluon) (1.0.0)\n", + "Requirement already satisfied: cloudpickle in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from hyperopt<0.2.8,>=0.2.7->autogluon.core[all]==1.1.0->autogluon) (3.0.0)\n", + "Requirement already satisfied: py4j in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from hyperopt<0.2.8,>=0.2.7->autogluon.core[all]==1.1.0->autogluon) (0.10.9.7)\n", + "Requirement already satisfied: MarkupSafe>=2.0 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from jinja2<3.2,>=3.0.3->autogluon.multimodal==1.1.0->autogluon) (2.1.5)\n", + "Requirement already satisfied: attrs>=22.2.0 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from jsonschema<4.22,>=4.18->autogluon.multimodal==1.1.0->autogluon) (23.2.0)\n", + "Requirement already satisfied: jsonschema-specifications>=2023.03.6 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from jsonschema<4.22,>=4.18->autogluon.multimodal==1.1.0->autogluon) (2023.12.1)\n", + "Requirement already satisfied: referencing>=0.28.4 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from jsonschema<4.22,>=4.18->autogluon.multimodal==1.1.0->autogluon) (0.35.1)\n", + "Requirement already satisfied: rpds-py>=0.7.1 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from jsonschema<4.22,>=4.18->autogluon.multimodal==1.1.0->autogluon) (0.18.1)\n", + "Requirement already satisfied: lightning-utilities<2.0,>=0.8.0 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from lightning<2.2,>=2.1->autogluon.multimodal==1.1.0->autogluon) (0.11.2)\n", + "Requirement already satisfied: numba in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from mlforecast<0.10.1,>=0.10.0->autogluon.timeseries==1.1.0->autogluon.timeseries[all]==1.1.0->autogluon) (0.59.1)\n", + "Requirement already satisfied: window-ops in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from mlforecast<0.10.1,>=0.10.0->autogluon.timeseries==1.1.0->autogluon.timeseries[all]==1.1.0->autogluon) (0.0.15)\n", + "Requirement already satisfied: gdown>=4.0.0 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from nlpaug<1.2.0,>=1.1.10->autogluon.multimodal==1.1.0->autogluon) (5.2.0)\n", + "Requirement already satisfied: click in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from nltk<4.0.0,>=3.4.5->autogluon.multimodal==1.1.0->autogluon) (8.1.7)\n", + "Requirement already satisfied: regex>=2021.8.3 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from nltk<4.0.0,>=3.4.5->autogluon.multimodal==1.1.0->autogluon) (2024.5.15)\n", + "Requirement already satisfied: antlr4-python3-runtime==4.9.* in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from omegaconf<2.3.0,>=2.1.1->autogluon.multimodal==1.1.0->autogluon) (4.9.3)\n", + "Requirement already satisfied: colorama in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from openmim<0.4.0,>=0.3.7->autogluon.multimodal==1.1.0->autogluon) (0.4.6)\n", + "Requirement already satisfied: model-index in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from openmim<0.4.0,>=0.3.7->autogluon.multimodal==1.1.0->autogluon) (0.1.11)\n", + "Requirement already satisfied: opendatalab in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from openmim<0.4.0,>=0.3.7->autogluon.multimodal==1.1.0->autogluon) (0.0.10)\n", + "Requirement already satisfied: rich in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from openmim<0.4.0,>=0.3.7->autogluon.multimodal==1.1.0->autogluon) (13.4.2)\n", + "Requirement already satisfied: tabulate in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from openmim<0.4.0,>=0.3.7->autogluon.multimodal==1.1.0->autogluon) (0.9.0)\n", + "Requirement already satisfied: coloredlogs in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from optimum<1.19,>=1.17->optimum[onnxruntime]<1.19,>=1.17; extra == \"all\"->autogluon.timeseries[all]==1.1.0->autogluon) (15.0.1)\n", + "Requirement already satisfied: sympy in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from optimum<1.19,>=1.17->optimum[onnxruntime]<1.19,>=1.17; extra == \"all\"->autogluon.timeseries[all]==1.1.0->autogluon) (1.12.1)\n", + "Requirement already satisfied: onnx in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from optimum[onnxruntime]<1.19,>=1.17; extra == \"all\"->autogluon.timeseries[all]==1.1.0->autogluon) (1.16.1)\n", + "Requirement already satisfied: onnxruntime>=1.11.0 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from optimum[onnxruntime]<1.19,>=1.17; extra == \"all\"->autogluon.timeseries[all]==1.1.0->autogluon) (1.18.0)\n", + "Requirement already satisfied: protobuf>=3.20.1 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from optimum[onnxruntime]<1.19,>=1.17; extra == \"all\"->autogluon.timeseries[all]==1.1.0->autogluon) (4.25.3)\n", + "Requirement already satisfied: python-dateutil>=2.8.2 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from pandas<2.3.0,>=2.0.0->autogluon.core==1.1.0->autogluon.core[all]==1.1.0->autogluon) (2.9.0.post0)\n", + "Requirement already satisfied: pytz>=2020.1 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from pandas<2.3.0,>=2.0.0->autogluon.core==1.1.0->autogluon.core[all]==1.1.0->autogluon) (2023.4)\n", + "Requirement already satisfied: tzdata>=2022.7 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from pandas<2.3.0,>=2.0.0->autogluon.core==1.1.0->autogluon.core[all]==1.1.0->autogluon) (2024.1)\n", + "Requirement already satisfied: filelock in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from ray<2.11,>=2.10.0->ray[default,tune]<2.11,>=2.10.0; extra == \"all\"->autogluon.core[all]==1.1.0->autogluon) (3.14.0)\n", + "Requirement already satisfied: msgpack<2.0.0,>=1.0.0 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from ray<2.11,>=2.10.0->ray[default,tune]<2.11,>=2.10.0; extra == \"all\"->autogluon.core[all]==1.1.0->autogluon) (1.0.8)\n", + "Requirement already satisfied: aiosignal in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from ray<2.11,>=2.10.0->ray[default,tune]<2.11,>=2.10.0; extra == \"all\"->autogluon.core[all]==1.1.0->autogluon) (1.3.1)\n", + "Requirement already satisfied: frozenlist in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from ray<2.11,>=2.10.0->ray[default,tune]<2.11,>=2.10.0; extra == \"all\"->autogluon.core[all]==1.1.0->autogluon) (1.4.1)\n", + "Requirement already satisfied: aiohttp>=3.7 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from ray[default,tune]<2.11,>=2.10.0; extra == \"all\"->autogluon.core[all]==1.1.0->autogluon) (3.9.5)\n", + "Requirement already satisfied: aiohttp-cors in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from ray[default,tune]<2.11,>=2.10.0; extra == \"all\"->autogluon.core[all]==1.1.0->autogluon) (0.7.0)\n", + "Requirement already satisfied: colorful in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from ray[default,tune]<2.11,>=2.10.0; extra == \"all\"->autogluon.core[all]==1.1.0->autogluon) (0.5.6)\n", + "Requirement already satisfied: py-spy>=0.2.0 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from ray[default,tune]<2.11,>=2.10.0; extra == \"all\"->autogluon.core[all]==1.1.0->autogluon) (0.3.14)\n", + "Requirement already satisfied: opencensus in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from ray[default,tune]<2.11,>=2.10.0; extra == \"all\"->autogluon.core[all]==1.1.0->autogluon) (0.11.4)\n", + "Requirement already satisfied: prometheus-client>=0.7.1 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from ray[default,tune]<2.11,>=2.10.0; extra == \"all\"->autogluon.core[all]==1.1.0->autogluon) (0.20.0)\n", + "Requirement already satisfied: smart-open in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from ray[default,tune]<2.11,>=2.10.0; extra == \"all\"->autogluon.core[all]==1.1.0->autogluon) (6.4.0)\n", + "Requirement already satisfied: virtualenv!=20.21.1,>=20.0.24 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from ray[default,tune]<2.11,>=2.10.0; extra == \"all\"->autogluon.core[all]==1.1.0->autogluon) (20.26.2)\n", + "Requirement already satisfied: grpcio>=1.42.0 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from ray[default,tune]<2.11,>=2.10.0; extra == \"all\"->autogluon.core[all]==1.1.0->autogluon) (1.64.0)\n", + "Requirement already satisfied: tensorboardX>=1.9 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from ray[default,tune]<2.11,>=2.10.0; extra == \"all\"->autogluon.core[all]==1.1.0->autogluon) (2.6.2.2)\n", + "Requirement already satisfied: pyarrow>=6.0.1 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from ray[default,tune]<2.11,>=2.10.0; extra == \"all\"->autogluon.core[all]==1.1.0->autogluon) (16.1.0)\n", + "Requirement already satisfied: charset-normalizer<4,>=2 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from requests->autogluon.core==1.1.0->autogluon.core[all]==1.1.0->autogluon) (3.3.2)\n", + "Requirement already satisfied: idna<4,>=2.5 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from requests->autogluon.core==1.1.0->autogluon.core[all]==1.1.0->autogluon) (3.7)\n", + "Requirement already satisfied: urllib3<1.27,>=1.21.1 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from requests->autogluon.core==1.1.0->autogluon.core[all]==1.1.0->autogluon) (1.26.18)\n", + "Requirement already satisfied: certifi>=2017.4.17 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from requests->autogluon.core==1.1.0->autogluon.core[all]==1.1.0->autogluon) (2024.2.2)\n", + "Requirement already satisfied: imageio>=2.4.1 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from scikit-image<0.21.0,>=0.19.1->autogluon.multimodal==1.1.0->autogluon) (2.34.1)\n", + "Requirement already satisfied: tifffile>=2019.7.26 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from scikit-image<0.21.0,>=0.19.1->autogluon.multimodal==1.1.0->autogluon) (2024.5.22)\n", + "Requirement already satisfied: PyWavelets>=1.1.1 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from scikit-image<0.21.0,>=0.19.1->autogluon.multimodal==1.1.0->autogluon) (1.6.0)\n", + "Requirement already satisfied: lazy_loader>=0.1 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from scikit-image<0.21.0,>=0.19.1->autogluon.multimodal==1.1.0->autogluon) (0.4)\n", + "Requirement already satisfied: statsmodels>=0.13.2 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from statsforecast<1.5,>=1.4.0->autogluon.timeseries==1.1.0->autogluon.timeseries[all]==1.1.0->autogluon) (0.14.2)\n", + "Requirement already satisfied: absl-py>=0.4 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from tensorboard<3,>=2.9->autogluon.multimodal==1.1.0->autogluon) (2.1.0)\n", + "Requirement already satisfied: markdown>=2.6.8 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from tensorboard<3,>=2.9->autogluon.multimodal==1.1.0->autogluon) (3.6)\n", + "Requirement already satisfied: tensorboard-data-server<0.8.0,>=0.7.0 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from tensorboard<3,>=2.9->autogluon.multimodal==1.1.0->autogluon) (0.7.2)\n", + "Requirement already satisfied: werkzeug>=1.0.1 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from tensorboard<3,>=2.9->autogluon.multimodal==1.1.0->autogluon) (3.0.3)\n", + "Requirement already satisfied: safetensors in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from timm<0.10.0,>=0.9.5->autogluon.multimodal==1.1.0->autogluon) (0.4.3)\n", + "Requirement already satisfied: tokenizers<0.19,>=0.14 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from transformers<4.39.0,>=4.38.0->transformers[sentencepiece]<4.39.0,>=4.38.0->autogluon.multimodal==1.1.0->autogluon) (0.15.2)\n", + "Requirement already satisfied: sentencepiece!=0.1.92,>=0.1.91 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from transformers[sentencepiece]<4.39.0,>=4.38.0->autogluon.multimodal==1.1.0->autogluon) (0.2.0)\n", + "Requirement already satisfied: contourpy>=1.0.1 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from matplotlib->autogluon.core==1.1.0->autogluon.core[all]==1.1.0->autogluon) (1.2.1)\n", + "Requirement already satisfied: cycler>=0.10 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from matplotlib->autogluon.core==1.1.0->autogluon.core[all]==1.1.0->autogluon) (0.12.1)\n", + "Requirement already satisfied: fonttools>=4.22.0 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from matplotlib->autogluon.core==1.1.0->autogluon.core[all]==1.1.0->autogluon) (4.53.0)\n", + "Requirement already satisfied: kiwisolver>=1.3.1 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from matplotlib->autogluon.core==1.1.0->autogluon.core[all]==1.1.0->autogluon) (1.4.5)\n", + "Requirement already satisfied: pyparsing>=2.3.1 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from matplotlib->autogluon.core==1.1.0->autogluon.core[all]==1.1.0->autogluon) (3.1.2)\n", + "Requirement already satisfied: multidict<7.0,>=4.5 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from aiohttp>=3.7->ray[default,tune]<2.11,>=2.10.0; extra == \"all\"->autogluon.core[all]==1.1.0->autogluon) (6.0.5)\n", + "Requirement already satisfied: yarl<2.0,>=1.0 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from aiohttp>=3.7->ray[default,tune]<2.11,>=2.10.0; extra == \"all\"->autogluon.core[all]==1.1.0->autogluon) (1.9.4)\n", + "Requirement already satisfied: pyarrow-hotfix in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from datasets>=2.0.0->evaluate<0.5.0,>=0.4.0->autogluon.multimodal==1.1.0->autogluon) (0.6)\n", + "Requirement already satisfied: beautifulsoup4 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from gdown>=4.0.0->nlpaug<1.2.0,>=1.1.10->autogluon.multimodal==1.1.0->autogluon) (4.12.3)\n", + "Requirement already satisfied: llvmlite<0.43,>=0.42.0dev0 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from numba->mlforecast<0.10.1,>=0.10.0->autogluon.timeseries==1.1.0->autogluon.timeseries[all]==1.1.0->autogluon) (0.42.0)\n", + "Requirement already satisfied: flatbuffers in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from onnxruntime>=1.11.0->optimum[onnxruntime]<1.19,>=1.17; extra == \"all\"->autogluon.timeseries[all]==1.1.0->autogluon) (24.3.25)\n", + "Requirement already satisfied: annotated-types>=0.4.0 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from pydantic<3,>=1.7->gluonts<0.14.4,>=0.14.0->autogluon.timeseries==1.1.0->autogluon.timeseries[all]==1.1.0->autogluon) (0.7.0)\n", + "Requirement already satisfied: pydantic-core==2.18.3 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from pydantic<3,>=1.7->gluonts<0.14.4,>=0.14.0->autogluon.timeseries==1.1.0->autogluon.timeseries[all]==1.1.0->autogluon) (2.18.3)\n", + "Requirement already satisfied: spacy-legacy<3.1.0,>=3.0.11 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from spacy<4->fastai<2.8,>=2.3.1->autogluon.tabular[all]==1.1.0->autogluon) (3.0.12)\n", + "Requirement already satisfied: spacy-loggers<2.0.0,>=1.0.0 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from spacy<4->fastai<2.8,>=2.3.1->autogluon.tabular[all]==1.1.0->autogluon) (1.0.5)\n", + "Requirement already satisfied: murmurhash<1.1.0,>=0.28.0 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from spacy<4->fastai<2.8,>=2.3.1->autogluon.tabular[all]==1.1.0->autogluon) (1.0.10)\n", + "Requirement already satisfied: cymem<2.1.0,>=2.0.2 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from spacy<4->fastai<2.8,>=2.3.1->autogluon.tabular[all]==1.1.0->autogluon) (2.0.8)\n", + "Requirement already satisfied: preshed<3.1.0,>=3.0.2 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from spacy<4->fastai<2.8,>=2.3.1->autogluon.tabular[all]==1.1.0->autogluon) (3.0.9)\n", + "Requirement already satisfied: thinc<8.3.0,>=8.2.2 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from spacy<4->fastai<2.8,>=2.3.1->autogluon.tabular[all]==1.1.0->autogluon) (8.2.3)\n", + "Requirement already satisfied: wasabi<1.2.0,>=0.9.1 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from spacy<4->fastai<2.8,>=2.3.1->autogluon.tabular[all]==1.1.0->autogluon) (1.1.3)\n", + "Requirement already satisfied: srsly<3.0.0,>=2.4.3 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from spacy<4->fastai<2.8,>=2.3.1->autogluon.tabular[all]==1.1.0->autogluon) (2.4.8)\n", + "Requirement already satisfied: catalogue<2.1.0,>=2.0.6 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from spacy<4->fastai<2.8,>=2.3.1->autogluon.tabular[all]==1.1.0->autogluon) (2.0.10)\n", + "Requirement already satisfied: weasel<0.4.0,>=0.1.0 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from spacy<4->fastai<2.8,>=2.3.1->autogluon.tabular[all]==1.1.0->autogluon) (0.3.4)\n", + "Requirement already satisfied: typer<0.10.0,>=0.3.0 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from spacy<4->fastai<2.8,>=2.3.1->autogluon.tabular[all]==1.1.0->autogluon) (0.9.4)\n", + "Requirement already satisfied: langcodes<4.0.0,>=3.2.0 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from spacy<4->fastai<2.8,>=2.3.1->autogluon.tabular[all]==1.1.0->autogluon) (3.4.0)\n", + "Requirement already satisfied: patsy>=0.5.6 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from statsmodels>=0.13.2->statsforecast<1.5,>=1.4.0->autogluon.timeseries==1.1.0->autogluon.timeseries[all]==1.1.0->autogluon) (0.5.6)\n", + "Requirement already satisfied: distlib<1,>=0.3.7 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from virtualenv!=20.21.1,>=20.0.24->ray[default,tune]<2.11,>=2.10.0; extra == \"all\"->autogluon.core[all]==1.1.0->autogluon) (0.3.8)\n", + "Requirement already satisfied: platformdirs<5,>=3.9.1 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from virtualenv!=20.21.1,>=20.0.24->ray[default,tune]<2.11,>=2.10.0; extra == \"all\"->autogluon.core[all]==1.1.0->autogluon) (4.2.2)\n", + "Requirement already satisfied: humanfriendly>=9.1 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from coloredlogs->optimum<1.19,>=1.17->optimum[onnxruntime]<1.19,>=1.17; extra == \"all\"->autogluon.timeseries[all]==1.1.0->autogluon) (10.0)\n", + "Requirement already satisfied: ordered-set in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from model-index->openmim<0.4.0,>=0.3.7->autogluon.multimodal==1.1.0->autogluon) (4.1.0)\n", + "Requirement already satisfied: opencensus-context>=0.1.3 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from opencensus->ray[default,tune]<2.11,>=2.10.0; extra == \"all\"->autogluon.core[all]==1.1.0->autogluon) (0.1.3)\n", + "Requirement already satisfied: google-api-core<3.0.0,>=1.0.0 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from opencensus->ray[default,tune]<2.11,>=2.10.0; extra == \"all\"->autogluon.core[all]==1.1.0->autogluon) (2.19.0)\n", + "Requirement already satisfied: pycryptodome in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from opendatalab->openmim<0.4.0,>=0.3.7->autogluon.multimodal==1.1.0->autogluon) (3.20.0)\n", + "Requirement already satisfied: openxlab in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from opendatalab->openmim<0.4.0,>=0.3.7->autogluon.multimodal==1.1.0->autogluon) (0.1.0)\n", + "Requirement already satisfied: pywin32 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from opendatalab->openmim<0.4.0,>=0.3.7->autogluon.multimodal==1.1.0->autogluon) (306)\n", + "Requirement already satisfied: tenacity>=6.2.0 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from plotly->catboost<1.3,>=1.1->autogluon.tabular[all]==1.1.0->autogluon) (8.3.0)\n", + "Requirement already satisfied: markdown-it-py>=2.2.0 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from rich->openmim<0.4.0,>=0.3.7->autogluon.multimodal==1.1.0->autogluon) (3.0.0)\n", + "Requirement already satisfied: pygments<3.0.0,>=2.13.0 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from rich->openmim<0.4.0,>=0.3.7->autogluon.multimodal==1.1.0->autogluon) (2.18.0)\n", + "Requirement already satisfied: mpmath<1.4.0,>=1.1.0 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from sympy->optimum<1.19,>=1.17->optimum[onnxruntime]<1.19,>=1.17; extra == \"all\"->autogluon.timeseries[all]==1.1.0->autogluon) (1.3.0)\n", + "Requirement already satisfied: googleapis-common-protos<2.0.dev0,>=1.56.2 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from google-api-core<3.0.0,>=1.0.0->opencensus->ray[default,tune]<2.11,>=2.10.0; extra == \"all\"->autogluon.core[all]==1.1.0->autogluon) (1.63.0)\n", + "Requirement already satisfied: proto-plus<2.0.0dev,>=1.22.3 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from google-api-core<3.0.0,>=1.0.0->opencensus->ray[default,tune]<2.11,>=2.10.0; extra == \"all\"->autogluon.core[all]==1.1.0->autogluon) (1.23.0)\n", + "Requirement already satisfied: google-auth<3.0.dev0,>=2.14.1 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from google-api-core<3.0.0,>=1.0.0->opencensus->ray[default,tune]<2.11,>=2.10.0; extra == \"all\"->autogluon.core[all]==1.1.0->autogluon) (2.29.0)\n", + "Requirement already satisfied: pyreadline3 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from humanfriendly>=9.1->coloredlogs->optimum<1.19,>=1.17->optimum[onnxruntime]<1.19,>=1.17; extra == \"all\"->autogluon.timeseries[all]==1.1.0->autogluon) (3.4.1)\n", + "Requirement already satisfied: language-data>=1.2 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from langcodes<4.0.0,>=3.2.0->spacy<4->fastai<2.8,>=2.3.1->autogluon.tabular[all]==1.1.0->autogluon) (1.2.0)\n", + "Requirement already satisfied: mdurl~=0.1 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from markdown-it-py>=2.2.0->rich->openmim<0.4.0,>=0.3.7->autogluon.multimodal==1.1.0->autogluon) (0.1.2)\n", + "Requirement already satisfied: blis<0.8.0,>=0.7.8 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from thinc<8.3.0,>=8.2.2->spacy<4->fastai<2.8,>=2.3.1->autogluon.tabular[all]==1.1.0->autogluon) (0.7.11)\n", + "Requirement already satisfied: confection<1.0.0,>=0.0.1 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from thinc<8.3.0,>=8.2.2->spacy<4->fastai<2.8,>=2.3.1->autogluon.tabular[all]==1.1.0->autogluon) (0.1.5)\n", + "Requirement already satisfied: cloudpathlib<0.17.0,>=0.7.0 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from weasel<0.4.0,>=0.1.0->spacy<4->fastai<2.8,>=2.3.1->autogluon.tabular[all]==1.1.0->autogluon) (0.16.0)\n", + "Requirement already satisfied: soupsieve>1.2 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from beautifulsoup4->gdown>=4.0.0->nlpaug<1.2.0,>=1.1.10->autogluon.multimodal==1.1.0->autogluon) (2.5)\n", + "Requirement already satisfied: oss2~=2.17.0 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from openxlab->opendatalab->openmim<0.4.0,>=0.3.7->autogluon.multimodal==1.1.0->autogluon) (2.17.0)\n", + "Collecting setuptools (from autogluon.common==1.1.0->autogluon.core==1.1.0->autogluon.core[all]==1.1.0->autogluon)\n", + " Downloading setuptools-60.2.0-py3-none-any.whl.metadata (5.1 kB)\n", + "Requirement already satisfied: PySocks!=1.5.7,>=1.5.6 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from requests[socks]->gdown>=4.0.0->nlpaug<1.2.0,>=1.1.10->autogluon.multimodal==1.1.0->autogluon) (1.7.1)\n", + "Requirement already satisfied: cachetools<6.0,>=2.0.0 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from google-auth<3.0.dev0,>=2.14.1->google-api-core<3.0.0,>=1.0.0->opencensus->ray[default,tune]<2.11,>=2.10.0; extra == \"all\"->autogluon.core[all]==1.1.0->autogluon) (5.3.3)\n", + "Requirement already satisfied: pyasn1-modules>=0.2.1 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from google-auth<3.0.dev0,>=2.14.1->google-api-core<3.0.0,>=1.0.0->opencensus->ray[default,tune]<2.11,>=2.10.0; extra == \"all\"->autogluon.core[all]==1.1.0->autogluon) (0.4.0)\n", + "Requirement already satisfied: rsa<5,>=3.1.4 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from google-auth<3.0.dev0,>=2.14.1->google-api-core<3.0.0,>=1.0.0->opencensus->ray[default,tune]<2.11,>=2.10.0; extra == \"all\"->autogluon.core[all]==1.1.0->autogluon) (4.9)\n", + "Requirement already satisfied: marisa-trie>=0.7.7 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from language-data>=1.2->langcodes<4.0.0,>=3.2.0->spacy<4->fastai<2.8,>=2.3.1->autogluon.tabular[all]==1.1.0->autogluon) (1.1.1)\n", + "Requirement already satisfied: crcmod>=1.7 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from oss2~=2.17.0->openxlab->opendatalab->openmim<0.4.0,>=0.3.7->autogluon.multimodal==1.1.0->autogluon) (1.7)\n", + "Requirement already satisfied: aliyun-python-sdk-kms>=2.4.1 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from oss2~=2.17.0->openxlab->opendatalab->openmim<0.4.0,>=0.3.7->autogluon.multimodal==1.1.0->autogluon) (2.16.3)\n", + "Requirement already satisfied: aliyun-python-sdk-core>=2.13.12 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from oss2~=2.17.0->openxlab->opendatalab->openmim<0.4.0,>=0.3.7->autogluon.multimodal==1.1.0->autogluon) (2.15.1)\n", + "Requirement already satisfied: cryptography>=2.6.0 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from aliyun-python-sdk-core>=2.13.12->oss2~=2.17.0->openxlab->opendatalab->openmim<0.4.0,>=0.3.7->autogluon.multimodal==1.1.0->autogluon) (42.0.7)\n", + "Requirement already satisfied: pyasn1<0.7.0,>=0.4.6 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from pyasn1-modules>=0.2.1->google-auth<3.0.dev0,>=2.14.1->google-api-core<3.0.0,>=1.0.0->opencensus->ray[default,tune]<2.11,>=2.10.0; extra == \"all\"->autogluon.core[all]==1.1.0->autogluon) (0.6.0)\n", + "Requirement already satisfied: cffi>=1.12 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from cryptography>=2.6.0->aliyun-python-sdk-core>=2.13.12->oss2~=2.17.0->openxlab->opendatalab->openmim<0.4.0,>=0.3.7->autogluon.multimodal==1.1.0->autogluon) (1.16.0)\n", + "Requirement already satisfied: pycparser in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from cffi>=1.12->cryptography>=2.6.0->aliyun-python-sdk-core>=2.13.12->oss2~=2.17.0->openxlab->opendatalab->openmim<0.4.0,>=0.3.7->autogluon.multimodal==1.1.0->autogluon) (2.22)\n", + "Downloading setuptools-60.2.0-py3-none-any.whl (953 kB)\n", + " ---------------------------------------- 0.0/953.1 kB ? eta -:--:--\n", + " --------------------------------------- 20.5/953.1 kB ? eta -:--:--\n", + " ---------------------- ----------------- 542.7/953.1 kB 8.5 MB/s eta 0:00:01\n", + " --------------------------------------- 953.1/953.1 kB 11.9 MB/s eta 0:00:00\n", + "Installing collected packages: setuptools\n", + " Attempting uninstall: setuptools\n", + " Found existing installation: setuptools 70.0.0\n", + " Uninstalling setuptools-70.0.0:\n", + " Successfully uninstalled setuptools-70.0.0\n", + "Successfully installed setuptools-60.2.0\n", + "Note: you may need to restart the kernel to use updated packages.\n" + ] + } + ], + "source": [ + "%pip install -U pip\n", + "%pip install -U setuptools wheel\n", + "%pip install autogluon scikit-learn" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "import pandas as pd\n", + "from sklearn.model_selection import train_test_split\n", + "\n", + "dataset_path = \"../Dataset/Thyroid_Disease_Data.csv\"\n", + "data = pd.read_csv(dataset_path)\n", + "\n", + "train_data, test_data = train_test_split(data, test_size=0.2, random_state=42) \n", + "\n", + "train_data.to_csv(\"../Dataset/final_train.csv\", index=False)\n", + "test_data.to_csv(\"../Dataset/final_test.csv\", index=False)" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "c:\\Users\\arpit\\Desktop\\dl\\env\\Lib\\site-packages\\tqdm\\auto.py:21: TqdmWarning: IProgress not found. Please update jupyter and ipywidgets. See https://ipywidgets.readthedocs.io/en/stable/user_install.html\n", + " from .autonotebook import tqdm as notebook_tqdm\n", + "No path specified. Models will be saved in: \"AutogluonModels\\ag-20240601_060303\"\n", + "No presets specified! To achieve strong results with AutoGluon, it is recommended to use the available presets.\n", + "\tRecommended Presets (For more details refer to https://auto.gluon.ai/stable/tutorials/tabular/tabular-essentials.html#presets):\n", + "\tpresets='best_quality' : Maximize accuracy. Default time_limit=3600.\n", + "\tpresets='high_quality' : Strong accuracy with fast inference speed. Default time_limit=3600.\n", + "\tpresets='good_quality' : Good accuracy with very fast inference speed. Default time_limit=3600.\n", + "\tpresets='medium_quality' : Fast training time, ideal for initial prototyping.\n", + "Beginning AutoGluon training ...\n", + "AutoGluon will save models to \"AutogluonModels\\ag-20240601_060303\"\n", + "=================== System Info ===================\n", + "AutoGluon Version: 1.1.0\n", + "Python Version: 3.11.9\n", + "Operating System: Windows\n", + "Platform Machine: AMD64\n", + "Platform Version: 10.0.22631\n", + "CPU Count: 16\n", + "Memory Avail: 2.67 GB / 15.63 GB (17.1%)\n", + "Disk Space Avail: 17.80 GB / 453.74 GB (3.9%)\n", + "===================================================\n", + "Train Data Rows: 306\n", + "Train Data Columns: 16\n", + "Label Column: Recurred\n", + "AutoGluon infers your prediction problem is: 'binary' (because only two unique label-values observed).\n", + "\t2 unique label values: ['No', 'Yes']\n", + "\tIf 'binary' is not the correct problem_type, please manually specify the problem_type parameter during predictor init (You may specify problem_type as one of: ['binary', 'multiclass', 'regression'])\n", + "Problem Type: binary\n", + "Preprocessing data ...\n", + "Selected class <--> label mapping: class 1 = Yes, class 0 = No\n", + "\tNote: For your binary classification, AutoGluon arbitrarily selected which label-value represents positive (Yes) vs negative (No) class.\n", + "\tTo explicitly set the positive_class, either rename classes to 1 and 0, or specify positive_class in Predictor init.\n", + "Using Feature Generators to preprocess the data ...\n", + "Fitting AutoMLPipelineFeatureGenerator...\n", + "\tAvailable Memory: 2730.83 MB\n", + "\tTrain Data (Original) Memory Usage: 0.28 MB (0.0% of available memory)\n", + "\tInferring data type of each feature based on column values. Set feature_metadata_in to manually specify special dtypes of the features.\n", + "\tStage 1 Generators:\n", + "\t\tFitting AsTypeFeatureGenerator...\n", + "\t\t\tNote: Converting 6 features to boolean dtype as they only contain 2 unique values.\n", + "\tStage 2 Generators:\n", + "\t\tFitting FillNaFeatureGenerator...\n", + "\tStage 3 Generators:\n", + "\t\tFitting IdentityFeatureGenerator...\n", + "\t\tFitting CategoryFeatureGenerator...\n", + "\t\t\tFitting CategoryMemoryMinimizeFeatureGenerator...\n", + "\tStage 4 Generators:\n", + "\t\tFitting DropUniqueFeatureGenerator...\n", + "\tStage 5 Generators:\n", + "\t\tFitting DropDuplicatesFeatureGenerator...\n", + "\tTypes of features in original data (raw dtype, special dtypes):\n", + "\t\t('int', []) : 1 | ['Age']\n", + "\t\t('object', []) : 15 | ['Gender', 'Smoking', 'Hx Smoking', 'Hx Radiothreapy', 'Thyroid Function', ...]\n", + "\tTypes of features in processed data (raw dtype, special dtypes):\n", + "\t\t('category', []) : 9 | ['Thyroid Function', 'Physical Examination', 'Adenopathy', 'Pathology', 'Risk', ...]\n", + "\t\t('int', []) : 1 | ['Age']\n", + "\t\t('int', ['bool']) : 6 | ['Gender', 'Smoking', 'Hx Smoking', 'Hx Radiothreapy', 'Focality', ...]\n", + "\t0.1s = Fit runtime\n", + "\t16 features in original data used to generate 16 features in processed data.\n", + "\tTrain Data (Processed) Memory Usage: 0.01 MB (0.0% of available memory)\n", + "Data preprocessing and feature engineering runtime = 0.11s ...\n", + "AutoGluon will gauge predictive performance using evaluation metric: 'accuracy'\n", + "\tTo change this, specify the eval_metric parameter of Predictor()\n", + "Automatically generating train/validation split with holdout_frac=0.2, Train Rows: 244, Val Rows: 62\n", + "User-specified model hyperparameters to be fit:\n", + "{\n", + "\t'NN_TORCH': {},\n", + "\t'GBM': [{'extra_trees': True, 'ag_args': {'name_suffix': 'XT'}}, {}, 'GBMLarge'],\n", + "\t'CAT': {},\n", + "\t'XGB': {},\n", + "\t'FASTAI': {},\n", + "\t'RF': [{'criterion': 'gini', 'ag_args': {'name_suffix': 'Gini', 'problem_types': ['binary', 'multiclass']}}, {'criterion': 'entropy', 'ag_args': {'name_suffix': 'Entr', 'problem_types': ['binary', 'multiclass']}}, {'criterion': 'squared_error', 'ag_args': {'name_suffix': 'MSE', 'problem_types': ['regression', 'quantile']}}],\n", + "\t'XT': [{'criterion': 'gini', 'ag_args': {'name_suffix': 'Gini', 'problem_types': ['binary', 'multiclass']}}, {'criterion': 'entropy', 'ag_args': {'name_suffix': 'Entr', 'problem_types': ['binary', 'multiclass']}}, {'criterion': 'squared_error', 'ag_args': {'name_suffix': 'MSE', 'problem_types': ['regression', 'quantile']}}],\n", + "\t'KNN': [{'weights': 'uniform', 'ag_args': {'name_suffix': 'Unif'}}, {'weights': 'distance', 'ag_args': {'name_suffix': 'Dist'}}],\n", + "}\n", + "Fitting 13 L1 models ...\n", + "Fitting model: KNeighborsUnif ...\n", + "\t0.6935\t = Validation score (accuracy)\n", + "\t2.09s\t = Training runtime\n", + "\t0.02s\t = Validation runtime\n", + "Fitting model: KNeighborsDist ...\n", + "\t0.629\t = Validation score (accuracy)\n", + "\t0.0s\t = Training runtime\n", + "\t0.02s\t = Validation runtime\n", + "Fitting model: LightGBMXT ...\n", + "\t0.8871\t = Validation score (accuracy)\n", + "\t0.69s\t = Training runtime\n", + "\t0.01s\t = Validation runtime\n", + "Fitting model: LightGBM ...\n", + "\t0.9677\t = Validation score (accuracy)\n", + "\t0.31s\t = Training runtime\n", + "\t0.01s\t = Validation runtime\n", + "Fitting model: RandomForestGini ...\n", + "\t0.9355\t = Validation score (accuracy)\n", + "\t0.89s\t = Training runtime\n", + "\t0.04s\t = Validation runtime\n", + "Fitting model: RandomForestEntr ...\n", + "\t0.9355\t = Validation score (accuracy)\n", + "\t0.51s\t = Training runtime\n", + "\t0.04s\t = Validation runtime\n", + "Fitting model: CatBoost ...\n", + "\t0.9355\t = Validation score (accuracy)\n", + "\t11.08s\t = Training runtime\n", + "\t0.01s\t = Validation runtime\n", + "Fitting model: ExtraTreesGini ...\n", + "\t0.9032\t = Validation score (accuracy)\n", + "\t0.62s\t = Training runtime\n", + "\t0.11s\t = Validation runtime\n", + "Fitting model: ExtraTreesEntr ...\n", + "\t0.9194\t = Validation score (accuracy)\n", + "\t0.65s\t = Training runtime\n", + "\t0.06s\t = Validation runtime\n", + "Fitting model: NeuralNetFastAI ...\n", + "\t0.9677\t = Validation score (accuracy)\n", + "\t5.25s\t = Training runtime\n", + "\t0.04s\t = Validation runtime\n", + "Fitting model: XGBoost ...\n", + "\t0.9677\t = Validation score (accuracy)\n", + "\t0.95s\t = Training runtime\n", + "\t0.01s\t = Validation runtime\n", + "Fitting model: NeuralNetTorch ...\n", + "\t0.9516\t = Validation score (accuracy)\n", + "\t2.78s\t = Training runtime\n", + "\t0.01s\t = Validation runtime\n", + "Fitting model: LightGBMLarge ...\n", + "\t0.9839\t = Validation score (accuracy)\n", + "\t0.48s\t = Training runtime\n", + "\t0.01s\t = Validation runtime\n", + "Fitting model: WeightedEnsemble_L2 ...\n", + "\tEnsemble Weights: {'LightGBMLarge': 1.0}\n", + "\t0.9839\t = Validation score (accuracy)\n", + "\t0.08s\t = Training runtime\n", + "\t0.01s\t = Validation runtime\n", + "AutoGluon training complete, total runtime = 27.18s ... Best model: \"WeightedEnsemble_L2\"\n", + "TabularPredictor saved. To load, use: predictor = TabularPredictor.load(\"AutogluonModels\\ag-20240601_060303\")\n" + ] + } + ], + "source": [ + "from autogluon.tabular import TabularDataset, TabularPredictor\n", + "\n", + "data_root = '../Dataset/'\n", + "train_data = TabularDataset(data_root + 'final_train.csv')\n", + "test_data = TabularDataset(data_root + 'final_test.csv')\n", + "\n", + "predictor = TabularPredictor(label='Recurred').fit(train_data=train_data)\n", + "predictions = predictor.predict(test_data)" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Loaded data from: ../Dataset/test.csv | Columns = 17 / 17 | Rows = 77 -> 77\n" + ] + }, + { + "data": { + "text/plain": [ + "0 No\n", + "1 No\n", + "2 Yes\n", + "3 No\n", + "4 No\n", + " ... \n", + "72 No\n", + "73 No\n", + "74 No\n", + "75 Yes\n", + "76 Yes\n", + "Name: Recurred, Length: 77, dtype: object" + ] + }, + "execution_count": 4, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "model = TabularPredictor.load(\"AutogluonModels/ag-20240601_040114\")\n", + "test_data = TabularDataset(data_root + 'final_test.csv')\n", + "\n", + "model.predict(test_data)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "WeightedEnsemble_L2 Validation score: 0.9839" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "---" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# MLP Model" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Looking in indexes: https://pypi.org/simple, https://pypi.ngc.nvidia.com\n", + "Requirement already satisfied: keras in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (3.3.3)\n", + "Requirement already satisfied: tensorflow in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (2.16.1)\n", + "Requirement already satisfied: absl-py in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from keras) (2.1.0)\n", + "Requirement already satisfied: numpy in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from keras) (1.26.4)\n", + "Requirement already satisfied: rich in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from keras) (13.4.2)\n", + "Requirement already satisfied: namex in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from keras) (0.0.8)\n", + "Requirement already satisfied: h5py in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from keras) (3.11.0)\n", + "Requirement already satisfied: optree in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from keras) (0.11.0)\n", + "Requirement already satisfied: ml-dtypes in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from keras) (0.3.2)\n", + "Requirement already satisfied: tensorflow-intel==2.16.1 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from tensorflow) (2.16.1)\n", + "Requirement already satisfied: astunparse>=1.6.0 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from tensorflow-intel==2.16.1->tensorflow) (1.6.3)\n", + "Requirement already satisfied: flatbuffers>=23.5.26 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from tensorflow-intel==2.16.1->tensorflow) (24.3.25)\n", + "Requirement already satisfied: gast!=0.5.0,!=0.5.1,!=0.5.2,>=0.2.1 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from tensorflow-intel==2.16.1->tensorflow) (0.5.4)\n", + "Requirement already satisfied: google-pasta>=0.1.1 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from tensorflow-intel==2.16.1->tensorflow) (0.2.0)\n", + "Requirement already satisfied: libclang>=13.0.0 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from tensorflow-intel==2.16.1->tensorflow) (18.1.1)\n", + "Requirement already satisfied: opt-einsum>=2.3.2 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from tensorflow-intel==2.16.1->tensorflow) (3.3.0)\n", + "Requirement already satisfied: packaging in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from tensorflow-intel==2.16.1->tensorflow) (24.0)\n", + "Requirement already satisfied: protobuf!=4.21.0,!=4.21.1,!=4.21.2,!=4.21.3,!=4.21.4,!=4.21.5,<5.0.0dev,>=3.20.3 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from tensorflow-intel==2.16.1->tensorflow) (4.25.3)\n", + "Requirement already satisfied: requests<3,>=2.21.0 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from tensorflow-intel==2.16.1->tensorflow) (2.28.2)\n", + "Requirement already satisfied: setuptools in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from tensorflow-intel==2.16.1->tensorflow) (60.2.0)\n", + "Requirement already satisfied: six>=1.12.0 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from tensorflow-intel==2.16.1->tensorflow) (1.16.0)\n", + "Requirement already satisfied: termcolor>=1.1.0 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from tensorflow-intel==2.16.1->tensorflow) (2.4.0)\n", + "Requirement already satisfied: typing-extensions>=3.6.6 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from tensorflow-intel==2.16.1->tensorflow) (4.12.0)\n", + "Requirement already satisfied: wrapt>=1.11.0 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from tensorflow-intel==2.16.1->tensorflow) (1.16.0)\n", + "Requirement already satisfied: grpcio<2.0,>=1.24.3 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from tensorflow-intel==2.16.1->tensorflow) (1.64.0)\n", + "Requirement already satisfied: tensorboard<2.17,>=2.16 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from tensorflow-intel==2.16.1->tensorflow) (2.16.2)\n", + "Requirement already satisfied: tensorflow-io-gcs-filesystem>=0.23.1 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from tensorflow-intel==2.16.1->tensorflow) (0.31.0)\n", + "Requirement already satisfied: markdown-it-py>=2.2.0 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from rich->keras) (3.0.0)\n", + "Requirement already satisfied: pygments<3.0.0,>=2.13.0 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from rich->keras) (2.18.0)\n", + "Requirement already satisfied: wheel<1.0,>=0.23.0 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from astunparse>=1.6.0->tensorflow-intel==2.16.1->tensorflow) (0.43.0)\n", + "Requirement already satisfied: mdurl~=0.1 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from markdown-it-py>=2.2.0->rich->keras) (0.1.2)\n", + "Requirement already satisfied: charset-normalizer<4,>=2 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from requests<3,>=2.21.0->tensorflow-intel==2.16.1->tensorflow) (3.3.2)\n", + "Requirement already satisfied: idna<4,>=2.5 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from requests<3,>=2.21.0->tensorflow-intel==2.16.1->tensorflow) (3.7)\n", + "Requirement already satisfied: urllib3<1.27,>=1.21.1 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from requests<3,>=2.21.0->tensorflow-intel==2.16.1->tensorflow) (1.26.18)\n", + "Requirement already satisfied: certifi>=2017.4.17 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from requests<3,>=2.21.0->tensorflow-intel==2.16.1->tensorflow) (2024.2.2)\n", + "Requirement already satisfied: markdown>=2.6.8 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from tensorboard<2.17,>=2.16->tensorflow-intel==2.16.1->tensorflow) (3.6)\n", + "Requirement already satisfied: tensorboard-data-server<0.8.0,>=0.7.0 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from tensorboard<2.17,>=2.16->tensorflow-intel==2.16.1->tensorflow) (0.7.2)\n", + "Requirement already satisfied: werkzeug>=1.0.1 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from tensorboard<2.17,>=2.16->tensorflow-intel==2.16.1->tensorflow) (3.0.3)\n", + "Requirement already satisfied: MarkupSafe>=2.1.1 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from werkzeug>=1.0.1->tensorboard<2.17,>=2.16->tensorflow-intel==2.16.1->tensorflow) (2.1.5)\n", + "Note: you may need to restart the kernel to use updated packages.\n" + ] + } + ], + "source": [ + "%pip install keras tensorflow" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "import pandas as pd\n", + "import numpy as np\n", + "from sklearn.model_selection import train_test_split\n", + "from sklearn.preprocessing import StandardScaler, LabelEncoder, OneHotEncoder\n", + "from sklearn.compose import ColumnTransformer\n", + "from tensorflow.keras.models import Sequential\n", + "from tensorflow.keras.layers import Dense, Dropout" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "data = pd.read_csv('../Dataset/Thyroid_Disease_Data.csv')\n", + "\n", + "X = data.drop('Recurred', axis=1)\n", + "y = data['Recurred']" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "if y.dtype == 'object':\n", + " le = LabelEncoder()\n", + " y = le.fit_transform(y)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "categorical_cols = X.select_dtypes(include=['object']).columns\n", + "numerical_cols = X.select_dtypes(include=[np.number]).columns\n", + "\n", + "numerical_transformer = StandardScaler()\n", + "categorical_transformer = OneHotEncoder(handle_unknown='ignore')\n", + "\n", + "preprocessor = ColumnTransformer(\n", + " transformers=[\n", + " ('num', numerical_transformer, numerical_cols),\n", + " ('cat', categorical_transformer, categorical_cols)\n", + " ])\n", + "\n", + "X = preprocessor.fit_transform(X)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 1/50\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "c:\\Users\\arpit\\Desktop\\dl\\env\\Lib\\site-packages\\keras\\src\\layers\\core\\dense.py:87: UserWarning: Do not pass an `input_shape`/`input_dim` argument to a layer. When using Sequential models, prefer using an `Input(shape)` object as the first layer in the model instead.\n", + " super().__init__(activity_regularizer=activity_regularizer, **kwargs)\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\u001b[1m10/10\u001b[0m \u001b[32mโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 25ms/step - accuracy: 0.6701 - loss: 0.6454 - val_accuracy: 0.7792 - val_loss: 0.4609\n", + "Epoch 2/50\n", + "\u001b[1m10/10\u001b[0m \u001b[32mโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 7ms/step - accuracy: 0.7309 - loss: 0.5432 - val_accuracy: 0.8052 - val_loss: 0.4042\n", + "Epoch 3/50\n", + "\u001b[1m10/10\u001b[0m \u001b[32mโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 7ms/step - accuracy: 0.7882 - loss: 0.4812 - val_accuracy: 0.8312 - val_loss: 0.3658\n", + "Epoch 4/50\n", + "\u001b[1m10/10\u001b[0m \u001b[32mโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 7ms/step - accuracy: 0.7464 - loss: 0.4787 - val_accuracy: 0.8571 - val_loss: 0.3314\n", + "Epoch 5/50\n", + "\u001b[1m10/10\u001b[0m \u001b[32mโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 7ms/step - accuracy: 0.8045 - loss: 0.4216 - val_accuracy: 0.8831 - val_loss: 0.3007\n", + "Epoch 6/50\n", + "\u001b[1m10/10\u001b[0m \u001b[32mโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 5ms/step - accuracy: 0.8582 - loss: 0.3996 - val_accuracy: 0.8701 - val_loss: 0.2707\n", + "Epoch 7/50\n", + "\u001b[1m10/10\u001b[0m \u001b[32mโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 6ms/step - accuracy: 0.8293 - loss: 0.3780 - val_accuracy: 0.8701 - val_loss: 0.2474\n", + "Epoch 8/50\n", + "\u001b[1m10/10\u001b[0m \u001b[32mโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 5ms/step - accuracy: 0.8472 - loss: 0.3721 - val_accuracy: 0.8831 - val_loss: 0.2252\n", + "Epoch 9/50\n", + "\u001b[1m10/10\u001b[0m \u001b[32mโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 5ms/step - accuracy: 0.8490 - loss: 0.3451 - val_accuracy: 0.9091 - val_loss: 0.2005\n", + "Epoch 10/50\n", + "\u001b[1m10/10\u001b[0m \u001b[32mโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 4ms/step - accuracy: 0.9058 - loss: 0.2704 - val_accuracy: 0.9221 - val_loss: 0.1837\n", + "Epoch 11/50\n", + "\u001b[1m10/10\u001b[0m \u001b[32mโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 5ms/step - accuracy: 0.8558 - loss: 0.3178 - val_accuracy: 0.9481 - val_loss: 0.1717\n", + "Epoch 12/50\n", + "\u001b[1m10/10\u001b[0m \u001b[32mโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 5ms/step - accuracy: 0.8806 - loss: 0.2973 - val_accuracy: 0.9481 - val_loss: 0.1629\n", + "Epoch 13/50\n", + "\u001b[1m10/10\u001b[0m \u001b[32mโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 5ms/step - accuracy: 0.8856 - loss: 0.2744 - val_accuracy: 0.9481 - val_loss: 0.1556\n", + "Epoch 14/50\n", + "\u001b[1m10/10\u001b[0m \u001b[32mโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 6ms/step - accuracy: 0.9392 - loss: 0.2464 - val_accuracy: 0.9481 - val_loss: 0.1441\n", + "Epoch 15/50\n", + "\u001b[1m10/10\u001b[0m \u001b[32mโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 6ms/step - accuracy: 0.9216 - loss: 0.2069 - val_accuracy: 0.9481 - val_loss: 0.1369\n", + "Epoch 16/50\n", + "\u001b[1m10/10\u001b[0m \u001b[32mโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 6ms/step - accuracy: 0.9090 - loss: 0.2347 - val_accuracy: 0.9481 - val_loss: 0.1305\n", + "Epoch 17/50\n", + "\u001b[1m10/10\u001b[0m \u001b[32mโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 7ms/step - accuracy: 0.9197 - loss: 0.1980 - val_accuracy: 0.9481 - val_loss: 0.1245\n", + "Epoch 18/50\n", + "\u001b[1m10/10\u001b[0m \u001b[32mโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 8ms/step - accuracy: 0.9091 - loss: 0.2312 - val_accuracy: 0.9481 - val_loss: 0.1196\n", + "Epoch 19/50\n", + "\u001b[1m10/10\u001b[0m \u001b[32mโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 6ms/step - accuracy: 0.9258 - loss: 0.1794 - val_accuracy: 0.9481 - val_loss: 0.1142\n", + "Epoch 20/50\n", + "\u001b[1m10/10\u001b[0m \u001b[32mโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 7ms/step - accuracy: 0.9127 - loss: 0.2144 - val_accuracy: 0.9481 - val_loss: 0.1110\n", + "Epoch 21/50\n", + "\u001b[1m10/10\u001b[0m \u001b[32mโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 6ms/step - accuracy: 0.9184 - loss: 0.1929 - val_accuracy: 0.9610 - val_loss: 0.1122\n", + "Epoch 22/50\n", + "\u001b[1m10/10\u001b[0m \u001b[32mโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 6ms/step - accuracy: 0.9390 - loss: 0.1689 - val_accuracy: 0.9610 - val_loss: 0.1022\n", + "Epoch 23/50\n", + "\u001b[1m10/10\u001b[0m \u001b[32mโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 6ms/step - accuracy: 0.9236 - loss: 0.1859 - val_accuracy: 0.9481 - val_loss: 0.0931\n", + "Epoch 24/50\n", + "\u001b[1m10/10\u001b[0m \u001b[32mโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 6ms/step - accuracy: 0.9437 - loss: 0.1742 - val_accuracy: 0.9610 - val_loss: 0.0869\n", + "Epoch 25/50\n", + "\u001b[1m10/10\u001b[0m \u001b[32mโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 5ms/step - accuracy: 0.9449 - loss: 0.1422 - val_accuracy: 0.9610 - val_loss: 0.0895\n", + "Epoch 26/50\n", + "\u001b[1m10/10\u001b[0m \u001b[32mโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 5ms/step - accuracy: 0.9624 - loss: 0.1397 - val_accuracy: 0.9610 - val_loss: 0.0957\n", + "Epoch 27/50\n", + "\u001b[1m10/10\u001b[0m \u001b[32mโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 6ms/step - accuracy: 0.9562 - loss: 0.1530 - val_accuracy: 0.9610 - val_loss: 0.0935\n", + "Epoch 28/50\n", + "\u001b[1m10/10\u001b[0m \u001b[32mโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 5ms/step - accuracy: 0.9609 - loss: 0.1517 - val_accuracy: 0.9610 - val_loss: 0.0820\n", + "Epoch 29/50\n", + "\u001b[1m10/10\u001b[0m \u001b[32mโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 6ms/step - accuracy: 0.9656 - loss: 0.1166 - val_accuracy: 0.9740 - val_loss: 0.0735\n", + "Epoch 30/50\n", + "\u001b[1m10/10\u001b[0m \u001b[32mโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 5ms/step - accuracy: 0.9446 - loss: 0.1292 - val_accuracy: 0.9740 - val_loss: 0.0730\n", + "Epoch 31/50\n", + "\u001b[1m10/10\u001b[0m \u001b[32mโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 5ms/step - accuracy: 0.9623 - loss: 0.1295 - val_accuracy: 0.9740 - val_loss: 0.0701\n", + "Epoch 32/50\n", + "\u001b[1m10/10\u001b[0m \u001b[32mโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 5ms/step - accuracy: 0.9580 - loss: 0.1358 - val_accuracy: 0.9740 - val_loss: 0.0739\n", + "Epoch 33/50\n", + "\u001b[1m10/10\u001b[0m \u001b[32mโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 6ms/step - accuracy: 0.9626 - loss: 0.1590 - val_accuracy: 0.9740 - val_loss: 0.0738\n", + "Epoch 34/50\n", + "\u001b[1m10/10\u001b[0m \u001b[32mโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 6ms/step - accuracy: 0.9432 - loss: 0.1378 - val_accuracy: 0.9740 - val_loss: 0.0714\n", + "Epoch 35/50\n", + "\u001b[1m10/10\u001b[0m \u001b[32mโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 5ms/step - accuracy: 0.9534 - loss: 0.1164 - val_accuracy: 0.9740 - val_loss: 0.0664\n", + "Epoch 36/50\n", + "\u001b[1m10/10\u001b[0m \u001b[32mโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 5ms/step - accuracy: 0.9571 - loss: 0.1167 - val_accuracy: 0.9870 - val_loss: 0.0627\n", + "Epoch 37/50\n", + "\u001b[1m10/10\u001b[0m \u001b[32mโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 5ms/step - accuracy: 0.9447 - loss: 0.1269 - val_accuracy: 0.9740 - val_loss: 0.0664\n", + "Epoch 38/50\n", + "\u001b[1m10/10\u001b[0m \u001b[32mโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 6ms/step - accuracy: 0.9600 - loss: 0.1199 - val_accuracy: 0.9740 - val_loss: 0.0685\n", + "Epoch 39/50\n", + "\u001b[1m10/10\u001b[0m \u001b[32mโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 6ms/step - accuracy: 0.9681 - loss: 0.1198 - val_accuracy: 0.9740 - val_loss: 0.0704\n", + "Epoch 40/50\n", + "\u001b[1m10/10\u001b[0m \u001b[32mโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 5ms/step - accuracy: 0.9675 - loss: 0.0983 - val_accuracy: 0.9870 - val_loss: 0.0645\n", + "Epoch 41/50\n", + "\u001b[1m10/10\u001b[0m \u001b[32mโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 5ms/step - accuracy: 0.9596 - loss: 0.1161 - val_accuracy: 0.9870 - val_loss: 0.0646\n", + "Epoch 42/50\n", + "\u001b[1m10/10\u001b[0m \u001b[32mโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 6ms/step - accuracy: 0.9699 - loss: 0.0837 - val_accuracy: 0.9870 - val_loss: 0.0644\n", + "Epoch 43/50\n", + "\u001b[1m10/10\u001b[0m \u001b[32mโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 6ms/step - accuracy: 0.9701 - loss: 0.0858 - val_accuracy: 0.9870 - val_loss: 0.0618\n", + "Epoch 44/50\n", + "\u001b[1m10/10\u001b[0m \u001b[32mโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 5ms/step - accuracy: 0.9462 - loss: 0.1318 - val_accuracy: 0.9870 - val_loss: 0.0591\n", + "Epoch 45/50\n", + "\u001b[1m10/10\u001b[0m \u001b[32mโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 6ms/step - accuracy: 0.9782 - loss: 0.0892 - val_accuracy: 0.9870 - val_loss: 0.0570\n", + "Epoch 46/50\n", + "\u001b[1m10/10\u001b[0m \u001b[32mโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 6ms/step - accuracy: 0.9679 - loss: 0.0865 - val_accuracy: 0.9870 - val_loss: 0.0541\n", + "Epoch 47/50\n", + "\u001b[1m10/10\u001b[0m \u001b[32mโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 5ms/step - accuracy: 0.9542 - loss: 0.1071 - val_accuracy: 0.9870 - val_loss: 0.0566\n", + "Epoch 48/50\n", + "\u001b[1m10/10\u001b[0m \u001b[32mโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 5ms/step - accuracy: 0.9618 - loss: 0.1223 - val_accuracy: 0.9870 - val_loss: 0.0562\n", + "Epoch 49/50\n", + "\u001b[1m10/10\u001b[0m \u001b[32mโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 6ms/step - accuracy: 0.9778 - loss: 0.0574 - val_accuracy: 0.9870 - val_loss: 0.0572\n", + "Epoch 50/50\n", + "\u001b[1m10/10\u001b[0m \u001b[32mโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 5ms/step - accuracy: 0.9615 - loss: 0.0847 - val_accuracy: 0.9870 - val_loss: 0.0599\n", + "\u001b[1m3/3\u001b[0m \u001b[32mโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 0s/step - accuracy: 0.9935 - loss: 0.0422 \n", + "Accuracy: 98.70%\n" + ] + } + ], + "source": [ + "X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)\n", + "\n", + "model = Sequential()\n", + "model.add(Dense(64, input_dim=X_train.shape[1], activation='relu'))\n", + "model.add(Dropout(0.5))\n", + "model.add(Dense(32, activation='relu'))\n", + "model.add(Dropout(0.5))\n", + "model.add(Dense(1, activation='sigmoid'))\n", + "\n", + "model.compile(optimizer='adam', loss='binary_crossentropy', metrics=['accuracy'])\n", + "history = model.fit(X_train, y_train, epochs=50, batch_size=32, validation_data=(X_test, y_test))\n", + "\n", + "loss, accuracy = model.evaluate(X_test, y_test)\n", + "print(f'Accuracy: {accuracy*100:.2f}%')" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "WARNING:absl:You are saving your model as an HDF5 file via `model.save()` or `keras.saving.save_model(model)`. This file format is considered legacy. We recommend using instead the native Keras format, e.g. `model.save('my_model.keras')` or `keras.saving.save_model(model, 'my_model.keras')`. \n" + ] + } + ], + "source": [ + "model.save(\"MLPModel/model.h5\")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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MtjbSwKkB4qicDdbXeHva21uqreVOm+//TZffPEF9erVw9nZmaioKPr06cNHH32EpaUly5cvJzg4mIsXL1KnTp1CrzNnzhw+++wzPv/8c7755huGDh3KtWvXcHFxKfD89PR0vvjiC1asWIGJiQnDhg1j2rRprFy5EoBPP/2UlStXsnTpUpo0acLXX3/Nxo0b82yhUpCUlBTWrVvHoUOHaNy4MUlJSfz777907doV0O5D9+ijj1KrVi02bdqEh4cHx48fR6PRALB582b69+/Pu+++y/Lly8nKyuKvv/4q1X398ssvad26NVZWVmRkZNC2bVveeustHBwc2Lx5M8OHD6d+/fp06NAB0O6B9+OPP/LVV1/RpUsXoqOjuXDhAgBjx45l4sSJfPnll1haWgLw888/U6tWLbp3717i+ISoUFnpsHkqaHLg0CJo/hx4tzdsTLcvw657iZippXGNSlV1JoZNQSQB0oO72WqaztxW4e977v0gbCz085/w/fff5/HHH9d97+Ligr+/v+77Dz74gA0bNrBp0yYmTpxY6HVGjRqlG834+OOPWbBgAYcPH6ZXr14Fnp+dnc2iRYuoX78+ABMnTuT99+//JvbNN98wffp0+vfvD8C3335brERkzZo1NGzYkGbNmgEwaNAgFi9erEuAVq1aRXx8PEeOHNElZw0aNNC9/qOPPmLQoEHMmTNHd+zB+1FcU6ZM4ZlnnslzbNq0abqvJ02axLZt2/jll1/o0KEDKSkpfP3113z77beMHDkSgPr169OlSxcAnnnmGSZOnMjvv//OgAEDAFi2bBmjRo2SZevC+O2dB0lR97//63V48R8wMVCjTUWBLW9pp77qPQbDN0oCVI1IEbQAoF27dnm+T01NZdq0aTRp0gQnJyfs7Ow4f/58ns1pC9KyZUvd17a2tjg4OOi2VCiIjY2NLvkB7bYLuecnJSURGxurGxkBMDU1pW3btg/9PEuWLGHYsGG674cNG8a6detISUkBIDQ0lNatWxc6MhUaGqqX6aT/3le1Ws0HH3xAixYtcHFxwc7Ojm3btunu6/nz58nMzCz0va2srBg+fDhLliwB4Pjx45w5c4ZRo0aVOVYhytWtCNj3tfbrJ+eBpSNEn4RjSw0X08UtEPY3mJhD788l+almZARID6zNTTn3ftDDTyyH99UXW1vbPN9PmzaN7du388UX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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "import matplotlib.pyplot as plt \n", + " \n", + "accuracy_history = history.history['accuracy']\n", + "val_accuracy_history = history.history['val_accuracy']\n", + "\n", + "plt.plot(accuracy_history, label='Training Accuracy')\n", + "plt.plot(val_accuracy_history, label='Validation Accuracy')\n", + "plt.title('Model Accuracy')\n", + "plt.xlabel('Epoch')\n", + "plt.ylabel('Accuracy')\n", + "plt.legend()\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "MLP Accuracy: 0.9870" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "---" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# TabNet Model" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Looking in indexes: https://pypi.org/simple, https://pypi.ngc.nvidia.com\n", + "Requirement already satisfied: pytorch-tabnet in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (4.1.0)\n", + "Requirement already satisfied: scikit-learn in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (1.4.0)\n", + "Requirement already satisfied: pandas in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (2.2.2)\n", + "Requirement already satisfied: numpy>=1.17 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from pytorch-tabnet) (1.26.4)\n", + "Requirement already satisfied: scipy>1.4 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from pytorch-tabnet) (1.12.0)\n", + "Requirement already satisfied: torch>=1.3 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from pytorch-tabnet) (2.1.2)\n", + "Requirement already satisfied: tqdm>=4.36 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from pytorch-tabnet) (4.65.2)\n", + "Requirement already satisfied: joblib>=1.2.0 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from scikit-learn) (1.4.2)\n", + "Requirement already satisfied: threadpoolctl>=2.0.0 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from scikit-learn) (3.5.0)\n", + "Requirement already satisfied: python-dateutil>=2.8.2 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from pandas) (2.9.0.post0)\n", + "Requirement already satisfied: pytz>=2020.1 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from pandas) (2023.4)\n", + "Requirement already satisfied: tzdata>=2022.7 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from pandas) (2024.1)\n", + "Requirement already satisfied: six>=1.5 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from python-dateutil>=2.8.2->pandas) (1.16.0)\n", + "Requirement already satisfied: filelock in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from torch>=1.3->pytorch-tabnet) (3.14.0)\n", + "Requirement already satisfied: typing-extensions in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from torch>=1.3->pytorch-tabnet) (4.12.0)\n", + "Requirement already satisfied: sympy in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from torch>=1.3->pytorch-tabnet) (1.12.1)\n", + "Requirement already satisfied: networkx in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from torch>=1.3->pytorch-tabnet) (3.3)\n", + "Requirement already satisfied: jinja2 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from torch>=1.3->pytorch-tabnet) (3.1.4)\n", + "Requirement already satisfied: fsspec in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from torch>=1.3->pytorch-tabnet) (2024.3.1)\n", + "Requirement already satisfied: colorama in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from tqdm>=4.36->pytorch-tabnet) (0.4.6)\n", + "Requirement already satisfied: MarkupSafe>=2.0 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from jinja2->torch>=1.3->pytorch-tabnet) (2.1.5)\n", + "Requirement already satisfied: mpmath<1.4.0,>=1.1.0 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from sympy->torch>=1.3->pytorch-tabnet) (1.3.0)\n", + "Note: you may need to restart the kernel to use updated packages.\n" + ] + } + ], + "source": [ + "%pip install pytorch-tabnet scikit-learn pandas" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "import numpy as np\n", + "import pandas as pd\n", + "from sklearn.model_selection import train_test_split\n", + "from sklearn.preprocessing import StandardScaler, LabelEncoder, OneHotEncoder\n", + "from sklearn.compose import ColumnTransformer" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "data = pd.read_csv('../Dataset/Thyroid_Disease_Data.csv')\n", + "\n", + "X = data.drop('Recurred', axis=1)\n", + "y = data['Recurred']\n", + "\n", + "if y.dtype == 'object':\n", + " le = LabelEncoder()\n", + " y = le.fit_transform(y)\n", + "\n", + "categorical_cols = X.select_dtypes(include=['object']).columns\n", + "numerical_cols = X.select_dtypes(include=[np.number]).columns\n", + "\n", + "numerical_transformer = StandardScaler()\n", + "categorical_transformer = OneHotEncoder(handle_unknown='ignore')\n", + "\n", + "preprocessor = ColumnTransformer(\n", + " transformers=[\n", + " ('num', numerical_transformer, numerical_cols),\n", + " ('cat', categorical_transformer, categorical_cols)\n", + " ])\n", + "\n", + "X = preprocessor.fit_transform(X)\n", + "\n", + "X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "epoch 0 | loss: 0.86117 | train_accuracy: 0.64052 | valid_accuracy: 0.66234 | 0:00:00s\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "c:\\Users\\arpit\\Desktop\\dl\\env\\Lib\\site-packages\\pytorch_tabnet\\abstract_model.py:82: UserWarning: Device used : cpu\n", + " warnings.warn(f\"Device used : {self.device}\")\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "epoch 1 | loss: 0.80141 | train_accuracy: 0.70588 | valid_accuracy: 0.75325 | 0:00:00s\n", + "epoch 2 | loss: 0.66793 | train_accuracy: 0.71569 | valid_accuracy: 0.75325 | 0:00:00s\n", + "epoch 3 | loss: 0.63027 | train_accuracy: 0.71242 | valid_accuracy: 0.75325 | 0:00:00s\n", + "epoch 4 | loss: 0.62346 | train_accuracy: 0.70915 | valid_accuracy: 0.75325 | 0:00:00s\n", + "epoch 5 | loss: 0.5593 | train_accuracy: 0.70915 | valid_accuracy: 0.75325 | 0:00:00s\n", + "epoch 6 | loss: 0.51439 | train_accuracy: 0.70915 | valid_accuracy: 0.75325 | 0:00:00s\n", + "epoch 7 | loss: 0.47156 | train_accuracy: 0.70915 | valid_accuracy: 0.75325 | 0:00:00s\n", + "epoch 8 | loss: 0.43915 | train_accuracy: 0.70915 | valid_accuracy: 0.75325 | 0:00:00s\n", + "epoch 9 | loss: 0.44085 | train_accuracy: 0.70915 | valid_accuracy: 0.75325 | 0:00:00s\n", + "epoch 10 | loss: 0.40845 | train_accuracy: 0.70915 | valid_accuracy: 0.75325 | 0:00:00s\n", + "epoch 11 | loss: 0.3848 | train_accuracy: 0.70915 | valid_accuracy: 0.75325 | 0:00:00s\n", + "epoch 12 | loss: 0.35027 | train_accuracy: 0.70915 | valid_accuracy: 0.75325 | 0:00:01s\n", + "epoch 13 | loss: 0.36591 | train_accuracy: 0.70915 | valid_accuracy: 0.75325 | 0:00:01s\n", + "epoch 14 | loss: 0.34834 | train_accuracy: 0.73529 | valid_accuracy: 0.77922 | 0:00:01s\n", + "epoch 15 | loss: 0.30932 | train_accuracy: 0.82026 | valid_accuracy: 0.79221 | 0:00:01s\n", + "epoch 16 | loss: 0.24431 | train_accuracy: 0.85294 | valid_accuracy: 0.81818 | 0:00:01s\n", + "epoch 17 | loss: 0.26792 | train_accuracy: 0.88889 | valid_accuracy: 0.8961 | 0:00:01s\n", + "epoch 18 | loss: 0.21454 | train_accuracy: 0.9085 | valid_accuracy: 0.92208 | 0:00:01s\n", + "epoch 19 | loss: 0.1926 | train_accuracy: 0.93464 | valid_accuracy: 0.94805 | 0:00:01s\n", + "epoch 20 | loss: 0.20314 | train_accuracy: 0.93791 | valid_accuracy: 0.96104 | 0:00:01s\n", + "epoch 21 | loss: 0.20019 | train_accuracy: 0.93791 | valid_accuracy: 0.96104 | 0:00:01s\n", + "epoch 22 | loss: 0.1726 | train_accuracy: 0.94118 | valid_accuracy: 0.96104 | 0:00:01s\n", + "epoch 23 | loss: 0.15827 | train_accuracy: 0.93791 | valid_accuracy: 0.96104 | 0:00:01s\n", + "epoch 24 | loss: 0.14607 | train_accuracy: 0.93791 | valid_accuracy: 0.96104 | 0:00:02s\n", + "epoch 25 | loss: 0.14856 | train_accuracy: 0.94118 | valid_accuracy: 0.96104 | 0:00:02s\n", + "epoch 26 | loss: 0.15714 | train_accuracy: 0.94118 | valid_accuracy: 0.96104 | 0:00:02s\n", + "epoch 27 | loss: 0.13137 | train_accuracy: 0.94118 | valid_accuracy: 0.96104 | 0:00:02s\n", + "epoch 28 | loss: 0.12659 | train_accuracy: 0.94118 | valid_accuracy: 0.96104 | 0:00:02s\n", + "epoch 29 | loss: 0.1171 | train_accuracy: 0.94118 | valid_accuracy: 0.96104 | 0:00:02s\n", + "epoch 30 | loss: 0.11278 | train_accuracy: 0.94118 | valid_accuracy: 0.96104 | 0:00:02s\n", + "epoch 31 | loss: 0.1081 | train_accuracy: 0.94118 | valid_accuracy: 0.96104 | 0:00:02s\n", + "epoch 32 | loss: 0.119 | train_accuracy: 0.94118 | valid_accuracy: 0.96104 | 0:00:02s\n", + "epoch 33 | loss: 0.13135 | train_accuracy: 0.94118 | valid_accuracy: 0.96104 | 0:00:02s\n", + "epoch 34 | loss: 0.12747 | train_accuracy: 0.94118 | valid_accuracy: 0.96104 | 0:00:02s\n", + "epoch 35 | loss: 0.10087 | train_accuracy: 0.94118 | valid_accuracy: 0.96104 | 0:00:02s\n", + "epoch 36 | loss: 0.11973 | train_accuracy: 0.94118 | valid_accuracy: 0.96104 | 0:00:03s\n", + "epoch 37 | loss: 0.14375 | train_accuracy: 0.94118 | valid_accuracy: 0.96104 | 0:00:03s\n", + "epoch 38 | loss: 0.13086 | train_accuracy: 0.94118 | valid_accuracy: 0.96104 | 0:00:03s\n", + "epoch 39 | loss: 0.12776 | train_accuracy: 0.94118 | valid_accuracy: 0.96104 | 0:00:03s\n", + "epoch 40 | loss: 0.13075 | train_accuracy: 0.94118 | valid_accuracy: 0.96104 | 0:00:03s\n", + "\n", + "Early stopping occurred at epoch 40 with best_epoch = 20 and best_valid_accuracy = 0.96104\n", + "Successfully saved model at ./TabNetModel/tabnet_model.pth.zip\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "c:\\Users\\arpit\\Desktop\\dl\\env\\Lib\\site-packages\\pytorch_tabnet\\callbacks.py:172: UserWarning: Best weights from best epoch are automatically used!\n", + " warnings.warn(wrn_msg)\n" + ] + }, + { + "data": { + "text/plain": [ + "'./TabNetModel/tabnet_model.pth.zip'" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "from pytorch_tabnet.tab_model import TabNetClassifier\n", + "import torch\n", + "\n", + "tabnet_clf = TabNetClassifier(optimizer_fn=torch.optim.Adam,\n", + " optimizer_params=dict(lr=2e-2),\n", + " scheduler_params={\"step_size\":10, \"gamma\":0.9},\n", + " scheduler_fn=torch.optim.lr_scheduler.StepLR, \n", + " mask_type='sparsemax') # \"sparsemax\" or \"entmax\" are the options\n", + "\n", + "tabnet_clf.fit(\n", + " X_train=X_train, y_train=y_train,\n", + " eval_set=[(X_train, y_train), (X_test, y_test)],\n", + " eval_name=['train', 'valid'],\n", + " eval_metric=['accuracy'],\n", + " max_epochs=100, patience=20,\n", + " batch_size=1024, virtual_batch_size=128,\n", + " num_workers=0,\n", + " drop_last=False\n", + ")\n", + "\n", + "saving_path_name = \"./TabNetModel/tabnet_model.pth\"\n", + "tabnet_clf.save_model(saving_path_name)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Accuracy: 96.10%\n" + ] + } + ], + "source": [ + "preds = tabnet_clf.predict(X_test)\n", + "\n", + "accuracy = (preds == y_test).mean()\n", + "print(f'Accuracy: {accuracy*100:.2f}%')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "TabNet Accuracy: 0.9610" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "env", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.11.9" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/Thyroid Cancer Recurrence Prediction/Model/autogluon_model.ipynb b/Thyroid Cancer Recurrence Prediction/Model/autogluon_model.ipynb new file mode 100644 index 0000000000..3fac1b743d --- /dev/null +++ b/Thyroid Cancer Recurrence Prediction/Model/autogluon_model.ipynb @@ -0,0 +1,517 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Looking in indexes: https://pypi.org/simple, https://pypi.ngc.nvidia.com\n", + "Requirement already satisfied: pip in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (24.0)\n", + "Note: you may need to restart the kernel to use updated packages.\n", + "Looking in indexes: https://pypi.org/simple, https://pypi.ngc.nvidia.com\n", + "Requirement already satisfied: setuptools in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (60.2.0)\n", + "Collecting setuptools\n", + " Downloading setuptools-70.0.0-py3-none-any.whl.metadata (5.9 kB)\n", + "Requirement already satisfied: wheel in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (0.43.0)\n", + "Downloading setuptools-70.0.0-py3-none-any.whl (863 kB)\n", + " ---------------------------------------- 0.0/863.4 kB ? eta -:--:--\n", + " - -------------------------------------- 30.7/863.4 kB 1.3 MB/s eta 0:00:01\n", + " ------------------- -------------------- 430.1/863.4 kB 6.8 MB/s eta 0:00:01\n", + " ---------------------------------------- 863.4/863.4 kB 9.1 MB/s eta 0:00:00\n", + "Installing collected packages: setuptools\n", + " Attempting uninstall: setuptools\n", + " Found existing installation: setuptools 60.2.0\n", + " Uninstalling setuptools-60.2.0:\n", + " Successfully uninstalled setuptools-60.2.0\n", + "Successfully installed setuptools-70.0.0\n", + "Note: you may need to restart the kernel to use updated packages.\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "ERROR: pip's dependency resolver does not currently take into account all the packages that are installed. This behaviour is the source of the following dependency conflicts.\n", + "openxlab 0.1.0 requires setuptools~=60.2.0, but you have setuptools 70.0.0 which is incompatible.\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Looking in indexes: https://pypi.org/simple, https://pypi.ngc.nvidia.com\n", + "Requirement already satisfied: autogluon in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (1.1.0)\n", + "Requirement already satisfied: scikit-learn in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (1.4.0)\n", + "Requirement already satisfied: autogluon.core==1.1.0 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from autogluon.core[all]==1.1.0->autogluon) (1.1.0)\n", + "Requirement already satisfied: autogluon.features==1.1.0 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from autogluon) (1.1.0)\n", + "Requirement already satisfied: autogluon.tabular==1.1.0 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from autogluon.tabular[all]==1.1.0->autogluon) (1.1.0)\n", + "Requirement already satisfied: autogluon.multimodal==1.1.0 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from autogluon) (1.1.0)\n", + "Requirement already satisfied: autogluon.timeseries==1.1.0 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from autogluon.timeseries[all]==1.1.0->autogluon) (1.1.0)\n", + "Requirement already satisfied: numpy<1.29,>=1.21 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from autogluon.core==1.1.0->autogluon.core[all]==1.1.0->autogluon) (1.26.4)\n", + "Requirement already satisfied: scipy<1.13,>=1.5.4 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from autogluon.core==1.1.0->autogluon.core[all]==1.1.0->autogluon) (1.12.0)\n", + "Requirement already satisfied: networkx<4,>=3.0 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from autogluon.core==1.1.0->autogluon.core[all]==1.1.0->autogluon) (3.3)\n", + "Requirement already satisfied: pandas<2.3.0,>=2.0.0 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from autogluon.core==1.1.0->autogluon.core[all]==1.1.0->autogluon) (2.2.2)\n", + "Requirement already satisfied: tqdm<5,>=4.38 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from autogluon.core==1.1.0->autogluon.core[all]==1.1.0->autogluon) (4.65.2)\n", + "Requirement already satisfied: requests in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from autogluon.core==1.1.0->autogluon.core[all]==1.1.0->autogluon) (2.28.2)\n", + "Requirement already satisfied: matplotlib in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from autogluon.core==1.1.0->autogluon.core[all]==1.1.0->autogluon) (3.9.0)\n", + "Requirement already satisfied: boto3<2,>=1.10 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from autogluon.core==1.1.0->autogluon.core[all]==1.1.0->autogluon) (1.34.117)\n", + "Requirement already satisfied: autogluon.common==1.1.0 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from autogluon.core==1.1.0->autogluon.core[all]==1.1.0->autogluon) (1.1.0)\n", + "Requirement already satisfied: ray<2.11,>=2.10.0 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from ray[default,tune]<2.11,>=2.10.0; extra == \"all\"->autogluon.core[all]==1.1.0->autogluon) (2.10.0)\n", + "Requirement already satisfied: hyperopt<0.2.8,>=0.2.7 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from autogluon.core[all]==1.1.0->autogluon) (0.2.7)\n", + "Requirement already satisfied: Pillow<11,>=10.0.1 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from autogluon.multimodal==1.1.0->autogluon) (10.3.0)\n", + "Requirement already satisfied: torch<2.2,>=2.1 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from autogluon.multimodal==1.1.0->autogluon) (2.1.2)\n", + "Requirement already satisfied: lightning<2.2,>=2.1 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from autogluon.multimodal==1.1.0->autogluon) (2.1.4)\n", + "Requirement already satisfied: transformers<4.39.0,>=4.38.0 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from transformers[sentencepiece]<4.39.0,>=4.38.0->autogluon.multimodal==1.1.0->autogluon) (4.38.2)\n", + "Requirement already satisfied: accelerate<0.22.0,>=0.21.0 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from autogluon.multimodal==1.1.0->autogluon) (0.21.0)\n", + "Requirement already satisfied: jsonschema<4.22,>=4.18 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from autogluon.multimodal==1.1.0->autogluon) (4.21.1)\n", + "Requirement already satisfied: seqeval<1.3.0,>=1.2.2 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from autogluon.multimodal==1.1.0->autogluon) (1.2.2)\n", + "Requirement already satisfied: evaluate<0.5.0,>=0.4.0 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from autogluon.multimodal==1.1.0->autogluon) (0.4.2)\n", + "Requirement already satisfied: timm<0.10.0,>=0.9.5 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from autogluon.multimodal==1.1.0->autogluon) (0.9.16)\n", + "Requirement already satisfied: torchvision<0.17.0,>=0.16.0 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from autogluon.multimodal==1.1.0->autogluon) (0.16.2)\n", + "Requirement already satisfied: scikit-image<0.21.0,>=0.19.1 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from autogluon.multimodal==1.1.0->autogluon) (0.20.0)\n", + "Requirement already satisfied: text-unidecode<1.4,>=1.3 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from autogluon.multimodal==1.1.0->autogluon) (1.3)\n", + "Requirement already satisfied: torchmetrics<1.3.0,>=1.2.0 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from autogluon.multimodal==1.1.0->autogluon) (1.2.1)\n", + "Requirement already satisfied: nptyping<2.5.0,>=1.4.4 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from autogluon.multimodal==1.1.0->autogluon) (2.4.1)\n", + "Requirement already satisfied: omegaconf<2.3.0,>=2.1.1 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from autogluon.multimodal==1.1.0->autogluon) (2.2.3)\n", + "Requirement already satisfied: pytorch-metric-learning<2.4,>=1.3.0 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from autogluon.multimodal==1.1.0->autogluon) (2.3.0)\n", + "Requirement already satisfied: nlpaug<1.2.0,>=1.1.10 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from autogluon.multimodal==1.1.0->autogluon) (1.1.11)\n", + "Requirement already satisfied: nltk<4.0.0,>=3.4.5 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from autogluon.multimodal==1.1.0->autogluon) (3.8.1)\n", + "Requirement already satisfied: openmim<0.4.0,>=0.3.7 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from autogluon.multimodal==1.1.0->autogluon) (0.3.9)\n", + "Requirement already satisfied: defusedxml<0.7.2,>=0.7.1 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from autogluon.multimodal==1.1.0->autogluon) (0.7.1)\n", + "Requirement already satisfied: jinja2<3.2,>=3.0.3 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from autogluon.multimodal==1.1.0->autogluon) (3.1.4)\n", + "Requirement already satisfied: tensorboard<3,>=2.9 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from autogluon.multimodal==1.1.0->autogluon) (2.16.2)\n", + "Requirement already satisfied: pytesseract<0.3.11,>=0.3.9 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from autogluon.multimodal==1.1.0->autogluon) (0.3.10)\n", + "Requirement already satisfied: nvidia-ml-py3==7.352.0 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from autogluon.multimodal==1.1.0->autogluon) (7.352.0)\n", + "Requirement already satisfied: pdf2image<1.19,>=1.17.0 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from autogluon.multimodal==1.1.0->autogluon) (1.17.0)\n", + "Requirement already satisfied: xgboost<2.1,>=1.6 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from autogluon.tabular[all]==1.1.0->autogluon) (2.0.3)\n", + "Requirement already satisfied: fastai<2.8,>=2.3.1 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from autogluon.tabular[all]==1.1.0->autogluon) (2.7.15)\n", + "Requirement already satisfied: lightgbm<4.4,>=3.3 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from autogluon.tabular[all]==1.1.0->autogluon) (4.3.0)\n", + "Requirement already satisfied: catboost<1.3,>=1.1 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from autogluon.tabular[all]==1.1.0->autogluon) (1.2.5)\n", + "Requirement already satisfied: joblib<2,>=1.1 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from autogluon.timeseries==1.1.0->autogluon.timeseries[all]==1.1.0->autogluon) (1.4.2)\n", + "Requirement already satisfied: pytorch-lightning<2.2,>=2.1 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from autogluon.timeseries==1.1.0->autogluon.timeseries[all]==1.1.0->autogluon) (2.1.4)\n", + "Requirement already satisfied: gluonts<0.14.4,>=0.14.0 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from autogluon.timeseries==1.1.0->autogluon.timeseries[all]==1.1.0->autogluon) (0.14.3)\n", + "Requirement already satisfied: statsforecast<1.5,>=1.4.0 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from autogluon.timeseries==1.1.0->autogluon.timeseries[all]==1.1.0->autogluon) (1.4.0)\n", + "Requirement already satisfied: mlforecast<0.10.1,>=0.10.0 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from autogluon.timeseries==1.1.0->autogluon.timeseries[all]==1.1.0->autogluon) (0.10.0)\n", + "Requirement already satisfied: utilsforecast<0.0.11,>=0.0.10 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from autogluon.timeseries==1.1.0->autogluon.timeseries[all]==1.1.0->autogluon) (0.0.10)\n", + "Requirement already satisfied: orjson~=3.9 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from autogluon.timeseries==1.1.0->autogluon.timeseries[all]==1.1.0->autogluon) (3.10.3)\n", + "Requirement already satisfied: optimum<1.19,>=1.17 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from optimum[onnxruntime]<1.19,>=1.17; extra == \"all\"->autogluon.timeseries[all]==1.1.0->autogluon) (1.18.1)\n", + "Requirement already satisfied: psutil<6,>=5.7.3 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from autogluon.common==1.1.0->autogluon.core==1.1.0->autogluon.core[all]==1.1.0->autogluon) (5.9.8)\n", + "Requirement already satisfied: setuptools in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from autogluon.common==1.1.0->autogluon.core==1.1.0->autogluon.core[all]==1.1.0->autogluon) (70.0.0)\n", + "Requirement already satisfied: threadpoolctl>=2.0.0 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from scikit-learn) (3.5.0)\n", + "Requirement already satisfied: packaging>=20.0 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from accelerate<0.22.0,>=0.21.0->autogluon.multimodal==1.1.0->autogluon) (24.0)\n", + "Requirement already satisfied: pyyaml in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from accelerate<0.22.0,>=0.21.0->autogluon.multimodal==1.1.0->autogluon) (6.0.1)\n", + "Requirement already satisfied: botocore<1.35.0,>=1.34.117 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from boto3<2,>=1.10->autogluon.core==1.1.0->autogluon.core[all]==1.1.0->autogluon) (1.34.117)\n", + "Requirement already satisfied: jmespath<2.0.0,>=0.7.1 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from boto3<2,>=1.10->autogluon.core==1.1.0->autogluon.core[all]==1.1.0->autogluon) (0.10.0)\n", + "Requirement already satisfied: s3transfer<0.11.0,>=0.10.0 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from boto3<2,>=1.10->autogluon.core==1.1.0->autogluon.core[all]==1.1.0->autogluon) (0.10.1)\n", + "Requirement already satisfied: graphviz in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from catboost<1.3,>=1.1->autogluon.tabular[all]==1.1.0->autogluon) (0.20.3)\n", + "Requirement already satisfied: plotly in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from catboost<1.3,>=1.1->autogluon.tabular[all]==1.1.0->autogluon) (5.22.0)\n", + "Requirement already satisfied: six in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from catboost<1.3,>=1.1->autogluon.tabular[all]==1.1.0->autogluon) (1.16.0)\n", + "Requirement already satisfied: datasets>=2.0.0 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from evaluate<0.5.0,>=0.4.0->autogluon.multimodal==1.1.0->autogluon) (2.19.1)\n", + "Requirement already satisfied: dill in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from evaluate<0.5.0,>=0.4.0->autogluon.multimodal==1.1.0->autogluon) (0.3.8)\n", + "Requirement already satisfied: xxhash in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from evaluate<0.5.0,>=0.4.0->autogluon.multimodal==1.1.0->autogluon) (3.4.1)\n", + "Requirement already satisfied: multiprocess in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from evaluate<0.5.0,>=0.4.0->autogluon.multimodal==1.1.0->autogluon) (0.70.16)\n", + "Requirement already satisfied: fsspec>=2021.05.0 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from fsspec[http]>=2021.05.0->evaluate<0.5.0,>=0.4.0->autogluon.multimodal==1.1.0->autogluon) (2024.3.1)\n", + "Requirement already satisfied: huggingface-hub>=0.7.0 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from evaluate<0.5.0,>=0.4.0->autogluon.multimodal==1.1.0->autogluon) (0.23.2)\n", + "Requirement already satisfied: pip in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from fastai<2.8,>=2.3.1->autogluon.tabular[all]==1.1.0->autogluon) (24.0)\n", + "Requirement already satisfied: fastdownload<2,>=0.0.5 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from fastai<2.8,>=2.3.1->autogluon.tabular[all]==1.1.0->autogluon) (0.0.7)\n", + "Requirement already satisfied: fastcore<1.6,>=1.5.29 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from fastai<2.8,>=2.3.1->autogluon.tabular[all]==1.1.0->autogluon) (1.5.42)\n", + "Requirement already satisfied: fastprogress>=0.2.4 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from fastai<2.8,>=2.3.1->autogluon.tabular[all]==1.1.0->autogluon) (1.0.3)\n", + "Requirement already satisfied: spacy<4 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from fastai<2.8,>=2.3.1->autogluon.tabular[all]==1.1.0->autogluon) (3.7.4)\n", + "Requirement already satisfied: pydantic<3,>=1.7 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from gluonts<0.14.4,>=0.14.0->autogluon.timeseries==1.1.0->autogluon.timeseries[all]==1.1.0->autogluon) (2.7.2)\n", + "Requirement already satisfied: toolz~=0.10 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from gluonts<0.14.4,>=0.14.0->autogluon.timeseries==1.1.0->autogluon.timeseries[all]==1.1.0->autogluon) (0.12.1)\n", + "Requirement already satisfied: typing-extensions~=4.0 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from gluonts<0.14.4,>=0.14.0->autogluon.timeseries==1.1.0->autogluon.timeseries[all]==1.1.0->autogluon) (4.12.0)\n", + "Requirement already satisfied: future in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from hyperopt<0.2.8,>=0.2.7->autogluon.core[all]==1.1.0->autogluon) (1.0.0)\n", + "Requirement already satisfied: cloudpickle in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from hyperopt<0.2.8,>=0.2.7->autogluon.core[all]==1.1.0->autogluon) (3.0.0)\n", + "Requirement already satisfied: py4j in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from hyperopt<0.2.8,>=0.2.7->autogluon.core[all]==1.1.0->autogluon) (0.10.9.7)\n", + "Requirement already satisfied: MarkupSafe>=2.0 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from jinja2<3.2,>=3.0.3->autogluon.multimodal==1.1.0->autogluon) (2.1.5)\n", + "Requirement already satisfied: attrs>=22.2.0 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from jsonschema<4.22,>=4.18->autogluon.multimodal==1.1.0->autogluon) (23.2.0)\n", + "Requirement already satisfied: jsonschema-specifications>=2023.03.6 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from jsonschema<4.22,>=4.18->autogluon.multimodal==1.1.0->autogluon) (2023.12.1)\n", + "Requirement already satisfied: referencing>=0.28.4 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from jsonschema<4.22,>=4.18->autogluon.multimodal==1.1.0->autogluon) (0.35.1)\n", + "Requirement already satisfied: rpds-py>=0.7.1 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from jsonschema<4.22,>=4.18->autogluon.multimodal==1.1.0->autogluon) (0.18.1)\n", + "Requirement already satisfied: lightning-utilities<2.0,>=0.8.0 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from lightning<2.2,>=2.1->autogluon.multimodal==1.1.0->autogluon) (0.11.2)\n", + "Requirement already satisfied: numba in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from mlforecast<0.10.1,>=0.10.0->autogluon.timeseries==1.1.0->autogluon.timeseries[all]==1.1.0->autogluon) (0.59.1)\n", + "Requirement already satisfied: window-ops in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from mlforecast<0.10.1,>=0.10.0->autogluon.timeseries==1.1.0->autogluon.timeseries[all]==1.1.0->autogluon) (0.0.15)\n", + "Requirement already satisfied: gdown>=4.0.0 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from nlpaug<1.2.0,>=1.1.10->autogluon.multimodal==1.1.0->autogluon) (5.2.0)\n", + "Requirement already satisfied: click in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from nltk<4.0.0,>=3.4.5->autogluon.multimodal==1.1.0->autogluon) (8.1.7)\n", + "Requirement already satisfied: regex>=2021.8.3 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from nltk<4.0.0,>=3.4.5->autogluon.multimodal==1.1.0->autogluon) (2024.5.15)\n", + "Requirement already satisfied: antlr4-python3-runtime==4.9.* in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from omegaconf<2.3.0,>=2.1.1->autogluon.multimodal==1.1.0->autogluon) (4.9.3)\n", + "Requirement already satisfied: colorama in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from openmim<0.4.0,>=0.3.7->autogluon.multimodal==1.1.0->autogluon) (0.4.6)\n", + "Requirement already satisfied: model-index in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from openmim<0.4.0,>=0.3.7->autogluon.multimodal==1.1.0->autogluon) (0.1.11)\n", + "Requirement already satisfied: opendatalab in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from openmim<0.4.0,>=0.3.7->autogluon.multimodal==1.1.0->autogluon) (0.0.10)\n", + "Requirement already satisfied: rich in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from openmim<0.4.0,>=0.3.7->autogluon.multimodal==1.1.0->autogluon) (13.4.2)\n", + "Requirement already satisfied: tabulate in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from openmim<0.4.0,>=0.3.7->autogluon.multimodal==1.1.0->autogluon) (0.9.0)\n", + "Requirement already satisfied: coloredlogs in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from optimum<1.19,>=1.17->optimum[onnxruntime]<1.19,>=1.17; extra == \"all\"->autogluon.timeseries[all]==1.1.0->autogluon) (15.0.1)\n", + "Requirement already satisfied: sympy in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from optimum<1.19,>=1.17->optimum[onnxruntime]<1.19,>=1.17; extra == \"all\"->autogluon.timeseries[all]==1.1.0->autogluon) (1.12.1)\n", + "Requirement already satisfied: onnx in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from optimum[onnxruntime]<1.19,>=1.17; extra == \"all\"->autogluon.timeseries[all]==1.1.0->autogluon) (1.16.1)\n", + "Requirement already satisfied: onnxruntime>=1.11.0 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from optimum[onnxruntime]<1.19,>=1.17; extra == \"all\"->autogluon.timeseries[all]==1.1.0->autogluon) (1.18.0)\n", + "Requirement already satisfied: protobuf>=3.20.1 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from optimum[onnxruntime]<1.19,>=1.17; extra == \"all\"->autogluon.timeseries[all]==1.1.0->autogluon) (4.25.3)\n", + "Requirement already satisfied: python-dateutil>=2.8.2 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from pandas<2.3.0,>=2.0.0->autogluon.core==1.1.0->autogluon.core[all]==1.1.0->autogluon) (2.9.0.post0)\n", + "Requirement already satisfied: pytz>=2020.1 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from pandas<2.3.0,>=2.0.0->autogluon.core==1.1.0->autogluon.core[all]==1.1.0->autogluon) (2023.4)\n", + "Requirement already satisfied: tzdata>=2022.7 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from pandas<2.3.0,>=2.0.0->autogluon.core==1.1.0->autogluon.core[all]==1.1.0->autogluon) (2024.1)\n", + "Requirement already satisfied: filelock in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from ray<2.11,>=2.10.0->ray[default,tune]<2.11,>=2.10.0; extra == \"all\"->autogluon.core[all]==1.1.0->autogluon) (3.14.0)\n", + "Requirement already satisfied: msgpack<2.0.0,>=1.0.0 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from ray<2.11,>=2.10.0->ray[default,tune]<2.11,>=2.10.0; extra == \"all\"->autogluon.core[all]==1.1.0->autogluon) (1.0.8)\n", + "Requirement already satisfied: aiosignal in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from ray<2.11,>=2.10.0->ray[default,tune]<2.11,>=2.10.0; extra == \"all\"->autogluon.core[all]==1.1.0->autogluon) (1.3.1)\n", + "Requirement already satisfied: frozenlist in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from ray<2.11,>=2.10.0->ray[default,tune]<2.11,>=2.10.0; extra == \"all\"->autogluon.core[all]==1.1.0->autogluon) (1.4.1)\n", + "Requirement already satisfied: aiohttp>=3.7 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from ray[default,tune]<2.11,>=2.10.0; extra == \"all\"->autogluon.core[all]==1.1.0->autogluon) (3.9.5)\n", + "Requirement already satisfied: aiohttp-cors in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from ray[default,tune]<2.11,>=2.10.0; extra == \"all\"->autogluon.core[all]==1.1.0->autogluon) (0.7.0)\n", + "Requirement already satisfied: colorful in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from ray[default,tune]<2.11,>=2.10.0; extra == \"all\"->autogluon.core[all]==1.1.0->autogluon) (0.5.6)\n", + "Requirement already satisfied: py-spy>=0.2.0 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from ray[default,tune]<2.11,>=2.10.0; extra == \"all\"->autogluon.core[all]==1.1.0->autogluon) (0.3.14)\n", + "Requirement already satisfied: opencensus in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from ray[default,tune]<2.11,>=2.10.0; extra == \"all\"->autogluon.core[all]==1.1.0->autogluon) (0.11.4)\n", + "Requirement already satisfied: prometheus-client>=0.7.1 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from ray[default,tune]<2.11,>=2.10.0; extra == \"all\"->autogluon.core[all]==1.1.0->autogluon) (0.20.0)\n", + "Requirement already satisfied: smart-open in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from ray[default,tune]<2.11,>=2.10.0; extra == \"all\"->autogluon.core[all]==1.1.0->autogluon) (6.4.0)\n", + "Requirement already satisfied: virtualenv!=20.21.1,>=20.0.24 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from ray[default,tune]<2.11,>=2.10.0; extra == \"all\"->autogluon.core[all]==1.1.0->autogluon) (20.26.2)\n", + "Requirement already satisfied: grpcio>=1.42.0 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from ray[default,tune]<2.11,>=2.10.0; extra == \"all\"->autogluon.core[all]==1.1.0->autogluon) (1.64.0)\n", + "Requirement already satisfied: tensorboardX>=1.9 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from ray[default,tune]<2.11,>=2.10.0; extra == \"all\"->autogluon.core[all]==1.1.0->autogluon) (2.6.2.2)\n", + "Requirement already satisfied: pyarrow>=6.0.1 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from ray[default,tune]<2.11,>=2.10.0; extra == \"all\"->autogluon.core[all]==1.1.0->autogluon) (16.1.0)\n", + "Requirement already satisfied: charset-normalizer<4,>=2 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from requests->autogluon.core==1.1.0->autogluon.core[all]==1.1.0->autogluon) (3.3.2)\n", + "Requirement already satisfied: idna<4,>=2.5 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from requests->autogluon.core==1.1.0->autogluon.core[all]==1.1.0->autogluon) (3.7)\n", + "Requirement already satisfied: urllib3<1.27,>=1.21.1 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from requests->autogluon.core==1.1.0->autogluon.core[all]==1.1.0->autogluon) (1.26.18)\n", + "Requirement already satisfied: certifi>=2017.4.17 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from requests->autogluon.core==1.1.0->autogluon.core[all]==1.1.0->autogluon) (2024.2.2)\n", + "Requirement already satisfied: imageio>=2.4.1 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from scikit-image<0.21.0,>=0.19.1->autogluon.multimodal==1.1.0->autogluon) (2.34.1)\n", + "Requirement already satisfied: tifffile>=2019.7.26 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from scikit-image<0.21.0,>=0.19.1->autogluon.multimodal==1.1.0->autogluon) (2024.5.22)\n", + "Requirement already satisfied: PyWavelets>=1.1.1 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from scikit-image<0.21.0,>=0.19.1->autogluon.multimodal==1.1.0->autogluon) (1.6.0)\n", + "Requirement already satisfied: lazy_loader>=0.1 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from scikit-image<0.21.0,>=0.19.1->autogluon.multimodal==1.1.0->autogluon) (0.4)\n", + "Requirement already satisfied: statsmodels>=0.13.2 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from statsforecast<1.5,>=1.4.0->autogluon.timeseries==1.1.0->autogluon.timeseries[all]==1.1.0->autogluon) (0.14.2)\n", + "Requirement already satisfied: absl-py>=0.4 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from tensorboard<3,>=2.9->autogluon.multimodal==1.1.0->autogluon) (2.1.0)\n", + "Requirement already satisfied: markdown>=2.6.8 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from tensorboard<3,>=2.9->autogluon.multimodal==1.1.0->autogluon) (3.6)\n", + "Requirement already satisfied: tensorboard-data-server<0.8.0,>=0.7.0 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from tensorboard<3,>=2.9->autogluon.multimodal==1.1.0->autogluon) (0.7.2)\n", + "Requirement already satisfied: werkzeug>=1.0.1 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from tensorboard<3,>=2.9->autogluon.multimodal==1.1.0->autogluon) (3.0.3)\n", + "Requirement already satisfied: safetensors in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from timm<0.10.0,>=0.9.5->autogluon.multimodal==1.1.0->autogluon) (0.4.3)\n", + "Requirement already satisfied: tokenizers<0.19,>=0.14 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from transformers<4.39.0,>=4.38.0->transformers[sentencepiece]<4.39.0,>=4.38.0->autogluon.multimodal==1.1.0->autogluon) (0.15.2)\n", + "Requirement already satisfied: sentencepiece!=0.1.92,>=0.1.91 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from transformers[sentencepiece]<4.39.0,>=4.38.0->autogluon.multimodal==1.1.0->autogluon) (0.2.0)\n", + "Requirement already satisfied: contourpy>=1.0.1 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from matplotlib->autogluon.core==1.1.0->autogluon.core[all]==1.1.0->autogluon) (1.2.1)\n", + "Requirement already satisfied: cycler>=0.10 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from matplotlib->autogluon.core==1.1.0->autogluon.core[all]==1.1.0->autogluon) (0.12.1)\n", + "Requirement already satisfied: fonttools>=4.22.0 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from matplotlib->autogluon.core==1.1.0->autogluon.core[all]==1.1.0->autogluon) (4.53.0)\n", + "Requirement already satisfied: kiwisolver>=1.3.1 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from matplotlib->autogluon.core==1.1.0->autogluon.core[all]==1.1.0->autogluon) (1.4.5)\n", + "Requirement already satisfied: pyparsing>=2.3.1 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from matplotlib->autogluon.core==1.1.0->autogluon.core[all]==1.1.0->autogluon) (3.1.2)\n", + "Requirement already satisfied: multidict<7.0,>=4.5 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from aiohttp>=3.7->ray[default,tune]<2.11,>=2.10.0; extra == \"all\"->autogluon.core[all]==1.1.0->autogluon) (6.0.5)\n", + "Requirement already satisfied: yarl<2.0,>=1.0 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from aiohttp>=3.7->ray[default,tune]<2.11,>=2.10.0; extra == \"all\"->autogluon.core[all]==1.1.0->autogluon) (1.9.4)\n", + "Requirement already satisfied: pyarrow-hotfix in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from datasets>=2.0.0->evaluate<0.5.0,>=0.4.0->autogluon.multimodal==1.1.0->autogluon) (0.6)\n", + "Requirement already satisfied: beautifulsoup4 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from gdown>=4.0.0->nlpaug<1.2.0,>=1.1.10->autogluon.multimodal==1.1.0->autogluon) (4.12.3)\n", + "Requirement already satisfied: llvmlite<0.43,>=0.42.0dev0 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from numba->mlforecast<0.10.1,>=0.10.0->autogluon.timeseries==1.1.0->autogluon.timeseries[all]==1.1.0->autogluon) (0.42.0)\n", + "Requirement already satisfied: flatbuffers in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from onnxruntime>=1.11.0->optimum[onnxruntime]<1.19,>=1.17; extra == \"all\"->autogluon.timeseries[all]==1.1.0->autogluon) (24.3.25)\n", + "Requirement already satisfied: annotated-types>=0.4.0 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from pydantic<3,>=1.7->gluonts<0.14.4,>=0.14.0->autogluon.timeseries==1.1.0->autogluon.timeseries[all]==1.1.0->autogluon) (0.7.0)\n", + "Requirement already satisfied: pydantic-core==2.18.3 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from pydantic<3,>=1.7->gluonts<0.14.4,>=0.14.0->autogluon.timeseries==1.1.0->autogluon.timeseries[all]==1.1.0->autogluon) (2.18.3)\n", + "Requirement already satisfied: spacy-legacy<3.1.0,>=3.0.11 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from spacy<4->fastai<2.8,>=2.3.1->autogluon.tabular[all]==1.1.0->autogluon) (3.0.12)\n", + "Requirement already satisfied: spacy-loggers<2.0.0,>=1.0.0 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from spacy<4->fastai<2.8,>=2.3.1->autogluon.tabular[all]==1.1.0->autogluon) (1.0.5)\n", + "Requirement already satisfied: murmurhash<1.1.0,>=0.28.0 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from spacy<4->fastai<2.8,>=2.3.1->autogluon.tabular[all]==1.1.0->autogluon) (1.0.10)\n", + "Requirement already satisfied: cymem<2.1.0,>=2.0.2 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from spacy<4->fastai<2.8,>=2.3.1->autogluon.tabular[all]==1.1.0->autogluon) (2.0.8)\n", + "Requirement already satisfied: preshed<3.1.0,>=3.0.2 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from spacy<4->fastai<2.8,>=2.3.1->autogluon.tabular[all]==1.1.0->autogluon) (3.0.9)\n", + "Requirement already satisfied: thinc<8.3.0,>=8.2.2 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from spacy<4->fastai<2.8,>=2.3.1->autogluon.tabular[all]==1.1.0->autogluon) (8.2.3)\n", + "Requirement already satisfied: wasabi<1.2.0,>=0.9.1 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from spacy<4->fastai<2.8,>=2.3.1->autogluon.tabular[all]==1.1.0->autogluon) (1.1.3)\n", + "Requirement already satisfied: srsly<3.0.0,>=2.4.3 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from spacy<4->fastai<2.8,>=2.3.1->autogluon.tabular[all]==1.1.0->autogluon) (2.4.8)\n", + "Requirement already satisfied: catalogue<2.1.0,>=2.0.6 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from spacy<4->fastai<2.8,>=2.3.1->autogluon.tabular[all]==1.1.0->autogluon) (2.0.10)\n", + "Requirement already satisfied: weasel<0.4.0,>=0.1.0 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from spacy<4->fastai<2.8,>=2.3.1->autogluon.tabular[all]==1.1.0->autogluon) (0.3.4)\n", + "Requirement already satisfied: typer<0.10.0,>=0.3.0 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from spacy<4->fastai<2.8,>=2.3.1->autogluon.tabular[all]==1.1.0->autogluon) (0.9.4)\n", + "Requirement already satisfied: langcodes<4.0.0,>=3.2.0 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from spacy<4->fastai<2.8,>=2.3.1->autogluon.tabular[all]==1.1.0->autogluon) (3.4.0)\n", + "Requirement already satisfied: patsy>=0.5.6 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from statsmodels>=0.13.2->statsforecast<1.5,>=1.4.0->autogluon.timeseries==1.1.0->autogluon.timeseries[all]==1.1.0->autogluon) (0.5.6)\n", + "Requirement already satisfied: distlib<1,>=0.3.7 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from virtualenv!=20.21.1,>=20.0.24->ray[default,tune]<2.11,>=2.10.0; extra == \"all\"->autogluon.core[all]==1.1.0->autogluon) (0.3.8)\n", + "Requirement already satisfied: platformdirs<5,>=3.9.1 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from virtualenv!=20.21.1,>=20.0.24->ray[default,tune]<2.11,>=2.10.0; extra == \"all\"->autogluon.core[all]==1.1.0->autogluon) (4.2.2)\n", + "Requirement already satisfied: humanfriendly>=9.1 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from coloredlogs->optimum<1.19,>=1.17->optimum[onnxruntime]<1.19,>=1.17; extra == \"all\"->autogluon.timeseries[all]==1.1.0->autogluon) (10.0)\n", + "Requirement already satisfied: ordered-set in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from model-index->openmim<0.4.0,>=0.3.7->autogluon.multimodal==1.1.0->autogluon) (4.1.0)\n", + "Requirement already satisfied: opencensus-context>=0.1.3 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from opencensus->ray[default,tune]<2.11,>=2.10.0; extra == \"all\"->autogluon.core[all]==1.1.0->autogluon) (0.1.3)\n", + "Requirement already satisfied: google-api-core<3.0.0,>=1.0.0 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from opencensus->ray[default,tune]<2.11,>=2.10.0; extra == \"all\"->autogluon.core[all]==1.1.0->autogluon) (2.19.0)\n", + "Requirement already satisfied: pycryptodome in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from opendatalab->openmim<0.4.0,>=0.3.7->autogluon.multimodal==1.1.0->autogluon) (3.20.0)\n", + "Requirement already satisfied: openxlab in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from opendatalab->openmim<0.4.0,>=0.3.7->autogluon.multimodal==1.1.0->autogluon) (0.1.0)\n", + "Requirement already satisfied: pywin32 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from opendatalab->openmim<0.4.0,>=0.3.7->autogluon.multimodal==1.1.0->autogluon) (306)\n", + "Requirement already satisfied: tenacity>=6.2.0 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from plotly->catboost<1.3,>=1.1->autogluon.tabular[all]==1.1.0->autogluon) (8.3.0)\n", + "Requirement already satisfied: markdown-it-py>=2.2.0 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from rich->openmim<0.4.0,>=0.3.7->autogluon.multimodal==1.1.0->autogluon) (3.0.0)\n", + "Requirement already satisfied: pygments<3.0.0,>=2.13.0 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from rich->openmim<0.4.0,>=0.3.7->autogluon.multimodal==1.1.0->autogluon) (2.18.0)\n", + "Requirement already satisfied: mpmath<1.4.0,>=1.1.0 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from sympy->optimum<1.19,>=1.17->optimum[onnxruntime]<1.19,>=1.17; extra == \"all\"->autogluon.timeseries[all]==1.1.0->autogluon) (1.3.0)\n", + "Requirement already satisfied: googleapis-common-protos<2.0.dev0,>=1.56.2 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from google-api-core<3.0.0,>=1.0.0->opencensus->ray[default,tune]<2.11,>=2.10.0; extra == \"all\"->autogluon.core[all]==1.1.0->autogluon) (1.63.0)\n", + "Requirement already satisfied: proto-plus<2.0.0dev,>=1.22.3 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from google-api-core<3.0.0,>=1.0.0->opencensus->ray[default,tune]<2.11,>=2.10.0; extra == \"all\"->autogluon.core[all]==1.1.0->autogluon) (1.23.0)\n", + "Requirement already satisfied: google-auth<3.0.dev0,>=2.14.1 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from google-api-core<3.0.0,>=1.0.0->opencensus->ray[default,tune]<2.11,>=2.10.0; extra == \"all\"->autogluon.core[all]==1.1.0->autogluon) (2.29.0)\n", + "Requirement already satisfied: pyreadline3 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from humanfriendly>=9.1->coloredlogs->optimum<1.19,>=1.17->optimum[onnxruntime]<1.19,>=1.17; extra == \"all\"->autogluon.timeseries[all]==1.1.0->autogluon) (3.4.1)\n", + "Requirement already satisfied: language-data>=1.2 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from langcodes<4.0.0,>=3.2.0->spacy<4->fastai<2.8,>=2.3.1->autogluon.tabular[all]==1.1.0->autogluon) (1.2.0)\n", + "Requirement already satisfied: mdurl~=0.1 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from markdown-it-py>=2.2.0->rich->openmim<0.4.0,>=0.3.7->autogluon.multimodal==1.1.0->autogluon) (0.1.2)\n", + "Requirement already satisfied: blis<0.8.0,>=0.7.8 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from thinc<8.3.0,>=8.2.2->spacy<4->fastai<2.8,>=2.3.1->autogluon.tabular[all]==1.1.0->autogluon) (0.7.11)\n", + "Requirement already satisfied: confection<1.0.0,>=0.0.1 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from thinc<8.3.0,>=8.2.2->spacy<4->fastai<2.8,>=2.3.1->autogluon.tabular[all]==1.1.0->autogluon) (0.1.5)\n", + "Requirement already satisfied: cloudpathlib<0.17.0,>=0.7.0 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from weasel<0.4.0,>=0.1.0->spacy<4->fastai<2.8,>=2.3.1->autogluon.tabular[all]==1.1.0->autogluon) (0.16.0)\n", + "Requirement already satisfied: soupsieve>1.2 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from beautifulsoup4->gdown>=4.0.0->nlpaug<1.2.0,>=1.1.10->autogluon.multimodal==1.1.0->autogluon) (2.5)\n", + "Requirement already satisfied: oss2~=2.17.0 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from openxlab->opendatalab->openmim<0.4.0,>=0.3.7->autogluon.multimodal==1.1.0->autogluon) (2.17.0)\n", + "Collecting setuptools (from autogluon.common==1.1.0->autogluon.core==1.1.0->autogluon.core[all]==1.1.0->autogluon)\n", + " Downloading setuptools-60.2.0-py3-none-any.whl.metadata (5.1 kB)\n", + "Requirement already satisfied: PySocks!=1.5.7,>=1.5.6 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from requests[socks]->gdown>=4.0.0->nlpaug<1.2.0,>=1.1.10->autogluon.multimodal==1.1.0->autogluon) (1.7.1)\n", + "Requirement already satisfied: cachetools<6.0,>=2.0.0 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from google-auth<3.0.dev0,>=2.14.1->google-api-core<3.0.0,>=1.0.0->opencensus->ray[default,tune]<2.11,>=2.10.0; extra == \"all\"->autogluon.core[all]==1.1.0->autogluon) (5.3.3)\n", + "Requirement already satisfied: pyasn1-modules>=0.2.1 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from google-auth<3.0.dev0,>=2.14.1->google-api-core<3.0.0,>=1.0.0->opencensus->ray[default,tune]<2.11,>=2.10.0; extra == \"all\"->autogluon.core[all]==1.1.0->autogluon) (0.4.0)\n", + "Requirement already satisfied: rsa<5,>=3.1.4 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from google-auth<3.0.dev0,>=2.14.1->google-api-core<3.0.0,>=1.0.0->opencensus->ray[default,tune]<2.11,>=2.10.0; extra == \"all\"->autogluon.core[all]==1.1.0->autogluon) (4.9)\n", + "Requirement already satisfied: marisa-trie>=0.7.7 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from language-data>=1.2->langcodes<4.0.0,>=3.2.0->spacy<4->fastai<2.8,>=2.3.1->autogluon.tabular[all]==1.1.0->autogluon) (1.1.1)\n", + "Requirement already satisfied: crcmod>=1.7 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from oss2~=2.17.0->openxlab->opendatalab->openmim<0.4.0,>=0.3.7->autogluon.multimodal==1.1.0->autogluon) (1.7)\n", + "Requirement already satisfied: aliyun-python-sdk-kms>=2.4.1 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from oss2~=2.17.0->openxlab->opendatalab->openmim<0.4.0,>=0.3.7->autogluon.multimodal==1.1.0->autogluon) (2.16.3)\n", + "Requirement already satisfied: aliyun-python-sdk-core>=2.13.12 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from oss2~=2.17.0->openxlab->opendatalab->openmim<0.4.0,>=0.3.7->autogluon.multimodal==1.1.0->autogluon) (2.15.1)\n", + "Requirement already satisfied: cryptography>=2.6.0 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from aliyun-python-sdk-core>=2.13.12->oss2~=2.17.0->openxlab->opendatalab->openmim<0.4.0,>=0.3.7->autogluon.multimodal==1.1.0->autogluon) (42.0.7)\n", + "Requirement already satisfied: pyasn1<0.7.0,>=0.4.6 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from pyasn1-modules>=0.2.1->google-auth<3.0.dev0,>=2.14.1->google-api-core<3.0.0,>=1.0.0->opencensus->ray[default,tune]<2.11,>=2.10.0; extra == \"all\"->autogluon.core[all]==1.1.0->autogluon) (0.6.0)\n", + "Requirement already satisfied: cffi>=1.12 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from cryptography>=2.6.0->aliyun-python-sdk-core>=2.13.12->oss2~=2.17.0->openxlab->opendatalab->openmim<0.4.0,>=0.3.7->autogluon.multimodal==1.1.0->autogluon) (1.16.0)\n", + "Requirement already satisfied: pycparser in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from cffi>=1.12->cryptography>=2.6.0->aliyun-python-sdk-core>=2.13.12->oss2~=2.17.0->openxlab->opendatalab->openmim<0.4.0,>=0.3.7->autogluon.multimodal==1.1.0->autogluon) (2.22)\n", + "Downloading setuptools-60.2.0-py3-none-any.whl (953 kB)\n", + " ---------------------------------------- 0.0/953.1 kB ? eta -:--:--\n", + " --------------------------------------- 20.5/953.1 kB ? eta -:--:--\n", + " ---------------------- ----------------- 542.7/953.1 kB 8.5 MB/s eta 0:00:01\n", + " --------------------------------------- 953.1/953.1 kB 11.9 MB/s eta 0:00:00\n", + "Installing collected packages: setuptools\n", + " Attempting uninstall: setuptools\n", + " Found existing installation: setuptools 70.0.0\n", + " Uninstalling setuptools-70.0.0:\n", + " Successfully uninstalled setuptools-70.0.0\n", + "Successfully installed setuptools-60.2.0\n", + "Note: you may need to restart the kernel to use updated packages.\n" + ] + } + ], + "source": [ + "%pip install -U pip\n", + "%pip install -U setuptools wheel\n", + "%pip install autogluon scikit-learn" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "import pandas as pd\n", + "from sklearn.model_selection import train_test_split\n", + "\n", + "dataset_path = \"../Dataset/Thyroid_Diff.csv\"\n", + "data = pd.read_csv(dataset_path)\n", + "\n", + "train_data, test_data = train_test_split(data, test_size=0.2, random_state=42) \n", + "\n", + "train_data.to_csv(\"../Dataset/train.csv\", index=False)\n", + "test_data.to_csv(\"../Dataset/test.csv\", index=False)" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "c:\\Users\\arpit\\Desktop\\dl\\env\\Lib\\site-packages\\tqdm\\auto.py:21: TqdmWarning: IProgress not found. Please update jupyter and ipywidgets. See https://ipywidgets.readthedocs.io/en/stable/user_install.html\n", + " from .autonotebook import tqdm as notebook_tqdm\n", + "No path specified. Models will be saved in: \"AutogluonModels\\ag-20240601_060303\"\n", + "No presets specified! To achieve strong results with AutoGluon, it is recommended to use the available presets.\n", + "\tRecommended Presets (For more details refer to https://auto.gluon.ai/stable/tutorials/tabular/tabular-essentials.html#presets):\n", + "\tpresets='best_quality' : Maximize accuracy. Default time_limit=3600.\n", + "\tpresets='high_quality' : Strong accuracy with fast inference speed. Default time_limit=3600.\n", + "\tpresets='good_quality' : Good accuracy with very fast inference speed. Default time_limit=3600.\n", + "\tpresets='medium_quality' : Fast training time, ideal for initial prototyping.\n", + "Beginning AutoGluon training ...\n", + "AutoGluon will save models to \"AutogluonModels\\ag-20240601_060303\"\n", + "=================== System Info ===================\n", + "AutoGluon Version: 1.1.0\n", + "Python Version: 3.11.9\n", + "Operating System: Windows\n", + "Platform Machine: AMD64\n", + "Platform Version: 10.0.22631\n", + "CPU Count: 16\n", + "Memory Avail: 2.67 GB / 15.63 GB (17.1%)\n", + "Disk Space Avail: 17.80 GB / 453.74 GB (3.9%)\n", + "===================================================\n", + "Train Data Rows: 306\n", + "Train Data Columns: 16\n", + "Label Column: Recurred\n", + "AutoGluon infers your prediction problem is: 'binary' (because only two unique label-values observed).\n", + "\t2 unique label values: ['No', 'Yes']\n", + "\tIf 'binary' is not the correct problem_type, please manually specify the problem_type parameter during predictor init (You may specify problem_type as one of: ['binary', 'multiclass', 'regression'])\n", + "Problem Type: binary\n", + "Preprocessing data ...\n", + "Selected class <--> label mapping: class 1 = Yes, class 0 = No\n", + "\tNote: For your binary classification, AutoGluon arbitrarily selected which label-value represents positive (Yes) vs negative (No) class.\n", + "\tTo explicitly set the positive_class, either rename classes to 1 and 0, or specify positive_class in Predictor init.\n", + "Using Feature Generators to preprocess the data ...\n", + "Fitting AutoMLPipelineFeatureGenerator...\n", + "\tAvailable Memory: 2730.83 MB\n", + "\tTrain Data (Original) Memory Usage: 0.28 MB (0.0% of available memory)\n", + "\tInferring data type of each feature based on column values. Set feature_metadata_in to manually specify special dtypes of the features.\n", + "\tStage 1 Generators:\n", + "\t\tFitting AsTypeFeatureGenerator...\n", + "\t\t\tNote: Converting 6 features to boolean dtype as they only contain 2 unique values.\n", + "\tStage 2 Generators:\n", + "\t\tFitting FillNaFeatureGenerator...\n", + "\tStage 3 Generators:\n", + "\t\tFitting IdentityFeatureGenerator...\n", + "\t\tFitting CategoryFeatureGenerator...\n", + "\t\t\tFitting CategoryMemoryMinimizeFeatureGenerator...\n", + "\tStage 4 Generators:\n", + "\t\tFitting DropUniqueFeatureGenerator...\n", + "\tStage 5 Generators:\n", + "\t\tFitting DropDuplicatesFeatureGenerator...\n", + "\tTypes of features in original data (raw dtype, special dtypes):\n", + "\t\t('int', []) : 1 | ['Age']\n", + "\t\t('object', []) : 15 | ['Gender', 'Smoking', 'Hx Smoking', 'Hx Radiothreapy', 'Thyroid Function', ...]\n", + "\tTypes of features in processed data (raw dtype, special dtypes):\n", + "\t\t('category', []) : 9 | ['Thyroid Function', 'Physical Examination', 'Adenopathy', 'Pathology', 'Risk', ...]\n", + "\t\t('int', []) : 1 | ['Age']\n", + "\t\t('int', ['bool']) : 6 | ['Gender', 'Smoking', 'Hx Smoking', 'Hx Radiothreapy', 'Focality', ...]\n", + "\t0.1s = Fit runtime\n", + "\t16 features in original data used to generate 16 features in processed data.\n", + "\tTrain Data (Processed) Memory Usage: 0.01 MB (0.0% of available memory)\n", + "Data preprocessing and feature engineering runtime = 0.11s ...\n", + "AutoGluon will gauge predictive performance using evaluation metric: 'accuracy'\n", + "\tTo change this, specify the eval_metric parameter of Predictor()\n", + "Automatically generating train/validation split with holdout_frac=0.2, Train Rows: 244, Val Rows: 62\n", + "User-specified model hyperparameters to be fit:\n", + "{\n", + "\t'NN_TORCH': {},\n", + "\t'GBM': [{'extra_trees': True, 'ag_args': {'name_suffix': 'XT'}}, {}, 'GBMLarge'],\n", + "\t'CAT': {},\n", + "\t'XGB': {},\n", + "\t'FASTAI': {},\n", + "\t'RF': [{'criterion': 'gini', 'ag_args': {'name_suffix': 'Gini', 'problem_types': ['binary', 'multiclass']}}, {'criterion': 'entropy', 'ag_args': {'name_suffix': 'Entr', 'problem_types': ['binary', 'multiclass']}}, {'criterion': 'squared_error', 'ag_args': {'name_suffix': 'MSE', 'problem_types': ['regression', 'quantile']}}],\n", + "\t'XT': [{'criterion': 'gini', 'ag_args': {'name_suffix': 'Gini', 'problem_types': ['binary', 'multiclass']}}, {'criterion': 'entropy', 'ag_args': {'name_suffix': 'Entr', 'problem_types': ['binary', 'multiclass']}}, {'criterion': 'squared_error', 'ag_args': {'name_suffix': 'MSE', 'problem_types': ['regression', 'quantile']}}],\n", + "\t'KNN': [{'weights': 'uniform', 'ag_args': {'name_suffix': 'Unif'}}, {'weights': 'distance', 'ag_args': {'name_suffix': 'Dist'}}],\n", + "}\n", + "Fitting 13 L1 models ...\n", + "Fitting model: KNeighborsUnif ...\n", + "\t0.6935\t = Validation score (accuracy)\n", + "\t2.09s\t = Training runtime\n", + "\t0.02s\t = Validation runtime\n", + "Fitting model: KNeighborsDist ...\n", + "\t0.629\t = Validation score (accuracy)\n", + "\t0.0s\t = Training runtime\n", + "\t0.02s\t = Validation runtime\n", + "Fitting model: LightGBMXT ...\n", + "\t0.8871\t = Validation score (accuracy)\n", + "\t0.69s\t = Training runtime\n", + "\t0.01s\t = Validation runtime\n", + "Fitting model: LightGBM ...\n", + "\t0.9677\t = Validation score (accuracy)\n", + "\t0.31s\t = Training runtime\n", + "\t0.01s\t = Validation runtime\n", + "Fitting model: RandomForestGini ...\n", + "\t0.9355\t = Validation score (accuracy)\n", + "\t0.89s\t = Training runtime\n", + "\t0.04s\t = Validation runtime\n", + "Fitting model: RandomForestEntr ...\n", + "\t0.9355\t = Validation score (accuracy)\n", + "\t0.51s\t = Training runtime\n", + "\t0.04s\t = Validation runtime\n", + "Fitting model: CatBoost ...\n", + "\t0.9355\t = Validation score (accuracy)\n", + "\t11.08s\t = Training runtime\n", + "\t0.01s\t = Validation runtime\n", + "Fitting model: ExtraTreesGini ...\n", + "\t0.9032\t = Validation score (accuracy)\n", + "\t0.62s\t = Training runtime\n", + "\t0.11s\t = Validation runtime\n", + "Fitting model: ExtraTreesEntr ...\n", + "\t0.9194\t = Validation score (accuracy)\n", + "\t0.65s\t = Training runtime\n", + "\t0.06s\t = Validation runtime\n", + "Fitting model: NeuralNetFastAI ...\n", + "\t0.9677\t = Validation score (accuracy)\n", + "\t5.25s\t = Training runtime\n", + "\t0.04s\t = Validation runtime\n", + "Fitting model: XGBoost ...\n", + "\t0.9677\t = Validation score (accuracy)\n", + "\t0.95s\t = Training runtime\n", + "\t0.01s\t = Validation runtime\n", + "Fitting model: NeuralNetTorch ...\n", + "\t0.9516\t = Validation score (accuracy)\n", + "\t2.78s\t = Training runtime\n", + "\t0.01s\t = Validation runtime\n", + "Fitting model: LightGBMLarge ...\n", + "\t0.9839\t = Validation score (accuracy)\n", + "\t0.48s\t = Training runtime\n", + "\t0.01s\t = Validation runtime\n", + "Fitting model: WeightedEnsemble_L2 ...\n", + "\tEnsemble Weights: {'LightGBMLarge': 1.0}\n", + "\t0.9839\t = Validation score (accuracy)\n", + "\t0.08s\t = Training runtime\n", + "\t0.01s\t = Validation runtime\n", + "AutoGluon training complete, total runtime = 27.18s ... Best model: \"WeightedEnsemble_L2\"\n", + "TabularPredictor saved. To load, use: predictor = TabularPredictor.load(\"AutogluonModels\\ag-20240601_060303\")\n" + ] + } + ], + "source": [ + "from autogluon.tabular import TabularDataset, TabularPredictor\n", + "\n", + "data_root = '../Dataset/'\n", + "train_data = TabularDataset(data_root + 'train.csv')\n", + "test_data = TabularDataset(data_root + 'test.csv')\n", + "\n", + "predictor = TabularPredictor(label='Recurred').fit(train_data=train_data)\n", + "predictions = predictor.predict(test_data)" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Loaded data from: ../Dataset/test.csv | Columns = 17 / 17 | Rows = 77 -> 77\n" + ] + }, + { + "data": { + "text/plain": [ + "0 No\n", + "1 No\n", + "2 Yes\n", + "3 No\n", + "4 No\n", + " ... \n", + "72 No\n", + "73 No\n", + "74 No\n", + "75 Yes\n", + "76 Yes\n", + "Name: Recurred, Length: 77, dtype: object" + ] + }, + "execution_count": 4, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "model = TabularPredictor.load(\"AutogluonModels/ag-20240601_040114\")\n", + "test_data = TabularDataset(data_root + 'test.csv')\n", + "\n", + "model.predict(test_data)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "WeightedEnsemble_L2 Validation score: 0.9839" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "env", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.11.9" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/Thyroid Cancer Recurrence Prediction/Model/autogluon_model.pkl b/Thyroid Cancer Recurrence Prediction/Model/autogluon_model.pkl new file mode 100644 index 0000000000..3e227fb332 Binary files /dev/null and b/Thyroid Cancer Recurrence Prediction/Model/autogluon_model.pkl differ diff --git a/Thyroid Cancer Recurrence Prediction/Model/mlp_model.h5 b/Thyroid Cancer Recurrence Prediction/Model/mlp_model.h5 new file mode 100644 index 0000000000..80a9b2544f Binary files /dev/null and b/Thyroid Cancer Recurrence Prediction/Model/mlp_model.h5 differ diff --git a/Thyroid Cancer Recurrence Prediction/Model/mlp_model.ipynb b/Thyroid Cancer Recurrence Prediction/Model/mlp_model.ipynb new file mode 100644 index 0000000000..a8bbad3b33 --- /dev/null +++ b/Thyroid Cancer Recurrence Prediction/Model/mlp_model.ipynb @@ -0,0 +1,341 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Looking in indexes: https://pypi.org/simple, https://pypi.ngc.nvidia.com\n", + "Requirement already satisfied: keras in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (3.3.3)\n", + "Requirement already satisfied: tensorflow in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (2.16.1)\n", + "Requirement already satisfied: absl-py in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from keras) (2.1.0)\n", + "Requirement already satisfied: numpy in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from keras) (1.26.4)\n", + "Requirement already satisfied: rich in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from keras) (13.4.2)\n", + "Requirement already satisfied: namex in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from keras) (0.0.8)\n", + "Requirement already satisfied: h5py in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from keras) (3.11.0)\n", + "Requirement already satisfied: optree in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from keras) (0.11.0)\n", + "Requirement already satisfied: ml-dtypes in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from keras) (0.3.2)\n", + "Requirement already satisfied: tensorflow-intel==2.16.1 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from tensorflow) (2.16.1)\n", + "Requirement already satisfied: astunparse>=1.6.0 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from tensorflow-intel==2.16.1->tensorflow) (1.6.3)\n", + "Requirement already satisfied: flatbuffers>=23.5.26 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from tensorflow-intel==2.16.1->tensorflow) (24.3.25)\n", + "Requirement already satisfied: gast!=0.5.0,!=0.5.1,!=0.5.2,>=0.2.1 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from tensorflow-intel==2.16.1->tensorflow) (0.5.4)\n", + "Requirement already satisfied: google-pasta>=0.1.1 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from tensorflow-intel==2.16.1->tensorflow) (0.2.0)\n", + "Requirement already satisfied: libclang>=13.0.0 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from tensorflow-intel==2.16.1->tensorflow) (18.1.1)\n", + "Requirement already satisfied: opt-einsum>=2.3.2 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from tensorflow-intel==2.16.1->tensorflow) (3.3.0)\n", + "Requirement already satisfied: packaging in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from tensorflow-intel==2.16.1->tensorflow) (24.0)\n", + "Requirement already satisfied: protobuf!=4.21.0,!=4.21.1,!=4.21.2,!=4.21.3,!=4.21.4,!=4.21.5,<5.0.0dev,>=3.20.3 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from tensorflow-intel==2.16.1->tensorflow) (4.25.3)\n", + "Requirement already satisfied: requests<3,>=2.21.0 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from tensorflow-intel==2.16.1->tensorflow) (2.28.2)\n", + "Requirement already satisfied: setuptools in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from tensorflow-intel==2.16.1->tensorflow) (60.2.0)\n", + "Requirement already satisfied: six>=1.12.0 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from tensorflow-intel==2.16.1->tensorflow) (1.16.0)\n", + "Requirement already satisfied: termcolor>=1.1.0 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from tensorflow-intel==2.16.1->tensorflow) (2.4.0)\n", + "Requirement already satisfied: typing-extensions>=3.6.6 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from tensorflow-intel==2.16.1->tensorflow) (4.12.0)\n", + "Requirement already satisfied: wrapt>=1.11.0 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from tensorflow-intel==2.16.1->tensorflow) (1.16.0)\n", + "Requirement already satisfied: grpcio<2.0,>=1.24.3 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from tensorflow-intel==2.16.1->tensorflow) (1.64.0)\n", + "Requirement already satisfied: tensorboard<2.17,>=2.16 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from tensorflow-intel==2.16.1->tensorflow) (2.16.2)\n", + "Requirement already satisfied: tensorflow-io-gcs-filesystem>=0.23.1 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from tensorflow-intel==2.16.1->tensorflow) (0.31.0)\n", + "Requirement already satisfied: markdown-it-py>=2.2.0 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from rich->keras) (3.0.0)\n", + "Requirement already satisfied: pygments<3.0.0,>=2.13.0 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from rich->keras) (2.18.0)\n", + "Requirement already satisfied: wheel<1.0,>=0.23.0 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from astunparse>=1.6.0->tensorflow-intel==2.16.1->tensorflow) (0.43.0)\n", + "Requirement already satisfied: mdurl~=0.1 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from markdown-it-py>=2.2.0->rich->keras) (0.1.2)\n", + "Requirement already satisfied: charset-normalizer<4,>=2 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from requests<3,>=2.21.0->tensorflow-intel==2.16.1->tensorflow) (3.3.2)\n", + "Requirement already satisfied: idna<4,>=2.5 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from requests<3,>=2.21.0->tensorflow-intel==2.16.1->tensorflow) (3.7)\n", + "Requirement already satisfied: urllib3<1.27,>=1.21.1 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from requests<3,>=2.21.0->tensorflow-intel==2.16.1->tensorflow) (1.26.18)\n", + "Requirement already satisfied: certifi>=2017.4.17 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from requests<3,>=2.21.0->tensorflow-intel==2.16.1->tensorflow) (2024.2.2)\n", + "Requirement already satisfied: markdown>=2.6.8 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from tensorboard<2.17,>=2.16->tensorflow-intel==2.16.1->tensorflow) (3.6)\n", + "Requirement already satisfied: tensorboard-data-server<0.8.0,>=0.7.0 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from tensorboard<2.17,>=2.16->tensorflow-intel==2.16.1->tensorflow) (0.7.2)\n", + "Requirement already satisfied: werkzeug>=1.0.1 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from tensorboard<2.17,>=2.16->tensorflow-intel==2.16.1->tensorflow) (3.0.3)\n", + "Requirement already satisfied: MarkupSafe>=2.1.1 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from werkzeug>=1.0.1->tensorboard<2.17,>=2.16->tensorflow-intel==2.16.1->tensorflow) (2.1.5)\n", + "Note: you may need to restart the kernel to use updated packages.\n" + ] + } + ], + "source": [ + "%pip install keras tensorflow" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [], + "source": [ + "import pandas as pd\n", + "import numpy as np\n", + "from sklearn.model_selection import train_test_split\n", + "from sklearn.preprocessing import StandardScaler, LabelEncoder, OneHotEncoder\n", + "from sklearn.compose import ColumnTransformer\n", + "from tensorflow.keras.models import Sequential\n", + "from tensorflow.keras.layers import Dense, Dropout" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [], + "source": [ + "data = pd.read_csv('../Dataset/Thyroid_Diff.csv')\n", + "\n", + "X = data.drop('Recurred', axis=1)\n", + "y = data['Recurred']" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [], + "source": [ + "if y.dtype == 'object':\n", + " le = LabelEncoder()\n", + " y = le.fit_transform(y)" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [], + "source": [ + "categorical_cols = X.select_dtypes(include=['object']).columns\n", + "numerical_cols = X.select_dtypes(include=[np.number]).columns\n", + "\n", + "numerical_transformer = StandardScaler()\n", + "categorical_transformer = OneHotEncoder(handle_unknown='ignore')\n", + "\n", + "preprocessor = ColumnTransformer(\n", + " transformers=[\n", + " ('num', numerical_transformer, numerical_cols),\n", + " ('cat', categorical_transformer, categorical_cols)\n", + " ])\n", + "\n", + "X = preprocessor.fit_transform(X)" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 1/50\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "c:\\Users\\arpit\\Desktop\\dl\\env\\Lib\\site-packages\\keras\\src\\layers\\core\\dense.py:87: UserWarning: Do not pass an `input_shape`/`input_dim` argument to a layer. When using Sequential models, prefer using an `Input(shape)` object as the first layer in the model instead.\n", + " super().__init__(activity_regularizer=activity_regularizer, **kwargs)\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\u001b[1m10/10\u001b[0m \u001b[32mโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 25ms/step - accuracy: 0.6701 - loss: 0.6454 - val_accuracy: 0.7792 - val_loss: 0.4609\n", + "Epoch 2/50\n", + "\u001b[1m10/10\u001b[0m \u001b[32mโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 7ms/step - accuracy: 0.7309 - loss: 0.5432 - val_accuracy: 0.8052 - val_loss: 0.4042\n", + "Epoch 3/50\n", + "\u001b[1m10/10\u001b[0m \u001b[32mโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 7ms/step - accuracy: 0.7882 - loss: 0.4812 - val_accuracy: 0.8312 - val_loss: 0.3658\n", + "Epoch 4/50\n", + "\u001b[1m10/10\u001b[0m \u001b[32mโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 7ms/step - accuracy: 0.7464 - loss: 0.4787 - val_accuracy: 0.8571 - val_loss: 0.3314\n", + "Epoch 5/50\n", + "\u001b[1m10/10\u001b[0m \u001b[32mโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 7ms/step - accuracy: 0.8045 - loss: 0.4216 - val_accuracy: 0.8831 - val_loss: 0.3007\n", + "Epoch 6/50\n", + "\u001b[1m10/10\u001b[0m \u001b[32mโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 5ms/step - accuracy: 0.8582 - loss: 0.3996 - val_accuracy: 0.8701 - val_loss: 0.2707\n", + "Epoch 7/50\n", + "\u001b[1m10/10\u001b[0m \u001b[32mโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 6ms/step - accuracy: 0.8293 - loss: 0.3780 - val_accuracy: 0.8701 - val_loss: 0.2474\n", + "Epoch 8/50\n", + "\u001b[1m10/10\u001b[0m \u001b[32mโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 5ms/step - accuracy: 0.8472 - loss: 0.3721 - val_accuracy: 0.8831 - val_loss: 0.2252\n", + "Epoch 9/50\n", + "\u001b[1m10/10\u001b[0m \u001b[32mโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 5ms/step - accuracy: 0.8490 - loss: 0.3451 - val_accuracy: 0.9091 - val_loss: 0.2005\n", + "Epoch 10/50\n", + "\u001b[1m10/10\u001b[0m \u001b[32mโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 4ms/step - accuracy: 0.9058 - loss: 0.2704 - val_accuracy: 0.9221 - val_loss: 0.1837\n", + "Epoch 11/50\n", + "\u001b[1m10/10\u001b[0m \u001b[32mโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 5ms/step - accuracy: 0.8558 - loss: 0.3178 - val_accuracy: 0.9481 - val_loss: 0.1717\n", + "Epoch 12/50\n", + "\u001b[1m10/10\u001b[0m \u001b[32mโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 5ms/step - accuracy: 0.8806 - loss: 0.2973 - val_accuracy: 0.9481 - val_loss: 0.1629\n", + "Epoch 13/50\n", + "\u001b[1m10/10\u001b[0m \u001b[32mโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 5ms/step - accuracy: 0.8856 - loss: 0.2744 - val_accuracy: 0.9481 - val_loss: 0.1556\n", + "Epoch 14/50\n", + "\u001b[1m10/10\u001b[0m \u001b[32mโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 6ms/step - accuracy: 0.9392 - loss: 0.2464 - val_accuracy: 0.9481 - val_loss: 0.1441\n", + "Epoch 15/50\n", + "\u001b[1m10/10\u001b[0m \u001b[32mโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 6ms/step - accuracy: 0.9216 - loss: 0.2069 - val_accuracy: 0.9481 - val_loss: 0.1369\n", + "Epoch 16/50\n", + "\u001b[1m10/10\u001b[0m \u001b[32mโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 6ms/step - accuracy: 0.9090 - loss: 0.2347 - val_accuracy: 0.9481 - val_loss: 0.1305\n", + "Epoch 17/50\n", + "\u001b[1m10/10\u001b[0m \u001b[32mโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 7ms/step - accuracy: 0.9197 - loss: 0.1980 - val_accuracy: 0.9481 - val_loss: 0.1245\n", + "Epoch 18/50\n", + "\u001b[1m10/10\u001b[0m \u001b[32mโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 8ms/step - accuracy: 0.9091 - loss: 0.2312 - val_accuracy: 0.9481 - val_loss: 0.1196\n", + "Epoch 19/50\n", + "\u001b[1m10/10\u001b[0m \u001b[32mโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 6ms/step - accuracy: 0.9258 - loss: 0.1794 - val_accuracy: 0.9481 - val_loss: 0.1142\n", + "Epoch 20/50\n", + "\u001b[1m10/10\u001b[0m \u001b[32mโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 7ms/step - accuracy: 0.9127 - loss: 0.2144 - val_accuracy: 0.9481 - val_loss: 0.1110\n", + "Epoch 21/50\n", + "\u001b[1m10/10\u001b[0m \u001b[32mโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 6ms/step - accuracy: 0.9184 - loss: 0.1929 - val_accuracy: 0.9610 - val_loss: 0.1122\n", + "Epoch 22/50\n", + "\u001b[1m10/10\u001b[0m \u001b[32mโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 6ms/step - accuracy: 0.9390 - loss: 0.1689 - val_accuracy: 0.9610 - val_loss: 0.1022\n", + "Epoch 23/50\n", + "\u001b[1m10/10\u001b[0m \u001b[32mโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 6ms/step - accuracy: 0.9236 - loss: 0.1859 - val_accuracy: 0.9481 - val_loss: 0.0931\n", + "Epoch 24/50\n", + "\u001b[1m10/10\u001b[0m \u001b[32mโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 6ms/step - accuracy: 0.9437 - loss: 0.1742 - val_accuracy: 0.9610 - val_loss: 0.0869\n", + "Epoch 25/50\n", + "\u001b[1m10/10\u001b[0m \u001b[32mโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 5ms/step - accuracy: 0.9449 - loss: 0.1422 - val_accuracy: 0.9610 - val_loss: 0.0895\n", + "Epoch 26/50\n", + "\u001b[1m10/10\u001b[0m \u001b[32mโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 5ms/step - accuracy: 0.9624 - loss: 0.1397 - val_accuracy: 0.9610 - val_loss: 0.0957\n", + "Epoch 27/50\n", + "\u001b[1m10/10\u001b[0m \u001b[32mโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 6ms/step - accuracy: 0.9562 - loss: 0.1530 - val_accuracy: 0.9610 - val_loss: 0.0935\n", + "Epoch 28/50\n", + "\u001b[1m10/10\u001b[0m \u001b[32mโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 5ms/step - accuracy: 0.9609 - loss: 0.1517 - val_accuracy: 0.9610 - val_loss: 0.0820\n", + "Epoch 29/50\n", + "\u001b[1m10/10\u001b[0m \u001b[32mโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 6ms/step - accuracy: 0.9656 - loss: 0.1166 - val_accuracy: 0.9740 - val_loss: 0.0735\n", + "Epoch 30/50\n", + "\u001b[1m10/10\u001b[0m \u001b[32mโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 5ms/step - accuracy: 0.9446 - loss: 0.1292 - val_accuracy: 0.9740 - val_loss: 0.0730\n", + "Epoch 31/50\n", + "\u001b[1m10/10\u001b[0m \u001b[32mโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 5ms/step - accuracy: 0.9623 - loss: 0.1295 - val_accuracy: 0.9740 - val_loss: 0.0701\n", + "Epoch 32/50\n", + "\u001b[1m10/10\u001b[0m \u001b[32mโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 5ms/step - accuracy: 0.9580 - loss: 0.1358 - val_accuracy: 0.9740 - val_loss: 0.0739\n", + "Epoch 33/50\n", + "\u001b[1m10/10\u001b[0m \u001b[32mโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 6ms/step - accuracy: 0.9626 - loss: 0.1590 - val_accuracy: 0.9740 - val_loss: 0.0738\n", + "Epoch 34/50\n", + "\u001b[1m10/10\u001b[0m \u001b[32mโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 6ms/step - accuracy: 0.9432 - loss: 0.1378 - val_accuracy: 0.9740 - val_loss: 0.0714\n", + "Epoch 35/50\n", + "\u001b[1m10/10\u001b[0m \u001b[32mโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 5ms/step - accuracy: 0.9534 - loss: 0.1164 - val_accuracy: 0.9740 - val_loss: 0.0664\n", + "Epoch 36/50\n", + "\u001b[1m10/10\u001b[0m \u001b[32mโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 5ms/step - accuracy: 0.9571 - loss: 0.1167 - val_accuracy: 0.9870 - val_loss: 0.0627\n", + "Epoch 37/50\n", + "\u001b[1m10/10\u001b[0m \u001b[32mโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 5ms/step - accuracy: 0.9447 - loss: 0.1269 - val_accuracy: 0.9740 - val_loss: 0.0664\n", + "Epoch 38/50\n", + "\u001b[1m10/10\u001b[0m \u001b[32mโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 6ms/step - accuracy: 0.9600 - loss: 0.1199 - val_accuracy: 0.9740 - val_loss: 0.0685\n", + "Epoch 39/50\n", + "\u001b[1m10/10\u001b[0m \u001b[32mโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 6ms/step - accuracy: 0.9681 - loss: 0.1198 - val_accuracy: 0.9740 - val_loss: 0.0704\n", + "Epoch 40/50\n", + "\u001b[1m10/10\u001b[0m \u001b[32mโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 5ms/step - accuracy: 0.9675 - loss: 0.0983 - val_accuracy: 0.9870 - val_loss: 0.0645\n", + "Epoch 41/50\n", + "\u001b[1m10/10\u001b[0m \u001b[32mโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 5ms/step - accuracy: 0.9596 - loss: 0.1161 - val_accuracy: 0.9870 - val_loss: 0.0646\n", + "Epoch 42/50\n", + "\u001b[1m10/10\u001b[0m \u001b[32mโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 6ms/step - accuracy: 0.9699 - loss: 0.0837 - val_accuracy: 0.9870 - val_loss: 0.0644\n", + "Epoch 43/50\n", + "\u001b[1m10/10\u001b[0m \u001b[32mโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 6ms/step - accuracy: 0.9701 - loss: 0.0858 - val_accuracy: 0.9870 - val_loss: 0.0618\n", + "Epoch 44/50\n", + "\u001b[1m10/10\u001b[0m \u001b[32mโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 5ms/step - accuracy: 0.9462 - loss: 0.1318 - val_accuracy: 0.9870 - val_loss: 0.0591\n", + "Epoch 45/50\n", + "\u001b[1m10/10\u001b[0m \u001b[32mโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 6ms/step - accuracy: 0.9782 - loss: 0.0892 - val_accuracy: 0.9870 - val_loss: 0.0570\n", + "Epoch 46/50\n", + "\u001b[1m10/10\u001b[0m \u001b[32mโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 6ms/step - accuracy: 0.9679 - loss: 0.0865 - val_accuracy: 0.9870 - val_loss: 0.0541\n", + "Epoch 47/50\n", + "\u001b[1m10/10\u001b[0m \u001b[32mโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 5ms/step - accuracy: 0.9542 - loss: 0.1071 - val_accuracy: 0.9870 - val_loss: 0.0566\n", + "Epoch 48/50\n", + "\u001b[1m10/10\u001b[0m \u001b[32mโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 5ms/step - accuracy: 0.9618 - loss: 0.1223 - val_accuracy: 0.9870 - val_loss: 0.0562\n", + "Epoch 49/50\n", + "\u001b[1m10/10\u001b[0m \u001b[32mโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 6ms/step - accuracy: 0.9778 - loss: 0.0574 - val_accuracy: 0.9870 - val_loss: 0.0572\n", + "Epoch 50/50\n", + "\u001b[1m10/10\u001b[0m \u001b[32mโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 5ms/step - accuracy: 0.9615 - loss: 0.0847 - val_accuracy: 0.9870 - val_loss: 0.0599\n", + "\u001b[1m3/3\u001b[0m \u001b[32mโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 0s/step - accuracy: 0.9935 - loss: 0.0422 \n", + "Accuracy: 98.70%\n" + ] + } + ], + "source": [ + "X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)\n", + "\n", + "model = Sequential()\n", + "model.add(Dense(64, input_dim=X_train.shape[1], activation='relu'))\n", + "model.add(Dropout(0.5))\n", + "model.add(Dense(32, activation='relu'))\n", + "model.add(Dropout(0.5))\n", + "model.add(Dense(1, activation='sigmoid'))\n", + "\n", + "model.compile(optimizer='adam', loss='binary_crossentropy', metrics=['accuracy'])\n", + "history = model.fit(X_train, y_train, epochs=50, batch_size=32, validation_data=(X_test, y_test))\n", + "\n", + "loss, accuracy = model.evaluate(X_test, y_test)\n", + "print(f'Accuracy: {accuracy*100:.2f}%')" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "WARNING:absl:You are saving your model as an HDF5 file via `model.save()` or `keras.saving.save_model(model)`. This file format is considered legacy. We recommend using instead the native Keras format, e.g. `model.save('my_model.keras')` or `keras.saving.save_model(model, 'my_model.keras')`. \n" + ] + } + ], + "source": [ + "model.save(\"MLPModel/model.h5\")" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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MtjbSwKkB4qicDdbXeHva21uqreVOm+//TZffPEF9erVw9nZmaioKPr06cNHH32EpaUly5cvJzg4mIsXL1KnTp1CrzNnzhw+++wzPv/8c7755huGDh3KtWvXcHFxKfD89PR0vvjiC1asWIGJiQnDhg1j2rRprFy5EoBPP/2UlStXsnTpUpo0acLXX3/Nxo0b82yhUpCUlBTWrVvHoUOHaNy4MUlJSfz777907doV0O5D9+ijj1KrVi02bdqEh4cHx48fR6PRALB582b69+/Pu+++y/Lly8nKyuKvv/4q1X398ssvad26NVZWVmRkZNC2bVveeustHBwc2Lx5M8OHD6d+/fp06NAB0O6B9+OPP/LVV1/RpUsXoqOjuXDhAgBjx45l4sSJfPnll1haWgLw888/U6tWLbp3717i+ISoUFnpsHkqaHLg0CJo/hx4tzdsTLcvw657iZippXGNSlV1JoZNQSQB0oO72WqaztxW4e977v0gbCz085/w/fff5/HHH9d97+Ligr+/v+77Dz74gA0bNrBp0yYmTpxY6HVGjRqlG834+OOPWbBgAYcPH6ZXr14Fnp+dnc2iRYuoX78+ABMnTuT99+//JvbNN98wffp0+vfvD8C3335brERkzZo1NGzYkGbNmgEwaNAgFi9erEuAVq1aRXx8PEeOHNElZw0aNNC9/qOPPmLQoEHMmTNHd+zB+1FcU6ZM4ZlnnslzbNq0abqvJ02axLZt2/jll1/o0KEDKSkpfP3113z77beMHDkSgPr169OlSxcAnnnmGSZOnMjvv//OgAEDAFi2bBmjRo2SZevC+O2dB0lR97//63V48R8wMVCjTUWBLW9pp77qPQbDN0oCVI1IEbQAoF27dnm+T01NZdq0aTRp0gQnJyfs7Ow4f/58ns1pC9KyZUvd17a2tjg4OOi2VCiIjY2NLvkB7bYLuecnJSURGxurGxkBMDU1pW3btg/9PEuWLGHYsGG674cNG8a6detISUkBIDQ0lNatWxc6MhUaGqqX6aT/3le1Ws0HH3xAixYtcHFxwc7Ojm3btunu6/nz58nMzCz0va2srBg+fDhLliwB4Pjx45w5c4ZRo0aVOVYhytWtCNj3tfbrJ+eBpSNEn4RjSw0X08UtEPY3mJhD788l+almZARID6zNTTn3ftDDTyyH99UXW1vbPN9PmzaN7du388UXX9CgQQOsra157rnnyMrKKvI6/y3yValUumml4p5f1v15z507x8GDBzl8+HCeuh+1Ws2aNWt48cUXdVs9FOZhzxcUZ0Edk/97Xz///HO+/vpr5s+fT4sWLbC1tWXKlCm6+/qw9wXtNFirVq24fv06S5cupXv37vj4+Dz0dUIYjG6kJQvqd4d2L4BGDVvegJAPoGk/sHWt2Jiy78LWe/8+dJoIbo0q9v2FwckIkB6oVCpsLMwq/FGeUx779u1j1KhR9O/fnxYtWuDh4cHVq1fL7f0K4ujoiLu7O0eOHNEdU6vVHD9+vMjXLV68mEceeYSTJ08SGhqqe0ydOpXFixcD2pGq0NBQbt++XeA1WrZsSUhISKHv4ebmlmd1XVhYGOnp6Q/9TPv27aNv374MGzYMf39/6tWrx6VLl3TPN2zYEGtr6yLfu0WLFrRr144ff/yRVatW8cILLzz0fYUwqAubIXx73pGWdi+ARwvISIQdsys+pr1fQWIkONSCR96o+PcXBicJkChQw4YNWb9+PaGhoZw8eZIhQ4YUOZJTXiZNmsTcuXP5/fffuXjxIpMnT+bOnTuFJn/Z2dmsWLGCwYMH07x58zyPsWPHcujQIc6ePcvgwYPx8PCgX79+7Nu3j8uXL/Pbb79x4MABAGbNmsXq1auZNWsW58+f5/Tp03z66f0VK927d+fbb7/lxIkTHD16lJdffrlYS9wbNmzI9u3b2b9/P+fPn+ell14iNjZW97yVlRVvvfUWb775JsuXLyciIoKDBw/qErdcY8eO5ZNPPkFRFF19lBBGKSsdtk7Xft35VXC9V2tnagZ9vtR+fWIFRB0p+PXl4fZl2Dtf+3XQx9ol+aLakQRIFGjevHk4OzvTqVMngoODCQoKok2bNhUex1tvvcXgwYMZMWIEgYGB2NnZERQUhJWVVYHnb9q0iVu3bhWYFDRp0oQmTZqwePFiLCws+Pvvv6lZsyZ9+vShRYsWfPLJJ7pdzx977DHWrVvHpk2baNWqFd27d+fw4cO6a3355Zd4e3vTtWtXhgwZwrRp04q1Qe6MGTNo06YNQUFBPPbYY7ok7EHvvfcer7/+OjNnzqRJkyYMHDgwXx3V4MGDMTMzY/DgwYXeCyGMwt55kBQJDrWh6+t5n6sTAK2Gar/+63XttFhF2PL2/cLnpn0r5j2rgLjkDMJiUwwdht6olLIWXFRBycnJODo6kpSUhIODQ57nMjIyuHLlCnXr1pUfPAag0Who0qQJAwYM4IMPPjB0OAZz9epV6tevz5EjR8otMZW/66LMbkXAdx21tT8DVkDTp/OfkxoP37SFzCRtcXT7MeUb08UtsHqQdjpu/H6p/Smm9Kwcun2xi9jkTPxrOzI80JenWnpipcdaVH0o6uf3f8kIkDBq165d48cff+TSpUucPn2a8ePHc+XKFYYMGWLo0AwiOzubmJgYZsyYQceOHQ0yKidEsfy38LlJcMHn2blB9xnar0Peh7SE8osp+y5seVP7deAESX5KYPXhKGKTtZ2yT15PYtq6kwTODeGTLReIuv3w+kdjJAmQMGomJiYsW7aM9u3b07lzZ06fPs2OHTto0qSJoUMziH379uHp6cmRI0dYtGiRocMRonAFFT4XpqIKoqXwuVQyc9T8uOcyAG/1aswbQX7UcrLmTno2i3ZH8Mjn/zD2p6PsuRSPRlN5JpVkGbwwat7e3uzbt8/QYRiNxx57rMxtAoQodw8WPneadL/wuTC5BdFLntAWRLcZqf8O0XkKnz8CS7siT68q7qRlsScsnsD6NahpX7qp7A3HbxCTnIGHgxUvdPHF0syUlx6px84LcSw/cI294QnsOB/LjvOx1HW1ZXRnX4YG+GBqYtx9lSQBEkIIoV8PFj4/Mu3h58P9gujQleXTITpP4XM//V3XSJ2+nsTyA1fZdPImmTkamno68MekLiVOSnLUGr7fHQHAi4/Uw9JM+9/EzNSEJ5p58EQzDyLiU1lx4Bq/HbvOlYQ0Zv5+lpikDN7s1Vjvn0ufZApMCCGE/jzY8blXCZeY95zzQIfoZfqL6eIWCNtW5Ts+Z+ao2XDiOv2/20fwt3tZd+w6mTkaVCo4F53MykPXSnzNv87EcO1WOs425gzu4F3gOfXd7Jj9dDMOvtODt+4lPd/timDL6egCzzcWkgAJIYTQj3yFzwWs+ipKvoLoW2WPqRoUPt9IvMvn2y7Qae5OXlt7khORiZibqujbyovfxnfi/ae1eyJ+se0it1Izi31dRVH47p9wAF7oXPehe0/aWpox/rH6vNi1LgDT1p006mXzMgUmhBAV6fgKOL4cqIK1XOpsiA4t20hLuxfgxHKIOQ3/1x1s3coWU0ZSlS18jkvO4L3fz7D9XCy5tcceDlYMDajDoA51cLO3BKCVtxNrjkRx9mYyn229yKfPtSziqvftvBDHhZgU7CzNGBHoW+y43urVmLM3k9kfcYtxK47x+8TOOFg9vFFsRZMESAghKkpCOPz5Gmjy7xtXpXSe/PDC58LkFkQv7QV3rmof+tBrbpUrfJ6+/jQhF7RNUgPr1WBEoA+PN3XHzDTv5I6piYr3+zbj2e8PsPZoFIMD6tDK26nIayuKwrf3Rn+GdfTB0ab4CYyZqQnfDG7N09/u40pCGq+tCeXHEe0wMbKiaEmAhBCiIiiKdvNPTTbUfRQCXjJ0ROXD3Fr7+cqiTgCM2w1JUfqJybam/leVGdi5m8mEXIjDRAW/ju9EmzrORZ7f1seFZ9vU5rfj15n5+xk2vNK5yILog5dvcyIyEUszE8Z0qVvi+GrYWbJoWFueXbSfkAtxLNgZxpSexjX9KAmQKLbHHnuMVq1aMX/+fAB8fX2ZMmUKU6ZMKfQ1KpWKDRs25NvuoaT0dR0hDOb8HxCxE0wt4KmvoEZ9Q0dk3Dxbah+iQLkrs/q08Hxo8pPr7d6N+ftsDKeuJ7H2SBRDAuoUeu53u7SjPwPbe+um0kqqRW1HPu7fgmnrTjJ/RxjNvRzp2dS9VNcqD1IEXQ0EBwfTq1evAp/7999/UalUnDp1qsTXPXLkCOPGjStreHnMnj2bVq1a5TseHR1N79699fpehbl79y4uLi64urqSmVn8gkEhCpWV9sCGoFMk+RFlciUhjc2nbgLwymPFn2p0s7fktce1ozCfbbvAnbSsAs87GZXIv2EJmJmoGPdIvTLF+lzb2owM9AHgtbWhXI5PLdP19EkSoGpgzJgxbN++nevXr+d7bunSpbRr146WLUv+m5abm1uxNgDVBw8PDywtS/dbSEn99ttvNGvWjMaNG7Nx48YKec/CKIpCTk6OQWMQevDvl5B8HRzrQJfXDB2NqOR+2B2BRoHujWvS1Kvo/a7+a0SgD37u9iSmZ/PF3xcLPCd39Kdvq1rUdi77v/EznmpKe19nUjJzGLfiGKmZxvFvmiRA1cBTTz2Fm5sby5Yty3M8NTWVdevWMWbMGG7dusXgwYOpVasWNjY2tGjRgtWrVxd5XV9fX910GEBYWBiPPPIIVlZWNG3alO3bt+d7zVtvvUWjRo2wsbGhXr16vPfee2RnawtCly1bxpw5czh58iQqlQqVSqWLWaVS5UlGTp8+Tffu3bG2tqZGjRqMGzeO1NT7v1mMGjWKfv368cUXX+Dp6UmNGjWYMGGC7r2KsnjxYoYNG8awYcNYvHhxvufPnj3LU089hYODA/b29nTt2pWIiAjd80uWLKFZs2ZYWlri6enJxIkTAe0GpiqVitDQUN25iYmJqFQqdu3aBcCuXbtQqVRs2bKFtm3bYmlpyd69e4mIiKBv3764u7tjZ2dH+/bt2bFjR564MjMzeeutt/D29sbS0pIGDRqwePFiFEWhQYMGfPHFF3nODw0NRaVSER4e/tB7IsogIRz2LdB+3fsTsKiYXxpE1RSddJffjmt/mZ3QreQjiWamJrzfV7ssftXhSM7cSMrz/KXYFLadjUWlgvGPlW30J5e5qQkLh7bB3cGS8LhU3lh30ig62ksCpA+Koh3iruhHMf8CmZmZMWLECJYtW5bnL926detQq9UMHjyYjIwM2rZty+bNmzlz5gzjxo1j+PDhHD58uFjvodFoeOaZZ7CwsODQoUMsWrSIt956K9959vb2LFu2jHPnzvH111/z448/8tVXXwEwcOBAXn/9dZo1a0Z0dDTR0dEMHDgw3zXS0tIICgrC2dmZI0eOsG7dOnbs2KFLNHL9888/RERE8M8///DTTz+xbNmyfEngf0VERHDgwAEGDBjAgAED+Pfff7l27X7zsBs3bvDII49gaWnJzp07OXbsGC+88IJulOb7779nwoQJjBs3jtOnT7Np0yYaNCj5api3336bTz75hPPnz9OyZUtSU1Pp06cPISEhnDhxgl69ehEcHExkZKTuNSNGjGD16tUsWLCA8+fP88MPP2BnZ4dKpeKFF15g6dKled5j6dKlPPLII6WKTxTTg4XPDR4Hvz6GjkhUcj/uuUK2WiGgrgttfVxKdY2AejXo28oLRYH3fj+TZ/+u73dpf5nr1cyDBjXt9RIzQE17K74f1hZzUxVbzsToapgMSYqg9SE7HT72qvj3fedmsbusvvDCC3z++efs3r2bxx57DND+AHz22WdxdHTE0dGRadPut6yfNGkS27Zt45dffqFDhw4Pvf6OHTu4cOEC27Ztw8tLey8+/vjjfHU7M2bM0H3t6+vLtGnTWLNmDW+++SbW1tbY2dlhZmaGh4dHoe+1atUqMjIyWL58Oba22s//7bffEhwczKeffoq7u7bIztnZmW+//RZTU1MaN27Mk08+SUhICC+++GKh116yZAm9e/fG2VlbVBgUFMTSpUuZPXs2AAsXLsTR0ZE1a9Zgbq5dFtqo0f2VDR9++CGvv/46kydP1h1r377kq0/ef/99Hn/8cd33Li4u+Pv7677/4IMP2LBhA5s2bWLixIlcunSJX375he3bt9OzZ08A6tW7/9vbqFGjmDlzJocPH6ZDhw5kZ2ezatWqfKNCQs8eLHzu/WmV7UBcmUXeSufnQ9fYeSGOHLWmyHPNTU14pVt9+reuXUHR5XUrNZPVh7W/9EzoVrZfXN7p04Qd52I5EZnIb8ev83w7byJvpbPpZMlri4qrTR1n5jzdnHc2nObzbRdp5uXIo43K2OepDGQEqJpo3LgxnTp1YsmSJQCEh4fz77//MmbMGADUajUffPABLVq0wMXFBTs7O7Zt25ZnhKEo58+fx9vbW5f8AAQGBuY7b+3atXTu3BkPDw/s7OyYMWNGsd/jwffy9/fXJT8AnTt3RqPRcPHi/TntZs2aYWp6fy8hT09P4uLiCr2uWq3mp59+YtiwYbpjw4YNY9myZWg02n8YQ0ND6dq1qy75eVBcXBw3b96kR48eJfo8BWnXrl2e71NTU5k2bRpNmjTByckJOzs7zp8/r7t3oaGhmJqa8uijBS8/9vLy4sknn9T99//jjz/IzMzk+eefL3OsohBZabDtHe3XnSdL4bMR0WgU/rkYxwvLjvDoF//wvz2XCY9L5eqt9CIfYXGpTFt3iv3hCQaJe9n+q9zNVtOiliNdG7qW6VruDlZM7tkQgE+2XCDpbjY/7IlArVF4pJEbLWo76iPkfIYE1GFwB28UBX4/caNc3qO4ZARIH8xttKMxhnjfEhgzZgyTJk1i4cKFLF26lPr16+t+YH7++ed8/fXXzJ8/nxYtWmBra8uUKVPIyip4lUBpHDhwgKFDhzJnzhyCgoJ0Iylffvml3t7jQf9NUlQqlS6RKci2bdu4ceNGvmk3tVpNSEgIjz/+ONbW1oW+vqjnAExMtL9vPDgNWVhN0oPJHcC0adPYvn07X3zxBQ0aNMDa2prnnntO99/nYe8NMHbsWIYPH85XX33F0qVLGThwYIUVsVdL/36p7WPjWAe6TDV0NAJISs9m3bEoVhy8xrVb6brjjzRyY3AxlnuvOHiN30NvMnH1Cf6Y1IVaTg///05fUjKyWbb/KqCt/VHpYTRxVKe6rD0SRUR8GjM2nmHbmRjt9R8r32R99tPNaOblyJAOhS/DrwiSAOmDSlWyDf8MZMCAAUyePJlVq1axfPlyxo8fr/ufaN++ffTt21c3+qHRaLh06RJNmzYt1rWbNGlCVFQU0dHReHp6AnDw4ME85+zfvx8fHx/effdd3bEH62sALCwsUKvVD32vZcuWkZaWpksU9u3bh4mJCX5+fsWKtyCLFy9m0KBBeeID+Oijj1i8eDGPP/44LVu25KeffiI7OztfgmVvb4+vry8hISF069Yt3/Xd3LRDvdHR0bRu3RogT0F0Ufbt28eoUaPo378/oB0Runr1qu75Fi1aoNFo2L17t24K7L/69OmDra0t33//PVu3bmXPnj3Fem9RCgnhsP8b7ddS+GxwZ28mseLANTaG3iAjW/tLkL2VGc+39WZYxzrUcyteh+jmtRyJiE/lzI1kXl5xjHUvB2Jlrscd64vw88FIUjJyqO9myxNNCy8RKAkLMxPmPN2cYYsP8ce9qa92Ps50qFu62qLisjQzZVhHn3J9j+KQBKgasbOzY+DAgUyfPp3k5GRGjRqle65hw4b8+uuv7N+/H2dnZ+bNm0dsbGyxE6CePXvSqFEjRo4cyeeff05ycnK+RKJhw4ZERkayZs0a2rdvz+bNm9mwYUOec3x9fbly5QqhoaHUrl0be3v7fMvfhw4dyqxZsxg5ciSzZ88mPj6eSZMmMXz4cF39T0nFx8fzxx9/sGnTJpo3b57nuREjRtC/f39u377NxIkT+eabbxg0aBDTp0/H0dGRgwcP0qFDB/z8/Jg9ezYvv/wyNWvWpHfv3qSkpLBv3z4mTZqEtbU1HTt25JNPPqFu3brExcXlqYkqSsOGDVm/fj3BwcGoVCree++9PKNZvr6+jBw5khdeeIEFCxbg7+/PtWvXiIuLY8CAAQCYmpoyatQopk+fTsOGDQucohR6oCjazTfVWZWi8Plulpqxy4+Qma1h1YsdsTAr38qIAxG3mLzmBH4e9owI9KV745pFdiQuSHJGNr8du87KQ5FEFKOvzIPrRRp72DOyky99W3k9dHPP/7IyN2XRsLYEf7OX0zeSeHfDGb54vqVeRmOKkpGtZvHey4C2NkefW0p0aehKnxYe/HX63uhPtwbl/nmMhdQAVTNjxozhzp07BAUF5anXmTFjBm3atCEoKIjHHnsMDw+PEnVdNjExYcOGDdy9e5cOHTowduxYPvroozznPP3007z22mtMnDiRVq1asX//ft5777085zz77LP06tWLbt264ebmVuBSfBsbG7Zt28bt27dp3749zz33HD169ODbb78t2c14QG5BdUH1Oz169MDa2pqff/6ZGjVqsHPnTlJTU3n00Udp27YtP/74o240aOTIkcyfP5/vvvuOZs2a8dRTTxEWFqa71pIlS8jJyaFt27ZMmTKFDz/8sFjxzZs3D2dnZzp16kRwcDBBQUG0adMmzznff/89zz33HK+88gqNGzfmxRdfJC0tLc85Y8aMISsri9GjR5f0FoniuvAnRIRUisJnRVF4e/0p9oXf4ui1Oxy+crtc3+/6nXReWXmMuJRM/g1L4MXlR3nks3/4blc4twtpyvegizEpvLvhNB0/DmHOH+cIj0tFUXjow8xERbC/F+teDmTL5K4M7lCnxMlPrtrONiwc0gYTFfx2/DorDl57+IvK6JejUSSkZlHb2ZqnW+l/wc2MJ5tS096SwHo1eMzPcEXJFU2lGMNifCOTnJyMo6MjSUlJODjkbTKVkZHBlStXqFu3LlZWVgaKUIjS+ffff+nRowdRUVEPHS2Tv+ulkJUGCwO0tT+PvAHdizfCZyiL917hgz/P6b4f3dmXWcHNyuW9MrLVPLdoP2duJNO8lgOdG7iy9kgUienaOjgLMxOeaunJyEBf/B/YqDNbrWHb2RiWH7iWJ0Fr5G7H8EBfHm/i/tARJFtL01InPIX5cc9lPvrrPGYmKlaP60h73/KZNspWa3js813cSLzLB/2aM7ycpo5y1BpMVCqj27C0pIr6+f1fMgUmRDWQmZlJfHw8s2fP5vnnny/1VGGRcrLg1FrIetiUhArqdwO30tdrAXArAsK2A0b0O1zU4YcWPms0CunZauwsDfvP7/6IBD7+6zyg7Si880IcIefjmPlUU71PgSiKwjsbTnPmRjIuthb8MLwdtZysea1nI/44eZPlB65x+kYS64/fYP3xG/jXdmRoRx+iEzNYdfgascnaLWlMTVQENXNneEdfOtZzMehUzdiudTl1I4k/Tt5k/M/H+XNSFzwc9f+Lwu+hN7mReBdXO0ueb1t+y+//u4N8dSAJkBDVwOrVqxkzZgytWrVi+fLl5fMm/3wI+74u3rm2bjDxKFg7le69stLgp6e120sYo15zCyx8jknK4KUVRzkfk8Jfr3bRa6O5kriReJdJq06g1ig807oWH/RrTuv3txN5O52I+FS9x7X8wDXWH7+BiQq+Hdxat3rKytyU59t581zb2oRGJbLiwDX+PBXNyetJnPz1/v6ErnaWDOngzeCAOng6VtzKq6KoVCo+fbYFYbEpXIhJYfzKY6wZ1xFLM/0VRas1im5bihe71q2wguvqQhIgIaqBUaNG5Sl617v4i3BgofZrvz5gXsQPqciDkHwD/vkY+nxWuvfb87k2+bHzAN/OpbtGefFsBY2fzHf49PUkxi4/ohvNWHf0OtP7NKng4LRTUeN/PsattCyaeTnw8TMtsDI3pWP9Guy5FE/I+Ti9JkCHr9zWTbO906cJnRrk71+jUqloXceZ1nWceefJJqw9EsXvoTdwsrZgaMc69G7uWe7F2aVhY2HGD8O1RdEnIhOZ88c5Pu7fQm/X//tsDJfj03CwMmOoEayaqmokARJClI2iwF9vgCYHGvWCwUXvIUfEP7CiHxz5EdoMB48S/sBICIP99wren/oKGhv3KiuAv05HM/WXUDKyNTjZmJOYns2fp6J5u3fjCp3GURSF9zae4dT1JJxtzFk0rK1uVKFH45raBOhCHC89qp8+MNFJd3ll5TFyNArB/l6M6VL3oa9xtbNkQrcGZe50XFF8atiyYHBrRi87wqpDkbSs5cggPfS3URSFhfdGf0Z1rmvwKdOqSO5oKUntuKjqiv13/OwGuLIbTC2h1ycPP79+N2jaD85thM3T4IWtxV8ppUu2sqFhEPj1fvhrDEhRFBb+E84Xf18C4NFGbnz+fEtdUeuJqETa1HGusHh+PhTJumPXMVHBN4Pb4O1yf5que+OazNp0lmPX7pCYnoWTjUWZ3iszR834n4+TkJpFYw97Pn22RZVdXv2YX02mPeHH59suMvP3s1iZm1LDrmz3LyJO22/IxsKU0Z189ROoyEMSoBLKXe6cnp5erO67QlRW6enaTrkFbfuhk5kK2+71e+o6FVwe/hs+AEEfawuYow7CyTXQanDxXnd+E1z+R5ts9f7EqJeYZ2Srefu3U2wM1TaYG93Zl3f7NMHM1ISeTdzZdPImf56MrrAE6OjV28zZdBaAt3s3pst/tlLwdrHBz92ei7Ep7L4UT99Wtcr0frM3nSU0KhFHa3N+GN5W76uwjM0rj9Xn1PVEtp2NZcraUL1dd0iHOjjbli2ZEgWr2n8jy4GpqSlOTk66PaVsbGyq7G81onpSFIX09HTi4uJwcnLKs59aPns+g5Sb4OSj3e+quBxrwaNvwI7ZsP097UjOwwqis9Jg6729tbpMAZd6RZ5uSPEpmby04ijHIxMxNVHxft9mDA24X8PxVEtPNp28yV+no5nxZJNyX3ocm5zB+JXHydEoPNXSkxe7FnzvujepycXYFELOx5UpAVp1KJLVh6NQqeDrQa3wqWH8nfLLSqVS8eWAVthuPMP5mBS9XNPVzoLx5bwtRXUmCVAp5O5UXtTGmkJUdk5OTrq/6wV6sPC592dFFz4XpOMEOLESboXBrrnapoFF2fOFtvDZqQ50ea1k71WBzkcnM/ano9xIvIuDlRnfD2tL5/8U/j7q54a9lRkxyRkcvXanXLceyMrRMP7nY8SnZOLnbs9nzxXeubhH45p8vyuCXRe1O6OXZmn08cg7zNp0BoBpT/jxmF/NMsVfmdhZmjFvYCtDhyGKSRKgUlCpVHh6elKzZs1CN7MUojIzNzcveuTnv4XPfr1K/iZmFtDnc21B9OH/QethhRdEJ4Td31ur16clT7YqyM4LsUxadYK0LDV1XW35v5HtqF/APlOWZqY80dSD345f54+TN8stAVIUhTl/nOV4ZCIOVmYPnYpqXccZZxtz7qRnc/TaHTrWq1Gi94tLyWD8z8fIViv0aubBKzJ6IYyYJEBlYGpqWvQPCSGqqnMbS1b4XJjiFERXksLnY9fu8NIK7Q//wHo1+H5YmyILiZ/y9+S349fZciaaWcFN9d6ILitHw6xNZ+5PRQ1uja9r0VNRpiYquvnVZP2JG+y8EFfiBOijzeeJTc6kQU07vhjgL+UBwqgZvLHCwoUL8fX1xcrKioCAAA4fPlzoudnZ2bz//vvUr18fKysr/P392bp1a55zZs+ejUqlyvNo3LhxeX8MIaqPzNQHanFeK37hc2GCPgJzm/sF0f9VCQqf45Lvj3w80dSd5WM6PHQVVZcGrjjZmJOQmsUhPe/BdSctixFLDrH6cBQmKnj/6WZ0K+ZUVPcm2vNCzseW6D2v3UrT7Sj+1YBWsmxbGD2DJkBr165l6tSpzJo1i+PHj+Pv709QUFChtTUzZszghx9+4JtvvuHcuXO8/PLL9O/fnxMnTuQ5r1mzZkRHR+see/furYiPI0T18GDhc5cpZb+eY2149E3t19vfg7uJ95+rBIXPWTkaXll5nLiUTBrWtGPewFaYF2M0x9zUhF7NtDVWf566qbd4wuNS6f/dPg5evo2dpRmLR7ZneKBvsV//SCM3zExURMSncTUh7eEvuGfR7stoFHjMz40WtR1LEbkQFcugCdC8efN48cUXGT16NE2bNmXRokXY2NiwZMmSAs9fsWIF77zzDn369KFevXqMHz+ePn368OWXX+Y5z8zMDA8PD93D1TV/51EhRCnkKXzWYy1OxwlQoyGkxWsLonNVQOHz3Sw1y/ZdITyudCt3Ptx8jqPX7mBvqa2xKcnIR7C/dmfvLWdiyFZrSvX+D9oblkD/7/Zx9VY6tZ2t+W18J7o1LlkRsoOVua4mKeRC8RZ6xCRl8Nsx7bYklaWBoRAGS4CysrI4duwYPXv2vB+MiQk9e/bkwIEDBb4mMzMz367U1tbW+UZ4wsLC8PLyol69egwdOpTIyEj9fwAhqpt8hc96rMUxs7i/Lcbh/0HM6QorfP5w8zlm/3GOp7/dx/ZzJZv2WXc0iuUHrgEwf1Ar6hVQ8FyUgLouuNpZkJiezb7whBK99r9WHLzGyKWHScnIoZ2PMxsndMbPo3RbWnS/lzTtvFC8+/F//14mS62hg69Lue2KLoS+GSwBSkhIQK1W59uV2t3dnZiYmAJfExQUxLx58wgLC0Oj0bB9+3bWr19PdHS07pyAgACWLVvG1q1b+f7777ly5Qpdu3YlJaXw3+4yMzNJTk7O8xBC/Ie+Cp8LU787NO0LikZbEL3lzXuFz0+UW+Hz6etJrDqs/QUpPUvNuBVH+WF3RLG6YJ+6nsi7G7XLvaf0bEiPJu4PeUV+ZqYm9G7uCcCfp6IfcnbBctQaZv1+hvc2ntFtbrryxQBc7SxLdT1A91kOXb5NSkbRK13vpGWx8pD2Hr7STVZ9icqjUlWpff3117z44os0bqzdP6d+/fqMHj06z5RZ7973/6Fs2bIlAQEB+Pj48MsvvzBmzJgCrzt37lzmzJlT7vELA8hMgey7ho6i8svJ1G/hc2Ee7BAN9wqfPy2XwmeNRmHmpjMoCjzZ0hMXGwtWHLzG3C0XCI9L5aP+LQrdgPNWaiYvrzhGVo6Gnk1q8mr3hqWO46mWnqw4eI1tZ2P4qH/zEu0mnpyRzcRVJ9hzKR6AN4L8eOWx+mVefVXX1ZZ6brZcjk/j37AE+rTwLPTcpfuvcjdbTTMvBx5t5Fam9xWiIhksAXJ1dcXU1JTY2LxDrLGxsYU2X3Nzc2Pjxo1kZGRw69YtvLy8ePvtt6lXr/DCSCcnJxo1akR4eHih50yfPp2pU6fqvk9OTsbb27uEn0gYnfAQWPk8KGpDR1J1lLHwOTNHzfwdYfjXdqJX8wL+P88tiN4xW/t9ORY+/3r8OiciE7G1MGXmU01xd7CiQU075vxxlnXHrnPtVjqLhrfF5T/bEOSoNUxYdZybSRnUdbVl3sBWZerk3N7XBXcHS2KTM9lzKYHHmxZvJCkmKYNhiw8RHpeKtbkpXw30p1fzwhOVkurRuCaX46+w43xsoQlQamYOy/ZdAbS1P7LsXVQmBpsCs7CwoG3btoSEhOiOaTQaQkJCCAwMLPK1VlZW1KpVi5ycHH777Tf69u1b6LmpqalERETg6Vn4PwyWlpY4ODjkeYgq4MSKB5IflTzK+rCwg+D5ZarF+XHPZb7fFcEb606SkV1IYtpxAvh2Be+Acit8TrqbzadbLgAwuWdD3B20tYUjO/mydHQH7C3NOHz1Nv0W7iMsNu/0+SdbLnDw8m1sLUz53/C2OFgVsVdaMZiYqHQJRnFXg2XmqHnp52OEx6Xi4WDFupcD9Zr8AHRvrE3Edl2MR60peEpw5cFrJGfkUM/NlqBmRXQNF8IIGXQKbOrUqYwcOZJ27drRoUMH5s+fT1paGqNHjwZgxIgR1KpVi7lztatCDh06xI0bN2jVqhU3btxg9uzZaDQa3nzzTd01p02bRnBwMD4+Pty8eZNZs2ZhamrK4MHF3GxRVA05WdoRIIAxO8C7vWHjEVy/k863/2hHYlMyc9hzKZ4nCvqhaWYBo/4s11i+2n6JW2lZ1HezZVSnvNN5jzZyY/0rnRjz01Eib6fzzHf7+XZoGx5t5MbvoTf4v73aEY8vnvenoXvpioz/K9jfi6X7rrLjXCwZ2WqszIueBpv1+1lO3tto9JeXAqlTw6bI80ujna8zDlZm3E7LIjQqkbY+eTdtzchW8+O/2nsx/tH6mJbzfmZC6JtBl8EPHDiQL774gpkzZ9KqVStCQ0PZunWrrjA6MjIyT4FzRkYGM2bMoGnTpvTv359atWqxd+9enJycdOdcv36dwYMH4+fnx4ABA6hRowYHDx7EzU3mpquVyAOQmQy2blCrraGjEcCHf54nI1tD7s/J0hb9ltX56GSWH7gKwPt9mxdY59PQ3Z6NEzrTwdeFlMwcRi89zCdbLvDWb6cA7c7fvYuoiymp1t5O1HKyJi1LzT8PWXq+6lAka45ouzsvGNy6XJIf0PYpetSv8KaI645dJyE1k1pO1vRrXbad44UwBIMXQU+cOJGJEycW+NyuXbvyfP/oo49y7ty5Iq+3Zk0BnWRF9XPpXofwhkFgYvCG59XenkvxbD0bg6mJio/7N+et306z43wsd7PUWFtU3HYyiqIw8/czaBR4soVnvk1KH+Ria8GKsR14d8MZfj12nUW7IwBto8DXn/DTa1wqlYqnWnryw57L/HkqutDk6ti1+xuNvhHkV+5Fxz0a1+SPkzfZeSGON3vd76ifrdbww737Me6ResVq/CiEsZG/taLqURS4uEX7daMgw8YiyMrRMPuPswCMCPRhQDtvvF2sSc9Ss7OYjfb05ffQmxy5egdrc1PefbLJQ8+3NDPl8+daMr13Y1Qq8Klhw4JBrcpluuepltqmiCEXYknLzMn3fFxKBq+s1G630bu5B+MfLf8l5482csNEBRdiUrh+J113/I+TN7l+5y6udhYMbC8LRkTlJAmQqHoSLsGdK2Bqoe0tIwxqyb4rXI5Pw9XOgik9G6FSqXiyhfaHvT63gHiYlIxsPvrrPAATuzfAy6l4xdwqlYqXHq3P3re6s2Vy14fu8VVazWs54FPDhoxsDTv+M+WUlaNhwsrjxCZrt9v4/PmK2WjU2daCdj7axoa5U3MajcJ3u7SjPy90qfvQeiUhjJUkQKLqyR398e0KliXrzCv0KzrpLgtCwgB4u3cTHK21K6aeaqmd4tl5IY7UAkY7ysPXO8KIT8mkrqstY7uWvI9RLSdrbCzKr2pApVIR3DI3McxbH/Xh5nMcuVq67TbKKndz1B3ntQnQ3+diCY9Lxd7KjGEdfSosDiH0TRIgUfVc2qb9s5y6B4vi+/ivC6RnqWnr48wzDxTKNvNyoJ6rLZk5mhLvOp7r060XeOSzf/hs6wVuJBbd7PJSbApL918FYFZw0xI1G6xIT/lrE8PdF+NJvteBuazbbZRVj3vbYhyIuEVaZg7f7dKu5BsZ6FvmFgBCGJIkQKJqSb99v4uw1P8Y1P6IBP44eRMTFcx5ulmeZoG5Rb8Af5ws+Wqwy/GpLNodQeTtdL7bFUHXT3cybvlR9oYl5NvGQlEUZv1+FrVG4Ymm7jzmV7LNQSuSn7s9DWrakaXWsP1sbJ7tNib3KN12G2XVoKYddVxsyFJr+HTrBU5dT8La3JQXupRTN3AhKogkQKJqCduu3UuqZjPtDuLCILLVGmZv0hY+Dw3woXktx3znPHVvJ/Tdl+JIulv0flP/9cPuyygK+Hs7EVivBhpFOzUzbPEhes7bzbJ9V3R7WG0+Hc2By7ewNDPhvaealvGTla8HE8PVhyN12230aFyTyT1Kv91GWWPK3Rw1dyRqcIc6+TpkC1HZSAIkqpZL9+p//HoZNo5q7qf9V7kUm4qzjTmvP9GowHMaudvTyN2ObLXC32cL3gC5IDcT77L+xHUAZj7VlNXjOvL3a48wvKMPthamRMSnMfuPc3T8OIQZG0/z0WZt4fMrjzXA26V8euboU+5qsKPX7ui22/hqUNm22yirHk3uj5qZm6p48REZ/RGVnyRAoupQZ9/v/txI6n8MJS4lg/k7tIXPb/VqXOSqqacKKfotyo//XiZbrdCxnouuO3Ejd3s+6Necg+/0YM7TzajvZktalpqfD0YSnZSBt4s1Lz1aPnuK6VuDmnY08dRux2NjYcoPethuo6w61HXB9l6/pmfb1MbTsfTboQhhLCQBElXHtf3a7s82rtL92YA++esCqZk5+Nd2ZEC7onvE5E737AtP4E5a1kOvfSs1k9WHIwHt5pv/ZW9lzshOvuyY+iirxgYQ1MwdDwcrPn2mZaVarj3+sfp4Olrx9aDWNNLTdhtlYWlmyouP1KNhTbsC77sQlZHBO0ELoTe53Z8bSfdnQzly9TbrT9xApdJuM/GwaZt6bnY09XTgXHQyW8/GMLhD0XVbS/ddJSNbQ8vajnQpoouzSqWiUwNXOhVxjjF72t+Lp+/VSBmLKT0bMaVnwdOZQlRGkgCJqiFP92ep/9G3HLWG0zeSyMzRFHnenD+0W9UMau+Nv7dTsa4d7O/Fuehk/jx1s8gEKDkjm5/u7eH1ymMNKqQRoBCi6pIESFQNCWHS/bmcJKRm8tKKYxy7dqdY5ztam/NGUOOHn3jPUy09+XTrBQ5E3CI+JRM3e8sCz/v54DVSMnJoWNOOJ5pW/HJwIUTVIgmQqBouSffn8nAhJpkxy45yI/EuNhameDpaFXm+mYkJk3s2LNESaW8XG/y9nTgZlciWM9GMCPTNd87dLDWL/70CwCvd6ht0RZQQomqQBEhUDRdz639k+ktfdl6IZdKqE6RlqfGtYcPiUe2pX05diINbenIyKpE/TxacAP1yNIpbaVnUdrbWbRchhBBlIZWiovJ7sPuz9P8pM0VR+L9/LzP2p6OkZanpWM+FDa90LrfkB6BPC+1qsCPXbhOTlJHnuawcDT/s1m6++fKj9TEzlX+2hBBlJ/+SiMovfId0f9aTrBwN72w4zYebz6NRtMXMy18IwLmcu/56OVnTzscZRdF2bn7Q76E3uJmUgZu9Jc+1rV2ucQghqg9JgETld1G6P+tDYnoWI5YcYvXhKFQqmPFkE+Y+0wILs4r5Z+L+3mA3dcfUGoXvd2lHf17sWrdS9fIRQhg3SYBE5Sbdn/UiIj6Vfgv3cfDybWwtTFk8sh1ju9ar0KXmfVp6YqKC0KhEom6nA7D1TAyXE9JwtDZnSIBPhcUihKj6JAESldu1/ZCZdK/7cxtDR1MpHYi4Rf+F+7h6K51aTtb89konujeu+GXmNe2tCKhbA9BOgymKwsJ/wgEY1ckXO0tZsyGE0B9JgETldmmb9s9GQWAi0yMllZiexSsrj5GckUNbH2d+n9iZxh4OBovnKX/tNNifp26y61I856KTsbEwZVQnX4PFJISomiQBEpWXotzv/yPL30vli78vcic9m0budqwcG4CrXcFNCCtK7+aemJqoOHMjmQ/udZUeGlCn3IuwhRDVjyRAovJKCIPbl+91f+5m6GgqnTM3klh5SLux6Pt9mxtFgbGLrQWd6munwS4npGFhasLYrpVjF3chROUiCZCovHTdn7uApeF3zN5zKZ6PNp/jZFSioUN5KI1GYebvZ1AU7cabHevVMHRIOg82OnyuXW3cHYruPi2EEKUhCZCovHT1P4Zf/aUoCq+vO8mP/16h78J99P12L78du05GttrQoRXot+PXOR6ZiK2FKe/0aWLocPIIauaBjYUp5qYqXn6kvqHDEUJUUbKsQlRO6bch0ni6P1+MTSE+JRMzExUmKhUnryfx+rqTfPTXeQa292ZoQB1qO9sYOkwAku5m8+nWCwC82qMhHg/Z36uiOdqYs+7lQNQahTo1jOOeCSGqHhkBEpVT+A5Q1EbT/Xlf+C0AOjdwZf/07rwR5IeXoxW307L4flcEj3z2D2N/Osq/YfFoNIpBY/1q+yUSUrOo72bL6M51DRpLYZp5OdKytpOhwxBCVGEyAiQqH0WB48u1XzcKMmws9+wLTwCgc4MauNpZMqFbA156pB4hF+JYfuAq+8JvseN8LDvOx1LP1ZbhgT4827Y2DlbmFRrn+ehklh+4CsDsp5tVWJdnIYQwNpIAicrn7Hq4+i+YWUHbUYaOhmy1hoOX748A5TIzNSGomQdBzTwIj0thxYFr/Hb8BpcT0pjzxzk+33aRfq1rMSLQp0J67yiKwqzfz6JRoHdzD7o2dCv39xRCCGMlv/6JyiUzBba9q/266+vgbPjtEUKjEknPUuNia0GTQhKZBjXtmdO3OQff6cEHfZvRsKYd6VlqVh2KpNf8fxnwwwH+PHWTbLWm3OL8PfQmh6/exsrchBlPNS239xFCiMpARoBE5bL7M0iJBue60OlVQ0cDwN4w7fRXp/o1MDEpeu8sO0szhgf6MqyjDwcv32b5gav8fS6Ww1duc/jKbdwdLBncoQ5DOtShph6Xf6dkZPPRX+cBmNitAbWcrPV2bSGEqIwkARKVR9wFOPid9uven4K5caxe2h+RW//j+pAz71OpVATWr0Fg/RpEJ91l1aFIVh+OIjY5k/k7wlgQEoatxcP/92xR25ERgT70bOKOmWnhA7oLQsKIT8nEt4YNLz4ijQWFEEISIFE5KApseQM0OeDXx2iKn1MzczgRmQhAlxIkQA/ydLTm9Sf8mNS9IVvORLP8wDWOXbtDSmbOQ1+7P+IW+yNu4eloxdCAOgxsXwc3+7zbWYTFprB031UAZj3dDEszw3d8FkIIQ5MESFQOZ9fDlT3awudecw0djc7hK7fI0SjUcbHB26VsPWsszEzo26oWfVvVIiYpg7sPaaKYka3mj5M3WXMkiuikDL74+xJfh4TxZAtPhgf60qaOEwCzNp0lR6PQs4k73fxqlilGIYSoKiQBEsbvwcLnLlPB2deg4Txob1j+1V/6UNzmhE08HZjcsyF/nY7mp/3XCI1KZGPoTTaG3qSZlwPtfV3YH3ELCzMTZgVL4bMQQuSSBEgYP13hsy90nmzoaPLI7f9T2ukvfbA0M6V/69r0b12b09eTWH7gKr+fvMnZm8mcvZkMwPhH65d5hEoIIaoSSYCEcctT+PyZ0RQ+A8SlZHAxNgWAwPrGsZloi9qOfP68P+/0acIvR6NYeyQKJxtzxj8me2oJIcSDJAESxstIC59zHYjQTn8183LAxdbCwNHk5WxrwUuP1uelRyXxEUKIgkgjRGG8jLTwOVdu/x9DTn8JIYQoHUmAhHEy4sJn0G4rcX//L0mAhBCispEESBgnIy58BriSkMbNpAwsTE1o7+ti6HCEEEKUkCRAwvgYceFzrtzRnzY+TlhbSGNBIYSobCQBEsZn+3vawudGvY2u8DnXvnBtAbTU/wghROUkCZAwLum3IXyH9usnPjBsLIVQa5RS7f8lhBDCeEgCJIxL+A5QNFCzKbg2NHQ0BTpzI4nkjBzsrcxoUcvR0OEIIYQoBUmAhHG5uEX7Z6Neho2jCHvv1f8E1qtR5A7sQgghjJf86y2MhzobwkO0X/v1NmwsRZDl70IIUflJAiSMx7X9kJkENjWgVltDR1OgjGw1R6/dASQBEkKIykwSIGE8Lm3T/tkwCEyMc2n50at3yMrR4OFgRX03W0OHI4QQopQMngAtXLgQX19frKysCAgI4PDhw4Wem52dzfvvv0/9+vWxsrLC39+frVu3lumawkgoCly6V//jZ/z1P50buKJSqQwcjRBCiNIyaAK0du1apk6dyqxZszh+/Dj+/v4EBQURFxdX4PkzZszghx9+4JtvvuHcuXO8/PLL9O/fnxMnTpT6msJIJITB7ctgYg71uxs6mkLdr/8xjt3fhRBClI5BE6B58+bx4osvMnr0aJo2bcqiRYuwsbFhyZIlBZ6/YsUK3nnnHfr06UO9evUYP348ffr04csvvyz1NYWRyB398e0ClvaGjaUQielZnLmZBEj9jxBCVHYGS4CysrI4duwYPXv2vB+MiQk9e/bkwIEDBb4mMzMTK6u82yJYW1uzd+/eUl9TGInc+h8jXv11IOIWigINa9rh7mB823MIIYQoPoMlQAkJCajVatzd3fMcd3d3JyYmpsDXBAUFMW/ePMLCwtBoNGzfvp3169cTHR1d6muCNrFKTk7O8xAVKP02RB7Ufl0J+v/I6I8QQlR+Bi+CLomvv/6ahg0b0rhxYywsLJg4cSKjR4/GxKRsH2Pu3Lk4OjrqHt7e3nqKWBRL+A5Q1Nruz84+ho6mULn1P7L/lxBCVH4GS4BcXV0xNTUlNjY2z/HY2Fg8PDwKfI2bmxsbN24kLS2Na9euceHCBezs7KhXr16prwkwffp0kpKSdI+oqKgyfjpRIrruz8a58SlA1O10rt5Kx9RERUA9F0OHI4QQoowMlgBZWFjQtm1bQkJCdMc0Gg0hISEEBgYW+VorKytq1apFTk4Ov/32G3379i3TNS0tLXFwcMjzEBXkwe7PjYy3/id381P/2o7YW5kbOBohhBBlZWbIN586dSojR46kXbt2dOjQgfnz55OWlsbo0aMBGDFiBLVq1WLu3LkAHDp0iBs3btCqVStu3LjB7Nmz0Wg0vPnmm8W+pjAykQfud3+u3c7Q0RRqX/gtQKa/hBCiqjBoAjRw4EDi4+OZOXMmMTExtGrViq1bt+qKmCMjI/PU92RkZDBjxgwuX76MnZ0dffr0YcWKFTg5ORX7msLIXLzXyNKIuz9nZKtl/y8hhKhiVIqiKIYOwtgkJyfj6OhIUlKSTIeVJ0WBb9poGyA+/xM062foiPJRFIXX151k/fEbuNpZsv/t7liYVaq1A0IIUW2U5Oe3/EsuDOdWuNF3f/5p/1XWH7+BiQoWDGolyY8QQlQR8q+5MJyLD3R/tjK+kbbDV27z4ebzALzTpwmdZPpLCCGqDEmAhOFculf/Y4Tdn6OT7vLKymPkaBSC/b0Y06WuoUMSQgihR5IACcPI0/3ZuPr/ZOaoGf/zcRJSs2jsYc+nz7aQnd+FEKKKkQRIGEZu92e3JuDsa+ho8pi96SyhUYk4Wpvzv+HtsLEw6GJJIYQQ5UASIGEYuukv49r7a9WhSFYfjkKlgq8HtaJODRtDhySEEKIcSAIkKp46G8J2aL82ou7Px67dYdamMwBMe8KPx/xqGjgiIYQQ5UUSIFHxjLD7c1xKBq+sPEa2WqFXMw9eeay+oUMSQghRjiQBEhVP1/35CaPo/pyVo2HCyuPEJmfSoKYdXwzwl6JnIYSo4iQBEhUvt/6nkXHU/3y0+RxHrt7B3tKM/w1vi52lFD0LIURVJwmQqFgJYXA7wmi6P++8EMtPB64B8NXAVtRzszNwREIIISqCJECiYhlR9+eMbDWzN50DYGyXuvRsKhvmCiFEdSEJUHWXkQwR/2g3Jq0IRjT99eOey0TeTsfdwZIpjzcydDhCCCEqkCRA1d2Wt2BFP9j9Wfm/V0LY/e7PZez/E5+Sya/HrpORrS7V66/fSWfhrnBAu8+X1P0IIUT1IglQdZaTBRf+1H7975dw+0r5vZeiwF9vaLs/Nwwqc/fnD/48x7R1J3l93UmUUoxeffjneTKyNQTUdeFpf68yxSKEEKLykQSoOos8AJnJ2q/VmbB1evm917nf4fI/YGoJvT8p06U0GoU9YfEAbD4Vzf/2XC7R6/dcimfr2RhMTVS837e5LHkXQohqSBKg6iy3HsenM5iYwaUt93v06FNWGmx7R/t1lyngUq9MlzsXnUxiejYm9/KWT7de4N97CdFDQ8nRMHvTWQBGBvri52FfpliEEEJUTpIAVVeKcn9FVsDLEDhB+/WWNyH7rn7fa8/nkHwDnOpAl9fKfLm94QkAdG9ckwHtaqNRYNLqE0TdTn/oaxfvvcLlhDRc7SyZ8njDMscihBCicpIEqLpKCIM7V8DUAup3g0feBHsvSLwG+77W7/vs/1b7da9Pwdy6zJfcdy8B6tLAlff7Nse/tiOJ6dm8tOIYd7MKL4qOTrrLNzvDAJjeuzEOVuZljkUIIUTlJAlQdXXpgX48lvZgaQdBH2mP7f1KPwXRuYXPmmxt4bNf2Tc+zchWc/jKbQA6N3DFytyU74e1pYatBeeik5m+/lShRdEfbT5Pepaatj7O9G9dq8yxCCGEqLwkAaqucmt9HtyNvVl/qPsI5GTopyD6/Ka8hc96KDY+fu0OmTkaatpb0qCmtmuzl5M1C4e2wdRExcbQmyzddzXf6/ZHJPDnqWhMVPB+32aYmEjhsxBCVGeSAFVH6bchqoB+PCoV9PkiX0F0fEomU9eGcu5mcvHfIyvtfhKlh8LnXPsi7k9/Pbh6q2O9GrzbpwkAH/11noOXb+mey1ZrmPW7tvB5aIAPzbwc9RKLEEKIyksSoOoofAcoGqjZTFuY/CA3P+j4ivbrrW9BdgZrDkey/sQNvvj7YvHfQ8+Fz7n2hmsTm84NXPM9N7qzL/1aeaHWKExYeZybidpi7p/2XyUsLhUXWwtef0I6PgshhJAEqHrKXf1VWDfmR+8VRN+5Cvu+JvLe6qqjV2+j0RSj6WA5FD4DJKVnc/p6IlBwAqRSqZj7TEuaejpwKy2L8T8fI+p2OvN3aAuf3wzyw8nGQi+xCCGEqNwkAapu1NkQHqL9urD9uCztIehD7dd755ERr200mJyRw8XYlKKvn6fw+Qm9FD7nOnD5FhoF6rvZ4uFoVeA51ham/DC8LU425py8nsRT3+wlNTMH/9qODGjnrbdYhBBCVG6SAFU31/ZDZhLYuEKttoWf1+wZXUH0gISFusNHrt4u+vp5Cp8/1Uvhc679D9T/FMXbxYZvBrfGRAVJd7NRqeD9vs2l8FkIIYSOJEDVzaVt2j8bBYGJaeHn3SuIVkzM6Ko5QjeTEwC6JegFykqDrfc6PneerLfC51y5DRALmv76r64N3ZjeW1sUPbyjD/7eTnqNRQghROUmW2BXJ4pyv/9PYdNfD3LzI7X1OOyPfcdss584kuVH6JVYlOyMgvfP2vM5JF/Xe+EzwM3Eu1yOT8NEBR3r1yjWa158pB59Wnri6VDwdJkQQojqSxKg6iQhDG5fvt/9uRjON3oZ76Nr8DGJ44zVWMgGPnrIi3p9ChY2ZQ73Qbndn1vWdipRB+daTvopwBZCCFG1yBRYdfLf7s/FEJlqyszsUeRQxHTZg5o9o9fC51wPbn8hhBBClFWJR4B8fX154YUXGDVqFHXq1Hn4C4Tx0NX/FD9BuX4nne2adsxpvg0nSxVL913hmda1eb9vs/wnq1TFTqxKQlEU9kUU3v9HCCGEKKkSjwBNmTKF9evXU69ePR5//HHWrFlDZmZmecQm9Cn9NkQW0P35Ia7f0TYT9KjhTKsG3qRiw96oTLByyP8oh+QHICwulfiUTKzMTWjj41Qu7yGEEKJ6KVUCFBoayuHDh2nSpAmTJk3C09OTiRMncvz48fKIUehD+A5Q1AV3fy7C9TvaJoi1na1p5+OCSgWXE9KIT6m4pHdvmHb6q72vC5ZmxZyKE0IIIYpQ6hqgNm3asGDBAm7evMmsWbP4v//7P9q3b0+rVq1YsmRJoTtyCwPJ7f7cKKhEL4u6rR0Bqu1sjaONOX7u2lGeow/rB6RHUv8jhBBC30qdAGVnZ/PLL7/w9NNP8/rrr9OuXTv+7//+j2effZZ33nmHoUOH6jNOURYPdn8uQYFyjlpDTHIGALWdtau62vu6AHC4ghKgbLWGQ/d6D0n9jxBCCH0pcRH08ePHWbp0KatXr8bExIQRI0bw1Vdf0bhxY905/fv3p3379noNVJRB5IHidX/+j+ikDNQaBQtTE9zsLAFoX9eFFQevPbwjtJ6cup5IamYOzjbmNPV0qJD3FEIIUfWVOAFq3749jz/+ON9//z39+vXD3Dx/T5a6desyaNAgvQQo9ODiVu2fD+v+/B+5BdC1nK1120h0uDcCdO5mMikZ2diXoCdPaewN067+6tTAVbayEEIIoTclToAuX76Mj49PkefY2tqydOnSUgcl9Kik3Z8f8GABdC4PRyu8XayJun2X45GJPNrITW+hFiS3/qdzfZn+EkIIoT8lrgGKi4vj0KFD+Y4fOnSIo0eP6iUooUe3wkvc/TlX7ghQbv1Prtw6oCNF7QumB2mZORyPvANIAbQQQgj9KnECNGHCBKKiovIdv3HjBhMmTNBLUEKPLpa8+3Ou+wlQ3u0kOlRQIfThq7fJ0Sh4u1hTp4Z+t9YQQghRvZU4ATp37hxt2rTJd7x169acO3dOL0EJPbqUW/9T8u0pCpoCA20hNEBoVCKZOeqyxVeEfWGy/F0IIUT5KHECZGlpSWxsbL7j0dHRmJnJ3qpGpZTdn3MVNgVWz9UWVzsLsnI0nL6eVOYwC7P3Xv1PJ6n/EUIIoWclToCeeOIJpk+fTlLS/R98iYmJvPPOOzz++ON6DU6UUXhIqbo/g7b/TnSSNgHy/s8IkEqlop1P+U6DJaRmciEmBYBO9WuUy3sIIYSovkqcAH3xxRdERUXh4+NDt27d6NatG3Xr1iUmJoYvv/yyPGIUpXWpdN2fAWKSMtAoYGFmguu9HkAPyp0GK69C6P33Nj9t6ulAjQLeXwghhCiLEs9Z1apVi1OnTrFy5UpOnjyJtbU1o0ePZvDgwQX2BBIGos7W7v8FJer+nCsqt/7HybrA/ju5hdBHr91BrVEwLWaPnt9Db3A7LYt+rWrhbGtR6Hm6+p+GMv0lhBBC/0pVtGNra8u4ceP0HYvQp8gDkFHy7s+5HmyCWJAmnvbYWpiSkpHDxZgUmno9vEvz/ogEJq8JBeCTLRd42t+LEYG+tKjtmOc8RVEeqP+R6S8hhBD6V+qq5XPnzhEZGUlWVlae408//XSZgxJ6cGmb9s8Sdn/OlZsAebsUvPzczNSENj7O/BuWwJGrtx+aAGWrNcz6/SwAzjbm3EnPZt2x66w7dp3WdZwYEehDnxaeWJqZcu1WOjcS72JuqqLDvak2IYQQQp9K1Qm6f//+nD59GpVKpdv1XaXSToGo1eW3LFqUQCl3f89V2BL4B3XwdeHfsAQOX73NyE6+RV7vp/1XCYtLxcXWgp2vP0pEfBorDlxl8+loTkQmciIykQ//PM+gDt6YmmhL09rUccbGQlYWCiGE0L8SF0FPnjyZunXrEhcXh42NDWfPnmXPnj20a9eOXbt2lUOIosQSwuB2xL3uz91LdYnClsA/6MFC6NxEuCBxyRnM3xEGwJtBfjjZWNDWx5n5g1qz/+0eTHuiEZ6OVtxKy2LhPxEsCNGeK/1/hBBClJcSJ0AHDhzg/fffx9XVFRMTE0xMTOjSpQtz587l1VdfLXEACxcuxNfXFysrKwICAjh8+HCR58+fPx8/Pz+sra3x9vbmtddeIyMjQ/f87NmzUalUeR4P7lRfLZSh+3OuG4V0gX5QK28nzE1VxKVkEnk7vdDz5m65QGpmDv61HRnQzjvPc272lkzs3pB/3+zGomFtdDU/Jiro3qRmqWIXQgghHqbE8wtqtRp7e+0PVVdXV27evImfnx8+Pj5cvHixRNdau3YtU6dOZdGiRQQEBDB//nyCgoK4ePEiNWvm/+G3atUq3n77bZYsWUKnTp24dOkSo0aNQqVSMW/ePN15zZo1Y8eOHfc/ZHVr0Kir/yn56i/I2wOoqATIytyUlrWdOHbtDoev3Manhm2+cw5fuc2GEzdQqeD9vs0L3dHdzNSEXs096dXck/C4VO5mqWnm5VjguUIIIURZlXgEqHnz5pw8eRKAgIAAPvvsM/bt28f7779PvXr1SnStefPm8eKLLzJ69GiaNm3KokWLsLGxYcmSJQWev3//fjp37syQIUPw9fXliSeeYPDgwflGjczMzPDw8NA9XF2r0VTK3TvaFWBQ6vqf6ERtDyBLMxPcHtKDR7cxagENEXPUGmb+fgaAQe298fd2Ktb7N6hpl29lmBBCCKFPJU6AZsyYgUajAeD999/nypUrdO3alb/++osFCxYU+zpZWVkcO3aMnj173g/GxISePXty4MCBAl/TqVMnjh07pkt4Ll++zF9//UWfPn3ynBcWFoaXlxf16tVj6NChREZGFhlLZmYmycnJeR6VVtiOe92fm4KzT6kukVsAXcvZWlfcXpgOdZ0BOHL1Tr7nfj54jQsxKTham/NGUDWbhhRCCGHUSjw3FBR0f1ShQYMGXLhwgdu3b+Ps7PzQH5YPSkhIQK1W4+7unue4u7s7Fy5cKPA1Q4YMISEhgS5duqAoCjk5Obz88su88847unMCAgJYtmwZfn5+REdHM2fOHLp27cqZM2d0U3f/NXfuXObMmVPs2I2arvtzyff+ylWcAuhcbX1cUKngSkIacSkZ1LS3ArRbWXy5/RIA04L8cCmi6aEQQghR0Uo0ApSdnY2ZmRlnzpzJc9zFxaVEyU9p7dq1i48//pjvvvuO48ePs379ejZv3swHH3ygO6d37948//zztGzZkqCgIP766y8SExP55ZdfCr1u7t5muY+oqKhy/yzlQp2tHQGCUnV/zpU7AvTfPcAK4mhtTmMPbQ+gow+MAn265QIpGTk083JgSIeS7UMmhBBClLcSjQCZm5tTp04dvfT6cXV1xdTUNN/O8rGxsXh4eBT4mvfee4/hw4czduxYAFq0aEFaWhrjxo3j3XffxcQkfz7n5OREo0aNCA8PLzQWS0tLLC2rwH5TkQchMwlsapSq+3OukowAAXTwdeZ8dDKHr9ymTwtPjkfeYd2x64C28Lm422QIIYQQFaXENUDvvvsu77zzDrdvl20TTAsLC9q2bUtISIjumEajISQkhMDAwAJfk56eni/JMTXVdjkurA9NamoqEREReHp6lineSuHSVu2fDUvX/TnX9WIsgX+Qrh/Q1duoNYqu8Pm5trVp6+Nc6jiEEEKI8lLiGqBvv/2W8PBwvLy88PHxwdY279Ln48ePF/taU6dOZeTIkbRr144OHTowf/580tLSGD16NAAjRoygVq1azJ07F4Dg4GDmzZtH69atCQgIIDw8nPfee4/g4GBdIjRt2jSCg4Px8fHh5s2bzJo1C1NTUwYPHlzSj1r55Pb/8St9/Q8Urwv0g3I3Rj0fncz//XuZMzeSsbcy461eUvgshBDCOJU4AerXr5/e3nzgwIHEx8czc+ZMYmJiaNWqFVu3btUVRkdGRuYZ8ZkxYwYqlYoZM2Zw48YN3NzcCA4O5qOPPtKdc/36dQYPHsytW7dwc3OjS5cuHDx4EDc3N73FbZRyuz+bmJe6+zNAVo6GmGRtY8niToHVdLDCp4YN126l88lWbQH71Mcb4WZfBaYVhRBCVEkqpag9DKqp5ORkHB0dSUpKwsHh4bucG4V9C2D7e1CvG4zYWOrLRN5K55HP/8HSzIQLH/QqdnH7tHUn+fVe3U9jD3v+nNQFM9MSz7AKIYQQpVaSn9/yE6qqyO3+XIbVX5B3+qskK/typ8EA5jzdTJIfIYQQRq3EU2AmJiZF/mCU3eANQA/dn3NF6RKg4k1/5XqimTsrDjrSpaErAfVqlCkGIYQQoryVOAHasGFDnu+zs7M5ceIEP/30U9VpJljZ5HZ/dmsCzr5lulTuCjBvl+IVQOdysrHgj0ldyvTeQgghREUpcQLUt2/ffMeee+45mjVrxtq1axkzZoxeAhMlcEk/q7+g5D2AhBBCiMpIb4UaHTt2zNPTR1QQdTaE3+v+XMrd3x9U0iXwQgghRGWklwTo7t27LFiwgFq1aunjcqIkIg9Cxr3uz7XblflyMgIkhBCiOijxFNh/Nz1VFIWUlBRsbGz4+eef9RqcKAZd9+cnytT9Gf7bA0hGgIQQQlRdJU6AvvrqqzwJkImJCW5ubgQEBODsLNseVLiLZd/9PVd00l0UBazMTaghu7cLIYSowkqcAI0aNaocwhCloqfuz7kenP4qSQ8gIYQQorIpcQ3Q0qVLWbduXb7j69at46efftJLUKKYcqe/fLuAVdk7VksBtBBCiOqixAnQ3LlzcXV1zXe8Zs2afPzxx3oJShTTxXsJkB6mvwCibpdsF3ghhBCisipxAhQZGUndunXzHffx8SEyMlIvQYlieLD7sx76/8D9ESBvWQEmhBCiiitxAlSzZk1OnTqV7/jJkyepUUO2QKgweuz+nEuWwAshhKguSpwADR48mFdffZV//vkHtVqNWq1m586dTJ48mUGDBpVHjKIgeuz+nOt+AiRTYEIIIaq2Eq8C++CDD7h69So9evTAzEz7co1Gw4gRI6QGqKLk6f6snwQoM0dNbIr0ABJCCFE9lDgBsrCwYO3atXz44YeEhoZibW1NixYt8PHxKY/4REFyuz9bu0Dt9nq5ZHRiBooC1uamuEgPICGEEFVciROgXA0bNqRhw4b6jEUUV+7y90ZBZe7+nOvB6S/pASSEEKKqK3EN0LPPPsunn36a7/hnn33G888/r5egxEPosftzLukBJIQQojopcQK0Z88e+vTpk+9479692bNnj16CEkVICNdr9+dcsgJMCCFEdVLiBCg1NRULi/w1Iubm5iQnJ+slKFGE3NVfvp310v05V1RuDyAXGQESQghR9ZU4AWrRogVr167Nd3zNmjU0bdpUL0GJIui6P/fW62VlBEgIIUR1UuIi6Pfee49nnnmGiIgIunfXTsGEhISwatUqfv31V70HKB5QDt2fc0kNkBBCiOqkxAlQcHAwGzdu5OOPP+bXX3/F2toaf39/du7ciYuLS3nEKHKFh+i9+zPc6wGUnAnICJAQQojqoVTL4J988kmefPJJAJKTk1m9ejXTpk3j2LFjqNVqvQYoHqBb/RWk18veTNQ2QLSxMMXZxlyv1xZCCCGMUYlrgHLt2bOHkSNH4uXlxZdffkn37t05ePCgPmMTD1JnQ/h27dd++q7/uT/9JT2AhBBCVAclGgGKiYlh2bJlLF68mOTkZAYMGEBmZiYbN26UAujyltv92aaG3ro/55ICaCGEENVNsUeAgoOD8fPz49SpU8yfP5+bN2/yzTfflGds4kG53Z8bPqG37s+5pABaCCFEdVPsEaAtW7bw6quvMn78eNkCwxB021/od/UXyC7wQgghqp9ijwDt3buXlJQU2rZtS0BAAN9++y0JCQnlGZvIlRAOt8L13v05V9Tte00QZQpMCCFENVHsBKhjx478+OOPREdH89JLL7FmzRq8vLzQaDRs376dlJSU8oyzeiun7s+5pAZICCFEdVPiVWC2tra88MIL7N27l9OnT/P666/zySefULNmTZ5++unyiFGUU/dngIxsNXEpuT2AZApMCCFE9VDqZfAAfn5+fPbZZ1y/fp3Vq1frKybxoAe7P+u5/w/AzUTt6I+thSlO0gNICCFENVGmBCiXqakp/fr1Y9OmTfq4nHiQrvtzY3Cpq/fLPzj9JT2AhBBCVBd6SYBEOdJ1f9b/6i+QFWBCCCGqJ0mAjFk5dn/OJT2AhBBCVEeSABmzcuz+nCssLhWQFWBCCCGqF0mAjFk5dn8GSM3MYc+leAAC69fQ+/WFEEIIYyUJkDHTdX/W/+ovgJDzsWTmaKjrakszL/33FxJCCCGMlSRAxipP9+ce5fIWf5yMBuCplp6yAkwIIUS1IgmQsSrn7s9Jd7N1019PtfTS+/WFEEIIYyYJkLG6tE37Zzl0fwbYfi6WLLWGhjXt8POwL5f3EEIIIYyVJEDG6O4duLZf+3U51f/8eeomAMH+MvojhBCi+pEEyBiVc/fnO2lZ7A1LALT1P0IIIUR1IwmQMSrn7s9bz8aQo1Fo6ulAPTe7cnkPIYQQwphJAmRsKqD7c+7011P+MvojhBCiepIEyNhEHdJ2f7Z2KZfuz/EpmRyIuAXAUy2k/kcIIUT1JAmQscmd/iqn7s9bz0SjUcDf24k6NWT7CyGEENWTJEDGJrf7s1/51P/8cUrb/DBYip+FEEJUYwZPgBYuXIivry9WVlYEBARw+PDhIs+fP38+fn5+WFtb4+3tzWuvvUZGRkaZrmk0yrn7c0xSBkeu3gagTwtJgIQQQlRfBk2A1q5dy9SpU5k1axbHjx/H39+foKAg4uLiCjx/1apVvP3228yaNYvz58+zePFi1q5dyzvvvFPqaxqV3NGfcur+vPl0NIoC7Xyc8XKy1vv1hRBCiMrCoAnQvHnzePHFFxk9ejRNmzZl0aJF2NjYsGTJkgLP379/P507d2bIkCH4+vryxBNPMHjw4DwjPCW9plHRbX5aPtNfutVfMv0lhBCimjNYApSVlcWxY8fo2bPn/WBMTOjZsycHDhwo8DWdOnXi2LFjuoTn8uXL/PXXX/Tp06fU1wTIzMwkOTk5z6PC5en+rP8E6PqddE5EJqJSyfSXEEIIYWaoN05ISECtVuPu7p7nuLu7OxcuXCjwNUOGDCEhIYEuXbqgKAo5OTm8/PLLuimw0lwTYO7cucyZM6eMn6iMyrn78+Z7xc8d69agpoOV3q8vhBBCVCYGL4IuiV27dvHxxx/z3Xffcfz4cdavX8/mzZv54IMPynTd6dOnk5SUpHtERUXpKeISKPfpL20CJM0PhRBCCAOOALm6umJqakpsbGye47GxsXh4eBT4mvfee4/hw4czduxYAFq0aEFaWhrjxo3j3XffLdU1ASwtLbG0tCzjJyoDdQ6E3ev+XA4J0NWENE7fSMLUREXv5pIACSGEEAYbAbKwsKBt27aEhITojmk0GkJCQggMDCzwNenp6ZiY5A3Z1FTbLFBRlFJd0yhEHYSMRG33Z+8Oer98bvFzp/o1cLG10Pv1hRBCiMrGYCNAAFOnTmXkyJG0a9eODh06MH/+fNLS0hg9ejQAI0aMoFatWsydOxeA4OBg5s2bR+vWrQkICCA8PJz33nuP4OBgXSL0sGsapXLu/vynrvmhbH0hhBBCgIEToIEDBxIfH8/MmTOJiYmhVatWbN26VVfEHBkZmWfEZ8aMGahUKmbMmMGNGzdwc3MjODiYjz76qNjXNEqXtmn/LIfuz+FxKVyIScHcVEVQs8KnAYUQQojqRKUoimLoIIxNcnIyjo6OJCUl4eCg/4aEedyKgG/agIkZvHkZrBz1evmvtl/i65AwejSuyeJR+t9cVQghhDAWJfn5XalWgVVJudNfPp31nvwoinK/+aGs/hJCCCF0JAEyNN3mp731funz0SlExKdhYWZCzyZGPAUohBBCVDBJgAzpbuID3Z+D9H753NGfbn5u2FuZ6/36QgghRGUlCZAhhe/Qdn929QOXenq9tKIobD59r/mhrP4SQggh8pAEyJB001/6X/11+kYS126lY21uSo8mNfV+fSGEEKIykwTIUPJ0f9Z//U9u758eTWpiY2HQbgdCCCGE0ZEEyFCiDt3r/uys9+7PGo2i2/xUpr+EEEKI/CQBMpRL5df9+UTUHW4k3sXO0ozH/Nz0em0hhBCiKpAEyFAult/u73+c1I7+PN7UHStz/W+tIYQQQlR2kgAZwq0IuBWm7f7coIdeL63WKPylW/0lzQ+FEEKIgkgCZAi5q7/Kofvzkau3iUvJxMHKjK4NZfpLCCGEKIgkQIaQu/1FOUx/5TY/7NXcAwsz+c8rhBBCFER+Qla0u4kQeUD7tZ77/+SoNWw5HQPI6i8hhBCiKJIAVbTwHaDJKZfuzwcu3+JWWhYuthZ0ql9Dr9cWQgghqhJJgCpaOXZ//vPe6q9ezT0wM5X/tEIIIURh5KdkRcrT/Vm/CVBWjoatZ3Onv2T1lxBCCFEUSYAq0oPdn2vrt/vzvvAEku5m42ZvSUBdmf4SQgghiiIJUEV6sPuzqX735/rj3uqvPs09MDVR6fXaQgghRFUju2RWpNbDtX1/arfX62UzstVsPxsLQLC/rP4SQgghHkYSoIrk5gdub+j9srsvxZOSmYOnoxVt6jjr/fpCCCFEVSNTYFXAn/d2fn+yhScmMv0lhBBCPJQkQJXc3Sw1Iee1019PyfSXEEIIUSySAFVyOy/EkZ6lxtvFGv/a+t1XTAghhKiqJAGq5HL3/nqyhRcqlUx/CSGEEMUhCVAllpqZw84LcYA0PxRCCCFKQhKgSmzHuVgyczTUdbWlmZeDocMRQgghKg1JgCqx3Omv4JaeMv0lhBBClIAkQJVU0t1sdl+KB2T1lxBCCFFSkgBVUn+fjSFbrdDI3Y5G7vaGDkcIIYSoVCQBqqRymx8+1VJGf4QQQoiSkgSoEkq6m82+8ARAVn8JIYQQpSEJUCV08PItcjQK9VxtqedmZ+hwhBBCiEpHEqBKKHf0p0tDVwNHIoQQQlROkgBVQnvvJUCdG0gCJIQQQpSGJECVTHTSXS7Hp2Gigo71ahg6HCGEEKJSkgSoktkXfguAFrWdcLQ2N3A0QgghROUkCVAlo6v/aSCjP0IIIURpSQJUiSiKIvU/QgghhB5IAlSJhMWlEp+SiZW5CW3qOBs6HCGEEKLSkgSoEsmd/mrv64KVuamBoxFCCCEqL0mAKpF9Mv0lhBBC6IUkQJVEtlrDwcu3AegiCZAQQghRJpIAVRKnrieSmpmDk405TT0dDB2OEEIIUalJAlRJ7A3T9v/pXN8VExOVgaMRQgghKjdJgCqJ3PqfTtL/RwghhCgzSYAqgbTMHE5E3QGk/kcIIYTQB0mAKoHDV2+TrVao7WxNHRcbQ4cjhBBCVHqSAFUC+8Jyt79wRaWS+h8hhBCirIwiAVq4cCG+vr5YWVkREBDA4cOHCz33scceQ6VS5Xs8+eSTunNGjRqV7/levXpVxEcpF7L9hRBCCKFfZoYOYO3atUydOpVFixYREBDA/PnzCQoK4uLFi9SsWTPf+evXrycrK0v3/a1bt/D39+f555/Pc16vXr1YunSp7ntLS8vy+xDlKCE1kwsxKQB0qi8F0EIIIYQ+GHwEaN68ebz44ouMHj2apk2bsmjRImxsbFiyZEmB57u4uODh4aF7bN++HRsbm3wJkKWlZZ7znJ0r595Z+yO0y9+beDpQw65yJnFCCCGEsTFoApSVlcWxY8fo2bOn7piJiQk9e/bkwIEDxbrG4sWLGTRoELa2tnmO79q1i5o1a+Ln58f48eO5detWodfIzMwkOTk5z8NY3K//kdEfIYQQQl8MmgAlJCSgVqtxd3fPc9zd3Z2YmJiHvv7w4cOcOXOGsWPH5jneq1cvli9fTkhICJ9++im7d++md+/eqNXqAq8zd+5cHB0ddQ9vb+/Sfyg9UhRF6n+EEEKIcmDwGqCyWLx4MS1atKBDhw55jg8aNEj3dYsWLWjZsiX169dn165d9OjRI991pk+fztSpU3XfJycnG0USdO1WOjcS72JuqqJDXRdDhyOEEEJUGQYdAXJ1dcXU1JTY2Ng8x2NjY/Hw8CjytWlpaaxZs4YxY8Y89H3q1auHq6sr4eHhBT5vaWmJg4NDnocxyB39aV3HGRuLSp2rCiGEEEbFoAmQhYUFbdu2JSQkRHdMo9EQEhJCYGBgka9dt24dmZmZDBs27KHvc/36dW7duoWnp2eZY65I+yPu9/8RQgghhP4YfBXY1KlT+fHHH/npp584f/4848ePJy0tjdGjRwMwYsQIpk+fnu91ixcvpl+/ftSokbc4ODU1lTfeeIODBw9y9epVQkJC6Nu3Lw0aNCAoKKhCPpM+qDWKbgWY1P8IIYQQ+mXweZWBAwcSHx/PzJkziYmJoVWrVmzdulVXGB0ZGYmJSd487eLFi+zdu5e///473/VMTU05deoUP/30E4mJiXh5efHEE0/wwQcfVKpeQOduJpOYno2dpRn+tR0NHY4QQghRpagURVEMHYSxSU5OxtHRkaSkJIPVA32/K4JPt16gZxN3/m9kO4PEIIQQQlQmJfn5bfApMFGwfbrl79L/RwghhNA3SYCMUEa2miNXbwNSAC2EEEKUB0mAjNDxa3fIzNFQ096SBjXtDB2OEEIIUeVIAmSEcvv/dGngikqlMnA0QgghRNUjCZAR2ifbXwghhBDlShIgI5OUns2pG0mAJEBCCCFEeZEEyMgcuXobRYF6brZ4OFoZOhwhhBCiSpIEyMiciLoDQDsfZwNHIoQQQlRdkgAZmRORiQC08pYESAghhCgvkgAZEbVG4dR1bf1P6zpOhg1GCCGEqMIkATIi4XGppGbmYGNhSiN3e0OHI4QQQlRZkgAZkdB79T8taztiaiL9f4QQQojyIgmQEZH6HyGEEKJiSAJkREKjEgGp/xFCCCHKmyRARiI1M4eLsSkAtPZ2MmwwQgghRBUnCZCROHU9EUWBWk7W1HSQBohCCCFEeZIEyEjcr/9xMmgcQgghRHUgCZCRkPofIYQQouJIAmQEFEXRJUAyAiSEEEKUP0mAjMCNxLvEp2RiZqKieS1HQ4cjhBBCVHmSABmB3NGfJp4OWJmbGjYYIYQQohqQBMgISAG0EEIIUbEkATICUgAthBBCVCxJgAwsK0fD6RvaHeBlBEgIIYSoGJIAGdiFmGSycjQ4WptT19XW0OEIIYQQ1YIkQAb2YP2PSiU7wAshhBAVQRIgA5P6HyGEEKLiSQJkYCci7wBS/yOEEEJUJEmADOhOWhZXb6UDkgAJIYQQFUkSIAPKnf6q52qLk42FYYMRQgghqhFJgAzoRO7+X1L/I4QQQlQoSYAMSFcALdNfQgghRIWSBMhANBqF0HsF0K3rOBs4GiGEEKJ6kQTIQK7cSiM5IwdLMxP8POwNHY4QQghRrUgCZCC5DRBb1nbE3FT+MwghhBAVSX7yGkholPT/EUIIIQxFEiADyR0BkvofIYQQouJJAmQAd7PUXIhJAWQESAghhDAESYAM4PSNJNQahZr2lng6Whk6HCGEEKLakQTIAHLrf1rXkR3ghRBCCEOQBMgAcut/WnlL/Y8QQghhCJIAGYCuA7RsgSGEEEIYhCRAFSwmKYPopAxMVNCilqOhwxFCCCGqJUmAKlhu/Y+fhwO2lmYGjkYIIYSoniQBqmC6HeBl+bsQQghhMJIAVbD7DRCdDBqHEEIIUZ1JAlSBctQaTl9PAqC1jAAJIYQQBiMJUAW6GJvC3Ww19pZm1HezM3Q4QgghRLVlFAnQwoUL8fX1xcrKioCAAA4fPlzouY899hgqlSrf48knn9SdoygKM2fOxNPTE2tra3r27ElYWFhFfJQi5S5/9/d2wsREGiAKIYQQhmLwBGjt2rVMnTqVWbNmcfz4cfz9/QkKCiIuLq7A89evX090dLTucebMGUxNTXn++ed153z22WcsWLCARYsWcejQIWxtbQkKCiIjI6OiPlaBEtOzsTY3lfofIYQQwsBUiqIohgwgICCA9u3b8+233wKg0Wjw9vZm0qRJvP322w99/fz585k5cybR0dHY2tqiKApeXl68/vrrTJs2DYCkpCTc3d1ZtmwZgwYNeug1k5OTcXR0JCkpCQcHh7J9wP/IUWvIzNHIEnghhBBCz0ry89ugI0BZWVkcO3aMnj176o6ZmJjQs2dPDhw4UKxrLF68mEGDBmFrawvAlStXiImJyXNNR0dHAgICCr1mZmYmycnJeR7lxczURJIfIYQQwsAMmgAlJCSgVqtxd3fPc9zd3Z2YmJiHvv7w4cOcOXOGsWPH6o7lvq4k15w7dy6Ojo66h7e3d0k/ihBCCCEqEYPXAJXF4sWLadGiBR06dCjTdaZPn05SUpLuERUVpacIhRBCCGGMDJoAubq6YmpqSmxsbJ7jsbGxeHh4FPnatLQ01qxZw5gxY/Icz31dSa5paWmJg4NDnocQQgghqi6DJkAWFha0bduWkJAQ3TGNRkNISAiBgYFFvnbdunVkZmYybNiwPMfr1q2Lh4dHnmsmJydz6NChh15TCCGEENWDwatxp06dysiRI2nXrh0dOnRg/vz5pKWlMXr0aABGjBhBrVq1mDt3bp7XLV68mH79+lGjRo08x1UqFVOmTOHDDz+kYcOG1K1bl/feew8vLy/69etXUR9LCCGEEEbM4AnQwIEDiY+PZ+bMmcTExNCqVSu2bt2qK2KOjIzExCTvQNXFixfZu3cvf//9d4HXfPPNN0lLS2PcuHEkJibSpUsXtm7dipWVVbl/HiGEEEIYP4P3ATJG5dkHSAghhBDlo9L0ARJCCCGEMARJgIQQQghR7UgCJIQQQohqRxIgIYQQQlQ7kgAJIYQQotqRBEgIIYQQ1Y7B+wAZo9zOAOW5K7wQQggh9Cv353ZxOvxIAlSAlJQUANkVXgghhKiEUlJScHR0LPIcaYRYAI1Gw82bN7G3t0elUun12snJyXh7exMVFSVNFiuA3O+KJfe7Ysn9rlhyvytWae63oiikpKTg5eWVbxeJ/5IRoAKYmJhQu3btcn0P2XW+Ysn9rlhyvyuW3O+KJfe7YpX0fj9s5CeXFEELIYQQotqRBEgIIYQQ1Y4kQBXM0tKSWbNmYWlpaehQqgW53xVL7nfFkvtdseR+V6zyvt9SBC2EEEKIakdGgIQQQghR7UgCJIQQQohqRxIgIYQQQlQ7kgAJIYQQotqRBKgCLVy4EF9fX6ysrAgICODw4cOGDqlK2LNnD8HBwXh5eaFSqdi4cWOe5xVFYebMmXh6emJtbU3Pnj0JCwszTLBVwNy5c2nfvj329vbUrFmTfv36cfHixTznZGRkMGHCBGrUqIGdnR3PPvsssbGxBoq4cvv+++9p2bKlrhlcYGAgW7Zs0T0v97p8ffLJJ6hUKqZMmaI7Jvdcf2bPno1KpcrzaNy4se758rzXkgBVkLVr1zJ16lRmzZrF8ePH8ff3JygoiLi4OEOHVumlpaXh7+/PwoULC3z+s88+Y8GCBSxatIhDhw5ha2tLUFAQGRkZFRxp1bB7924mTJjAwYMH2b59O9nZ2TzxxBOkpaXpznnttdf4448/WLduHbt37+bmzZs888wzBoy68qpduzaffPIJx44d4+jRo3Tv3p2+ffty9uxZQO51eTpy5Ag//PADLVu2zHNc7rl+NWvWjOjoaN1j7969uufK9V4rokJ06NBBmTBhgu57tVqteHl5KXPnzjVgVFUPoGzYsEH3vUajUTw8PJTPP/9cdywxMVGxtLRUVq9ebYAIq564uDgFUHbv3q0oivb+mpubK+vWrdOdc/78eQVQDhw4YKgwqxRnZ2fl//7v/+Rel6OUlBSlYcOGyvbt25VHH31UmTx5sqIo8vdb32bNmqX4+/sX+Fx532sZAaoAWVlZHDt2jJ49e+qOmZiY0LNnTw4cOGDAyKq+K1euEBMTk+feOzo6EhAQIPdeT5KSkgBwcXEB4NixY2RnZ+e5540bN6ZOnTpyz8tIrVazZs0a0tLSCAwMlHtdjiZMmMCTTz6Z596C/P0uD2FhYXh5eVGvXj2GDh1KZGQkUP73WjZDrQAJCQmo1Wrc3d3zHHd3d+fChQsGiqp6iImJASjw3uc+J0pPo9EwZcoUOnfuTPPmzQHtPbewsMDJySnPuXLPS+/06dMEBgaSkZGBnZ0dGzZsoGnTpoSGhsq9Lgdr1qzh+PHjHDlyJN9z8vdbvwICAli2bBl+fn5ER0czZ84cunbtypkzZ8r9XksCJIQotQkTJnDmzJk8c/ZC//z8/AgNDSUpKYlff/2VkSNHsnv3bkOHVSVFRUUxefJktm/fjpWVlaHDqfJ69+6t+7ply5YEBATg4+PDL7/8grW1dbm+t0yBVQBXV1dMTU3zVa7Hxsbi4eFhoKiqh9z7K/de/yZOnMiff/7JP//8Q+3atXXHPTw8yMrKIjExMc/5cs9Lz8LCggYNGtC2bVvmzp2Lv78/X3/9tdzrcnDs2DHi4uJo06YNZmZmmJmZsXv3bhYsWICZmRnu7u5yz8uRk5MTjRo1Ijw8vNz/fksCVAEsLCxo27YtISEhumMajYaQkBACAwMNGFnVV7duXTw8PPLc++TkZA4dOiT3vpQURWHixIls2LCBnTt3Urdu3TzPt23bFnNz8zz3/OLFi0RGRso91xONRkNmZqbc63LQo0cPTp8+TWhoqO7Rrl07hg4dqvta7nn5SU1NJSIiAk9Pz/L/+13mMmpRLGvWrFEsLS2VZcuWKefOnVPGjRunODk5KTExMYYOrdJLSUlRTpw4oZw4cUIBlHnz5iknTpxQrl27piiKonzyySeKk5OT8vvvvyunTp1S+vbtq9StW1e5e/eugSOvnMaPH684Ojoqu3btUqKjo3WP9PR03Tkvv/yyUqdOHWXnzp3K0aNHlcDAQCUwMNCAUVdeb7/9trJ7927lypUryqlTp5S3335bUalUyt9//60oitzrivDgKjBFkXuuT6+//rqya9cu5cqVK8q+ffuUnj17Kq6urkpcXJyiKOV7ryUBqkDffPONUqdOHcXCwkLp0KGDcvDgQUOHVCX8888/CpDvMXLkSEVRtEvh33vvPcXd3V2xtLRUevTooVy8eNGwQVdiBd1rQFm6dKnunLt37yqvvPKK4uzsrNjY2Cj9+/dXoqOjDRd0JfbCCy8oPj4+ioWFheLm5qb06NFDl/woitzrivDfBEjuuf4MHDhQ8fT0VCwsLJRatWopAwcOVMLDw3XPl+e9VimKopR9HEkIIYQQovKQGiAhhBBCVDuSAAkhhBCi2pEESAghhBDVjiRAQgghhKh2JAESQgghRLUjCZAQQgghqh1JgIQQQghR7UgCJIQQxaBSqdi4caOhwxBC6IkkQEIIozdq1ChUKlW+R69evQwdmhCikjIzdABCCFEcvXr1YunSpXmOWVpaGigaIURlJyNAQohKwdLSEg8PjzwPZ2dnQDs99f3339O7d2+sra2pV68ev/76a57Xnz59mu7du2NtbU2NGjUYN24cqampec5ZsmQJzZo1w9LSEk9PTyZOnJjn+YSEBPr374+NjQ0NGzZk06ZN5fuhhRDlRhIgIUSV8N577/Hss89y8uRJhg4dyqBBgzh//jwAaWlpBAUF4ezszJEjR1i3bh07duzIk+B8//33TJgwgXHjxnH69Gk2bdpEgwYN8rzHnDlzGDBgAKdOnaJPnz4MHTqU27dvV+jnFELoiV62VBVCiHI0cuRIxdTUVLG1tc3z+OijjxRF0e5Q//LLL+d5TUBAgDJ+/HhFURTlf//7n+Ls7Kykpqbqnt+8ebNiYmKixMTEKIqiKF5eXsq7775baAyAMmPGDN33qampCqBs2bJFb59TCFFxpAZICFEpdOvWje+//z7PMRcXF93XgYGBeZ4LDAwkNDQUgPPnz+Pv74+tra3u+c6dO6PRaLh48SIqlYqbN2/So0ePImNo2bKl7mtbW1scHByIi4sr7UcSQhiQJEBCiErB1tY235SUvlhbWxfrPHNz8zzfq1QqNBpNeYQkhChnUgMkhKgSDh48mO/7Jk2aANCkSRNOnjxJWlqa7vl9+/ZhYmKCn58f9vb2+Pr6EhISUqExCyEMR0aAhBCVQmZmJjExMXmOmZmZ4erqCsC6deto164dXbp0YeXKlRw+fJjFixcDMHToUGbNmsXIkSOZPXs28fHxTJo0ieHDh+Pu7g7A7Nmzefnll6lZsya9e/cmJSWFffv2MWnSpIr9oEKICiEJkBCiUti6dSuenp55jvn5+XHhwgVAu0JrzZo1vPLKK3h6erJ69WqaNm0KgI2NDdu2bWPy5Mm0b98eGxsbnn32WebNm6e71siRI8nIyOCrr75i2rRpuLq68txzz1XcBxRCVCiVoiiKoYMQQoiyUKlUbNiwgX79+hk6FCFEJSE1QEIIIYSodiQBEkIIIUS1IzVAQohKT2byhRAlJSNAQgghhKh2JAESQgghRLUjCZAQQgghqh1JgIQQQghR7UgCJIQQQohqRxIgIYQQQlQ7kgAJIYQQotqRBEgIIYQQ1Y4kQEIIIYSodv4fN73tFzm1TgEAAAAASUVORK5CYII=", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "import matplotlib.pyplot as plt \n", + " \n", + "accuracy_history = history.history['accuracy']\n", + "val_accuracy_history = history.history['val_accuracy']\n", + "\n", + "plt.plot(accuracy_history, label='Training Accuracy')\n", + "plt.plot(val_accuracy_history, label='Validation Accuracy')\n", + "plt.title('Model Accuracy')\n", + "plt.xlabel('Epoch')\n", + "plt.ylabel('Accuracy')\n", + "plt.legend()\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "MLP Accuracy: 0.9870" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "env", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.11.9" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/Thyroid Cancer Recurrence Prediction/Model/tabnet_model.ipynb b/Thyroid Cancer Recurrence Prediction/Model/tabnet_model.ipynb new file mode 100644 index 0000000000..15d39c37b1 --- /dev/null +++ b/Thyroid Cancer Recurrence Prediction/Model/tabnet_model.ipynb @@ -0,0 +1,250 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 21, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Looking in indexes: https://pypi.org/simple, https://pypi.ngc.nvidia.com\n", + "Requirement already satisfied: pytorch-tabnet in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (4.1.0)\n", + "Requirement already satisfied: scikit-learn in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (1.4.0)\n", + "Requirement already satisfied: pandas in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (2.2.2)\n", + "Requirement already satisfied: numpy>=1.17 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from pytorch-tabnet) (1.26.4)\n", + "Requirement already satisfied: scipy>1.4 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from pytorch-tabnet) (1.12.0)\n", + "Requirement already satisfied: torch>=1.3 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from pytorch-tabnet) (2.1.2)\n", + "Requirement already satisfied: tqdm>=4.36 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from pytorch-tabnet) (4.65.2)\n", + "Requirement already satisfied: joblib>=1.2.0 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from scikit-learn) (1.4.2)\n", + "Requirement already satisfied: threadpoolctl>=2.0.0 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from scikit-learn) (3.5.0)\n", + "Requirement already satisfied: python-dateutil>=2.8.2 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from pandas) (2.9.0.post0)\n", + "Requirement already satisfied: pytz>=2020.1 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from pandas) (2023.4)\n", + "Requirement already satisfied: tzdata>=2022.7 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from pandas) (2024.1)\n", + "Requirement already satisfied: six>=1.5 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from python-dateutil>=2.8.2->pandas) (1.16.0)\n", + "Requirement already satisfied: filelock in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from torch>=1.3->pytorch-tabnet) (3.14.0)\n", + "Requirement already satisfied: typing-extensions in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from torch>=1.3->pytorch-tabnet) (4.12.0)\n", + "Requirement already satisfied: sympy in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from torch>=1.3->pytorch-tabnet) (1.12.1)\n", + "Requirement already satisfied: networkx in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from torch>=1.3->pytorch-tabnet) (3.3)\n", + "Requirement already satisfied: jinja2 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from torch>=1.3->pytorch-tabnet) (3.1.4)\n", + "Requirement already satisfied: fsspec in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from torch>=1.3->pytorch-tabnet) (2024.3.1)\n", + "Requirement already satisfied: colorama in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from tqdm>=4.36->pytorch-tabnet) (0.4.6)\n", + "Requirement already satisfied: MarkupSafe>=2.0 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from jinja2->torch>=1.3->pytorch-tabnet) (2.1.5)\n", + "Requirement already satisfied: mpmath<1.4.0,>=1.1.0 in c:\\users\\arpit\\desktop\\dl\\env\\lib\\site-packages (from sympy->torch>=1.3->pytorch-tabnet) (1.3.0)\n", + "Note: you may need to restart the kernel to use updated packages.\n" + ] + } + ], + "source": [ + "%pip install pytorch-tabnet scikit-learn pandas" + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "metadata": {}, + "outputs": [], + "source": [ + "import numpy as np\n", + "import pandas as pd\n", + "from sklearn.model_selection import train_test_split\n", + "from sklearn.preprocessing import StandardScaler, LabelEncoder, OneHotEncoder\n", + "from sklearn.compose import ColumnTransformer" + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "metadata": {}, + "outputs": [], + "source": [ + "data = pd.read_csv('../Dataset/Thyroid_Diff.csv')\n", + "\n", + "X = data.drop('Recurred', axis=1)\n", + "y = data['Recurred']\n", + "\n", + "if y.dtype == 'object':\n", + " le = LabelEncoder()\n", + " y = le.fit_transform(y)\n", + "\n", + "categorical_cols = X.select_dtypes(include=['object']).columns\n", + "numerical_cols = X.select_dtypes(include=[np.number]).columns\n", + "\n", + "numerical_transformer = StandardScaler()\n", + "categorical_transformer = OneHotEncoder(handle_unknown='ignore')\n", + "\n", + "preprocessor = ColumnTransformer(\n", + " transformers=[\n", + " ('num', numerical_transformer, numerical_cols),\n", + " ('cat', categorical_transformer, categorical_cols)\n", + " ])\n", + "\n", + "X = preprocessor.fit_transform(X)\n", + "\n", + "X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)" + ] + }, + { + "cell_type": "code", + "execution_count": 24, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "epoch 0 | loss: 0.86117 | train_accuracy: 0.64052 | valid_accuracy: 0.66234 | 0:00:00s\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "c:\\Users\\arpit\\Desktop\\dl\\env\\Lib\\site-packages\\pytorch_tabnet\\abstract_model.py:82: UserWarning: Device used : cpu\n", + " warnings.warn(f\"Device used : {self.device}\")\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "epoch 1 | loss: 0.80141 | train_accuracy: 0.70588 | valid_accuracy: 0.75325 | 0:00:00s\n", + "epoch 2 | loss: 0.66793 | train_accuracy: 0.71569 | valid_accuracy: 0.75325 | 0:00:00s\n", + "epoch 3 | loss: 0.63027 | train_accuracy: 0.71242 | valid_accuracy: 0.75325 | 0:00:00s\n", + "epoch 4 | loss: 0.62346 | train_accuracy: 0.70915 | valid_accuracy: 0.75325 | 0:00:00s\n", + "epoch 5 | loss: 0.5593 | train_accuracy: 0.70915 | valid_accuracy: 0.75325 | 0:00:00s\n", + "epoch 6 | loss: 0.51439 | train_accuracy: 0.70915 | valid_accuracy: 0.75325 | 0:00:00s\n", + "epoch 7 | loss: 0.47156 | train_accuracy: 0.70915 | valid_accuracy: 0.75325 | 0:00:00s\n", + "epoch 8 | loss: 0.43915 | train_accuracy: 0.70915 | valid_accuracy: 0.75325 | 0:00:00s\n", + "epoch 9 | loss: 0.44085 | train_accuracy: 0.70915 | valid_accuracy: 0.75325 | 0:00:00s\n", + "epoch 10 | loss: 0.40845 | train_accuracy: 0.70915 | valid_accuracy: 0.75325 | 0:00:00s\n", + "epoch 11 | loss: 0.3848 | train_accuracy: 0.70915 | valid_accuracy: 0.75325 | 0:00:00s\n", + "epoch 12 | loss: 0.35027 | train_accuracy: 0.70915 | valid_accuracy: 0.75325 | 0:00:01s\n", + "epoch 13 | loss: 0.36591 | train_accuracy: 0.70915 | valid_accuracy: 0.75325 | 0:00:01s\n", + "epoch 14 | loss: 0.34834 | train_accuracy: 0.73529 | valid_accuracy: 0.77922 | 0:00:01s\n", + "epoch 15 | loss: 0.30932 | train_accuracy: 0.82026 | valid_accuracy: 0.79221 | 0:00:01s\n", + "epoch 16 | loss: 0.24431 | train_accuracy: 0.85294 | valid_accuracy: 0.81818 | 0:00:01s\n", + "epoch 17 | loss: 0.26792 | train_accuracy: 0.88889 | valid_accuracy: 0.8961 | 0:00:01s\n", + "epoch 18 | loss: 0.21454 | train_accuracy: 0.9085 | valid_accuracy: 0.92208 | 0:00:01s\n", + "epoch 19 | loss: 0.1926 | train_accuracy: 0.93464 | valid_accuracy: 0.94805 | 0:00:01s\n", + "epoch 20 | loss: 0.20314 | train_accuracy: 0.93791 | valid_accuracy: 0.96104 | 0:00:01s\n", + "epoch 21 | loss: 0.20019 | train_accuracy: 0.93791 | valid_accuracy: 0.96104 | 0:00:01s\n", + "epoch 22 | loss: 0.1726 | train_accuracy: 0.94118 | valid_accuracy: 0.96104 | 0:00:01s\n", + "epoch 23 | loss: 0.15827 | train_accuracy: 0.93791 | valid_accuracy: 0.96104 | 0:00:01s\n", + "epoch 24 | loss: 0.14607 | train_accuracy: 0.93791 | valid_accuracy: 0.96104 | 0:00:02s\n", + "epoch 25 | loss: 0.14856 | train_accuracy: 0.94118 | valid_accuracy: 0.96104 | 0:00:02s\n", + "epoch 26 | loss: 0.15714 | train_accuracy: 0.94118 | valid_accuracy: 0.96104 | 0:00:02s\n", + "epoch 27 | loss: 0.13137 | train_accuracy: 0.94118 | valid_accuracy: 0.96104 | 0:00:02s\n", + "epoch 28 | loss: 0.12659 | train_accuracy: 0.94118 | valid_accuracy: 0.96104 | 0:00:02s\n", + "epoch 29 | loss: 0.1171 | train_accuracy: 0.94118 | valid_accuracy: 0.96104 | 0:00:02s\n", + "epoch 30 | loss: 0.11278 | train_accuracy: 0.94118 | valid_accuracy: 0.96104 | 0:00:02s\n", + "epoch 31 | loss: 0.1081 | train_accuracy: 0.94118 | valid_accuracy: 0.96104 | 0:00:02s\n", + "epoch 32 | loss: 0.119 | train_accuracy: 0.94118 | valid_accuracy: 0.96104 | 0:00:02s\n", + "epoch 33 | loss: 0.13135 | train_accuracy: 0.94118 | valid_accuracy: 0.96104 | 0:00:02s\n", + "epoch 34 | loss: 0.12747 | train_accuracy: 0.94118 | valid_accuracy: 0.96104 | 0:00:02s\n", + "epoch 35 | loss: 0.10087 | train_accuracy: 0.94118 | valid_accuracy: 0.96104 | 0:00:02s\n", + "epoch 36 | loss: 0.11973 | train_accuracy: 0.94118 | valid_accuracy: 0.96104 | 0:00:03s\n", + "epoch 37 | loss: 0.14375 | train_accuracy: 0.94118 | valid_accuracy: 0.96104 | 0:00:03s\n", + "epoch 38 | loss: 0.13086 | train_accuracy: 0.94118 | valid_accuracy: 0.96104 | 0:00:03s\n", + "epoch 39 | loss: 0.12776 | train_accuracy: 0.94118 | valid_accuracy: 0.96104 | 0:00:03s\n", + "epoch 40 | loss: 0.13075 | train_accuracy: 0.94118 | valid_accuracy: 0.96104 | 0:00:03s\n", + "\n", + "Early stopping occurred at epoch 40 with best_epoch = 20 and best_valid_accuracy = 0.96104\n", + "Successfully saved model at ./TabNetModel/tabnet_model.pth.zip\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "c:\\Users\\arpit\\Desktop\\dl\\env\\Lib\\site-packages\\pytorch_tabnet\\callbacks.py:172: UserWarning: Best weights from best epoch are automatically used!\n", + " warnings.warn(wrn_msg)\n" + ] + }, + { + "data": { + "text/plain": [ + "'./TabNetModel/tabnet_model.pth.zip'" + ] + }, + "execution_count": 24, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "from pytorch_tabnet.tab_model import TabNetClassifier\n", + "import torch\n", + "\n", + "tabnet_clf = TabNetClassifier(optimizer_fn=torch.optim.Adam,\n", + " optimizer_params=dict(lr=2e-2),\n", + " scheduler_params={\"step_size\":10, \"gamma\":0.9},\n", + " scheduler_fn=torch.optim.lr_scheduler.StepLR, \n", + " mask_type='sparsemax') # \"sparsemax\" or \"entmax\" are the options\n", + "\n", + "tabnet_clf.fit(\n", + " X_train=X_train, y_train=y_train,\n", + " eval_set=[(X_train, y_train), (X_test, y_test)],\n", + " eval_name=['train', 'valid'],\n", + " eval_metric=['accuracy'],\n", + " max_epochs=100, patience=20,\n", + " batch_size=1024, virtual_batch_size=128,\n", + " num_workers=0,\n", + " drop_last=False\n", + ")\n", + "\n", + "saving_path_name = \"./TabNetModel/tabnet_model.pth\"\n", + "tabnet_clf.save_model(saving_path_name)" + ] + }, + { + "cell_type": "code", + "execution_count": 25, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Accuracy: 96.10%\n" + ] + } + ], + "source": [ + "preds = tabnet_clf.predict(X_test)\n", + "\n", + "accuracy = (preds == y_test).mean()\n", + "print(f'Accuracy: {accuracy*100:.2f}%')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "TabNet Accuracy: 0.9610" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "env", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.11.9" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/Thyroid Cancer Recurrence Prediction/Model/tabnet_model.pt b/Thyroid Cancer Recurrence Prediction/Model/tabnet_model.pt new file mode 100644 index 0000000000..a29ee2cbc3 Binary files /dev/null and b/Thyroid Cancer Recurrence Prediction/Model/tabnet_model.pt differ diff --git a/Thyroid Cancer Recurrence Prediction/Model/tabnet_model_params.json b/Thyroid Cancer Recurrence Prediction/Model/tabnet_model_params.json new file mode 100644 index 0000000000..f7c9e00ce5 --- /dev/null +++ b/Thyroid Cancer Recurrence Prediction/Model/tabnet_model_params.json @@ -0,0 +1 @@ +{"init_params": {"cat_dims": [], "cat_emb_dim": [], "cat_idxs": [], "clip_value": 1, "device_name": "auto", "epsilon": 1e-15, "gamma": 1.3, "grouped_features": [], "input_dim": 55, "lambda_sparse": 0.001, "mask_type": "sparsemax", "momentum": 0.02, "n_a": 8, "n_d": 8, "n_indep_decoder": 1, "n_independent": 2, "n_shared": 2, "n_shared_decoder": 1, "n_steps": 3, "optimizer_params": {"lr": 0.02}, "output_dim": 2, "scheduler_params": {"step_size": 10, "gamma": 0.9}, "seed": 0, "verbose": 1}, "class_attrs": {"preds_mapper": {"0": 0, "1": 1}}} \ No newline at end of file diff --git a/Thyroid Cancer Recurrence Prediction/README.md b/Thyroid Cancer Recurrence Prediction/README.md new file mode 100644 index 0000000000..0181e9c140 --- /dev/null +++ b/Thyroid Cancer Recurrence Prediction/README.md @@ -0,0 +1,141 @@ +## **Thyroid Recurrence Prediction** + +### ๐ŸŽฏ **Goal** + +The objective of this project is to predict whether a person is prone to have thyroid again or not, as part of supervised learning to help recognize them. + +## Overview + +The **Thyroid Recurrence Prediction** project aims to develop a predictive model to identify individuals at risk of thyroid cancer recurrence. By leveraging supervised learning techniques, the project seeks to enhance early detection and management strategies, thereby improving patient outcomes and guiding clinical decisions. + +## Objectives + +- **Predict Thyroid Recurrence:** Develop a model to predict whether a patient is prone to thyroid cancer recurrence based on various features. +- **Compare Model Performance:** Evaluate and compare the performance of different machine learning models to determine the most accurate and effective approach. + +## Dataset + +The dataset used in this project includes patient information and clinical data with the following attributes: + +- **Age:** Age of the patient at diagnosis or treatment. +- **Gender:** Gender of the patient. +- **Smoking:** Smoking status of the patient. +- **Hx Smoking:** Smoking history. +- **Hx Radiotherapy:** History of radiotherapy treatment. +- **Thyroid Function:** Status of thyroid function. +- **Physical Examination:** Findings from physical examination. +- **Adenopathy:** Presence of enlarged lymph nodes in the neck. +- **Pathology:** Types of thyroid cancer based on biopsy. +- **Focality:** Whether the cancer is unifocal or multifocal. +- **Risk:** Risk category of cancer based on tumor characteristics. +- **T, N, M:** Tumor, nodal, and metastasis classifications. +- **Stage:** Overall stage of the cancer. +- **Response:** Response to treatment. +- **Recurred:** Indicator of cancer recurrence. + +[Link to the dataset](https://www.kaggle.com/datasets/jainaru/thyroid-disease-data/data) + +## Methodology + +1. **Data Preprocessing:** The dataset was cleaned and preprocessed to handle missing values, encode categorical variables, and normalize features. +2. **Model Selection:** Three different models were implemented: + - **Multilayer Perceptron (MLP):** A neural network model that learns complex patterns in data. + - **TabNet:** A deep learning model designed for tabular data, combining attention mechanisms with decision trees. + - **WeightedEnsemble_L2:** An ensemble learning approach that combines predictions from multiple models to improve accuracy. +3. **Evaluation:** Each model was evaluated based on accuracy scores to determine its effectiveness in predicting thyroid recurrence. + + + +### ๐Ÿงต **Dataset** + +The Dataset consists of 17 columns: +| Attribute | Description | +|----------------------|-----------------------------------------------------------------------------------------------------------| +| Age | The age of the patient at the time of diagnosis or treatment. | +| Gender | The gender of the patient (male or female). | +| Smoking | Whether the patient is a smoker or not. | +| Hx Smoking | Smoking history of the patient (e.g., whether they have ever smoked). | +| Hx Radiotherapy | History of radiotherapy treatment for any condition. | +| Thyroid Function | The status of thyroid function, possibly indicating if there are any abnormalities. | +| Physical Examination | Findings from a physical examination of the patient, which may include palpation of the thyroid gland and surrounding structures. | +| Adenopathy | Presence or absence of enlarged lymph nodes (adenopathy) in the neck region. | +| Pathology | Specific types of thyroid cancer as determined by pathology examination of biopsy samples. | +| Focality | Whether the cancer is unifocal (limited to one location) or multifocal (present in multiple locations). | +| Risk | The risk category of the cancer based on various factors, such as tumor size, extent of spread, and histological type. | +| T | Tumor classification based on its size and extent of invasion into nearby structures. | +| N | Nodal classification indicating the involvement of lymph nodes. | +| M | Metastasis classification indicating the presence or absence of distant metastases. | +| Stage | The overall stage of the cancer, typically determined by combining T, N, and M classifications. | +| Response | Response to treatment, indicating whether the cancer responded positively, negatively, or remained stable after treatment. | +| Recurred | Indicates whether the cancer has recurred after initial treatment. | + +[Link to the dataset](https://www.kaggle.com/datasets/jainaru/thyroid-disease-data/data) + + +### ๐Ÿงพ **Description** + +I focused on creating a model proficient in predicting if the patient is prone to have thyroid again or not. + +### ๐Ÿงฎ **What I had done!** + +To achieve our goals we: + +- Tested out three different models for performing binary classification on the [Thyroid Recurrence dataset](https://www.kaggle.com/datasets/jainaru/thyroid-disease-data/data). + +### ๐Ÿš€ **Models Implemented** + +models used: + +- Multilayer Perceptron +- TabNet +- WeightedEnsemble_L2 + +### ๐Ÿ“š **Libraries Needed** + +- keras +- tensorflow +- pytorch-tabnet +- numpy +- autogluon +- matplotlib + + +### Visualization + +#### Adenopathy Distribution +![Adenopathy_Distribution](Images/Adenopathy_Distribution.png) + +#### Age Distribution +![Age_Distribution](Images/Age_Distribution.png) + +#### Age Distribution by Smoking Status +![Age_Distribution_by_Smoking_Status](Images/Age_Distribution_by_Smoking_Status.png) + +#### Gender Distribution +![Gender_Distribution](Images/Gender_Distribution.png) + +#### MLP Model Accuracy +![MLP_Model_Accuracy](Images/MLP_Model_Accuracy.png) + +#### MosaicPlot +![MosaicPlot](Images/MosaicPlot.png) + +#### Thyroid Cancer Recurrence Dataset EDA +![Thyroid_Cancer_Recurrence_Dataset_EDA](Images/Thyroid_Cancer_Recurrence_Dataset_EDA.png) + + +### ๐Ÿ“ˆ **Performance of the Models based on the Accuracy Scores** + +Metrics: + +| Models | Accuracy | +|--------|---------------------| +| WeightedEnsemble_L2 | 0.9839 | +| MLP | 0.9870 | +| TabNet | 0.9610 | + +### ๐Ÿ“ข **Conclusion** + +The project successfully developed and compared multiple models for predicting thyroid cancer recurrence. The **MLP model** demonstrated the highest accuracy, making it the most reliable model for this task. The results highlight the potential of machine learning in improving cancer management and patient care. +`WeightedEnsemble_L2` gave the best accuracy i.e, 98.39%. + diff --git a/Thyroid Cancer Recurrence Prediction/requirements.txt b/Thyroid Cancer Recurrence Prediction/requirements.txt new file mode 100644 index 0000000000..42a12901d1 --- /dev/null +++ b/Thyroid Cancer Recurrence Prediction/requirements.txt @@ -0,0 +1,17 @@ +autogluon==1.1.0 +autogluon.common==1.1.0 +autogluon.core==1.1.0 +autogluon.features==1.1.0 +autogluon.multimodal==1.1.0 +autogluon.tabular==1.1.0 +autogluon.timeseries==1.1.0 +gluonts==0.14.3 +keras==3.3.3 +matplotlib==3.8.4 +numpy==1.26.4 +pandas==2.2.2 +pytorch_tabnet==4.1.0 +scikit_learn==1.4.0 +torch==2.3.0 +torch==2.1.2 +wasabi==1.1.3 \ No newline at end of file