You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
289 lines
25 KiB
289 lines
25 KiB
<!--
|
|
CO_OP_TRANSLATOR_METADATA:
|
|
{
|
|
"original_hash": "aaf391d922bd6de5efba871d514c6d47",
|
|
"translation_date": "2025-09-06T07:10:09+00:00",
|
|
"source_file": "4-Classification/1-Introduction/README.md",
|
|
"language_code": "pa"
|
|
}
|
|
-->
|
|
# ਕਲਾਸੀਫਿਕੇਸ਼ਨ ਦਾ ਪਰਚੇਅ
|
|
|
|
ਇਨ੍ਹਾਂ ਚਾਰ ਪਾਠਾਂ ਵਿੱਚ, ਤੁਸੀਂ ਕਲਾਸਿਕ ਮਸ਼ੀਨ ਲਰਨਿੰਗ ਦੇ ਇੱਕ ਮੂਲ ਧਿਆਨ - _ਕਲਾਸੀਫਿਕੇਸ਼ਨ_ - ਦੀ ਖੋਜ ਕਰੋਗੇ। ਅਸੀਂ ਏਸ਼ੀਆ ਅਤੇ ਭਾਰਤ ਦੇ ਸਾਰੇ ਸ਼ਾਨਦਾਰ ਖਾਣਿਆਂ ਬਾਰੇ ਡੇਟਾਸੈਟ ਨਾਲ ਵੱਖ-ਵੱਖ ਕਲਾਸੀਫਿਕੇਸ਼ਨ ਐਲਗੋਰਿਥਮ ਦੀ ਵਰਤੋਂ ਕਰਨ ਦਾ ਤਰੀਕਾ ਸਿੱਖਾਂਗੇ। ਉਮੀਦ ਹੈ ਕਿ ਤੁਸੀਂ ਭੁੱਖੇ ਹੋ!
|
|
|
|

