{
  "source_file": "0930",
  "source_platform": "Dev.to",
  "author": "Vuk Rosić",
  "title_listed": "Python for Machine Learning: From Simple to Advanced",
  "keywords": "",
  "domain": "机器学习",
  "content_type": "深度技术解析",
  "is_paid_flag": "否",
  "url": "https://dev.to/vuk_rosic/python-for-machine-learning-from-simple-to-advanced-58b9",
  "publish_date": "2025-07-06",
  "corpus_stage": "",
  "notes": "",
  "id": "3c0bc0d58246",
  "collected_at": "2026-10-02T14:06:41",
  "title": "Python for Machine Learning: From Simple to Advanced - DEV Community",
  "body_markdown": "Part 1: The Core Idea\nMachine Learning = Finding patterns in data\nto make predictions.\n# Simple pattern: Height predicts weight\nheight\n=\n170\n# cm\nweight\n=\nheight\n*\n0.5\n# Simple rule: weight = height * 0.5\nprint\n(\nf\n\"\nPredicted weight:\n{\nweight\n}\nkg\n\"\n)\nEnter fullscreen mode\nExit fullscreen mode\nIntuition\n: We find mathematical relationships between inputs (height) and outputs (weight).\nPart 2: Working with Data\nimport\nnumpy\nas\nnp\n# Data is just numbers in arrays\nheights\n=\nnp\n.\narray\n([\n160\n,\n170\n,\n180\n,\n190\n])\n# Input features\nweights\n=\nnp\n.\narray\n([\n60\n,\n70\n,\n80\n,\n90\n])\n# Target values\nprint\n(\nf\n\"\nAverage height:\n{\nheights\n.\nmean\n()\n}\n\"\n)\nEnter fullscreen mode\nExit fullscreen mode\nWhat happened\n: NumPy arrays store our data efficiently and provide math operations.\nPart 3: Finding Patterns\n# Find the best line through data points\nslope\n=\nnp\n.\ncorrcoef\n(\nheights\n,\nweights\n)[\n0\n,\n1\n]\n# Correlation\nprint\n(\nf\n\"\nCorrelation:\n{\nslope\n:\n.\n2\nf\n}\n\"\n)\n# Close to 1 = strong pattern\nEnter fullscreen mode\nExit fullscreen mode\nIntuition\n: Correlation tells us how strongly two variables are related.\nPart 4: Making Predictions\n# Simple linear prediction\ndef\npredict_weight\n(\nheight\n):\nreturn\nheight\n*\n0.5\n-\n15\n# Our discovered pattern\nnew_height\n=\n175\npredicted\n=\npredict_weight\n(\nnew_height\n)\nprint\n(\nf\n\"\nHeight\n{\nnew_height\n}\ncm → Weight\n{\npredicted\n}\nkg\n\"\n)\nEnter fullscreen mode\nExit fullscreen mode\nKey insight\n: Once we find the pattern, we can predict new values.\nPart 5: Measuring Errors\n# How wrong are our predictions?\nactual\n=\nnp\n.\narray\n([\n65\n,\n75\n,\n85\n,\n95\n])\npredicted\n=\nnp\n.\narray\n([\n60\n,\n70\n,\n80\n,\n90\n])\nerror\n=\nnp\n.\nmean\n((\nactual\n-\npredicted\n)\n**\n2\n)\n# Mean Squared Error\nprint\n(\nf\n\"\nAverage error:\n{\nerror\n}\n\"\n)\nEnter fullscreen mode\nExit fullscreen mode\nWhy this matters\n: We need to know how good our predictions are.\nPart 6: Learning from Data\nfrom\nsklearn.linear_model\nimport\nLinearRegression\n# Let the computer find the pattern\nmodel\n=\nLinearRegression\n()\nmodel\n.\nfit\n(\nheights\n.\nreshape\n(\n-\n1\n,\n1\n),\nweights\n)\n# Learn from data\n# Make predictions\nprediction\n=\nmodel\n.\npredict\n([[\n175\n]])\nprint\n(\nf\n\"\nLearned prediction:\n{\nprediction\n[\n0\n]\n:\n.\n1\nf\n}\nkg\n\"\n)\nEnter fullscreen mode\nExit fullscreen mode\nMagic moment\n: The computer automatically finds the best line through our data.\nPart 7: Train/Test Split\nfrom\nsklearn.model_selection\nimport\ntrain_test_split\n# Split data: some for learning, some for testing\nX_train\n,\nX_test\n,\ny_train\n,\ny_test\n=\ntrain_test_split\n(\nheights\n.\nreshape\n(\n-\n1\n,\n1\n),\nweights\n,\ntest_size\n=\n0.5\n)\nmodel\n.\nfit\n(\nX_train\n,\ny_train\n)\n# Learn from training data\nscore\n=\nmodel\n.\nscore\n(\nX_test\n,\ny_test\n)\n# Test on unseen data\nprint\n(\nf\n\"\nModel accuracy:\n{\nscore\n:\n.\n2\nf\n}\n\"\n)\nEnter fullscreen mode\nExit fullscreen mode\nWhy split\n: We test on data the model hasn't seen to avoid cheating.\nPart 8: Multiple Features\n# Use multiple inputs for better predictions\ndata\n=\nnp\n.\narray\n([[\n170\n,\n25\n],\n# [height, age]\n[\n180\n,\n30\n],\n[\n160\n,\n20\n],\n[\n175\n,\n35\n]])\nweights\n=\nnp\n.\narray\n([\n70\n,\n80\n,\n60\n,\n75\n])\nmodel\n.\nfit\n(\ndata\n,\nweights\n)\n# Learn from height AND age\nprediction\n=\nmodel\n.\npredict\n([[\n172\n,\n28\n]])\n# Predict using both features\nEnter fullscreen mode\nExit fullscreen mode\nPower of ML\n: Use many features to make better predictions.\nPart 9: Classification vs Regression\n# Regression: Predict numbers (weight, price, temperature)\nregressor\n=\nLinearRegression\n()\n# Classification: Predict categories (spam/not spam, cat/dog)\nfrom\nsklearn.ensemble\nimport\nRandomForestClassifier\nclassifier\n=\nRandomForestClassifier\n()\n# Same interface, different problems\nEnter fullscreen mode\nExit fullscreen mode\nTwo main types\n: Predicting numbers vs predicting categories.\nPart 10: Real Data with Pandas\nimport\npandas\nas\npd\n# Load real data\ndf\n=\npd\n.\nDataFrame\n({\n'\nheight\n'\n:\n[\n160\n,\n170\n,\n180\n,\n190\n,\n165\n],\n'\nweight\n'\n:\n[\n60\n,\n70\n,\n80\n,\n90\n,\n65\n],\n'\nage\n'\n:\n[\n25\n,\n30\n,\n35\n,\n40\n,\n28\n]\n})\nprint\n(\ndf\n.\nhead\n())\n# See first few rows\nprint\n(\ndf\n.\ndescribe\n())\n# Get statistics\nEnter fullscreen mode\nExit fullscreen mode\nPandas power\n: Handle real-world messy data with ease.\nPart 11: Data Preprocessing\n# Clean and prepare data\ndf\n[\n'\nbmi\n'\n]\n=\ndf\n[\n'\nweight\n'\n]\n/\n(\ndf\n[\n'\nheight\n'\n]\n/\n100\n)\n**\n2\n# Create new feature\ndf\n=\ndf\n.\ndropna\n()\n# Remove missing values\n# Separate features and target\nX\n=\ndf\n[[\n'\nheight\n'\n,\n'\nage\n'\n]]\n# Features\ny\n=\ndf\n[\n'\nweight\n'\n]\n# Target\nEnter fullscreen mode\nExit fullscreen mode\nEssential step\n: Clean data before feeding to algorithms.\nPart 12: Different Algorithms\nfrom\nsklearn.tree\nimport\nDecisionTreeRegressor\nfrom\nsklearn.ensemble\nimport\nRandomForestRegressor\nfrom\nsklearn.svm\nimport\nSVR\n# Try different algorithms\nmodels\n=\n{\n'\nLinear\n'\n:\nLinearRegression\n(),\n'\nTree\n'\n:\nDecisionTreeRegressor\n(),\n'\nForest\n'\n:\nRandomForestRegressor\n(),\n'\nSVM\n'\n:\nSVR\n()\n}\n# Each finds patterns differently\nEnter fullscreen mode\nExit fullscreen mode\nAlgorithm zoo\n: Different algorithms good for different problems.\nPart 13: Model Evaluation\nfrom\nsklearn.metrics\nimport\nmean_squared_error\n,\nr2_score\n# Evaluate model performance\ny_pred\n=\nmodel\n.\npredict\n(\nX_test\n)\nrmse\n=\nnp\n.\nsqrt\n(\nmean_squared_error\n(\ny_test\n,\ny_pred\n))\nr2\n=\nr2_score\n(\ny_test\n,\ny_pred\n)\nprint\n(\nf\n\"\nRMSE:\n{\nrmse\n:\n.\n2\nf\n}\n\"\n)\n# Lower is better\nprint\n(\nf\n\"\nR²:\n{\nr2\n:\n.\n2\nf\n}\n\"\n)\n# Higher is better (max 1.0)\nEnter fullscreen mode\nExit fullscreen mode\nMetrics matter\n: Different ways to measure how good your model is.\nPart 14: Cross-Validation\nfrom\nsklearn.model_selection\nimport\ncross_val_score\n# Test model on multiple train/test splits\nscores\n=\ncross_val_score\n(\nmodel\n,\nX\n,\ny\n,\ncv\n=\n5\n)\n# 5-fold cross-validation\nprint\n(\nf\n\"\nAverage score:\n{\nscores\n.\nmean\n()\n:\n.\n2\nf\n}\n(+/-\n{\nscores\n.\nstd\n()\n*\n2\n:\n.\n2\nf\n}\n)\n\"\n)\nEnter fullscreen mode\nExit fullscreen mode\nRobust testing\n: Get more reliable estimate of model performance.\nPart 15: Feature Engineering\n# Create better features\ndf\n[\n'\nheight_squared\n'\n]\n=\ndf\n[\n'\nheight\n'\n]\n**\n2\ndf\n[\n'\nage_height\n'\n]\n=\ndf\n[\n'\nage\n'\n]\n*\ndf\n[\n'\nheight\n'\n]\n# Interaction feature\n# Sometimes simple transformations improve predictions\nEnter fullscreen mode\nExit fullscreen mode\nDomain knowledge\n: Understanding your data helps create better features.\nPart 16: Handling Categorical Data\n# Text categories need special handling\ndf\n[\n'\ngender\n'\n]\n=\n[\n'\nM\n'\n,\n'\nF\n'\n,\n'\nM\n'\n,\n'\nF\n'\n,\n'\nM\n'\n]\n# Convert to numbers\ndf_encoded\n=\npd\n.\nget_dummies\n(\ndf\n,\ncolumns\n=\n[\n'\ngender\n'\n])\nprint\n(\ndf_encoded\n.\ncolumns\n)\n# gender_F, gender_M columns\nEnter fullscreen mode\nExit fullscreen mode\nEncoding\n: Convert text to numbers for ML algorithms.\nPart 17: Scaling Features\nfrom\nsklearn.preprocessing\nimport\nStandardScaler\n# Scale features to similar ranges\nscaler\n=\nStandardScaler\n()\nX_scaled\n=\nscaler\n.\nfit_transform\n(\nX\n)\n# Mean=0, Std=1\n# Some algorithms work better with scaled data\nEnter fullscreen mode\nExit fullscreen mode\nWhy scale\n: Prevents features with large values from dominating.\nPart 18: Pipeline\nfrom\nsklearn.pipeline\nimport\nPipeline\n# Chain preprocessing and modeling\npipeline\n=\nPipeline\n([\n(\n'\nscaler\n'\n,\nStandardScaler\n()),\n(\n'\nmodel\n'\n,\nRandomForestRegressor\n())\n])\npipeline\n.\nfit\n(\nX_train\n,\ny_train\n)\n# Scaling and training in one step\nEnter fullscreen mode\nExit fullscreen mode\nClean workflow\n: Combines preprocessing and modeling automatically.\nPart 19: Hyperparameter Tuning\nfrom\nsklearn.model_selection\nimport\nGridSearchCV\n# Find best model settings\nparam_grid\n=\n{\n'\nn_estimators\n'\n:\n[\n50\n,\n100\n,\n200\n]}\ngrid_search\n=\nGridSearchCV\n(\nRandomForestRegressor\n(),\nparam_grid\n,\ncv\n=\n5\n)\ngrid_search\n.\nfit\n(\nX_train\n,\ny_train\n)\nprint\n(\nf\n\"\nBest params:\n{\ngrid_search\n.\nbest_params_\n}\n\"\n)\nEnter fullscreen mode\nExit fullscreen mode\nOptimization\n: Automatically find best settings for your model.\nPart 20: Putting It All Together\n# Complete ML workflow\ndef\nml_workflow\n(\ndata\n,\ntarget_column\n):\n# 1. Split features and target\nX\n=\ndata\n.\ndrop\n(\ntarget_column\n,\naxis\n=\n1\n)\ny\n=\ndata\n[\ntarget_column\n]\n# 2. Train/test split\nX_train\n,\nX_test\n,\ny_train\n,\ny_test\n=\ntrain_test_split\n(\nX\n,\ny\n,\ntest_size\n=\n0.2\n)\n# 3. Create pipeline\npipeline\n=\nPipeline\n([\n(\n'\nscaler\n'\n,\nStandardScaler\n()),\n(\n'\nmodel\n'\n,\nRandomForestRegressor\n())\n])\n# 4. Train model\npipeline\n.\nfit\n(\nX_train\n,\ny_train\n)\n# 5. Evaluate\nscore\n=\npipeline\n.\nscore\n(\nX_test\n,\ny_test\n)\nreturn\npipeline\n,\nscore\n# Usage\nmodel\n,\naccuracy\n=\nml_workflow\n(\ndf\n,\n'\nweight\n'\n)\nprint\n(\nf\n\"\nModel accuracy:\n{\naccuracy\n:\n.\n2\nf\n}\n\"\n)\nEnter fullscreen mode\nExit fullscreen mode\nComplete solution\n: From raw data to trained model in one function.\nKey Takeaways\nData = Numbers\n: Everything must be converted to numbers\nPatterns = Models\n: Algorithms find mathematical relationships\nTrain/Test = Validation\n: Always test on unseen data\nFeatures = Input\n: Good features make good predictions\nMetrics = Evaluation\n: Measure how well your model works\nPipeline = Workflow\n: Combine steps for clean, reproducible ML\nThis foundation gives you the tools to solve real machine learning problems!",
  "metadata": {
    "title": "Python for Machine Learning: From Simple to Advanced - DEV Community",
    "description": "Part 1: The Core Idea   Machine Learning = Finding patterns in data to make...",
    "keywords": "software, coding, development, engineering, inclusive, community",
    "author": null,
    "og:type": "article",
    "og:url": "https://dev.to/vuk_rosic/python-for-machine-learning-from-simple-to-advanced-58b9",
    "og:title": "Python for Machine Learning: From Simple to Advanced",
    "og:description": "Part 1: The Core Idea   Machine Learning = Finding patterns in data to make...",
    "og:site_name": "DEV Community",
    "og:image": "https://media2.dev.to/dynamic/image/width=1000,height=500,fit=cover,gravity=auto,format=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F47eqtmxlkve9o3ecnw7g.png",
    "twitter:site": "@thepracticaldev",
    "twitter:creator": "@VukRosic99",
    "twitter:title": "Python for Machine Learning: From Simple to Advanced",
    "twitter:description": "Part 1: The Core Idea   Machine Learning = Finding patterns in data to make...",
    "twitter:card": "summary_large_image",
    "twitter:widgets:new-embed-design": "on",
    "twitter:image:src": "https://media2.dev.to/dynamic/image/width=1000,height=500,fit=cover,gravity=auto,format=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F47eqtmxlkve9o3ecnw7g.png"
  },
  "paywall": {
    "listed_paid": false,
    "detected": false,
    "marker": "",
    "public_only": false,
    "policy": "付费/会员内容只保留页面公开可见部分，不绕过付费墙"
  },
  "crawl": {
    "success": true,
    "status_code": 200,
    "error": ""
  },
  "code_blocks": [
    {
      "file": "attachments/3c0bc0d58246/code/body-000.txt",
      "chars": 160,
      "language": "text"
    },
    {
      "file": "attachments/3c0bc0d58246/code/body-001.txt",
      "chars": 214,
      "language": "text"
    },
    {
      "file": "attachments/3c0bc0d58246/code/body-002.txt",
      "chars": 165,
      "language": "text"
    },
    {
      "file": "attachments/3c0bc0d58246/code/body-003.txt",
      "chars": 222,
      "language": "text"
    },
    {
      "file": "attachments/3c0bc0d58246/code/body-004.txt",
      "chars": 207,
      "language": "text"
    },
    {
      "file": "attachments/3c0bc0d58246/code/body-005.txt",
      "chars": 284,
      "language": "text"
    },
    {
      "file": "attachments/3c0bc0d58246/code/body-006.txt",
      "chars": 357,
      "language": "text"
    },
    {
      "file": "attachments/3c0bc0d58246/code/body-007.txt",
      "chars": 338,
      "language": "text"
    },
    {
      "file": "attachments/3c0bc0d58246/code/body-008.txt",
      "chars": 281,
      "language": "text"
    },
    {
      "file": "attachments/3c0bc0d58246/code/body-009.txt",
      "chars": 249,
      "language": "text"
    },
    {
      "file": "attachments/3c0bc0d58246/code/body-010.txt",
      "chars": 244,
      "language": "text"
    },
    {
      "file": "attachments/3c0bc0d58246/code/body-011.txt",
      "chars": 329,
      "language": "text"
    },
    {
      "file": "attachments/3c0bc0d58246/code/body-012.txt",
      "chars": 303,
      "language": "text"
    },
    {
      "file": "attachments/3c0bc0d58246/code/body-013.txt",
      "chars": 239,
      "language": "text"
    },
    {
      "file": "attachments/3c0bc0d58246/code/body-014.txt",
      "chars": 189,
      "language": "text"
    },
    {
      "file": "attachments/3c0bc0d58246/code/body-015.txt",
      "chars": 211,
      "language": "text"
    },
    {
      "file": "attachments/3c0bc0d58246/code/body-016.txt",
      "chars": 211,
      "language": "text"
    },
    {
      "file": "attachments/3c0bc0d58246/code/body-017.txt",
      "chars": 240,
      "language": "text"
    },
    {
      "file": "attachments/3c0bc0d58246/code/body-018.txt",
      "chars": 278,
      "language": "text"
    },
    {
      "file": "attachments/3c0bc0d58246/code/body-019.txt",
      "chars": 649,
      "language": "text"
    }
  ],
  "images": [],
  "audio": [],
  "videos": [],
  "links": [],
  "repair_version": 2,
  "repaired_at": "2026-10-14T10:50:25Z",
  "source_url": "https://dev.to/vuk_rosic/python-for-machine-learning-from-simple-to-advanced-58b9",
  "papers": [],
  "actual_video_files": [],
  "body_chars": 8980,
  "expected_body_images": 0,
  "discovery_status": "ok",
  "delivery_status": "ok",
  "missing_reason": "",
  "raw_html": "attachments/3c0bc0d58246/pages/source.html",
  "local_html": "attachments/3c0bc0d58246/pages/article.html",
  "body_base_path": "attachments/3c0bc0d58246/pages/",
  "body_markdown_path": "attachments/3c0bc0d58246/pages/article.md"
}