{
  "source_file": "0930",
  "source_platform": "Medium",
  "author": "Federico Trotta",
  "title_listed": "The Data Scientist's Toolbox: Leveraging scikit-learn's Top Features for Success",
  "keywords": "scikit-learn,工具",
  "domain": "机器学习",
  "content_type": "深度技术解析",
  "is_paid_flag": "部分免费/会员墙",
  "url": "https://towardsdatascience.com/the-data-scientists-toolbox-leveraging-scikit-learn-s-top-features-for-success-d69a899267c5/",
  "publish_date": "2023-06",
  "corpus_stage": "预训练/SFT",
  "notes": "",
  "id": "3b9a334ff63b",
  "collected_at": "2026-10-02T00:40:13",
  "title": "The Data Scientist's Toolbox: Leveraging scikit-learn's Top Features for Success | Towards Data Science",
  "body_markdown": "![Revisit consent button](https://cdn-cookieyes.com/assets/images/revisit.svg)\nWe value your privacy\nWe use cookies to enhance your browsing experience, serve personalised ads or content, and analyse our traffic. By clicking \"Accept All\", you consent to our use of cookies.\nCustomise Reject All Accept All\nCustomise Consent Preferences ![](https://cdn-cookieyes.com/assets/images/close.svg)\nWe use cookies to help you navigate efficiently and perform certain functions. You will find detailed information about all cookies under each consent category below.\nThe cookies that are categorised as \"Necessary\" are stored on your browser as they are essential for enabling the basic functionalities of the site. ... Show more\nNecessaryAlways Active\nNecessary cookies are required to enable the basic features of this site, such as providing secure log-in or adjusting your consent preferences. These cookies do not store any personally identifiable data.\n  * Cookie\nBCTempID\n  * Duration\n10 minutes\n  * Description\nNo description available.\n\n\n  * Cookie\n__cf_bm\n  * Duration\n1 hour\n  * Description\nThis cookie, set by Cloudflare, is used to support Cloudflare Bot Management. \n\n\n  * Cookie\nAWSALBCORS\n  * Duration\n7 days\n  * Description\nAmazon Web Services set this cookie for load balancing.\n\n\n  * Cookie\n_cfuvid\n  * Duration\nsession\n  * Description\nCloudflare sets this cookie to track users across sessions to optimize user experience by maintaining session consistency and providing personalized services\n\n\n  * Cookie\nli_gc\n  * Duration\n6 months\n  * Description\nLinkedin set this cookie for storing visitor's consent regarding using cookies for non-essential purposes.\n\n\n  * Cookie\n__hssrc\n  * Duration\nsession\n  * Description\nThis cookie is set by Hubspot whenever it changes the session cookie. The __hssrc cookie set to 1 indicates that the user has restarted the browser, and if the cookie does not exist, it is assumed to be a new session.\n\n\n  * Cookie\n__hssc\n  * Duration\n1 hour\n  * Description\nHubSpot sets this cookie to keep track of sessions and to determine if HubSpot should increment the session number and timestamps in the __hstc cookie.\n\n\n  * Cookie\nwpEmojiSettingsSupports\n  * Duration\nsession\n  * Description\nWordPress sets this cookie when a user interacts with emojis on a WordPress site. It helps determine if the user's browser can display emojis properly.\n\n\n  * Cookie\nBCSessionID\n  * Duration\n1 year 1 month 4 days\n  * Description\nBlueconic sets this cookie as a unique identifier for the BlueConic profile.\n\n\n  * Cookie\n_octo\n  * Duration\n1 year\n  * Description\nNo description available.\n\n\n  * Cookie\nlogged_in\n  * Duration\n1 year\n  * Description\nNo description available.\n\n\n  * Cookie\n__Secure-YEC\n  * Duration\npast\n  * Description\nYouTube sets this cookie to stores the user's video player preferences using embedded YouTube video\n\n\n  * Cookie\n__eoi\n  * Duration\n6 months\n  * Description\nDescription is currently not available.\n\n\n  * Cookie\nAWSALBTGCORS\n  * Duration\n7 days\n  * Description\nNo description available.\n\n\n  * Cookie\nlogin-status-p\n  * Duration\npast\n  * Description\nDescription is currently not available.\n\n\n  * Cookie\nAWSALBTG\n  * Duration\n7 days\n  * Description\nNo description available.\n\n\n  * Cookie\ncsrf_token\n  * Duration\nsession\n  * Description\nNo description available.\n\n\n  * Cookie\ntoken_v2\n  * Duration\n1 day\n  * Description\nDescription is currently not available.\n\n\n  * Cookie\nD\n  * Duration\n1 year\n  * Description\nDescription is currently not available.\n\n\n  * Cookie\nPHPSESSID\n  * Duration\nsession\n  * Description\nThis cookie is native to PHP applications. The cookie stores and identifies a user's unique session ID to manage user sessions on the website. The cookie is a session cookie and will be deleted when all the browser windows are closed.\n\n\n  * Cookie\nVISITOR_PRIVACY_METADATA\n  * Duration\n6 months\n  * Description\nYouTube sets this cookie to store the user's cookie consent state for the current domain. \n\n\n  * Cookie\ncookietest\n  * Duration\nsession\n  * Description\nThe cookietest cookie is typically used to determine whether the user's browser accepts cookies, essential for website functionality and user experience.\n\n\n  * Cookie\n__Host-airtable-session\n  * Duration\n1 year\n  * Description\nThis cookie is used to enable us to integrate the services of Airtable.\n\n\n  * Cookie\n__Host-airtable-session.sig\n  * Duration\n1 year\n  * Description\nThis cookie is used to enable us to integrate the services of Airtable.\n\n\n  * Cookie\nm\n  * Duration\n1 year 1 month 4 days\n  * Description\nStripe sets this cookie for fraud prevention purposes. It identifies the device used to access the website, allowing the website to be formatted accordingly.\n\n\n  * Cookie\nBIGipServer*\n  * Duration\nsession\n  * Description\nMarketo sets this cookie to collect information about the user's online activity and build a profile about their interests to provide advertisements relevant to the user. \n\n\n  * Cookie\n__cfruid\n  * Duration\nsession\n  * Description\nCloudflare sets this cookie to identify trusted web traffic.\n\n\n  * Cookie\n_GRECAPTCHA\n  * Duration\n6 months\n  * Description\nGoogle Recaptcha service sets this cookie to identify bots to protect the website against malicious spam attacks.\n\n\n  * Cookie\n__Secure-YNID\n  * Duration\n6 months\n  * Description\nGoogle cookie used to protect user security and prevent fraud, especially during the login process.\n\n\n  * Cookie\ncookieyes-consent\n  * Duration\n1 year\n  * Description\nCookieYes sets this cookie to remember users' consent preferences so that their preferences are respected on subsequent visits to this site. It does not collect or store any personal information about the site visitors.\n\n\nFunctional\nFunctional cookies help perform certain functionalities like sharing the content of the website on social media platforms, collecting feedback, and other third-party features.\n  * Cookie\nlidc\n  * Duration\n1 day\n  * Description\nLinkedIn sets the lidc cookie to facilitate data center selection.\n\n\n  * Cookie\nbrw\n  * Duration\n1 year\n  * Description\nNo description available.\n\n\n  * Cookie\nbrwConsent\n  * Duration\n5 minutes\n  * Description\nDescription is currently not available.\n\n\n  * Cookie\nWMF-Uniq\n  * Duration\n1 year\n  * Description\nDescription is currently not available.\n\n\n  * Cookie\nloom_anon_comment\n  * Duration\n1 year\n  * Description\nNo description available.\n\n\n  * Cookie\nloom_referral_video\n  * Duration\nsession\n  * Description\nDescription is currently not available.\n\n\n  * Cookie\nVISITOR_INFO1_LIVE\n  * Duration\n6 months\n  * Description\nA cookie set by YouTube to measure bandwidth that determines whether the user gets the new or old player interface.\n\n\n  * Cookie\nyt-remote-connected-devices\n  * Duration\nNever Expires\n  * Description\nYouTube sets this cookie to store the user's video preferences using embedded YouTube videos.\n\n\n  * Cookie\nytidb::LAST_RESULT_ENTRY_KEY\n  * Duration\nNever Expires\n  * Description\nThe cookie ytidb::LAST_RESULT_ENTRY_KEY is used by YouTube to store the last search result entry that was clicked by the user. This information is used to improve the user experience by providing more relevant search results in the future.\n\n\n  * Cookie\nyt-remote-device-id\n  * Duration\nNever Expires\n  * Description\nYouTube sets this cookie to store the user's video preferences using embedded YouTube videos.\n\n\n  * Cookie\nyt-remote-session-name\n  * Duration\nsession\n  * Description\nThe yt-remote-session-name cookie is used by YouTube to store the user's video player preferences using embedded YouTube video.\n\n\n  * Cookie\nyt-remote-fast-check-period\n  * Duration\nsession\n  * Description\nThe yt-remote-fast-check-period cookie is used by YouTube to store the user's video player preferences for embedded YouTube videos.\n\n\n  * Cookie\nyt-remote-session-app\n  * Duration\nsession\n  * Description\nThe yt-remote-session-app cookie is used by YouTube to store user preferences and information about the interface of the embedded YouTube video player.\n\n\n  * Cookie\nyt-remote-cast-available\n  * Duration\nsession\n  * Description\nThe yt-remote-cast-available cookie is used to store the user's preferences regarding whether casting is available on their YouTube video player.\n\n\n  * Cookie\nyt-remote-cast-installed\n  * Duration\nsession\n  * Description\nThe yt-remote-cast-installed cookie is used to store the user's video player preferences using embedded YouTube video.\n\n\n  * Cookie\ncp_session\n  * Duration\n3 months\n  * Description\nCodepen sets this cookie for Help systems found in the website.\n\n\n  * Cookie\nloid\n  * Duration\n1 year 1 month 4 days\n  * Description\nThis cookie is set by the Reddit. The cookie enables the sharing of content from the website onto the social media platform.\n\n\nAnalytics\nAnalytical cookies are used to understand how visitors interact with the website. These cookies help provide information on metrics such as the number of visitors, bounce rate, traffic source, etc.\n  * Cookie\n__hstc\n  * Duration\n6 months\n  * Description\nHubspot set this main cookie for tracking visitors. It contains the domain, initial timestamp (first visit), last timestamp (last visit), current timestamp (this visit), and session number (increments for each subsequent session).\n\n\n  * Cookie\nhubspotutk\n  * Duration\n6 months\n  * Description\nHubSpot sets this cookie to keep track of the visitors to the website. This cookie is passed to HubSpot on form submission and used when deduplicating contacts.\n\n\n  * Cookie\n_ga\n  * Duration\n1 year 1 month 4 days\n  * Description\nGoogle Analytics sets this cookie to calculate visitor, session and campaign data and track site usage for the site's analytics report. The cookie stores information anonymously and assigns a randomly generated number to recognise unique visitors.\n\n\n  * Cookie\n_ga_*\n  * Duration\n1 year 1 month 4 days\n  * Description\nGoogle Analytics sets this cookie to store and count page views.\n\n\n  * Cookie\n__Host-psifi.analyticsTrace\n  * Duration\n6 hours\n  * Description\nDescription is currently not available.\n\n\n  * Cookie\n__Host-psifi.analyticsTraceV2\n  * Duration\n6 hours\n  * Description\nDescription is currently not available.\n\n\n  * Cookie\n_gh_sess\n  * Duration\nsession\n  * Description\nGitHub sets this cookie for temporary application and framework state between pages like what step the user is on in a multiple step form.\n\n\n  * Cookie\nYSC\n  * Duration\nsession\n  * Description\nYSC cookie is set by Youtube and is used to track the views of embedded videos on Youtube pages.\n\n\n  * Cookie\najs_anonymous_id\n  * Duration\n1 year\n  * Description\nThis cookie is set by Segment to count the number of people who visit a certain site by tracking if they have visited before.\n\n\n  * Cookie\nvuid\n  * Duration\n1 year 1 month 4 days\n  * Description\nVimeo installs this cookie to collect tracking information by setting a unique ID to embed videos on the website. \n\n\nPerformance\nPerformance cookies are used to understand and analyse the key performance indexes of the website which helps in delivering a better user experience for the visitors.\n  * Cookie\nAWSALB\n  * Duration\n7 days\n  * Description\nAWSALB is an application load balancer cookie set by Amazon Web Services to map the session to the target.\n\n\n  * Cookie\nacq\n  * Duration\npast\n  * Description\nDescription is currently not available.\n\n\n  * Cookie\nacq.sig\n  * Duration\npast\n  * Description\nDescription is currently not available.\n\n\n  * Cookie\nptc\n  * Duration\n2 years\n  * Description\nNo description available.\n\n\nAdvertisement\nAdvertisement cookies are used to provide visitors with customised advertisements based on the pages you visited previously and to analyse the effectiveness of the ad campaigns.\n  * Cookie\nmuc_ads\n  * Duration\n1 year 1 month 4 days\n  * Description\nTwitter sets this cookie to collect user behaviour and interaction data to optimize the website.\n\n\n  * Cookie\nguest_id_marketing\n  * Duration\n1 year 1 month 4 days\n  * Description\nTwitter sets this cookie to identify and track the website visitor.\n\n\n  * Cookie\nguest_id_ads\n  * Duration\n1 year 1 month 4 days\n  * Description\nTwitter sets this cookie to identify and track the website visitor.\n\n\n  * Cookie\npersonalization_id\n  * Duration\n1 year 1 month 4 days\n  * Description\nTwitter sets this cookie to integrate and share features for social media and also store information about how the user uses the website, for tracking and targeting.\n\n\n  * Cookie\nguest_id\n  * Duration\n1 year 1 month 4 days\n  * Description\nTwitter sets this cookie to identify and track the website visitor. It registers if a user is signed in to the Twitter platform and collects information about ad preferences.\n\n\n  * Cookie\nbcookie\n  * Duration\n1 year\n  * Description\nLinkedIn sets this cookie from LinkedIn share buttons and ad tags to recognize browser IDs.\n\n\n  * Cookie\n__Secure-ROLLOUT_TOKEN\n  * Duration\n6 months\n  * Description\nYouTube sets this cookie to manage feature rollout and experimentation. It helps Google control which new features or interface changes are shown to users as part of testing and staged rollouts, ensuring consistent experience for a given user during an experiment.\n\n\n  * Cookie\nyt.innertube::nextId\n  * Duration\nNever Expires\n  * Description\nYouTube sets this cookie to register a unique ID to store data on what videos from YouTube the user has seen.\n\n\n  * Cookie\nyt.innertube::requests\n  * Duration\nNever Expires\n  * Description\nYouTube sets this cookie to register a unique ID to store data on what videos from YouTube the user has seen.\n\n\n  * Cookie\nsession_tracker\n  * Duration\nsession\n  * Description\nThis cookie is set by the Reddit. This cookie is used to identify trusted web traffic. It also helps in adverstising on the website.\n\n\n  * Cookie\nedgebucket\n  * Duration\nsession\n  * Description\nReddit sets this cookie to save the information about a log-on Reddit user, for the purpose of advertisement recommendations and updating the content.\n\n\n  * Cookie\ndid\n  * Duration\n1 year\n  * Description\nArbor sets this cookie to show targeted ads to site visitors.This cookie expires after 2 months or 1 year.\n\n\nUncategorised\nOther uncategorised cookies are those that are being analysed and have not been classified into a category as yet.\nNo cookies to display.\nReject All Save My Preferences Accept All\nToggle Search[](https://towardsdatascience.com/)Toggle Mobile Navigation\n[](https://towardsdatascience.com/)\nPublish AI, ML & data-science insights to a global community of data professionals.\nSign in[Submit an Article](https://write.insightmediagroup.io)\n[Latest](https://towardsdatascience.com/latest/)[Editor's Picks](https://towardsdatascience.com/tag/editors-pick/)[Newsletter](https://towardsdatascience.com/tag/the-variable/)[ShipAI](https://towardsdatascience.com/shipai/)\n* * *\n[Write For TDS](https://towardsdatascience.com/submissions/)\n[LinkedIn](https://www.linkedin.com/company/towards-data-science/)[X](https://x.com/TDataScience)Toggle Search\n[Artificial Intelligence](https://towardsdatascience.com/category/artificial-intelligence/)\n# The Data Scientist's Toolbox: Leveraging scikit-learn's Top Features for Success\nUnderstanding scikit-learn: a unified approach to Machine Learning\n[Federico Trotta](https://towardsdatascience.com/author/federicotrotta/)\nJune 12, 202312 min read\n![](https://assets.insightmediagroup.io/media/wp-content/uploads/2023/06/1kAB1R73QRTAWQM75bgniug.jpeg)\nPython has a lot of libraries which make it one of the most used programming language. Most of them have similar features and can be used by one another and reach the same results. But when it comes to Machine Learning the only library we can talk about is `sklearn`.\nWhether you're an ML practitioner or a beginner, I know you have some proficiency in `sklearn`. But sometimes we use some tools just because everyone does it, without asking any questions.\nFor example, have you ever asked yourself:\" _What are the 5 most important features in_ `sklearn`?\" Well, let me tell you one thing: it took me circa 2 years to ask myself this question, so don't be ashamed if you haven't.\nSo, in this article, I'll answer this question; and here's what you'll find here:\ntext\n\n```\nTable of contents:\n\nFeature #1: consistency\nFeature #2: wide range of algorithms\nFeature #3: data preprocessing and feature engineering\nFeature #4: model evaluation and validation\nFeature #5: integration with the Python data science ecosystem\nCoding examples\n```\n\n* * *\nLearn this step by step with the interactive [AI Engineer](https://roadmap.sh/ai-engineer), [AI and Data Scientist](https://roadmap.sh/ai-data-scientist), [Computer Science](https://roadmap.sh/computer-science) and [Machine Learning](https://roadmap.sh/machine-learning) roadmaps.\n## Feature #1: consistency\nThe power of `sklearn` relies on the fact that it is a consistent library. What does it mean? Well, it means that it has:\n  1. **Easy integration with external DL/ML libraries**. It can be integrated with external ML/DL libraries, such as `Keras`, `Tensorflow`, and `XGBoost`, just to name a few. This compatibility gives us the possibility to combine `sklearn`'s features with the features of these libraries, making the development phase for us Data Professionals easy and painless.\n  2. **Simplicity of usage**. `sklearn` maintains the same unified interface across the various ML algorithms it provides. This way we don't need to learn new syntax or patterns: we just need to stick to the \"same rules\" and think to develop our ML algorithms. Can you imagine dealing with different syntax for different algorithms, while dealing with complex ML problems? Well, I don't (and, sorry if I wouldn't!).\n  3. **Well documented**. `sklearn` provides extensive documentation, including tutorials and examples of usage. The documentation also covers every aspect of the library, from data preprocessing to model evaluation. You can refer to it [here](https://scikit-learn.org/stable/index.html).\n\n\n## Feature #2: wide range of algorithms\nThe `sklearn` library provides a very wide range of ML algorithms, ranging from Supervised to Unsupervised Learning, implementing both regression and classification models for SL cases.\nThis wide possibility that we, as Data Scientists have, makes `sklearn` the perfect library for ML: one environment for all the models we need in our everyday job.\nWe just need to choose the most suitable algorithm for our specific problem domain, without complaining about integrations and stuff like that:a great advantage!\n## Feature #3: data preprocessing and feature engineering\nData preprocessing and feature engineering are important parts of an ML problem because they involve preparing the data for the ML algorithms. Here are the features provided by `sklearn` for these tasks:\n### Data preprocessing\n  1. **Dealing with missing data**. If you have practiced ML for a while I'm sure you find dealing with missing data somehow painful. Or, at least, so it's to me. `sklearn` gives us different features for dealing with missing data like: a) the `SimpleImputer()` class which allows us to impute missing values using different strategies such as mean, median, mode, or a constant value. The imputation can be applied to specific columns or to the entire dataset. b) the `IterativeImputer()` class which utilizes ML models to impute missing values iteratively. It fills in missing values using the predictions from a chosen model. c) The `MissingIndicator()` class that can be used to create binary indicators for missing values in the dataset. It adds a new feature that flags whether a value was originally missing or not, providing additional information to the model.\n  2. **Feature scaling**. Features with different scales can affect the performance of many ML algorithms in a bad way. Luckily for us, `sklearn` offers some methods to scale the features, like: a) standardization (`StandardScaler()`) which scales the features to have zero mean and unit variance, and b) normalization (`MinMaxScaler()`) which scales the features to a specific range.\n  3. **Encoding categorical variables**. Many ML algorithms cannot directly handle categorical variables. For this reason, `sklearn` provides a couple of encoding techniques like: a) one-hot encoding (`OneHotEncoder()`) and b) ordinal encoding (`OrdinalEncoder()`) to convert categorical variables into numerical representations. This makes it easy to deal with data in the form of strings and transform them into numbers, so that we can feed the ML algorithms with those.\n  4. **Handling Outliers**. Outliers are another general pain for Data Scientists as they affect the performance of Machine Learning models, so they need a particular treatment. `sklearn` offers some techniques for outlier detection and removal, such as the Local Outlier Factor (`LOF()`) algorithm and the Isolation Forest algorithm (`IsolationForest()`). Note that these are both unsupervised ML algorithms.\n\n\n### Feature Engineering:\n  1. **Feature Extraction**. `sklearn` provides different methods for extracting meaningful features from our data. As we know, in fact, not all the features we have are meaningful for our ML problems, and it's a general rule of thumb that we've better deal only with the meaningful ones. In the case of feature extraction, `sklearn` provides: a) the`CountVectorizer()` class that can convert text documents into a matrix of token counts, and b) the `TfidfVectorizer()` class that calculates the Term Frequency-Inverse Document Frequency (TF-IDF) to represent text data.\n  2. **Dimensionality Reduction**. `sklearn` offers various dimensionality reduction techniques that are useful to reduce the number of features, while preserving essential information. Two popular methods are: a) Principal Component Analysis (`PCA()`) and b) t-Distributed Stochastic Neighbor Embedding (`TSNE()`).\n  3. **Feature Selection**. Finally, `sklearn` provides also multiple methods for feature selection, such as: a) univariate feature selection (`SelectKBest()`), b) recursive feature elimination (`RFE()`), and c) feature importance ranking based on tree-based models (`SelectFromModel()`).\n\n\n## Feature #4: model evaluation and validation\nModel evaluation and validation are crucial activities in ML. As Data Scientists, in fact, our role is to find the best model that fits the data; but what does this actually mean?\nIt means that we need to train some ML models and find the one that makes the best predictions (or classifications) based on unseen data. This means that we first need to evaluate some ML models on the training data, and then validate them on new, unseen, data. `sklearn` provides different features to help us in these fundamental tasks like:\n  1. **Cross-Validation techniques**. Cross-validation is an important technique for model evaluation that helps us deal with overfitting. It works by partitioning the data into multiple subsets, training the model on different combinations of these subsets, and averaging the results to estimate the model's performance. `sklearn` provides us with the following cross-validation methods: a) k-fold cross-validation , b) stratified k-fold cross-validation, and c) leave-one-out cross-validation.\n  2. **Evaluation Metrics**. `sklearn` offers a wide range of evaluation metrics that allow us to numerically quantify the performance of classification and regression models. For classification tasks, we can name, between the others, metrics like `accuracy`, `precision`, `recall`, and AUC/ROC. Regression tasks can be evaluated, instead, using metrics such as mean squared error (`MSE`), mean absolute error (`MAE`), and R², and others. If you need a deepening of how to use them (and all the main metrics for both cases, provided by `sklearn`), here's [the definitive guide on the use of classification metrics](https://towardsdatascience.com/classification-metrics-the-complete-guide-for-aspiring-data-scientists-9f02eab796ae). And here's [the definitive guide in the case of regression cases](https://towardsdatascience.com/mastering-the-art-of-regression-analysis-5-key-metrics-every-data-scientist-should-know-1e2a8a2936f5).\n  3. **Hyperparameters tuning**. Model evaluation and validation are closely related to hyperparameters tuning, which involves selecting the best combination of the model parameters for getting the optimal performance of an ML algorithm. `sklearn` provides tools like `GridSearchCV` and `RandomizedSearchCV` for hyperparameters tuning using cross-validation. These techniques systematically explore the hyperparameters space and identify the best set of hyperparameters that result in the best model's performance, based on the chosen evaluation metric.\n\n\n## Feature #5: integration with the Python data science ecosystem\nOne of the superpowers of `sklearn` is the integration with the Python ecosystem for Data Science. This allows Data Scientists to leverage the power of `sklearn` with libraries and tools for data manipulation, visualization, and analysis. These are some examples:\n  1. **Pandas and Numpy.** The possibility to integrate `sklearn` with `Pandas` data frames allow users to pass data frames directly to `sklearn`'s functions and classes. This makes it convenient to preprocess and clean data using `Pandas` before feeding the data into `sklearn` models. `sklearn`, also, relies heavily on `NumPy` arrays for its data representation. In fact, it can directly accept `NumPy` arrays as input for training tasks.\n  2. **Matplotlib and Seaborn**. `sklearn` provides built-in support for plotting the metrics and the model evaluation results using `Matplotlib`. It allows users to visualize model performance, feature importance, and other relevant statistics, helping us understand our ML models. Also, since`Seaborn` is a data visualization library built on top of `Matplotlib`,`sklearn` also works well with it, allowing users to combine the power of `sklearn`'s ML algorithms with `Seaborn`'s aesthetic plots for exploratory data analysis and model evaluation.\n\n\n## Coding examples\nIn this final paragraph, I want to stress out some usage examples. If you have some experience using `sklearn` I know you know how to use it. But, please, consider that here the point is not to show how these features work: it's just to underline how the workflow works, based on what we said in the previous paragraphs. Because, again: often we use some tools just for the sake of using them and because everyone does, without asking any questions.\n### Example #1: integration with Pandas and NumPy\nLet's see the integration with `sklearn`,`Pandas`, and `NumPy`. For the sake of simplicity, we can use a prompt from ChatGPT. But before it, you may need to know how to effectively use prompt engineering as a Data Scientist:\n> [**Unleashing the Power of Prompt Engineering for Data Scientists**](https://towardsdatascience.com/unleashing-the-power-of-prompt-engineering-for-data-scientists-16b6d1f2bf85)\nThe prompt could be the following:\" _Create a Pandas data frame for regression analysis and make it with 5 features. Then, normalize the data, and split it into train and test sets. Fit the test set with a linear regression model. Print R² for both train and test sets_ \".\nAnd we get:\n> Certainly! I will create a sample Pandas data frame with five features, normalize the data, split it into train and test sets, fit a linear regression model, and print the R² scores for both the train and test sets. Here's an example implementation:\ntext\n\n```\nimport numpy as np\nimport pandas as pd\nfrom sklearn.model_selection import train_test_split\nfrom sklearn.linear_model import LinearRegression\nfrom sklearn.metrics import r2_score\nfrom sklearn.preprocessing import StandardScaler\n\n# Generating random features with at least 50 occurrences each\nnp.random.seed(42)\n\nfeature1 = np.random.randint(0, 10, size=100)\nfeature2 = np.random.randint(0, 10, size=100)\nfeature3 = np.random.randint(0, 10, size=100)\nfeature4 = np.random.randint(0, 10, size=100)\nfeature5 = np.random.randint(0, 10, size=100)\ntarget = np.random.randint(0, 100, size=100)\n\n# Creating a Pandas data frame\ndata = {\n    'Feature1': feature1,\n    'Feature2': feature2,\n    'Feature3': feature3,\n    'Feature4': feature4,\n    'Feature5': feature5,\n    'Target': target\n}\n\ndf = pd.DataFrame(data)\n\n# Splitting the data into features and target\nX = df.drop('Target', axis=1)\ny = df['Target']\n\n# Normalizing the data using StandardScaler\nscaler = StandardScaler()\nX_scaled = scaler.fit_transform(X)\n\n# Splitting the normalized data into train and test sets\nX_train, X_test, y_train, y_test = train_test_split(X_scaled, y, test_size=0.2, random_state=42)\n\n# Fitting the linear regression model\nreg_model = LinearRegression()\nreg_model.fit(X_train, y_train)\n\n# Predicting the target variable for both train and test sets\ny_train_pred = reg_model.predict(X_train)\ny_test_pred = reg_model.predict(X_test)\n\n# Calculating R² scores for train and test sets\nr2_train = r2_score(y_train, y_train_pred)\nr2_test = r2_score(y_test, y_test_pred)\n\n# Printing the R² scores\nprint(\"R² score for train set:\", r2_train)\nprint(\"R² score for test set:\", r2_test)\n```\n\n> In this example, I created a Pandas data frame with five features (`Feature1` to `Feature5`) and one target variable (`Target`). Then, I used the `StandardScaler` from scikit-learn to normalize the feature data. After that, I split the normalized data into train and test sets using a 80:20 ratio. Next, I trained a linear regression model on the train set and predicted the target variables for both the train and test sets. Finally, I calculated and printed the R² scores for both the train and test sets.\nSo, here's what happened on a workflow level:\n  1. Creation of the features and labels with `NumPy`.\n  2. The features and labels became a `Pandas` data frame.\n  3. The `Pandas` data frame became `X` and `y`: the data frame of the features and the `Pandas` series of the label, respectively.\n  4. `X` and `y` have been scaled and splitted. Then, a linear regression model makes predictions and is evaluated using the R², metric on both the train and test sets.\n\n\nSo, as we can see, we have a straight workflow that starts from `NumPy` and ends with `sklearn`, giving us the needed results. No \"strange manipulations\" or integrations are needed.\n### Example #2: integration with Matplotlib\nTo show the integration between `sklearn` and `Matplotlib` we make use, again, of ChatGPT with this prompt:\" _Create a binary classification problem in Python with data generated in NumPy. Standardize and split the data into train and test sets. Fit the train set with a random forest and KNN classifiers. Print ROC curve for the train set_.\"\nAnd we get:\n> Sure! Let's create a binary classification problem using randomly generated data in Python, and then we'll standardize and split the data into training and testing sets. We'll fit the train set using random forest and K-nearest neighbors (KNN) classifiers, and finally, we'll plot the ROC curve for the train set.\n> Here's the code:\ntext\n\n```\nimport numpy as np\nfrom sklearn.model_selection import train_test_split\nfrom sklearn.ensemble import RandomForestClassifier\nfrom sklearn.neighbors import KNeighborsClassifier\nfrom sklearn.metrics import roc_curve, roc_auc_score\nimport matplotlib.pyplot as plt\n\n# Set a random seed for reproducibility\nnp.random.seed(42)\n\n# Generate random data\nnum_samples = 1000\nnum_features = 10\n\n# Generate features (X)\nX = np.random.randn(num_samples, num_features)\n\n# Generate labels (y)\ny = np.random.randint(2, size=num_samples)\n\n# Standardize the features\nX = (X - np.mean(X, axis=0)) / np.std(X, axis=0)\n\n# Split the data into train and test sets\nX_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)\n\n# Fit the train set using random forest classifier\nrf_clf = RandomForestClassifier()\nrf_clf.fit(X_train, y_train)\n\n# Fit the train set using K-nearest neighbors (KNN) classifier\nknn_clf = KNeighborsClassifier()\nknn_clf.fit(X_train, y_train)\n\n# Predict probabilities for the positive class (class 1)\ny_train_rf_probs = rf_clf.predict_proba(X_train)[:, 1]\ny_train_knn_probs = knn_clf.predict_proba(X_train)[:, 1]\n\n# Calculate the false positive rate (FPR), true positive rate (TPR), and thresholds for the ROC curve\nrf_fpr, rf_tpr, rf_thresholds = roc_curve(y_train, y_train_rf_probs)\nknn_fpr, knn_tpr, knn_thresholds = roc_curve(y_train, y_train_knn_probs)\n\n# Calculate the AUC score for the ROC curve\nrf_auc = roc_auc_score(y_train, y_train_rf_probs)\nknn_auc = roc_auc_score(y_train, y_train_knn_probs)\n\n# Plot the ROC curve\nplt.plot(rf_fpr, rf_tpr, label=f\"Random Forest (AUC = {rf_auc:.2f})\")\nplt.plot(knn_fpr, knn_tpr, label=f\"KNN (AUC = {knn_auc:.2f})\")\nplt.plot([0, 1], [0, 1], 'k--')  # Diagonal line for random classifier\nplt.xlabel('False Positive Rate')\nplt.ylabel('True Positive Rate')\nplt.title('ROC Curve - Train Set')\nplt.legend(loc='lower right')\nplt.show()\n```\n\n> This code generates random data with 10 features and 1000 samples. It then standardizes the features, splits the data into train and test sets, fits the train set using random forest and KNN classifiers, predicts the probabilities for the positive class, calculates the ROC curve and AUC score for each classifier, and finally, plots the ROC curve for the train set.\nAnd if we run the above generated code we get:\nSo, here's the process:\n  1. Creation of the features and label with `NumPy`.\n  2. Features and label arrays became `X` and `y`.\n  3. Features and label arrays are splitted into the train and test sets. Then, the train set has been fitted with a KNN and a Random Forest classifiers.\n  4. `Matplotlib` library has been used to plot the ROC curve, making it easy for us to compare the performance of the two classifiers.\n\n\nAnd again, we have a straight workflow that uses all of the libraries we needed, printing the results we wanted with no \"additional manipulation\".\n* * *\n## Conclusions\nIn this article, we've seen the top 5 features that make `sklearn` the perfect library for ML. As we've seen in the examples, the workflow is clean and straight, allowing us to make our analyses with no additional manipulations.\nWhile some other libraries are growing in our field for ML (like `PyCaret` which, anyway, is a low-code library), `sklearn` has surely everything we need to develop our algorithms, without the stress to think of anything else, like integrations, manipulations, and so on.\n* * *\n**FREE PYTHON EBOOK:**\nStarted learning Python Data Science but struggling with it? [_**Subscribe to my newsletter and get my free ebook: this will give you the right learning path to follow to learn Python for Data Science with hands-on experience.**_](https://federico-trotta.ck.page/a3970f33f4)\nEnjoyed the story? Become a Medium member for 5$/month [through my referral link](https://medium.com/@federicotrotta/membership): I'll earn a small commission to no additional fee to you:\n> [**Join Medium with my referral link - Federico Trotta**](https://federicotrotta.medium.com/membership)\n## Register Now to Continue Reading\n### Unlock Towards Data Science with a Free Account\nAll articles on Towards Data Science are available to registered users. Create a free account today to access this article and thousands more.\nRegister for freeSign in to your account\n* * *\n![](https://assets.insightmediagroup.io/media/1787657183787_vf5bj8.png)\nWritten By\n## [Federico Trotta](https://towardsdatascience.com/author/federicotrotta/)\n[See all from Federico Trotta](https://towardsdatascience.com/author/federicotrotta/)\n[Artificial Intelligence](https://towardsdatascience.com/tag/artificial-intelligence/)[Data Science](https://towardsdatascience.com/tag/data-science/)[Federico Trotta](https://towardsdatascience.com/tag/federico-trotta/)[Machine Learning](https://towardsdatascience.com/tag/machine-learning/)[Technology](https://towardsdatascience.com/tag/technology/)\nShare This Article\n  * [](https://www.facebook.com/sharer/sharer.php?u=https%3A%2F%2Ftowardsdatascience.com%2Fthe-data-scientists-toolbox-leveraging-scikit-learn-s-top-features-for-success-d69a899267c5%2F&title=The%20Data%20Scientist's%20Toolbox%3A%20Leveraging%20scikit-learn's%20Top%20Features%20for%20Success)\n  * [](https://www.linkedin.com/shareArticle?mini=true&url=https%3A%2F%2Ftowardsdatascience.com%2Fthe-data-scientists-toolbox-leveraging-scikit-learn-s-top-features-for-success-d69a899267c5%2F&title=The%20Data%20Scientist's%20Toolbox%3A%20Leveraging%20scikit-learn's%20Top%20Features%20for%20Success)\n  * [](https://x.com/share?url=https%3A%2F%2Ftowardsdatascience.com%2Fthe-data-scientists-toolbox-leveraging-scikit-learn-s-top-features-for-success-d69a899267c5%2F&text=The%20Data%20Scientist's%20Toolbox%3A%20Leveraging%20scikit-learn's%20Top%20Features%20for%20Success)\n\n\nTowards Data Science is a community publication. Submit your insights to reach our global audience and earn through the TDS Author Payment Program.\n[Write for TDS](https://towardsdatascience.com/submissions/)\n## Related Articles\n  * [![](https://assets.insightmediagroup.io/media/wp-content/uploads/2026/06/experiment-platform-choosing.jpg)](https://towardsdatascience.com/picking-an-experimentation-platform-a-retrospective/)\n## [Picking an Experimentation Platform: A Retrospective](https://towardsdatascience.com/picking-an-experimentation-platform-a-retrospective/)\n[Data Science](https://towardsdatascience.com/category/data-science/)\nMy approach to guiding the choice between Eppo and Statsig, and the lessons learned\n[Alejandro Alvarez Perez](https://towardsdatascience.com/author/alejandroalvarezprez/)\nJune 6, 202612 min read\n  * [![](https://assets.insightmediagroup.io/media/wp-content/uploads/2022/11/0TzJg4WZIvGBxx1Ez-scaled.jpg)](https://towardsdatascience.com/a-step-by-step-guide-to-feature-engineering-for-multivariate-time-series-162ccf232e2f/)\n## [A Step-by-Step Guide to Feature Engineering for Multivariate Time Series](https://towardsdatascience.com/a-step-by-step-guide-to-feature-engineering-for-multivariate-time-series-162ccf232e2f/)\n[Artificial Intelligence](https://towardsdatascience.com/category/artificial-intelligence/)\nAdding new features based on summary statistics using Python\n[Vitor Cerqueira](https://towardsdatascience.com/author/vcerq/)\nNovember 30, 20228 min read\n  * [![](https://assets.insightmediagroup.io/media/wp-content/uploads/2024/11/0aS-g0PMd910xTRQ_.jpg)](https://towardsdatascience.com/introducing-the-new-anthropic-pdf-processing-api-0010657f595f/)\n## [Introducing the New Anthropic PDF Processing API](https://towardsdatascience.com/introducing-the-new-anthropic-pdf-processing-api-0010657f595f/)\n[Data Science](https://towardsdatascience.com/category/data-science/)\nAnthropic Claude 3.5 now understands PDF input\n[Thomas Reid](https://towardsdatascience.com/author/thomas_reid/)\nNovember 27, 20248 min read\n  * [![](https://assets.insightmediagroup.io/media/wp-content/uploads/2023/11/0icY0sysihxDHnuv8-scaled.jpg)](https://towardsdatascience.com/are-globals-in-python-really-global-492f1e4faf9b/)\n## [Are Globals in Python Really Global?](https://towardsdatascience.com/are-globals-in-python-really-global-492f1e4faf9b/)\n[Programming](https://towardsdatascience.com/category/programming/)\nLearn a hack to make a Python object truly global.\n[Marcin Kozak](https://towardsdatascience.com/author/nyggus/)\nNovember 17, 20238 min read\n  * [![](https://assets.insightmediagroup.io/media/wp-content/uploads/2019/10/1-Z0mK_E-10Q9VbZoEDoPsg.gif)](https://towardsdatascience.com/interpreting-clusters-29975099eea1/)\n## [Interpreting Cluster - mix of data science and intuition](https://towardsdatascience.com/interpreting-clusters-29975099eea1/)\n[Artificial Intelligence](https://towardsdatascience.com/category/artificial-intelligence/)\nMaking clusters is easy, Interpreting is hard\n[Pranay Dave](https://towardsdatascience.com/author/pranay-dave9/)\nOctober 11, 20196 min read\n  * [![](https://assets.insightmediagroup.io/media/wp-content/uploads/2021/07/1skgznH9I1csP-y9poHYFAg.png)](https://towardsdatascience.com/asmnet-a-lightweight-deep-neural-network-for-face-alignment-and-pose-estimation-9e9dfac07094/)\n## [ASMNet: a Lightweight Deep Neural Network for Face Alignment and Pose Estimation](https://towardsdatascience.com/asmnet-a-lightweight-deep-neural-network-for-face-alignment-and-pose-estimation-9e9dfac07094/)\n[Deep Learning](https://towardsdatascience.com/category/artificial-intelligence/deep-learning/)\nThis article explains the ASMNet, a lightweight Convolutional Neural Network (CNN) for facial landmark points detection (a.k.a Face...\n[Ali Pourramezan Fard](https://towardsdatascience.com/author/aliprf/)\nJuly 7, 202111 min read\n  * [![](https://assets.insightmediagroup.io/media/wp-content/uploads/2022/10/0RTWEO3zVJ1RP_zii-scaled.jpg)](https://towardsdatascience.com/trust-region-policy-optimization-trpo-explained-4b56bd206fc2/)\n## [Trust Region Policy Optimization (TRPO) Explained](https://towardsdatascience.com/trust-region-policy-optimization-trpo-explained-4b56bd206fc2/)\n[Machine Learning](https://towardsdatascience.com/category/artificial-intelligence/machine-learning/)\nThe Reinforcement Learning algorithm TRPO builds upon natural policy gradient algorithms, ensuring updates remain within 'trustworthy'...\n[Wouter van Heeswijk, PhD](https://towardsdatascience.com/author/wvheeswijk/)\nOctober 12, 202212 min read\n  * [![](https://assets.insightmediagroup.io/media/wp-content/uploads/2022/01/11Un0oaKJyummD-WoywtEFw.jpeg)](https://towardsdatascience.com/exploring-large-collections-of-documents-with-unsupervised-topic-modelling-part-1-4-404f4931dab7/)\n## [Exploring large collections of documents with unsupervised topic modelling - Part 1/4](https://towardsdatascience.com/exploring-large-collections-of-documents-with-unsupervised-topic-modelling-part-1-4-404f4931dab7/)\n[Machine Learning](https://towardsdatascience.com/category/artificial-intelligence/machine-learning/)\nInterpreting extracted topics with the help of topic modularity\n[Diogo A.P. Nunes](https://towardsdatascience.com/author/diogoapnunes/)\nJanuary 7, 20227 min read\n  * [![](https://assets.insightmediagroup.io/media/wp-content/uploads/2024/03/09LNXKLsMdx8qoeQW-scaled.jpg)](https://towardsdatascience.com/pandas-columns-bracket-indexing-df-x-versus-dot-syntax-df-x-aedd38f4a350/)\n## [Pandas Columns: Bracket Indexing (df['x']) Versus Dot Syntax (df.x)](https://towardsdatascience.com/pandas-columns-bracket-indexing-df-x-versus-dot-syntax-df-x-aedd38f4a350/)\n[Data Science](https://towardsdatascience.com/category/data-science/)\nDoes it matter how you do it? Maybe one is faster than the other?\n[Marcin Kozak](https://towardsdatascience.com/author/nyggus/)\nMarch 1, 20245 min read\n\n\n  * [YouTube](https://www.youtube.com/c/TowardsDataScience)\n  * [X](https://x.com/TDataScience)\n  * [LinkedIn](https://www.linkedin.com/company/towards-data-science/)\n  * [Threads](https://www.threads.net/@towardsdatascience)\n  * [Bluesky](https://bsky.app/profile/towardsdatascience.com)\n\n\n[](https://towardsdatascience.com/)\nYour home for data science and AI. The world's leading publication for data science, data analytics, data engineering, machine learning, and artificial intelligence professionals.\nSubscribe to Our Newsletter[Write For TDS](https://towardsdatascience.com/submissions/)•[About](https://towardsdatascience.com/about-towards-data-science-d691af11cc2f/)•[Advertise](https://contact.towardsdatascience.com/advertise-with-towards-data-science)•[Privacy Policy](https://towardsdatascience.com/privacy-policy/)•[Terms of Use](https://towardsdatascience.com/website-terms-of-use/)\n© Insight Media Group, LLC 2026•[The New Stack](https://thenewstack.io)•[roadmap.sh](https://roadmap.sh)•[Creator Network](https://insightmediagroup.io/creator-network)\n####  Recommended Articles \nClose\n  * [ ![](https://h030.towardsdatascience.com/rest/v2/contentStores/d7d3a4ab-7caf-4383-bbd2-fbf7fb4f1787/items/3642/image?etag=1780830904480&width=500&height=500) Check Your Biases ](https://towardsdatascience.com/check-your-biases-ba2685a7f799/ \"Check Your Biases\")\n  * [ ![](https://h030.towardsdatascience.com/rest/v2/contentStores/d7d3a4ab-7caf-4383-bbd2-fbf7fb4f1787/items/607930/image?etag=1782124566054&width=500&height=500) The Subset Sum Problem Solved in Linear Time for Dense Enough Inputs ](https://towardsdatascience.com/subset-sum-problem-solved-in-linear-time-for-dense-enough-inputs/ \"The Subset Sum Problem Solved in Linear Time for Dense Enough Inputs\")\n  * [ ![](https://h030.towardsdatascience.com/rest/v2/contentStores/d7d3a4ab-7caf-4383-bbd2-fbf7fb4f1787/items/3660/image?etag=1780176246070&width=500&height=500) Does Your Company Have a Data Strategy? ](https://towardsdatascience.com/does-your-company-have-a-data-strategy-e8944dbec4ae/ \"Does Your Company Have a Data Strategy?\")\n  * [ ![](https://h030.towardsdatascience.com/rest/v2/contentStores/d7d3a4ab-7caf-4383-bbd2-fbf7fb4f1787/items/4973/image?etag=1782232567105&width=500&height=500) Machine Learning Tricks, Learning with ChatGPT, and Other Recent Must-Reads ](https://towardsdatascience.com/machine-learning-tricks-learning-with-chatgpt-and-other-recent-must-reads-f277648a1921/ \"Machine Learning Tricks, Learning with ChatGPT, and Other Recent Must-Reads\")\n\n\nword word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word\n  \nmmMwWLliI0fiflO&1  \nmmMwWLliI0fiflO&1  \nmmMwWLliI0fiflO&1  \nmmMwWLliI0fiflO&1  \nmmMwWLliI0fiflO&1  \nmmMwWLliI0fiflO&1  \nmmMwWLliI0fiflO&1\n",
  "metadata": {
    "title": "The Data Scientist's Toolbox: Leveraging scikit-learn's Top Features for Success | Towards Data Science",
    "description": "Understanding scikit-learn: a unified approach to Machine Learning",
    "keywords": null,
    "author": "Federico Trotta",
    "og:locale": "en_US",
    "og:type": "article",
    "og:title": "The Data Scientist's Toolbox: Leveraging scikit-learn's Top Features for Success",
    "og:description": "Understanding scikit-learn: a unified approach to Machine Learning",
    "og:url": "https://towardsdatascience.com/the-data-scientists-toolbox-leveraging-scikit-learn-s-top-features-for-success-d69a899267c5/",
    "og:site_name": "Towards Data Science",
    "og:image": "https://assets.insightmediagroup.io/media/wp-content/uploads/2023/06/1kAB1R73QRTAWQM75bgniug.jpeg",
    "og:image:width": "1280",
    "og:image:height": "800",
    "og:image:type": "image/jpeg",
    "twitter:card": "summary_large_image",
    "twitter:site": "@TDataScience",
    "twitter:creator": "@TDataScience",
    "twitter:label1": "Written by",
    "twitter:data1": "Federico Trotta",
    "twitter:label2": "Est. reading time",
    "twitter:data2": "12 min read",
    "article:published_time": "2023-06-12T14:27:55.000Z",
    "article:modified_time": "2023-06-12T14:27:55.000Z",
    "article:author": "https://towardsdatascience.com/author/federicotrotta/"
  },
  "paywall": {
    "listed_paid": true,
    "detected": false,
    "marker": "",
    "public_only": true,
    "policy": "付费/会员内容只保留页面公开可见部分，不绕过付费墙"
  },
  "crawl": {
    "success": true,
    "status_code": 200,
    "error": "",
    "retried": true
  },
  "code_blocks": [
    {
      "language": "txt",
      "file": "attachments/3b9a334ff63b/code/block_000.txt",
      "chars": 259
    },
    {
      "language": "txt",
      "file": "attachments/3b9a334ff63b/code/block_001.txt",
      "chars": 1650
    },
    {
      "language": "txt",
      "file": "attachments/3b9a334ff63b/code/block_002.txt",
      "chars": 1902
    }
  ],
  "images": [
    {
      "src": "https://assets.insightmediagroup.io/media/wp-content/uploads/2023/06/1kAB1R73QRTAWQM75bgniug.jpeg",
      "alt": "",
      "local_path": "attachments/3b9a334ff63b/images/000.jpeg",
      "bytes": 42069,
      "downloaded": true
    },
    {
      "src": "https://assets.insightmediagroup.io/media/wp-content/uploads/2026/06/experiment-platform-choosing.jpg",
      "alt": "",
      "local_path": "attachments/3b9a334ff63b/images/001.jpg",
      "bytes": 425799,
      "downloaded": true
    },
    {
      "src": "https://assets.insightmediagroup.io/media/wp-content/uploads/2022/11/0TzJg4WZIvGBxx1Ez-scaled.jpg",
      "alt": "",
      "local_path": "attachments/3b9a334ff63b/images/002.jpg",
      "bytes": 194236,
      "downloaded": true
    },
    {
      "src": "https://assets.insightmediagroup.io/media/wp-content/uploads/2024/11/0aS-g0PMd910xTRQ_.jpg",
      "alt": "",
      "local_path": "attachments/3b9a334ff63b/images/003.jpg",
      "bytes": 312156,
      "downloaded": true
    },
    {
      "src": "https://assets.insightmediagroup.io/media/wp-content/uploads/2023/11/0icY0sysihxDHnuv8-scaled.jpg",
      "alt": "",
      "local_path": "attachments/3b9a334ff63b/images/004.jpg",
      "bytes": 281095,
      "downloaded": true
    },
    {
      "src": "https://assets.insightmediagroup.io/media/wp-content/uploads/2019/10/1-Z0mK_E-10Q9VbZoEDoPsg.gif",
      "alt": "",
      "local_path": "attachments/3b9a334ff63b/images/005.gif",
      "bytes": 97377,
      "downloaded": true
    },
    {
      "src": "https://assets.insightmediagroup.io/media/wp-content/uploads/2021/07/1skgznH9I1csP-y9poHYFAg.png",
      "alt": "",
      "local_path": "attachments/3b9a334ff63b/images/006.png",
      "bytes": 40118,
      "downloaded": true
    },
    {
      "src": "https://assets.insightmediagroup.io/media/wp-content/uploads/2022/10/0RTWEO3zVJ1RP_zii-scaled.jpg",
      "alt": "",
      "local_path": "attachments/3b9a334ff63b/images/007.jpg",
      "bytes": 793997,
      "downloaded": true
    },
    {
      "src": "https://assets.insightmediagroup.io/media/wp-content/uploads/2022/01/11Un0oaKJyummD-WoywtEFw.jpeg",
      "alt": "",
      "local_path": "attachments/3b9a334ff63b/images/008.jpeg",
      "bytes": 65476,
      "downloaded": true
    },
    {
      "src": "https://assets.insightmediagroup.io/media/wp-content/uploads/2024/03/09LNXKLsMdx8qoeQW-scaled.jpg",
      "alt": "",
      "local_path": "attachments/3b9a334ff63b/images/009.jpg",
      "bytes": 209494,
      "downloaded": true
    }
  ],
  "audio": [],
  "videos": [],
  "links": [],
  "retry_at": "2026-10-03T08:01:40",
  "repair_version": 2,
  "repaired_at": "2026-10-14T11:11:49Z",
  "source_url": "https://towardsdatascience.com/the-data-scientists-toolbox-leveraging-scikit-learn-s-top-features-for-success-d69a899267c5/",
  "delivery_status": "excluded_paid",
  "discovery_status": "excluded_paid",
  "missing_reason": "按原约定排除付费/会员全文"
}