|
|
|
|
> ਇਨ੍ਹਾਂ ਪਾਠਾਂ ਵਿੱਚ ਪੈਨ-ਏਸ਼ੀਆਈ ਖਾਣਿਆਂ ਦਾ ਜਸ਼ਨ ਮਨਾਓ! ਚਿੱਤਰ [Jen Looper](https://twitter.com/jenlooper) ਦੁਆਰਾ
|
|
|
|
ਕਲਾਸੀਫਿਕੇਸ਼ਨ [ਸੁਪਰਵਾਈਜ਼ਡ ਲਰਨਿੰਗ](https://wikipedia.org/wiki/Supervised_learning) ਦਾ ਇੱਕ ਰੂਪ ਹੈ ਜੋ ਰਿਗ੍ਰੈਸ਼ਨ ਤਕਨੀਕਾਂ ਨਾਲ ਕਾਫ਼ੀ ਸਮਾਨਤਾ ਰੱਖਦਾ ਹੈ। ਜੇ ਮਸ਼ੀਨ ਲਰਨਿੰਗ ਸਾਰੇ ਡੇਟਾਸੈਟ ਦੀ ਵਰਤੋਂ ਕਰਕੇ ਮੁੱਲ ਜਾਂ ਚੀਜ਼ਾਂ ਦੇ ਨਾਮਾਂ ਦੀ ਪੇਸ਼ਗੋਈ ਕਰਨ ਬਾਰੇ ਹੈ, ਤਾਂ ਕਲਾਸੀਫਿਕੇਸ਼ਨ ਆਮ ਤੌਰ 'ਤੇ ਦੋ ਸਮੂਹਾਂ ਵਿੱਚ ਵੰਡਿਆ ਜਾਂਦਾ ਹੈ: _ਬਾਈਨਰੀ ਕਲਾਸੀਫਿਕੇਸ਼ਨ_ ਅਤੇ _ਮਲਟੀਕਲਾਸ ਕਲਾਸੀਫਿਕੇਸ਼ਨ_।
|
|
|
|
[](https://youtu.be/eg8DJYwdMyg "ਕਲਾਸੀਫਿਕੇਸ਼ਨ ਦਾ ਪਰਚੇਅ")
|
|
|
|
> 🎥 ਉਪਰੋਕਤ ਚਿੱਤਰ 'ਤੇ ਕਲਿਕ ਕਰੋ: MIT ਦੇ John Guttag ਕਲਾਸੀਫਿਕੇਸ਼ਨ ਦਾ ਪਰਚੇਅ ਦਿੰਦੇ ਹਨ
|
|
|
|
ਯਾਦ ਰੱਖੋ:
|
|
|
|
- **ਲਿਨੀਅਰ ਰਿਗ੍ਰੈਸ਼ਨ** ਨੇ ਤੁਹਾਨੂੰ ਵੈਰੀਏਬਲਾਂ ਦੇ ਵਿਚਕਾਰ ਸੰਬੰਧਾਂ ਦੀ ਪੇਸ਼ਗੋਈ ਕਰਨ ਵਿੱਚ ਮਦਦ ਕੀਤੀ ਅਤੇ ਇਹ ਪਤਾ ਲਗਾਉਣ ਵਿੱਚ ਸਹੀ ਪੇਸ਼ਗੋਈ ਕੀਤੀ ਕਿ ਨਵਾਂ ਡੇਟਾਪੌਇੰਟ ਉਸ ਲਾਈਨ ਦੇ ਸੰਬੰਧ ਵਿੱਚ ਕਿੱਥੇ ਆਵੇਗਾ। ਇਸ ਲਈ, ਤੁਸੀਂ ਪੇਸ਼ਗੋਈ ਕਰ ਸਕਦੇ ਹੋ ਕਿ _ਸਿਤੰਬਰ ਦੇ ਮੁਕਾਬਲੇ ਦਸੰਬਰ ਵਿੱਚ ਕਦੂ ਦੀ ਕੀਮਤ ਕੀ ਹੋਵੇਗੀ_।
|
|
- **ਲੌਜਿਸਟਿਕ ਰਿਗ੍ਰੈਸ਼ਨ** ਨੇ ਤੁਹਾਨੂੰ "ਬਾਈਨਰੀ ਸ਼੍ਰੇਣੀਆਂ" ਦੀ ਖੋਜ ਕਰਨ ਵਿੱਚ ਮਦਦ ਕੀਤੀ: ਇਸ ਕੀਮਤ 'ਤੇ, _ਕੀ ਇਹ ਕਦੂ ਸੰਤਰੀ ਹੈ ਜਾਂ ਨਾ-ਸੰਤਰੀ_?
|
|
|
|
ਕਲਾਸੀਫਿਕੇਸ਼ਨ ਵੱਖ-ਵੱਖ ਐਲਗੋਰਿਥਮ ਦੀ ਵਰਤੋਂ ਕਰਦਾ ਹੈ ਤਾਂ ਜੋ ਡੇਟਾਪੌਇੰਟ ਦੇ ਲੇਬਲ ਜਾਂ ਕਲਾਸ ਨੂੰ ਨਿਰਧਾਰਤ ਕਰਨ ਦੇ ਹੋਰ ਤਰੀਕੇ ਲੱਭੇ ਜਾ ਸਕਣ। ਆਓ ਇਸ ਖਾਣੇ ਦੇ ਡੇਟਾ ਨਾਲ ਕੰਮ ਕਰੀਏ ਤਾਂ ਜੋ ਦੇਖ ਸਕੀਏ ਕਿ ਸਮੱਗਰੀ ਦੇ ਇੱਕ ਸਮੂਹ ਨੂੰ ਦੇਖ ਕੇ, ਅਸੀਂ ਇਸ ਦੇ ਮੂਲ ਖਾਣੇ ਦੀ ਪਛਾਣ ਕਰ ਸਕਦੇ ਹਾਂ।
|
|
|
|
## [ਪ੍ਰੀ-ਪਾਠ ਕਵਿਜ਼](https://ff-quizzes.netlify.app/en/ml/)
|
|
|
|
> ### [ਇਹ ਪਾਠ R ਵਿੱਚ ਉਪਲਬਧ ਹੈ!](../../../../4-Classification/1-Introduction/solution/R/lesson_10.html)
|
|
|
|
### ਪਰਚੇਅ
|
|
|
|
ਕਲਾਸੀਫਿਕੇਸ਼ਨ ਮਸ਼ੀਨ ਲਰਨਿੰਗ ਖੋਜਕਰਤਾ ਅਤੇ ਡੇਟਾ ਸਾਇੰਟਿਸਟ ਦੀਆਂ ਮੂਲ ਗਤੀਵਿਧੀਆਂ ਵਿੱਚੋਂ ਇੱਕ ਹੈ। ਇੱਕ ਬਾਈਨਰੀ ਮੁੱਲ ("ਕੀ ਇਹ ਈਮੇਲ ਸਪੈਮ ਹੈ ਜਾਂ ਨਹੀਂ?") ਦੀ ਬੁਨਿਆਦੀ ਕਲਾਸੀਫਿਕੇਸ਼ਨ ਤੋਂ ਲੈ ਕੇ ਕੰਪਿਊਟਰ ਵਿਜ਼ਨ ਦੀ ਵਰਤੋਂ ਕਰਕੇ ਜਟਿਲ ਚਿੱਤਰ ਕਲਾਸੀਫਿਕੇਸ਼ਨ ਅਤੇ ਸੈਗਮੈਂਟੇਸ਼ਨ ਤੱਕ, ਡੇਟਾ ਨੂੰ ਕਲਾਸਾਂ ਵਿੱਚ ਵੰਡਣਾ ਅਤੇ ਇਸ ਤੋਂ ਸਵਾਲ ਪੁੱਛਣਾ ਹਮੇਸ਼ਾ ਲਾਭਦਾਇਕ ਹੁੰਦਾ ਹੈ।
|
|
|
|
ਇਸ ਪ੍ਰਕਿਰਿਆ ਨੂੰ ਹੋਰ ਵਿਗਿਆਨਕ ਢੰਗ ਨਾਲ ਵਿਆਖਿਆ ਕਰਨ ਲਈ, ਤੁਹਾਡਾ ਕਲਾਸੀਫਿਕੇਸ਼ਨ ਵਿਧੀ ਇੱਕ ਪੇਸ਼ਗੋਈ ਮਾਡਲ ਬਣਾਉਂਦੀ ਹੈ ਜੋ ਤੁਹਾਨੂੰ ਇਨਪੁਟ ਵੈਰੀਏਬਲਾਂ ਅਤੇ ਆਉਟਪੁਟ ਵੈਰੀਏਬਲਾਂ ਦੇ ਵਿਚਕਾਰ ਸੰਬੰਧ ਨੂੰ ਨਕਸ਼ੇ ਵਿੱਚ ਦਰਸਾਉਣ ਯੋਗ ਬਣਾਉਂਦੀ ਹੈ।
|
|
|
|

|
|
|
|
> ਬਾਈਨਰੀ ਵਸ. ਮਲਟੀਕਲਾਸ ਸਮੱਸਿਆਵਾਂ ਜਿਨ੍ਹਾਂ ਨੂੰ ਕਲਾਸੀਫਿਕੇਸ਼ਨ ਐਲਗੋਰਿਥਮ ਹੱਲ ਕਰ ਸਕਦੇ ਹਨ। ਇਨਫੋਗ੍ਰਾਫਿਕ [Jen Looper](https://twitter.com/jenlooper) ਦੁਆਰਾ
|
|
|
|
ਡੇਟਾ ਨੂੰ ਸਾਫ਼ ਕਰਨ, ਇਸ ਨੂੰ ਵਿਜ਼ੁਅਲਾਈਜ਼ ਕਰਨ ਅਤੇ ਇਸ ਨੂੰ ML ਕੰਮਾਂ ਲਈ ਤਿਆਰ ਕਰਨ ਦੀ ਪ੍ਰਕਿਰਿਆ ਸ਼ੁਰੂ ਕਰਨ ਤੋਂ ਪਹਿਲਾਂ, ਆਓ ਸਿੱਖੀਏ ਕਿ ਕਿਵੇਂ ਮਸ਼ੀਨ ਲਰਨਿੰਗ ਨੂੰ ਡੇਟਾ ਨੂੰ ਕਲਾਸੀਫਾਈ ਕਰਨ ਲਈ ਲਾਭਦਾਇਕ ਬਣਾਇਆ ਜਾ ਸਕਦਾ ਹੈ।
|
|
|
|
[ਅੰਕੜੇ](https://wikipedia.org/wiki/Statistical_classification) ਤੋਂ ਲਿਆ ਗਿਆ, ਕਲਾਸੀਫਿਕੇਸ਼ਨ ਕਲਾਸਿਕ ਮਸ਼ੀਨ ਲਰਨਿੰਗ ਦੀ ਵਰਤੋਂ ਕਰਦਾ ਹੈ, ਜਿਵੇਂ ਕਿ `smoker`, `weight`, ਅਤੇ `age` ਵਰਗੇ ਫੀਚਰਾਂ ਦੀ ਵਰਤੋਂ ਕਰਕੇ _X ਬਿਮਾਰੀ ਦੇ ਵਿਕਾਸ ਦੀ ਸੰਭਾਵਨਾ_ ਦਾ ਨਿਰਧਾਰਨ ਕਰਨਾ। ਇੱਕ ਸੁਪਰਵਾਈਜ਼ਡ ਲਰਨਿੰਗ ਤਕਨੀਕ ਦੇ ਤੌਰ 'ਤੇ ਜੋ ਤੁਸੀਂ ਪਹਿਲਾਂ ਕੀਤੇ ਰਿਗ੍ਰੈਸ਼ਨ ਅਭਿਆਸਾਂ ਦੇ ਸਮਾਨ ਹੈ, ਤੁਹਾਡਾ ਡੇਟਾ ਲੇਬਲ ਕੀਤਾ ਜਾਂਦਾ ਹੈ ਅਤੇ ML ਐਲਗੋਰਿਥਮ ਉਹਨਾਂ ਲੇਬਲਾਂ ਦੀ ਵਰਤੋਂ ਕਰਦੇ ਹਨ ਤਾਂ ਜੋ ਡੇਟਾਸੈਟ ਦੇ ਕਲਾਸਾਂ (ਜਾਂ 'ਫੀਚਰਾਂ') ਦੀ ਪੇਸ਼ਗੋਈ ਅਤੇ ਨਿਰਧਾਰਨ ਕੀਤਾ ਜਾ ਸਕੇ ਅਤੇ ਉਨ੍ਹਾਂ ਨੂੰ ਇੱਕ ਸਮੂਹ ਜਾਂ ਨਤੀਜੇ ਵਿੱਚ ਸੌਂਪਿਆ ਜਾ ਸਕੇ।
|
|
|
|
✅ ਇੱਕ ਖਾਣੇ ਦੇ ਡੇਟਾਸੈਟ ਦੀ ਕਲਪਨਾ ਕਰਨ ਲਈ ਇੱਕ ਪਲ ਲਓ। ਇੱਕ ਮਲਟੀਕਲਾਸ ਮਾਡਲ ਕੀ ਜਵਾਬ ਦੇ ਸਕਦਾ ਹੈ? ਇੱਕ ਬਾਈਨਰੀ ਮਾਡਲ ਕੀ ਜਵਾਬ ਦੇ ਸਕਦਾ ਹੈ? ਜੇ ਤੁਸੀਂ ਇਹ ਪਤਾ ਲਗਾਉਣਾ ਚਾਹੁੰਦੇ ਹੋ ਕਿ ਦਿੱਤੇ ਗਏ ਖਾਣੇ ਵਿੱਚ ਮੀਥੀ ਦਾਣਾ ਵਰਤਿਆ ਜਾਂਦਾ ਹੈ ਜਾਂ ਨਹੀਂ, ਤਾਂ ਕੀ ਹੋਵੇਗਾ? ਜੇ ਤੁਸੀਂ ਇਹ ਦੇਖਣਾ ਚਾਹੁੰਦੇ ਹੋ ਕਿ, ਸਟਾਰ ਐਨੀਸ, ਆਰਟੀਚੋਕ, ਫੁੱਲਗੋਭੀ, ਅਤੇ ਹਾਰਸਰੈਡਿਸ਼ ਨਾਲ ਭਰੇ ਇੱਕ ਕਿਰਾਣੇ ਬੈਗ ਦੇ ਤੌਹਫ਼ੇ ਦੇ ਨਾਲ, ਤੁਸੀਂ ਇੱਕ ਆਮ ਭਾਰਤੀ ਖਾਣਾ ਬਣਾਉਣ ਦੇ ਯੋਗ ਹੋ ਸਕਦੇ ਹੋ?
|
|
|
|
[](https://youtu.be/GuTeDbaNoEU "ਪ੍ਰੇਸ਼ਾਨ ਕਰਨ ਵਾਲੇ ਰਹੱਸਮਈ ਬਾਸਕਟ")
|
|
|
|
> 🎥 ਉਪਰੋਕਤ ਚਿੱਤਰ 'ਤੇ ਕਲਿਕ ਕਰੋ। 'Chopped' ਸ਼ੋਅ ਦਾ ਸਾਰ ਇਹ ਹੈ ਕਿ 'ਰਹੱਸਮਈ ਬਾਸਕਟ' ਜਿੱਥੇ ਸ਼ੈਫ਼ਾਂ ਨੂੰ ਸਮਰਥਨ ਦੇ ਤੌਰ 'ਤੇ ਚੁਣੇ ਗਏ ਸਮੱਗਰੀ ਨਾਲ ਕੁਝ ਖਾਣਾ ਬਣਾਉਣਾ ਪੈਂਦਾ ਹੈ। ਨਿਸ਼ਚਿਤ ਤੌਰ 'ਤੇ ਇੱਕ ML ਮਾਡਲ ਮਦਦ ਕਰਦਾ!
|
|
|
|
## ਹੈਲੋ 'ਕਲਾਸੀਫਾਇਰ'
|
|
|
|
ਜੋ ਸਵਾਲ ਅਸੀਂ ਇਸ ਖਾਣੇ ਦੇ ਡੇਟਾਸੈਟ ਤੋਂ ਪੁੱਛਣਾ ਚਾਹੁੰਦੇ ਹਾਂ, ਉਹ ਅਸਲ ਵਿੱਚ ਇੱਕ **ਮਲਟੀਕਲਾਸ ਸਵਾਲ** ਹੈ, ਕਿਉਂਕਿ ਸਾਡੇ ਕੋਲ ਕੰਮ ਕਰਨ ਲਈ ਕਈ ਸੰਭਾਵਿਤ ਰਾਸ਼ਟਰੀ ਖਾਣੇ ਹਨ। ਦਿੱਤੇ ਗਏ ਸਮੱਗਰੀ ਦੇ ਬੈਚ ਦੇ ਅਧਾਰ 'ਤੇ, ਇਹ ਡੇਟਾ ਕਿਹੜੇ ਕਈ ਕਲਾਸਾਂ ਵਿੱਚ ਫਿੱਟ ਹੋਵੇਗਾ?
|
|
|
|
Scikit-learn ਵੱਖ-ਵੱਖ ਐਲਗੋਰਿਥਮ ਪੇਸ਼ ਕਰਦਾ ਹੈ ਜੋ ਤੁਸੀਂ ਡੇਟਾ ਨੂੰ ਕਲਾਸੀਫਾਈ ਕਰਨ ਲਈ ਵਰਤ ਸਕਦੇ ਹੋ, ਇਹ ਇਸ ਗੱਲ 'ਤੇ ਨਿਰਭਰ ਕਰਦਾ ਹੈ ਕਿ ਤੁਸੀਂ ਕਿਹੜੀ ਸਮੱਸਿਆ ਹੱਲ ਕਰਨਾ ਚਾਹੁੰਦੇ ਹੋ। ਅਗਲੇ ਦੋ ਪਾਠਾਂ ਵਿੱਚ, ਤੁਸੀਂ ਇਨ੍ਹਾਂ ਐਲਗੋਰਿਥਮਾਂ ਬਾਰੇ ਸਿੱਖੋਗੇ।
|
|
|
|
## ਅਭਿਆਸ - ਆਪਣੇ ਡੇਟਾ ਨੂੰ ਸਾਫ਼ ਅਤੇ ਸੰਤੁਲਿਤ ਕਰੋ
|
|
|
|
ਇਸ ਪ੍ਰੋਜੈਕਟ ਨੂੰ ਸ਼ੁਰੂ ਕਰਨ ਤੋਂ ਪਹਿਲਾਂ ਪਹਿਲਾ ਕੰਮ, ਤੁਹਾਡੇ ਡੇਟਾ ਨੂੰ ਸਾਫ਼ ਅਤੇ **ਸੰਤੁਲਿਤ** ਕਰਨਾ ਹੈ ਤਾਂ ਜੋ ਵਧੀਆ ਨਤੀਜੇ ਪ੍ਰਾਪਤ ਕੀਤੇ ਜਾ ਸਕਣ। ਇਸ ਫੋਲਡਰ ਦੇ ਰੂਟ ਵਿੱਚ ਖਾਲੀ _notebook.ipynb_ ਫਾਈਲ ਨਾਲ ਸ਼ੁਰੂ ਕਰੋ।
|
|
|
|
ਸਭ ਤੋਂ ਪਹਿਲਾਂ [imblearn](https://imbalanced-learn.org/stable/) ਨੂੰ ਇੰਸਟਾਲ ਕਰੋ। ਇਹ Scikit-learn ਪੈਕੇਜ ਹੈ ਜੋ ਤੁਹਾਨੂੰ ਡੇਟਾ ਨੂੰ ਵਧੀਆ ਸੰਤੁਲਿਤ ਕਰਨ ਦੀ ਆਗਿਆ ਦੇਵੇਗਾ (ਤੁਸੀਂ ਇਸ ਕੰਮ ਬਾਰੇ ਇੱਕ ਮਿੰਟ ਵਿੱਚ ਹੋਰ ਸਿੱਖੋਗੇ)।
|
|
|
|
1. `imblearn` ਨੂੰ ਇੰਸਟਾਲ ਕਰਨ ਲਈ, `pip install` ਚਲਾਓ, ਇਸ ਤਰ੍ਹਾਂ:
|
|
|
|
```python
|
|
pip install imblearn
|
|
```
|
|
|
|
1. ਆਪਣੇ ਡੇਟਾ ਨੂੰ ਇੰਪੋਰਟ ਕਰਨ ਅਤੇ ਇਸ ਨੂੰ ਵਿਜ਼ੁਅਲਾਈਜ਼ ਕਰਨ ਲਈ ਜ਼ਰੂਰੀ ਪੈਕੇਜ ਇੰਪੋਰਟ ਕਰੋ, `SMOTE` ਨੂੰ `imblearn` ਤੋਂ ਵੀ ਇੰਪੋਰਟ ਕਰੋ।
|
|
|
|
```python
|
|
import pandas as pd
|
|
import matplotlib.pyplot as plt
|
|
import matplotlib as mpl
|
|
import numpy as np
|
|
from imblearn.over_sampling import SMOTE
|
|
```
|
|
|
|
ਹੁਣ ਤੁਸੀਂ ਅਗਲੇ ਕਦਮ ਵਿੱਚ ਡੇਟਾ ਨੂੰ ਇੰਪੋਰਟ ਕਰਨ ਲਈ ਤਿਆਰ ਹੋ।
|
|
|
|
1. ਅਗਲਾ ਕੰਮ ਡੇਟਾ ਨੂੰ ਇੰਪੋਰਟ ਕਰਨਾ ਹੋਵੇਗਾ:
|
|
|
|
```python
|
|
df = pd.read_csv('../data/cuisines.csv')
|
|
```
|
|
|
|
`read_csv()` ਦੀ ਵਰਤੋਂ _cusines.csv_ ਫਾਈਲ ਦੀ ਸਮੱਗਰੀ ਨੂੰ ਪੜ੍ਹਨ ਲਈ ਕੀਤੀ ਜਾਵੇਗੀ ਅਤੇ ਇਸ ਨੂੰ ਵੈਰੀਏਬਲ `df` ਵਿੱਚ ਰੱਖਿਆ ਜਾਵੇਗਾ।
|
|
|
|
1. ਡੇਟਾ ਦੇ ਆਕਾਰ ਦੀ ਜਾਂਚ ਕਰੋ:
|
|
|
|
```python
|
|
df.head()
|
|
```
|
|
|
|
ਪਹਿਲੇ ਪੰਜ ਪੰਕਤਾਂ ਇਸ ਤਰ੍ਹਾਂ ਦਿਖਾਈ ਦਿੰਦੇ ਹਨ:
|
|
|
|
```output
|
|
| | Unnamed: 0 | cuisine | almond | angelica | anise | anise_seed | apple | apple_brandy | apricot | armagnac | ... | whiskey | white_bread | white_wine | whole_grain_wheat_flour | wine | wood | yam | yeast | yogurt | zucchini |
|
|
| --- | ---------- | ------- | ------ | -------- | ----- | ---------- | ----- | ------------ | ------- | -------- | --- | ------- | ----------- | ---------- | ----------------------- | ---- | ---- | --- | ----- | ------ | -------- |
|
|
| 0 | 65 | indian | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | ... | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
|
|
| 1 | 66 | indian | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | ... | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
|
|
| 2 | 67 | indian | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | ... | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
|
|
| 3 | 68 | indian | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | ... | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
|
|
| 4 | 69 | indian | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | ... | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 |
|
|
```
|
|
|
|
1. ਇਸ ਡੇਟਾ ਬਾਰੇ ਜਾਣਕਾਰੀ ਪ੍ਰਾਪਤ ਕਰਨ ਲਈ `info()` ਕਾਲ ਕਰੋ:
|
|
|
|
```python
|
|
df.info()
|
|
```
|
|
|
|
ਤੁਹਾਡਾ ਆਉਟਪੁੱਟ ਇਸ ਤਰ੍ਹਾਂ ਦਿਖਾਈ ਦਿੰਦਾ ਹੈ:
|
|
|
|
```output
|
|
<class 'pandas.core.frame.DataFrame'>
|
|
RangeIndex: 2448 entries, 0 to 2447
|
|
Columns: 385 entries, Unnamed: 0 to zucchini
|
|
dtypes: int64(384), object(1)
|
|
memory usage: 7.2+ MB
|
|
```
|
|
|
|
## ਅਭਿਆਸ - ਖਾਣਿਆਂ ਬਾਰੇ ਸਿੱਖਣਾ
|
|
|
|
ਹੁਣ ਕੰਮ ਹੋਰ ਦਿਲਚਸਪ ਹੋਣਾ ਸ਼ੁਰੂ ਹੁੰਦਾ ਹੈ। ਆਓ ਖਾਣੇ ਦੇ ਅਨੁਸਾਰ ਡੇਟਾ ਦੇ ਵੰਡਨ ਦੀ ਖੋਜ ਕਰੀਏ।
|
|
|
|
1. `barh()` ਕਾਲ ਕਰਕੇ ਡੇਟਾ ਨੂੰ ਬਾਰਾਂ ਵਜੋਂ ਪਲਾਟ ਕਰੋ:
|
|
|
|
```python
|
|
df.cuisine.value_counts().plot.barh()
|
|
```
|
|
|
|

|
|
|
|
ਖਾਣਿਆਂ ਦੀ ਗਿਣਤੀ ਸੀਮਿਤ ਹੈ, ਪਰ ਡੇਟਾ ਦਾ ਵੰਡਨ ਅਸਮਾਨ ਹੈ। ਤੁਸੀਂ ਇਸ ਨੂੰ ਠੀਕ ਕਰ ਸਕਦੇ ਹੋ! ਇਸ ਨੂੰ ਠੀਕ ਕਰਨ ਤੋਂ ਪਹਿਲਾਂ, ਹੋਰ ਖੋਜ ਕਰੋ।
|
|
|
|
1. ਪਤਾ ਕਰੋ ਕਿ ਹਰ ਖਾਣੇ ਲਈ ਕਿੰਨਾ ਡੇਟਾ ਉਪਲਬਧ ਹੈ ਅਤੇ ਇਸ ਨੂੰ ਪ੍ਰਿੰਟ ਕਰੋ:
|
|
|
|
```python
|
|
thai_df = df[(df.cuisine == "thai")]
|
|
japanese_df = df[(df.cuisine == "japanese")]
|
|
chinese_df = df[(df.cuisine == "chinese")]
|
|
indian_df = df[(df.cuisine == "indian")]
|
|
korean_df = df[(df.cuisine == "korean")]
|
|
|
|
print(f'thai df: {thai_df.shape}')
|
|
print(f'japanese df: {japanese_df.shape}')
|
|
print(f'chinese df: {chinese_df.shape}')
|
|
print(f'indian df: {indian_df.shape}')
|
|
print(f'korean df: {korean_df.shape}')
|
|
```
|
|
|
|
ਆਉਟਪੁੱਟ ਇਸ ਤਰ੍ਹਾਂ ਦਿਖਾਈ ਦਿੰਦਾ ਹੈ:
|
|
|
|
```output
|
|
thai df: (289, 385)
|
|
japanese df: (320, 385)
|
|
chinese df: (442, 385)
|
|
indian df: (598, 385)
|
|
korean df: (799, 385)
|
|
```
|
|
|
|
## ਸਮੱਗਰੀ ਦੀ ਖੋਜ
|
|
|
|
ਹੁਣ ਤੁਸੀਂ ਡੇਟਾ ਵਿੱਚ ਹੋਰ ਗਹਿਰਾਈ ਵਿੱਚ ਜਾ ਸਕਦੇ ਹੋ ਅਤੇ ਸਿੱਖ ਸਕਦੇ ਹੋ ਕਿ ਹਰ ਖਾਣੇ ਲਈ ਆਮ ਸਮੱਗਰੀ ਕੀ ਹਨ। ਤੁਸੀਂ ਮੁੜ-ਮੁੜ ਆਉਣ ਵਾਲੇ ਡੇਟਾ ਨੂੰ ਸਾਫ਼ ਕਰਨਾ ਚਾਹੁੰਦੇ ਹੋ ਜੋ ਖਾਣਿਆਂ ਦੇ ਵਿਚਕਾਰ ਗੁੰਝਲ ਪੈਦਾ ਕਰਦਾ ਹੈ, ਤਾਂ ਆਓ ਇਸ ਸਮੱਸਿਆ ਬਾਰੇ ਸਿੱਖੀਏ।
|
|
|
|
1. Python ਵਿੱਚ ਇੱਕ ਫੰਕਸ਼ਨ `create_ingredient()` ਬਣਾਓ ਤਾਂ ਜੋ ਇੱਕ ਸਮੱਗਰੀ ਡੇਟਾਫਰੇਮ ਬਣਾਇਆ ਜਾ ਸਕੇ। ਇਹ ਫੰਕਸ਼ਨ ਇੱਕ ਅਣਸਹਾਇਕ ਕਾਲਮ ਨੂੰ ਹਟਾ ਕੇ ਸ਼ੁਰੂ ਕਰੇਗਾ ਅਤੇ ਗਿਣਤੀ ਦੇ ਅਨੁਸਾਰ ਸਮੱਗਰੀ ਨੂੰ ਸਾਰਟ ਕਰੇਗਾ:
|
|
|
|
```python
|
|
def create_ingredient_df(df):
|
|
ingredient_df = df.T.drop(['cuisine','Unnamed: 0']).sum(axis=1).to_frame('value')
|
|
ingredient_df = ingredient_df[(ingredient_df.T != 0).any()]
|
|
ingredient_df = ingredient_df.sort_values(by='value', ascending=False,
|
|
inplace=False)
|
|
return ingredient_df
|
|
```
|
|
|
|
ਹੁਣ ਤੁਸੀਂ ਇਸ ਫੰਕਸ਼ਨ ਦੀ ਵਰਤੋਂ ਕਰਕੇ ਹਰ ਖਾਣੇ ਲਈ ਸਭ ਤੋਂ ਪ੍ਰਸਿੱਧ ਦਸ ਸਮੱਗਰੀਆਂ ਦਾ ਅੰਦਾਜ਼ਾ ਲਗਾ ਸਕਦੇ ਹੋ।
|
|
|
|
1. `create_ingredient()` ਕਾਲ ਕਰੋ ਅਤੇ `barh()` ਕਾਲ ਕਰਕੇ ਇਸ ਨੂੰ ਪਲਾਟ ਕਰੋ:
|
|
|
|
```python
|
|
thai_ingredient_df = create_ingredient_df(thai_df)
|
|
thai_ingredient_df.head(10).plot.barh()
|
|
```
|
|
|
|

|
|
|
|
1. ਜਪਾਨੀ ਡੇਟਾ ਲਈ ਵੀ ਇਹੀ ਕਰੋ:
|
|
|
|
```python
|
|
japanese_ingredient_df = create_ingredient_df(japanese_df)
|
|
japanese_ingredient_df.head(10).plot.barh()
|
|
```
|
|
|
|

|
|
|
|
1. ਹੁਣ ਚੀਨੀ ਸਮੱਗਰੀ ਲਈ:
|
|
|
|
```python
|
|
chinese_ingredient_df = create_ingredient_df(chinese_df)
|
|
chinese_ingredient_df.head(10).plot.barh()
|
|
```
|
|
|
|

|
|
|
|
1. ਭਾਰਤੀ ਸਮੱਗਰੀ ਪਲਾਟ ਕਰੋ:
|
|
|
|
```python
|
|
indian_ingredient_df = create_ingredient_df(indian_df)
|
|
indian_ingredient_df.head(10).plot.barh()
|
|
```
|
|
|
|

|
|
|
|
1. ਆਖਰੀ, ਕੋਰੀਆਈ ਸਮੱਗਰੀ ਪਲਾਟ ਕਰੋ:
|
|
|
|
```python
|
|
korean_ingredient_df = create_ingredient_df(korean_df)
|
|
korean_ingredient_df.head(10).plot.barh()
|
|
```
|
|
|
|

|
|
|
|
1. ਹੁਣ, ਵੱਖ-ਵੱਖ ਖਾਣਿਆਂ ਦੇ ਵਿਚਕਾਰ ਗੁੰਝਲ ਪੈਦਾ ਕਰਨ ਵਾਲੀਆਂ ਸਭ ਤੋਂ ਆਮ ਸਮੱਗਰੀਆਂ ਨੂੰ ਹਟਾਓ, `drop()` ਕਾਲ ਕਰਕੇ:
|
|
|
|
ਹਰ ਕੋਈ ਚਾਵਲ, ਲਸਣ ਅਤੇ ਅਦਰਕ ਨੂੰ ਪਸੰਦ ਕਰਦਾ ਹੈ!
|
|
|
|
```python
|
|
feature_df= df.drop(['cuisine','Unnamed: 0','rice','garlic','ginger'], axis=1)
|
|
labels_df = df.cuisine #.unique()
|
|
feature_df.head()
|
|
```
|
|
|
|
## ਡੇਟਾਸੈਟ ਨੂੰ ਸੰਤੁਲਿਤ ਕਰੋ
|
|
|
|
ਹੁਣ ਜਦੋਂ ਤੁਸੀਂ ਡੇਟਾ ਨੂੰ ਸਾਫ਼ ਕਰ ਲਿਆ ਹੈ, [SMOTE](https://imbalanced-learn.org/dev/references/generated/imblearn.over_sampling.SMOTE.html) - "Synthetic Minority Over-sampling Technique" - ਦੀ ਵਰਤੋਂ ਕਰਕੇ ਇਸ ਨੂੰ ਸੰਤੁਲਿਤ ਕਰੋ।
|
|
|
|
1. `fit_resample()` ਕਾਲ ਕਰੋ, ਇਹ ਰਣਨੀਤੀ ਇੰਟਰਪੋਲੇਸ਼ਨ ਦੁਆਰਾ ਨਵੇਂ ਨਮੂਨੇ ਬਣਾਉਂਦੀ ਹੈ।
|
|
|
|
```python
|
|
oversample = SMOTE()
|
|
transformed_feature_df, transformed_label_df = oversample.fit_resample(feature_df, labels_df)
|
|
```
|
|
|
|
ਡੇਟਾ ਨੂੰ ਸੰਤੁਲਿਤ ਕਰਕੇ, ਤੁਸੀਂ ਇਸ ਨੂੰ ਕਲਾਸੀਫਾਈ ਕਰਨ ਸਮੇਂ ਵਧੀਆ ਨਤੀਜੇ ਪ੍ਰਾਪਤ ਕਰੋਗੇ। ਇੱਕ ਬਾਈਨਰੀ ਕਲਾਸੀਫਿਕੇਸ਼ਨ ਬਾਰੇ ਸੋਚੋ। ਜੇ ਤੁਹਾਡੇ ਡੇਟਾ ਦਾ ਜ਼ਿਆਦਾਤਰ ਹਿੱਸਾ ਇੱਕ ਕਲਾਸ ਹੈ, ਤਾਂ ਇੱਕ ML ਮਾਡਲ ਉਸ ਕਲਾਸ ਦੀ ਪੇਸ਼ਗੋਈ ਵਧੇਰੇ ਵਾਰ ਕਰੇਗਾ, ਸਿਰਫ਼ ਇਸ ਲਈ ਕਿ ਇਸ ਲਈ ਹੋਰ ਡੇਟਾ ਉਪਲਬਧ ਹੈ। ਡੇਟਾ ਨੂੰ ਸੰਤੁਲਿਤ ਕਰਨਾ ਕਿਸੇ ਵੀ ਤਰੱਕੀਸ਼ੀਲ ਡੇਟਾ ਨੂੰ ਲੈਂਦਾ ਹੈ ਅਤੇ ਇਸ ਅਸਮਾਨਤਾ ਨੂੰ ਹਟਾਉਣ ਵਿੱਚ ਮਦਦ ਕਰਦਾ ਹੈ।
|
|
|
|
1. ਹੁਣ ਤੁਸੀਂ ਸਮੱਗਰੀ ਪ੍ਰਤੀ ਲੇਬਲਾਂ ਦੀ ਗਿਣਤੀ ਦੀ ਜਾਂਚ ਕਰ ਸਕਦੇ ਹੋ:
|
|
|
|
```python
|
|
print(f'new label count: {transformed_label_df.value_counts()}')
|
|
print(f'old label count: {df.cuisine.value_counts()}')
|
|
```
|
|
|
|
ਤੁਹਾਡਾ ਆਉਟਪੁੱਟ ਇਸ ਤਰ੍ਹਾਂ ਦਿਖਾਈ ਦਿੰਦਾ ਹੈ:
|
|
|
|
```output
|
|
new label count: korean 799
|
|
chinese 799
|
|
indian 799
|
|
japanese 799
|
|
thai 799
|
|
Name: cuisine, dtype: int64
|
|
old label count: korean 799
|
|
indian 598
|
|
chinese 442
|
|
japanese 320
|
|
thai 289
|
|
Name: cuisine, dtype: int64
|
|
```
|
|
|
|
ਡੇਟਾ ਸੁੰਦਰ, ਸਾਫ਼, ਸੰਤੁਲਿਤ ਅਤੇ ਬਹੁਤ ਹੀ ਸੁਆਦਿਸ਼ਟ ਹੈ!
|
|
|
|
1. ਆਖਰੀ ਕਦਮ ਇਹ ਹੈ ਕਿ ਤੁਹਾਡੇ ਸੰਤੁਲਿਤ ਡੇਟਾ, ਲੇਬਲਾਂ ਅਤੇ ਫੀਚਰਾਂ ਸਮੇਤ, ਨੂੰ ਇੱਕ ਨਵੇਂ ਡੇਟਾਫਰੇਮ ਵਿੱਚ ਸੇਵ ਕਰੋ ਜੋ ਇੱਕ ਫਾਈਲ ਵਿੱਚ ਐਕਸਪੋਰਟ ਕੀਤਾ ਜਾ ਸਕੇ:
|
|
|
|
```python
|
|
transformed_df = pd.concat([transformed_label_df,transformed_feature_df],axis=1, join='outer')
|
|
```
|
|
|
|
1. ਤੁਸੀਂ `transformed_df.head()` ਅਤੇ `transformed_df.info()` ਦੀ ਵਰਤੋਂ ਕਰਕੇ ਡੇਟਾ ਨੂੰ ਇੱਕ ਵਾਰ ਹੋਰ ਦੇਖ ਸਕਦੇ ਹੋ। ਭਵਿੱਖ ਦੇ ਪਾਠਾਂ ਵਿੱਚ ਵਰਤੋਂ ਲਈ ਇਸ ਡੇ
|
|
|
|
---
|
|
|
|
**ਅਸਵੀਕਾਰਨਾ**:
|
|
ਇਹ ਦਸਤਾਵੇਜ਼ AI ਅਨੁਵਾਦ ਸੇਵਾ [Co-op Translator](https://github.com/Azure/co-op-translator) ਦੀ ਵਰਤੋਂ ਕਰਕੇ ਅਨੁਵਾਦ ਕੀਤਾ ਗਿਆ ਹੈ। ਜਦੋਂ ਕਿ ਅਸੀਂ ਸਹੀਤਾ ਲਈ ਯਤਨਸ਼ੀਲ ਹਾਂ, ਕਿਰਪਾ ਕਰਕੇ ਧਿਆਨ ਦਿਓ ਕਿ ਸਵੈਚਾਲਿਤ ਅਨੁਵਾਦਾਂ ਵਿੱਚ ਗਲਤੀਆਂ ਜਾਂ ਅਸੁਚਨਾਵਾਂ ਹੋ ਸਕਦੀਆਂ ਹਨ। ਮੂਲ ਦਸਤਾਵੇਜ਼ ਨੂੰ ਇਸਦੀ ਮੂਲ ਭਾਸ਼ਾ ਵਿੱਚ ਅਧਿਕਾਰਤ ਸਰੋਤ ਮੰਨਿਆ ਜਾਣਾ ਚਾਹੀਦਾ ਹੈ। ਮਹੱਤਵਪੂਰਨ ਜਾਣਕਾਰੀ ਲਈ, ਪੇਸ਼ੇਵਰ ਮਨੁੱਖੀ ਅਨੁਵਾਦ ਦੀ ਸਿਫਾਰਸ਼ ਕੀਤੀ ਜਾਂਦੀ ਹੈ। ਇਸ ਅਨੁਵਾਦ ਦੀ ਵਰਤੋਂ ਤੋਂ ਪੈਦਾ ਹੋਣ ਵਾਲੇ ਕਿਸੇ ਵੀ ਗਲਤਫਹਿਮੀ ਜਾਂ ਗਲਤ ਵਿਆਖਿਆ ਲਈ ਅਸੀਂ ਜ਼ਿੰਮੇਵਾਰ ਨਹੀਂ ਹਾਂ। |