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.
340 lines
43 KiB
340 lines
43 KiB
# ਕਲੱਸਟਰਿੰਗ ਦਾ ਪਰਿਚਯ
|
|
|
|
ਕਲੱਸਟਰਿੰਗ ਇੱਕ ਪ੍ਰਕਾਰ ਦੀ [ਅਨਸੁਪਰਵਾਈਜ਼ਡ ਲਰਨਿੰਗ](https://wikipedia.org/wiki/Unsupervised_learning) ਹੈ ਜੋ ਮੰਨਦੀ ਹੈ ਕਿ ਡਾਟਾਸੈੱਟ ਲੇਬਲ ਰਹਿਤ ਹੈ ਜਾਂ ਇਸਦੇ ਇੰਪੁੱਟ ਪਹਿਲਾਂ ਤੋਂ ਨਿਰਧਾਰਿਤ ਆਊਟਪੁੱਟ ਨਾਲ ਮੇਲ ਨਹੀਂ ਖਾਂਦੇ। ਇਹ ਵੱਖ-ਵੱਖ ਅਲਗੋਰਿਦਮਾਂ ਦੀ ਵਰਤੋਂ ਕਰਕੇ ਲੇਬਲ ਰਹਿਤ ਡਾਟਾ ਵਿੱਚੋਂ ਗੁੱਛੇ ਬਣਾਉਂਦਾ ਹੈ ਅਤੇ ਡਾਟਾ ਵਿੱਚ ਪੈਟਰਨਸ ਦੇ ਅਨੁਸਾਰ ਸਮੂਹਕਰਨ ਪ੍ਰਦਾਨ ਕਰਦਾ ਹੈ।
|
|
|
|
[](https://youtu.be/ty2advRiWJM "No One Like You by PSquare")
|
|
|
|
> 🎥 ਉੱਪਰ ਦਿੱਤੀ ਚਿੱਤਰ ਤੇ ਕਲਿੱਕ ਕਰੋ ਇੱਕ ਵੀਡੀਓ ਲਈ। ਜਦੋਂ ਤੁਸੀਂ ਕਲੱਸਟਰਿੰਗ ਸਹਿਤ ਮਸ਼ੀਨ ਲਰਨਿੰਗ ਦਾ ਅਧਿਐਨ ਕਰ ਰਹੇ ਹੋ, ਤਾਂ ਕੁਝ ਨਾਈਜੀਰੀਆਈ ਡਾਂਸ ਹਾਲ ਟਰੈਕਸ ਦਾ ਮਜ਼ਾ ਲਓ - ਇਹ 2014 ਦੀ PSquare ਵੱਲੋਂ ਇੱਕ ਬਹੁਤ ਪ੍ਰਸ਼ੰਸਿਤ ਗੀਤ ਹੈ।
|
|
|
|
## [ਪ੍ਰੀ-ਲੇਕਚਰ ਕਵਿਜ਼](https://ff-quizzes.netlify.app/en/ml/)
|
|
|
|
### ਪਰੀਚਯ
|
|
|
|
[ਕਲੱਸਟਰਿੰਗ](https://link.springer.com/referenceworkentry/10.1007%2F978-0-387-30164-8_124) ਡੇਟਾ ਖੋਜ ਲਈ ਬਹੁਤ ਲਾਭਦਾਇਕ ਹੈ। ਆਓ ਵੇਖੀਏ ਕਿ ਇਹ ਨਾਈਜੀਰੀਆਈ ਦਰਸ਼ਕਾਂ ਦੇ ਸੰਗੀਤ ਦੀ ਖਪਤ ਦੇ ਰੁਝਾਨ ਅਤੇ ਪੈਟਰਨਸ ਨੂੰ ਵੇਖਣ ਵਿੱਚ ਕਿਹੜਾ ਮਦਦਗਾਰ ਸਾਬਤ ਹੁੰਦਾ ਹੈ।
|
|
|
|
✅ ਇਕ ਮਿੰਟ ਲਈ ਸੋਚੋ ਕਿ ਕਲੱਸਟਰਿੰਗ ਕਿੱਥੇ ਵਰਤੀ ਜਾਂਦੀ ਹੈ। ਅਸਲ ਜ਼ਿੰਦਗੀ ਵਿੱਚ, ਕਲੱਸਟਰਿੰਗ ਉਸ ਸਮੇਂ ਹੁੰਦੀ ਹੈ ਜਦੋਂ ਤੁਹਾਡੇ ਕੋਲ ਕੱਪੜੇ ਦੀ ਢੇਰ ਹੋਵੇ ਅਤੇ ਤੁਹਾਨੂੰ ਆਪਣੇ ਪਰਿਵਾਰਕ ਮੈਂਬਰਾਂ ਦੇ ਕੱਪੜੇ ਵੱਖਰੇ ਕਰਨੇ ਹੋਣ 🧦👕👖🩲। ਡਾਟਾ ਸਾਇੰਸ ਵਿੱਚ, ਕਲੱਸਟਰਿੰਗ ਉਸ ਸਮੇਂ ਹੁੰਦੀ ਹੈ ਜਦੋਂ ਕਿਸੇ ਯੂਜ਼ਰ ਦੀ ਪਸੰਦ ਦੀ ਵਿਸ਼ਲੇਸ਼ਣਾ ਕਰਨੀ ਹੋਵੇ ਜਾਂ ਕਿਸੇ ਲੇਬਲ ਰਹਿਤ ਡਾਟਾਸੈੱਟ ਦੀ ਵਿਸ਼ੇਸ਼ਤਾਵਾਂ ਦਾ ਪਤਾ ਲਗਾਉਣਾ ਹੋਵੇ। ਕਲੱਸਟਰਿੰਗ, ਕਿਸੇ ਹੱਦ ਤੱਕ, ਉਥਲ-ਪੁਥਲ ਨੂੰ ਸਮਝਣ ਵਿੱਚ ਮਦਦ ਕਰਦੀ ਹੈ, ਜਿਵੇਂ ਮੋਜ਼ਿਆਂ ਦੀ ਡਰਾਅਰ।
|
|
|
|
[](https://youtu.be/esmzYhuFnds "Introduction to Clustering")
|
|
|
|
> 🎥 ਉੱਪਰ ਦਿੱਤੀ ਚਿੱਤਰ ਤੇ ਕਲਿੱਕ ਕਰੋ ਇੱਕ ਵੀਡੀਓ ਲਈ: MIT ਦੇ John Guttag ਕਲੱਸਟਰਿੰਗ ਦਾ ਪਰਿਚਯ ਕਰਵਾਉਂਦੇ ਹਨ
|
|
|
|
ਇੱਕ ਪੇਸ਼ਾਵਰ ਸੈਟਿੰਗ ਵਿੱਚ, ਕਲੱਸਟਰਿੰਗ ਦਾ ਵਰਤੋਂ ਮਾਰਕੀਟ ਸੈਗਮੈਂਟੇਸ਼ਨ, ਕਿਸ ਉਮਰ ਦੇ ਗਰੁੱਪ ਕਿਹੜੇ ਆਈਟਮ ਖਰੀਦਦੇ ਹਨ ਇਸਦਾ ਨਿਰਧਾਰਨ ਕਰਨ ਲਈ ਕੀਤਾ ਜਾ ਸਕਦਾ ਹੈ। ਇੱਕ ਹੋਰ ਵਰਤੋਂ ਅਨੋਮਲੀ ਖੋਜ ਵਾਸਤੇ ਹੋ ਸਕਦੀ ਹੈ, ਜਿਵੇਂ ਕਿ ਕ੍ਰੈਡਿਟ ਕਾਰਡ ਟ੍ਰਾਂਜ਼ੈਕਸ਼ਨਾਂ ਦੇ ਡਾਟਾ ਵਿੱਚ ਧੋਖਾਧੜੀ ਦਾ ਪਤਾ ਲਗਾਉਣਾ। ਜਾਂ ਤੁਸੀਂ ਕਲੱਸਟਰਿੰਗ ਦੀ ਵਰਤੋਂ ਮੇਡੀਕਲ ਸਕੈਨਜ਼ ਦੇ ਬੈਚ ਵਿੱਚ ਟਿਊਮਰਾਂ ਦਾ ਨਿਰਧਾਰਨ ਕਰਨ ਲਈ ਕਰ ਸਕਦੇ ਹੋ।
|
|
|
|
✅ ਸੋਚੋ ਕਿ ਤੁਸੀਂ 'ਵਾਲਡ' ਵਿੱਚ ਕਿਵੇਂ ਕਲੱਸਟਰਿੰਗ ਦਾ ਸਾਮਨਾ ਕੀਤਾ ਹੋਵੇਗਾ, ਕਿਸੇ ਬੈਂਕਿੰਗ, ਈ-ਕਾਮਰਸ ਜਾਂ ਵਿਹਾਰਕ ਸੈਟਿੰਗ ਵਿੱਚ।
|
|
|
|
> 🎓 ਫ਼਼ੈਸਲਾ ਲੈਣ ਵਾਲੀ ਗੱਲ ਇਹ ਹੈ ਕਿ ਕਲੱਸਟਰ ਵਿਸ਼ਲੇਸ਼ਣ 1930 ਦੇ ਦਹਾਕੇ ਵਿੱਚ ਮਨੁੱਖੀ ਵਿਗਿਆਨ ਅਤੇ ਮਨੋਵਿਗਿਆਨ ਖੇਤਰਾਂ ਵਿੱਚ ਉਤਪੰਨ ਹੋਇਆ ਸੀ। ਤੁਸੀਂ ਸੋਚ ਸਕਦੇ ਹੋ ਕਿ ਇਸਦਾ ਇਸਤਮਾਲ ਕਿਵੇਂ ਕੀਤਾ ਗਿਆ ਹੋਵੇਗਾ?
|
|
|
|
ਚੋਣਨ ਲਈ ਤੁਸੀਂ ਖੋਜ ਨਤੀਜੇ - ਖਰੀਦਦਾਰੀ ਲਿੰਕ, ਚਿੱਤਰ, ਜਾਂ ਸਮੀਖਿਆਵਾਂ - ਲਈ ਵੀ ਇਸਦਾ ਉਪਯੋਗ ਕਰ ਸਕਦੇ ਹੋ। ਕਲੱਸਟਰਿੰਗ ਉਪਯੋਗੀ ਹੁੰਦੀ ਹੈ ਜਦੋਂ ਤੁਹਾਡੇ ਕੋਲ ਇੱਕ ਵੱਡਾ ਡਾਟਾਸੈੱਟ ਹੁੰਦਾ ਹੈ ਜਿਸਨੂੰ ਤੁਸੀਂ ਘਟਾਉਣਾ ਚਾਹੁੰਦੇ ਹੋ ਅਤੇ ਜਿਸ ਉੱਪਰ ਤੁਸੀਂ ਹੋਰ ਵਿਸਤ੍ਰਿਤ ਵਿਸ਼ਲੇਸ਼ਣ ਕਰਨਾ ਚਾਹੁੰਦੇ ਹੋ, ਇਸ ਲਈ ਇਹ ਤਕਨੀਕ ਮਾਡਲਾਂ ਦੇ ਬਣਨ ਤੋਂ ਪਹਿਲਾਂ ਡਾਟਾ ਬਾਰੇ ਜਾਣਕਾਰੀ ਪ੍ਰਾਪਤ ਕਰਨ ਲਈ ਵਰਤੀ ਜਾ ਸਕਦੀ ਹੈ।
|
|
|
|
✅ ਜਦੋਂ ਤੁਹਾਡਾ ਡਾਟਾ ਕਲੱਸਟਰਾਂ ਵਿੱਚ ਵੰਡਿਆ ਜਾਂਦਾ ਹੈ, ਤੁਸੀਂ ਇਸਨੂੰ ਇੱਕ ਕਲੱਸਟਰ ID ਦੇਂਦੇ ਹੋ, ਅਤੇ ਇਹ ਤਕਨੀਕ ਡਾਟਾਸੈੱਟ ਦੀ ਗੋਪਨੀਯਤਾ ਸੁਰੱਖਿਅਤ ਕਰਨ ਵਿੱਚ ਲਾਭਕਾਰੀ ਸਾਬਤ ਹੋ ਸਕਦੀ ਹੈ; ਤੁਸੀਂ ਕਿਸੇ ਡਾਟਾ ਪਾਇੰਟ ਨੂੰ ਇਸਦੀ ਕਲੱਸਟਰ ID ਨਾਲ ਸੂਚਿਤ ਕਰ ਸਕਦੇ ਹੋ, ਬਜਾਏ ਵਧੇਰੇ ਪ੍ਰਗਟ ਕਰਨ ਵਾਲੇ ਪਛਾਣ ਵਾਲੇ ਡਾਟਾ ਨਾਲ। ਕੀ ਤੁਸੀਂ ਹੋਰ ਕਾਰਨਾਂ ਬਾਰੇ ਸੋਚ ਸਕਦੇ ਹੋ ਕਿ ਤੁਸੀਂ ਕਿਸੇ ਕਲੱਸਟਰ ਨੂੰ ਪਛਾਣਣ ਵਾਸਤੇ ਹੋਰ ਤੱਤਾਂ ਦੀ ਤੁਲਨਾ ਵਿੱਚ ਕਲੱਸਟਰ ID ਨੂੰ ਕਿਉਂ ਵਰਤੋਗੇ?
|
|
|
|
ਕਲੱਸਟਰਿੰਗ ਤਕਨੀਕਾਂ ਦੀ ਸਮਝ ਨੂੰ ਵਿਚਾਰੋ ਇਸ [Learn ਮੋਡਿਊਲ](https://docs.microsoft.com/learn/modules/train-evaluate-cluster-models?WT.mc_id=academic-77952-leestott) ਵਿੱਚ।
|
|
|
|
## ਕਲੱਸਟਰਿੰਗ ਸ਼ੁਰੂ ਕਰਨਾ
|
|
|
|
[Scikit-learn ਵੱਡੀ ਮਾਤਰਾ ਵਿੱਚ](https://scikit-learn.org/stable/modules/clustering.html) ਕਲੱਸਟਰਿੰਗ ਕਰਨ ਦੇ ਤਰੀਕੇ ਪ੍ਰਦਾਨ ਕਰਦਾ ਹੈ। ਤੁਹਾਡਾ ਚੁਣਾਵ ਤੁਹਾਡੇ ਉਪਯੋਗ ਮੁਕਾਮ 'ਤੇ ਨਿਰਭਰ ਕਰੇਗਾ। ਡੌਕਯੂਮੈਂਟੇਸ਼ਨ ਦੇ ਹੁਕਮਾਂ ਅਨੁਸਾਰ, ਹਰ ਤਰੀਕੇ ਦੇ ਵੱਖ-ਵੱਖ ਫਾਇਦੇ ਹਨ। ਹੇਠਾਂ Scikit-learn ਦੁਆਰਾ ਸਹਾਇਤ ਕੀਤੇ ਗਏ ਤਰੀਕਿਆਂ ਅਤੇ ਉਚਿਤ ਉਪਯੋਗ ਦੀ ਸਧਾਰਨ ਤਾਲਿਕਾ ਹੈ:
|
|
|
|
| ਤਰੀਕੇ ਦਾ ਨਾਮ | ਉਪਯੋਗ |
|
|
| :------------------------ | :------------------------------------------------------------------ |
|
|
| ਕੇ-ਮੀਨਸ (K-Means) | ਆਮ ਮਕਸਦ, ਇੰਡਕਟੀਵ |
|
|
| ਐਫਿਨਿਟੀ ਪ੍ਰੋਪੈਗੇਸ਼ਨ | ਬਹੁਤ ਸਾਰੇ, ਅਸਮਾਨ ਕੁਲੱਸਟਰ, ਇੰਡਕਟੀਵ |
|
|
| ਮੀਨ-ਸ਼ਿਫਟ | ਬਹੁਤ ਸਾਰੇ, ਅਸਮਾਨ ਕੁਲੱਸਟਰ, ਇੰਡਕਟੀਵ |
|
|
| ਸਪੈਕਟ੍ਰਲ ਕਲਸਟਰਿੰਗ | ਥੋੜੇ, ਸਮਾਨ ਕੁਲੱਸਟਰ, ਟ੍ਰਾਂਸਡਕਟੀਵ |
|
|
| ਵਾਰਡ ਹਾਇਰਾਰਕੀਕਲ ਕਲਸਟਰਿੰਗ | ਬਹੁਤ ਸਾਰੇ, ਸੀਮਿਤ ਕੁਲੱਸਟਰ, ਟ੍ਰਾਂਸਡਕਟੀਵ |
|
|
| ਐਗਲੋਮੇਰਟਿਵ ਕਲੱਸਟਰਿੰਗ | ਬਹੁਤ ਸਾਰੇ, ਸੀਮਿਤ, ਗੈਰ ਯੂਕਲੀਡਿਅਨ ਦੂਰੀਆਂ, ਟ੍ਰਾਂਸਡਕਟੀਵ |
|
|
| ਡੀਬੀਸਕੈਨ (DBSCAN) | ਗੈਰ-ਫਲੈਟ ਜਿਓਮੇਟ੍ਰੀ, ਅਸਮਾਨ ਕੁਲੱਸਟਰ, ਟ੍ਰਾਂਸਡਕਟੀਵ |
|
|
| ਓਪਟਿਕਸ (OPTICS) | ਗੈਰ-ਫਲੈਟ ਜਿਓਮੇਟ੍ਰੀ, ਅਸਮਾਨ ਘਣਤਾ ਵਾਲੇ ਕੁਲੱਸਟਰ, ਟ੍ਰਾਂਸਡਕਟੀਵ |
|
|
| ਗਾਸੀਅਨ ਮਿਕਸਚਰ | ਫਲੈਟ ਜਿਓਮੇਟ੍ਰੀ, ਇੰਡਕਟੀਵ |
|
|
| ਬਿਰਚ (BIRCH) | ਵੱਡਾ ਡਾਟਾਸੈੱਟ ਆਊਟਲਾਇਰਾਂ ਨਾਲ, ਇੰਡਕਟੀਵ |
|
|
|
|
> 🎓 ਅਸੀਂ ਕਲੱਸਟਰ ਕਿਵੇਂ ਬਣਾਉਂਦੇ ਹਾਂ ਇਸਦਾ ਬਹੁਤ ਸਬੰਧ ਹੈ ਕਿ ਅਸੀਂ ਅੰਕੜਿਆਂ ਨੂੰ ਸਮੂਹਾਂ ਵਿੱਚ ਕਿਵੇਂ ਇਕੱਠਾ ਕਰਦੇ ਹਾਂ। ਆਓ ਕੁਝ ਸ਼ਬਦਾਵਲੀ ਸਮਝੀਏ:
|
|
>
|
|
> 🎓 ['ਟ੍ਰਾਂਸਡਕਟੀਵ' ਬਨਾਮ 'ਇੰਡਕਟੀਵ'](https://wikipedia.org/wiki/Transduction_(machine_learning))
|
|
>
|
|
> ਟ੍ਰਾਂਸਡਕਟੀਵ ਅਨੁਮਾਨ ਆਪਣੇ ਪ੍ਰੇਖਿਅਤ ਟਰੇਨਿੰਗ ਕੇਸਾਂ ਤੋਂ ਲਿਆ ਜਾਂਦਾ ਹੈ ਜੋ ਖਾਸ ਟੈਸਟ ਕੇਸਾਂ ਨਾਲ ਮੇਲ ਖਾਂਦੇ ਹਨ। ਇੰਡਕਟੀਵ ਅਨੁਮਾਨ ਟਰੇਨਿੰਗ ਕੇਸਾਂ ਤੋਂ ਆਮ ਕਾਇਦੇ ਬਣਾਉਂਦਾ ਹੈ ਜੋ ਫਿਰ ਟੈਸਟ ਕੇਸਾਂ 'ਤੇ ਲਾਗੂ ਹੁੰਦੇ ਹਨ।
|
|
>
|
|
> ਇੱਕ ਉਦਾਹਰਨ: ਸੋਚੋ ਤੁਹਾਡੇ ਕੋਲ ਸਿਰਫ਼ ਹਿੱਸੇਵਾਰ ਲੇਬਲ ਕੀਤਾ ਗਿਆ ਡਾਟਾ ਹੈ। ਕੁਝ ਚੀਜ਼ਾਂ 'ਰੈਕਾਰਡ' ਹਨ, ਕੁਝ 'ਸੀਡੀ', ਅਤੇ ਕੁਝ ਖਾਲੀ। ਤੁਹਾਡਾ ਕੰਮ ਖਾਲੀ ਨੂੰ ਲੇਬਲ ਕਰਨਾ ਹੈ। ਜੇ ਤੁਸੀਂ ਇੰਡਕਟੀਵ ਰਵੱਈਆ ਚੁਣੋਂਗੇ, ਤਾਂ ਤੁਸੀਂ ਮਾਡਲ ਟ੍ਰੇਨ ਕਰੋਗੇ ਜੋ 'ਰੈਕਾਰਡ' ਅਤੇ 'ਸੀਡੀ' ਲੱਭਦਾ ਹੈ ਅਤੇ ਉਹ ਲੇਬਲ ਅਣਲੈਬਲਡ ਡਾਟੇ 'ਤੇ ਲਾਗੂ ਕਰੋਗਾ। ਇਹ ਢੁਕਵਾਂ ਨਹੀਂ ਹੋਵੇਗਾ ਜੇ ਚੀਜ਼ਾਂ ਅਸਲ 'ਕੈਸੇਟ' ਹਨ। ਇੱਕ ਟ੍ਰਾਂਸਡਕਟੀਵ ਰਵੱਈਆ, ਦੂਜੇ ਪਾਸੇ, ਇਸ ਅਣਜਾਣ ਡਾਟਾ ਨਾਲ ਬਿਹਤਰ ਢੰਗ ਨਾਲ ਨਿਪਟਦਾ ਹੈ ਕਿਉਂਕਿ ਇਹ ਮਿਲਦੇ ਜੁਲਦੇ ਆਈਟਮ ਇਕੱਠੇ ਕਰਦਾ ਹੈ ਅਤੇ ਫਿਰ ਸਮੂਹ ਨੂੰ ਇੱਕ ਲੇਬਲ ਦਿੰਦਾ ਹੈ। ਇਸ ਸੰਦਰਭ ਵਿੱਚ, ਕੁਲੱਸਟਰ 'ਗੋਲ ਮਿਊਜ਼ਿਕਲ ਚੀਜ਼ਾਂ' ਅਤੇ 'ਚੌਕੋਰ ਮਿਊਜ਼ਿਕਲ ਚੀਜ਼ਾਂ' ਹੋ ਸਕਦੀਆਂ ਹਨ।
|
|
>
|
|
> 🎓 ['ਗੈਰ-ਫਲੈਟ' ਬਨਾਮ 'ਫਲੈਟ' ਜਿਓਮੇਟ੍ਰੀ](https://datascience.stackexchange.com/questions/52260/terminology-flat-geometry-in-the-context-of-clustering)
|
|
>
|
|
> ਗਣਿਤੀਕ ਸ਼ਬਦਾਵਲੀ ਤੋਂ ਲਿਆ ਗਿਆ, ਗੈਰ-ਫਲੈਟ ਬਨਾਮ ਫਲੈਟ ਜਿਓਮੇਟ੍ਰੀ ਅਰਥ ਹੈ ਦੁਰੀਆਂ ਦੀ ਮਾਪ ਫਲੈਟ ([ਯੂਕਲੀਡਿਅਨ](https://wikipedia.org/wiki/Euclidean_geometry)) ਜਾਂ ਗੈਰ-ਫਲੈਟ (ਗੈਰ-ਯੂਕਲੀਡਿਅਨ) ਭੌਗੋਲਿਕ ਤਰੀਕੇ ਨਾਲ ਕੀਤੀ ਗਈ।
|
|
>
|
|
> 'ਫਲੈਟ' ਇਸ ਸੰਦਰਭ ਵਿੱਚ ਯੂਕਲੀਡਿਅਨ ਜਿਓਮੇਟ੍ਰੀ ਦੱਸਦਾ ਹੈ (ਜਿਸ ਦਾ ਕੁਝ ਹਿੱਸਾ 'ਪਲੇਨ' ਜਿਓਮੇਟ੍ਰੀ ਵਜੋਂ ਪੜਾਇਆ ਜਾਂਦਾ ਹੈ), ਅਤੇ ਗੈਰ-ਫਲੈਟ ਦਾ ਅਰਥ ਗੈਰ-ਯੂਕਲੀਡਿਅਨ ਜਿਓਮੇਟ੍ਰੀ ਹੁੰਦਾ ਹੈ। ਮਸ਼ੀਨ ਲਰਨਿੰਗ ਨਾਲ ਜਿਓਮੇਟ੍ਰੀ ਦਾ ਕੀ ਸਬੰਧ? ਅਸਲ ਵਿੱਚ, ਜਿਵੇਂ ਦੋ ਖੇਤਰ ਗਣਿਤ ਵਿੱਚ ਆਧਾਰਤ ਹਨ, ਕੁਲੱਸਟਰਾਂ ਵਿੱਚ ਬਿੰਦੂਆਂ ਦੀ ਦੂਰੀ ਮਾਪਣ ਲਈ ਏੱਕ ਸਾਂਝਾ ਤਰੀਕਾ ਹੋਣਾ ਚਾਹੀਦਾ ਹੈ ਅਤੇ ਉਹ 'ਫਲੈਟ' ਜਾਂ 'ਗੈਰ-ਫਲੈਟ' ਤਰੀਕਿਆਂ ਤੋਂ ਕੀਤਾ ਜਾ ਸਕਦਾ ਹੈ, ਡਾਟੇ ਦੀ ਪ੍ਰਕ੍ਰਿਤੀ ਦੇ ਅਨੁਸਾਰ। [ਯੂਕਲੀਡਿਅਨ ਦੂਰੀਆਂ](https://wikipedia.org/wiki/Euclidean_distance) ਦੋ ਬਿੰਦੂਆਂ ਵਿਚਕਾਰ ਰੇਖਾ ਖੰਡ ਦੀ ਲੰਬਾਈ ਵਜੋਂ ਮਾਪੀਆਂ ਜਾਂਦੀਆਂ ਹਨ। [ਗੈਰ-ਯੂਕਲੀਡਿਅਨ ਦੂਰੀਆਂ](https://wikipedia.org/wiki/Non-Euclidean_geometry) ਵਾਲੇ ਬਿੰਦੂਆਂ ਦੇ ਵਿਚਕਾਰ ਕਰਵ ਰਾਹੀਂ ਮਾਪੀਆਂ ਜਾਂਦੀਆਂ ਹਨ। ਜੇ ਤੁਹਾਡਾ ਡਾਟਾ, ਦਿੱਖ ਵਿੱਚ, ਪਲੇਨ ਉੱਤੇ ਨਹੀਂ ਹੁੰਦਾ, ਤਾਂ ਤੁਹਾਨੂੰ ਇਸਨੂੰ ਸੰਭਾਲਣ ਲਈ ਖਾਸ ਅਲਗੋਰਿਦਮ ਦੀ ਲੋੜ ਹੋ ਸਕਦੀ ਹੈ।
|
|
>
|
|

|
|
> ਇਨਫੋਗ੍ਰਾਫਿਕ ਦੁਆਰਾ [ਦਸਾਨੀ ਮਾਡਿਪੱਲੀ](https://twitter.com/dasani_decoded)
|
|
>
|
|
> 🎓 ['ਦੂਰੀਆਂ'](https://web.stanford.edu/class/cs345a/slides/12-clustering.pdf)
|
|
>
|
|
> ਕੁਲੱਸਟਰਾਂ ਨੂੰ ਉਹਨਾਂ ਦੀ ਦੂਰੀ ਮੈਟ੍ਰਿਕਸ ਦੁਆਰਾ ਪਰਿਭਾਸ਼ਿਤ ਕੀਤਾ ਜਾਂਦਾ ਹੈ, ਜਿਵੇਂ ਕਿ ਬਿੰਦੂਆਂ ਵਿਚਕਾਰ ਦੂਰੀਆਂ। ਇਹ ਦੂਰੀ ਕਈ ਤਰੀਕਿਆਂ ਨਾਲ ਮਾਪੀ ਜਾ ਸਕਦੀ ਹੈ। ਯੂਕਲੀਡਿਅਨ ਕੁਲੱਸਟਰਾਂ ਦੀ ਪਰਿਭਾਸ਼ਾ ਬਿੰਦੂਆਂ ਦੇ ਮਿਡਲ ਅੰਕ ਦੇ ਆਧਾਰ 'ਤੇ ਹੁੰਦੀ ਹੈ, ਜਿਸ ਵਿੱਚ ਇੱਕ 'ਸੈਂਟਰਾਇਡ' ਜਾਂ ਕੇਂਦਰੀ ਬਿੰਦੂ ਹੁੰਦਾ ਹੈ। ਇਸ ਤਰ੍ਹਾਂ ਦੂਰੀ ਉਸ ਕੇਂਦਰੀ ਬਿੰਦੂ ਤੱਕ ਦੀ ਮਾਪ ਹੁੰਦੀ ਹੈ। ਗੈਰ-ਯੂਕਲੀਡਿਅਨ ਦੂਰੀਆਂ 'ਕਲੱਸਟਰਾਇਡ' ਨੂੰ ਦਰਸਾਉਂਦੀਆਂ ਹਨ, ਜੋ ਕਿ ਹੋਰ ਬਿੰਦੂਆਂ ਦੇ ਸਭ ਤੋਂ ਨੇੜੇ ਬਿੰਦੂ ਹੁੰਦਾ ਹੈ। ਕਲੱਸਟਰਾਇਡ ਨੂੰ ਵੱਖ-ਵੱਖ ਤਰੀਕਿਆਂ ਨਾਲ ਪਰਿਭਾਸ਼ਿਤ ਕੀਤਾ ਜਾ ਸਕਦਾ ਹੈ।
|
|
>
|
|
> 🎓 ['ਸੀਮਿਤ'](https://wikipedia.org/wiki/Constrained_clustering)
|
|
>
|
|
> [ਸੀਮਿਤ ਕਲੱਸਟਰਿੰਗ](https://web.cs.ucdavis.edu/~davidson/Publications/ICDMTutorial.pdf) ਵਿੱਚ 'ਅਰਧ-ਸੁਪਰਵਾਈਜ਼ਡ' ਲਰਨਿੰਗ ਲਾਈ ਜਾਂਦੀ ਹੈ ਇਸ ਅਨਸੁਪਰਵਾਈਜ਼ਡ ਤਰੀਕੇ ਵਿੱਚ। ਬਿੰਦੂਆਂ ਵਿਚਕਾਰ ਸਬੰਧਾਂ ਨੂੰ 'ਲਿੰਕ ਨਹੀਂ ਕਰ ਸਕਦਾ' ਜਾਂ 'ਲਿੰਕ ਕਰਨ ਦੀ ਲੋੜ' ਵਜੋਂ ਨਿਸ਼ਾਨちਤ ਕੀਤਾ ਜਾਂਦਾ ਹੈ ਜਿਸ ਨਾਲ ਕੁਝ ਨਿਯਮ ਡਾਟਾਸੈੱਟ ਤੇ ਲਾਗੂ ਕੀਤੇ ਜਾਂਦੇ ਹਨ।
|
|
>
|
|
> ਇੱਕ ਉਦਾਹਰਨ: ਜੇ ਇੱਕ ਅਲਗੋਰਿਦਮ ਅਣਲੇਬਲਡ ਜਾਂ ਅਰਧ ਲੇਬਲਡ ਡਾਟਾ ਦੇ ਬੈਚ 'ਤੇ ਮੁਕਤ ਛੱਡ ਦਿਉਂਦਾ ਹੈ, ਤਾਂ ਇਹ ਦੁਆਰਾ ਬਣਾਏ ਗਏ ਕੁਲੱਸਟਰਾਂ ਦੀ ਗੁਣਵੱਤਾ ਖ਼ਰਾਬ ਹੋ ਸਕਦੀ ਹੈ। ਉਪਰ ਦਿੱਤੇ ਉਦਾਹਰਨ ਵਿੱਚ, ਕੁਲੱਸਟਰਾਂ 'ਗੋਲ ਸੰਗੀਤਮਈ ਚੀਜ਼ਾਂ', 'ਚੌਕੋਰ ਸੰਗੀਤਮਈ ਚੀਜ਼ਾਂ', 'ਤਰਿਭੁਜਾਕਾਰ ਚੀਜ਼ਾਂ' ਅਤੇ 'ਕੁਕੀਜ਼' ਵਿਚਕਾਰ ਵੰਡਦੀਆਂ ਹਨ। ਜੇ ਕੁਝ ਸੀਮਾਵਾਂ ਜਾਂ ਨਿਯਮ ਦਿੱਤੇ ਜਾਣ ਤਾਂ ("ਚੀਜ਼ ਪਲਾਸਟਿਕ ਦੀ ਬਣੀ ਹੋਣੀ ਚਾਹੀਦੀ ਹੈ", "ਚੀਜ਼ ਨੂੰ ਸੰਗੀਤ ਪੈਦਾ ਕਰਨ ਯੋਗ ਹੋਣਾ ਚਾਹੀਦਾ ਹੈ") ਇਹ ਅਲਗੋਰਿਦਮ ਨੂੰ ਬਿਹਤਰ ਚੋਣਾਂ ਕਰਨ ਲਈ ਸੀਮਿਤ ਕਰ ਸਕਦਾ ਹੈ।
|
|
>
|
|
> 🎓 'ਘਣਤਾ'
|
|
>
|
|
> ਉਹ ਡਾਟਾ ਜੋ 'ਸ਼ੋਰ ਵਾਲਾ' ਹੈ, ਉਸਨੂੰ 'ਘਨਾ' ਮੰਨਿਆ ਜਾਂਦਾ ਹੈ। ਹਰ ਕੁਲੱਸਟਰ ਦੇ ਬਿੰਦੂਆਂ ਵਿਚਕਾਰ ਦੂਰੀਆਂ ਦੇਖਣ 'ਤੇ ਇਹ ਸਮਝ ਆਉਂਦੀ ਹੈ ਕਿ ਇਹ ਵਧੀਏ ਜਾਂ ਘੱਟ ਘਣਾ ਹੈ, ਜਾਂ ਕਦਰਾਂ ਭੀੜ ਵਾਲੀਆਂ ਹਨ ਅਤੇ ਇਸਡਾਟੇ ਨੂੰ ਉਚਿਤ ਕਲੱਸਟਰਿੰਗ ਤਰੀਕੇ ਨਾਲ ਵਿਸ਼ਲੇਸ਼ਣ ਕਰਨ ਦੀ ਲੋੜ ਹੁੰਦੀ ਹੈ। [ਇਹ ਲੇਖ](https://www.kdnuggets.com/2020/02/understanding-density-based-clustering.html) ਇੱਕ ਸ਼ੋਰ ਵਾਲੇ ਡਾਟਾਸੈੱਟ ਨੂੰ ਖੰਗਾਲਣ ਲਈ ਕੇ-ਮੀਨਸ ਕਲੱਸਟਰਿੰਗ ਵਿਰੁੱਧ HDBSCAN ਅਲਗੋਰਿਦਮ ਦੀ ਵਰਤੋਂ ਵਿੱਚ ਫ਼ਰਕ ਦਿਖਾਉਂਦਾ ਹੈ, ਜਿਥੇ ਕੁਲੱਸਟਰ ਘਣਤਾ ਅਸਮਾਨ ਹੁੰਦੀ ਹੈ।
|
|
|
|
## ਕਲੱਸਟਰਿੰਗ ਅਲਗੋਰਿਦਮ
|
|
|
|
100 ਤੋਂ ਵੱਧ ਕਲੱਸਟਰਿੰਗ ਅਲਗੋਰਿਦਮ ਉਪਲਬਧ ਹਨ, ਅਤੇ ਉਹਨਾਂ ਦੀ ਵਰਤੋਂ ਡਾਟੇ ਦੀ ਸੁਭਾਅ 'ਤੇ ਨਿਰਭਰ ਕਰਦੀ ਹੈ। ਆਓ ਕੁਝ ਪ੍ਰਮੁੱਖਾਂ ਬਾਰੇ ਗੱਲ ਕਰੀਏ:
|
|
|
|
- **ਹਾਇਰਾਰਕੀਕਲ ਕਲੱਸਟਰਿੰਗ**। ਜੇ ਕਿਸੇ ਵਸਤੂ ਦੀ ਵਰਗੀਕਰਨ ਉਸਦੇ ਨੇੜਲੇ ਵਸਤੂ ਦੀ ਪਹੁੰਚ ਦੇ ਅਧਾਰ ਤੇ ਕੀਤੀ ਜਾਂਦੀ ਹੈ ਨਾ ਕਿ ਦੂਰ ਦੇ ਕਿਸੇ ਹੋਰ ਦੀ, ਤਾਂ ਕਲੱਸਟਰ ਬਣਾਏ ਜਾਂਦੇ ਹਨ ਜੋ ਆਪਣੇ ਮੈਂਬਰਾਂ ਦੀ ਦੂਰੀ ਤੋਂ ਥਾਪ ਵੀਧੀ ਕਰਦੇ ਹਨ। Scikit-learn ਦੀ ਐਗਲੋਮੇਰਟਿਵ ਕਲੱਸਟਰਿੰਗ ਹਾਇਰਾਰਕੀਕਲ ਹੈ।
|
|
|
|

|
|
> ਇਨਫੋਗ੍ਰਾਫਿਕ ਦੁਆਰਾ [ਦਸਾਨੀ ਮਾਡਿਪੱਲੀ](https://twitter.com/dasani_decoded)
|
|
|
|
- **ਸੈਂਟਰਾਇਡ ਕਲੱਸਟਰਿੰਗ**। ਇਹ ਪ੍ਰਚਲਿਤ ਅਲਗੋਰਿਦਮ ਕਲੱਸਟਰਾਂ ਦੀ ਸੰਖਿਆ 'k' ਦੇ ਚੋਣ ਦੀ ਮੰਗ ਕਰਦਾ ਹੈ, ਜਿਨ੍ਹਾਂ ਤੋਂ ਬਾਅਦ ਅਲਗੋਰਿਦਮ ਕੁਲੱਸਟਰ ਦਾ ਕੇਂਦਰੀ ਬਿੰਦੂ ਨਿਰਧਾਰਤ ਕਰਦਾ ਹੈ ਅਤੇ ਉਸ ਬਿੰਦੂ ਦੇ ਆਲੇ ਦੁਆਲੇ ਡਾਟਾ ਇਕੱਤਰ ਕਰਦਾ ਹੈ। [K-means ਕਲੱਸਟਰਿੰਗ](https://wikipedia.org/wiki/K-means_clustering) ਇਸ ਤਰੀਕੇ ਦੀ ਇੱਕ ਪ੍ਰਸਿੱਧ ਕਿਸਮ ਹੈ। ਕੇਂਦਰ ਨੇੜਲੇ ਮੀਨ ਨਾਲ ਨਿਰਧਾਰਤ ਕੀਤਾ ਜਾਂਦਾ ਹੈ, ਇਸ ਲਈ ਨਾਮ। ਕੁਲੱਸਟਰ ਤੋਂ ਵਰਗਮੂਲ ਦੂਰੀ ਘਟਾਈ ਜਾਂਦੀ ਹੈ।
|
|
|
|

|
|
> ਇਨਫੋਗ੍ਰਾਫਿਕ ਦੁਆਰਾ [ਦਸਾਨੀ ਮਾਡਿਪੱਲੀ](https://twitter.com/dasani_decoded)
|
|
|
|
- **ਵਿਤਰਨ-ਆਧਾਰਿਤ ਕਲੱਸਟਰਿੰਗ**। ਸਾਂਖਿਆਕੀ ਮਾਡਲਿੰਗ 'ਤੇ ਆਧਾਰਿਤ, ਵੰਡ-ਆਧਾਰਿਤ ਕਲੱਸਟਰਿੰਗ ਇਹ ਤਜਵੀਜ਼ ਕਰਦਾ ਹੈ ਕਿ ਇੱਕ ਡਾਟਾ ਬਿੰਦੂ ਕਿਸ ਕੁਲੱਸਟਰ ਦਾ ਸਦੱਸ ਹੋਣ ਦੀ ਸੰਭਾਵਨਾ ਕਿੰਨੀ ਹੈ ਅਤੇ ਉਸ ਅਨੁਸਾਰ ਅਸਾਈਨਮੈਂਟ ਕਰਦਾ ਹੈ। ਗਾਸੀਆਨ ਮਿਕਸਚਰ ਮੈਥਡ ਇਸ ਪ੍ਰਕਾਰ ਵਿੱਚ ਆਉਂਦੇ ਹਨ।
|
|
|
|
- **ਘਣਤਾ-ਆਧਾਰਿਤ ਕਲੱਸਟਰਿੰਗ**। ਡਾਟਾ ਬਿੰਦੂਆਂ ਨੂੰ ਉਨ੍ਹਾਂ ਦੀ ਘਣਤਾ, ਜਾਂ ਇਕ ਦੂਜੇ ਦੇ ਆਲੇ ਦੁਆਲੇ ਸਮੂਹਿਤ ਹੋਣ ਦੇ ਆਧਾਰ 'ਤੇ ਕੁਲੱਸਟਰਾਂ ਵਿੱਚ ਵੰਡਿਆ ਜਾਂਦਾ ਹੈ। ਸਮੂਹ ਤੋਂ ਦੂਰ ਬਿੰਦੂਆਂ ਨੂੰ ਆਊਟਲਾਇਰ ਜਾਂ ਸ਼ੋਰ ਮੰਨਿਆ ਜਾਂਦਾ ਹੈ। DBSCAN, ਮੀਨ-ਸ਼ਿਫਟ ਅਤੇ ਓਪਟਿਕਸ ਕਲੱਸਟਰਿੰਗ ਦੇ ਇਹ ਵਰਗ ਹਨ।
|
|
|
|
- **ਗ੍ਰਿਡ-ਆਧਾਰਿਤ ਕਲੱਸਟਰਿੰਗ**। ਬਹੁ-ਪਰਿਮਾਣਵਾਚੀ ਡਾਟਾਸੈੱਟ ਲਈ, ਇੱਕ ਗ੍ਰਿਡ ਬਣਾਈ ਜਾਂਦੀ ਹੈ ਅਤੇ ਡਾਟਾ ਗ੍ਰਿਡ ਦੀਆਂ ਸੈਲਾਂ ਵਿੱਚ ਵੰਡਿਆ ਜਾਂਦਾ ਹੈ, ਇਸ ਤਰ੍ਹਾਂ ਕੁਲੱਸਟਰ ਬਣਦੇ ਹਨ।
|
|
|
|
## ਅਭਿਆਸ - ਆਪਣੇ ਡਾਟੇ ਨੂੰ ਕਲੱਸਟਰ ਕਰੋ
|
|
|
|
ਕਲੱਸਟਰਿੰਗ ਇੱਕ ਤਕਨੀਕ ਵਜੋਂ ਸਹੀ ਵਿਜ਼ੁਅਲਾਈਜੇਸ਼ਨ ਨਾਲ ਬਹੁਤ ਸਹਾਇਤਾ ਹੁੰਦੀ ਹੈ, ਤਾਂ ਆਓ ਸਾਡਾ ਸੰਗੀਤ ਡਾਟਾ ਵਿਜ਼ੁਅਲਾਈਜ਼ ਕਰਕੇ ਸ਼ੁਰੂ ਕਰੀਏ। ਇਹ ਅਭਿਆਸ ਸਾਨੂੰ ਇਹ ਫੈਸਲਾ ਕਰਨ ਵਿੱਚ ਮਦਦ ਕਰੇਗਾ ਕਿ ਇਸ ਡਾਟੇ ਦੀ ਪ੍ਰਕ੍ਰਿਤੀ ਲਈ ਕਲੱਸਟਰਿੰਗ ਦੇ ਕਿਸ ਤਰੀਕੇ ਨੂੰ ਸਭ ਤੋਂ ਪ੍ਰਭਾਵਸ਼ਾਲੀ ਤਰੀਕੇ ਨਾਲ ਵਰਤਣਾ ਚਾਹੀਦਾ ਹੈ।
|
|
|
|
1. ਇਸ ਫੋਲਡਰ ਵਿੱਚ [_notebook.ipynb_](https://github.com/microsoft/ML-For-Beginners/blob/main/5-Clustering/1-Visualize/notebook.ipynb) ਫਾਇਲ ਖੋਲ੍ਹੋ।
|
|
|
|
1. ਵਧੀਆ ਡਾਟਾ ਵਿਜ਼ੁਅਲਾਈਜੇਸ਼ਨ ਲਈ `Seaborn` ਪੈਕੇਜ ਇੰਪੋਰਟ ਕਰੋ।
|
|
|
|
```python
|
|
!pip install seaborn
|
|
```
|
|
|
|
1. [_nigerian-songs.csv_](https://github.com/microsoft/ML-For-Beginners/blob/main/5-Clustering/data/nigerian-songs.csv) ਤੋਂ ਸੰਗੀਤ ਡਾਟਾ ਜੋੜੋ। ਕੁਝ ਗੀਤਾਂ ਬਾਰੇ ਡਾਟਾ ਲੋਡ ਕਰਨ ਲਈ ਡਾਟਾ ਫ੍ਰੇਮ ਬਣਾਓ। ਲਾਇਬਰੈਰੀਜ਼ ਇੰਪੋਰਟ ਕਰਕੇ ਅਤੇ ਡਾਟਾ ਦਿਖਾ ਕੇ ਇਸ ਡਾਟੇ ਦੀ ਖੋਜ ਕਰਨ ਲਈ ਤਿਆਰ ਹੋ ਜਾਓ:
|
|
|
|
```python
|
|
import matplotlib.pyplot as plt
|
|
import pandas as pd
|
|
|
|
df = pd.read_csv("../data/nigerian-songs.csv")
|
|
df.head()
|
|
```
|
|
|
|
ਡਾਟੇ ਦੀਆਂ ਪਹਿਲੀਆਂ ਕਈ ਲਾਈਨਾਂ ਦੇਖੋ:
|
|
|
|
| | name | album | artist | artist_top_genre | release_date | length | popularity | danceability | acousticness | energy | instrumentalness | liveness | loudness | speechiness | tempo | time_signature |
|
|
| --- | ------------------------ | ---------------------------- | ------------------- | ---------------- | ------------ | ------ | ---------- | ------------ | ------------ | ------ | ---------------- | -------- | -------- | ----------- | ------- | -------------- |
|
|
| 0 | Sparky | Mandy & The Jungle | Cruel Santino | alternative r&b | 2019 | 144000 | 48 | 0.666 | 0.851 | 0.42 | 0.534 | 0.11 | -6.699 | 0.0829 | 133.015 | 5 |
|
|
| 1 | shuga rush | EVERYTHING YOU HEARD IS TRUE | Odunsi (The Engine) | afropop | 2020 | 89488 | 30 | 0.71 | 0.0822 | 0.683 | 0.000169 | 0.101 | -5.64 | 0.36 | 129.993 | 3 |
|
|
| 2 | LITT! | LITT! | AYLØ | indie r&b | 2018 | 207758 | 40 | 0.836 | 0.272 | 0.564 | 0.000537 | 0.11 | -7.127 | 0.0424 | 130.005 | 4 |
|
|
| 3 | Confident / Feeling Cool | Enjoy Your Life | Lady Donli | nigerian pop | 2019 | 175135 | 14 | 0.894 | 0.798 | 0.611 | 0.000187 | 0.0964 | -4.961 | 0.113 | 111.087 | 4 |
|
|
| 4 | wanted you | rare. | Odunsi (The Engine) | afropop | 2018 | 152049 | 25 | 0.702 | 0.116 | 0.833 | 0.91 | 0.348 | -6.044 | 0.0447 | 105.115 | 4 |
|
|
|
|
1. ਡੇਟਾਫ੍ਰੇਮ ਬਾਰੇ ਕੁਝ ਜਾਣਕਾਰੀ ਪ੍ਰਾਪਤ ਕਰੋ, `info()` ਕਾਲ ਕਰਕੇ:
|
|
|
|
```python
|
|
df.info()
|
|
```
|
|
|
|
ਨਤੀਜਾ ਇਸ ਤਰ੍ਹਾਂ ਦਾ ਹੈ:
|
|
|
|
```output
|
|
<class 'pandas.core.frame.DataFrame'>
|
|
RangeIndex: 530 entries, 0 to 529
|
|
Data columns (total 16 columns):
|
|
# Column Non-Null Count Dtype
|
|
--- ------ -------------- -----
|
|
0 name 530 non-null object
|
|
1 album 530 non-null object
|
|
2 artist 530 non-null object
|
|
3 artist_top_genre 530 non-null object
|
|
4 release_date 530 non-null int64
|
|
5 length 530 non-null int64
|
|
6 popularity 530 non-null int64
|
|
7 danceability 530 non-null float64
|
|
8 acousticness 530 non-null float64
|
|
9 energy 530 non-null float64
|
|
10 instrumentalness 530 non-null float64
|
|
11 liveness 530 non-null float64
|
|
12 loudness 530 non-null float64
|
|
13 speechiness 530 non-null float64
|
|
14 tempo 530 non-null float64
|
|
15 time_signature 530 non-null int64
|
|
dtypes: float64(8), int64(4), object(4)
|
|
memory usage: 66.4+ KB
|
|
```
|
|
|
|
1. ਨੱਲ ਮੁੱਲਾਂ ਲਈ ਡਬਲ-ਚੈੱਕ ਕਰੋ, `isnull()` ਕਾਲ ਕਰਕੇ ਅਤੇ ਜੋੜ ਵੇਰਵਾ 0 ਹੋਵੇ ਨੂੰ ਯਕੀਨੀ ਬਣਾਉ:
|
|
|
|
```python
|
|
df.isnull().sum()
|
|
```
|
|
|
|
ਠੀਕ ਲੱਗ ਰਿਹਾ ਹੈ:
|
|
|
|
```output
|
|
name 0
|
|
album 0
|
|
artist 0
|
|
artist_top_genre 0
|
|
release_date 0
|
|
length 0
|
|
popularity 0
|
|
danceability 0
|
|
acousticness 0
|
|
energy 0
|
|
instrumentalness 0
|
|
liveness 0
|
|
loudness 0
|
|
speechiness 0
|
|
tempo 0
|
|
time_signature 0
|
|
dtype: int64
|
|
```
|
|
|
|
1. ਡੇਟਾ ਦਾ ਵਰਣਨ ਕਰੋ:
|
|
|
|
```python
|
|
df.describe()
|
|
```
|
|
|
|
| | release_date | length | popularity | danceability | acousticness | energy | instrumentalness | liveness | loudness | speechiness | tempo | time_signature |
|
|
| ----- | ------------ | ----------- | ---------- | ------------ | ------------ | -------- | ---------------- | -------- | --------- | ----------- | ---------- | -------------- |
|
|
| count | 530 | 530 | 530 | 530 | 530 | 530 | 530 | 530 | 530 | 530 | 530 | 530 |
|
|
| mean | 2015.390566 | 222298.1698 | 17.507547 | 0.741619 | 0.265412 | 0.760623 | 0.016305 | 0.147308 | -4.953011 | 0.130748 | 116.487864 | 3.986792 |
|
|
| std | 3.131688 | 39696.82226 | 18.992212 | 0.117522 | 0.208342 | 0.148533 | 0.090321 | 0.123588 | 2.464186 | 0.092939 | 23.518601 | 0.333701 |
|
|
| min | 1998 | 89488 | 0 | 0.255 | 0.000665 | 0.111 | 0 | 0.0283 | -19.362 | 0.0278 | 61.695 | 3 |
|
|
| 25% | 2014 | 199305 | 0 | 0.681 | 0.089525 | 0.669 | 0 | 0.07565 | -6.29875 | 0.0591 | 102.96125 | 4 |
|
|
| 50% | 2016 | 218509 | 13 | 0.761 | 0.2205 | 0.7845 | 0.000004 | 0.1035 | -4.5585 | 0.09795 | 112.7145 | 4 |
|
|
| 75% | 2017 | 242098.5 | 31 | 0.8295 | 0.403 | 0.87575 | 0.000234 | 0.164 | -3.331 | 0.177 | 125.03925 | 4 |
|
|
| max | 2020 | 511738 | 73 | 0.966 | 0.954 | 0.995 | 0.91 | 0.811 | 0.582 | 0.514 | 206.007 | 5 |
|
|
|
|
> 🤔 ਜੇ ਅਸੀਂ ਕਲੱਸਟਰਿੰਗ ਨਾਲ ਕੰਮ ਕਰ ਰਹੇ ਹਾਂ, ਜੋ ਇੱਕ ਆਨਸੁਪਰਵਾਈਜ਼ਡ ਤਰੀਕਾ ਹੈ ਜੋ ਲੇਬਲਡ ਡੇਟਾ ਦੀ ਲੋੜ ਨਹੀਂ ਰੱਖਦਾ, ਤਾਂ ਸਾਡੇ ਵੱਲੋਂ ਇਹ ਡੇਟਾ ਲੇਬਲਾਂ ਨਾਲ ਵੇਖਾਉਣ ਦੀ ਲੋੜ ਕਿਉਂ ਹੈ? ਡੇਟਾ ਐਕਸਪਲੋਰੇਸ਼ਨ ਦੀ фаз ਵਿੱਚ ਇਹ ਲਾਭਦਾਇਕ ਹੁੰਦੇ ਹਨ, ਪਰ ਕਲੱਸਟਰਿੰਗ ਐਲਗੋਰਿਦਮ ਲਈ ਇਹ ਜ਼ਰੂਰੀ ਨਹੀਂ ਹੁੰਦੇ। ਤੁਸੀਂ ਸਿਰਫ ਕਾਲਮ ਨੰਬਰਾਂ ਨਾਲ ਡੇਟਾ ਦਾ ਹਵਾਲਾ ਦੇ ਕੇ ਕਾਲਮ ਸਿਰਲੇਖ ਹਟਾ ਵੀ ਸਕਦੇ ਹੋ।
|
|
|
|
ਡੇਟਾ ਦੇ ਆਮ ਮੁੱਲਾਂ 'ਤੇ ਨਜ਼ਰ ਮਾਰੋ। ਧਿਆਨ ਦਿਓ ਕਿ popularity '0' ਹੋ ਸਕਦੀ ਹੈ, ਜੋ ਗੀਤਾਂ ਨੂੰ ਦਰਸਾਉਂਦੀ ਹੈ ਜਿਨ੍ਹਾਂ ਦੀ ਕੋਈ ਰੈਂਕਿੰਗ ਨਹੀਂ ਹੈ। ਆਓ ਅਸੀਂ ਹੁਣ ਉਹਨਾਂ ਨੂੰ ਹਟਾਉਂਦੇ ਹਾਂ।
|
|
|
|
1. ਸਭ ਤੋਂ ਪ੍ਰਸਿੱਧ ਜਾਨਰਾਂ ਨੂੰ ਖੋਜ ਲਈ ਬਾਰਪਲੌਟ ਦੀ ਵਰਤੋਂ ਕਰੋ:
|
|
|
|
```python
|
|
import seaborn as sns
|
|
|
|
top = df['artist_top_genre'].value_counts()
|
|
plt.figure(figsize=(10,7))
|
|
sns.barplot(x=top[:5].index,y=top[:5].values)
|
|
plt.xticks(rotation=45)
|
|
plt.title('Top genres',color = 'blue')
|
|
```
|
|
|
|

|
|
|
|
✅ ਜੇ ਤੁਸੀਂ ਜ਼ਿਆਦਾ ਸਿਖਰ ਦੇ ਮੁੱਲ ਵੇਖਣੇ ਚਾਹੁੰਦੇ ਹੋ, ਤਾਂ ਟਾਪ `[:5]` ਨੂੰ ਵੱਡੀ ਕੀਮਤ ਨਾਲ ਬਦਲੋ ਜਾਂ ਇਸਨੂੰ ਹਟਾ ਦਿਓ ਤਾਂ ਜੋ ਸਾਰੇ ਮੁੱਲ ਦੇਖ ਸਕੋ।
|
|
|
|
ਦਿਆਨ ਦਿਓ, ਜਦੋਂ ਸਿਖਰਲਾ ਜਾਨਰ 'Missing' ਵਜੋਂ ਦੱਸਿਆ ਜਾਂਦਾ ਹੈ, ਤਾਂ ਇਸਦਾ ਮਤਲਬ ਹੈ ਕਿ Spotify ਨੇ ਇਸਦੀ ਵਰਗੀਕਰਨ ਨਹੀਂ ਕੀਤੀ, ਇਸ ਲਈ ਆਓ ਇਸ ਨੂੰ ਹਟਾਈਏ।
|
|
|
|
1. ਗੁੰਮ ਹੋਈ ਡੇਟਾ ਨੂੰ ਫਿਲਟਰ ਕਰਕੇ ਹਟਾਓ
|
|
|
|
```python
|
|
df = df[df['artist_top_genre'] != 'Missing']
|
|
top = df['artist_top_genre'].value_counts()
|
|
plt.figure(figsize=(10,7))
|
|
sns.barplot(x=top.index,y=top.values)
|
|
plt.xticks(rotation=45)
|
|
plt.title('Top genres',color = 'blue')
|
|
```
|
|
|
|
ਹੁਣ ਜਾਨਰਾਂ ਦਾ ਮੁੜ ਮੁਆਇਨਾ ਕਰੋ:
|
|
|
|

|
|
|
|
1. ਇਸ ਡੈਟਾਸੇਟ ਵਿੱਚ ਤਿੰਨ ਸਿਖਰਲੇ ਜਾਨਰ ਬੜੀ ਸਖਤੀ ਨਾਲ ਪ੍ਰਭਾਵਿਤ ਹਨ। ਆਓ `afro dancehall`, `afropop`, ਅਤੇ `nigerian pop` ’ਤੇ ਧਿਆਨ ਕੇਂਦਰਿਤ ਕਰੀਏ, ਨਾਲ ਹੀ ਡੈਟਾਸੇਟ ਤੋਂ ਉਹ ਸਾਰੇ ਰਿਕਾਰਡ ਹਟਾਓ ਜਿਨ੍ਹਾਂ ਦੀ popularity 0 ਹੈ (ਜਿਸਦਾ ਮਤਲਬ ਹੈ ਕਿ ਉਹ ਡੈਟਾ ਵਿੱਚ popularity ਨਾਲ ਵਰਗੀਕ੍ਰਿਤ ਨਹੀਂ ਕੀਤੇ ਗਏ ਅਤੇ ਸਾਡੇ ਮਕਸਦ ਲਈ ਸ਼ੋਰ ਮੰਨੇ ਜਾ ਸਕਦੇ ਹਨ):
|
|
|
|
```python
|
|
df = df[(df['artist_top_genre'] == 'afro dancehall') | (df['artist_top_genre'] == 'afropop') | (df['artist_top_genre'] == 'nigerian pop')]
|
|
df = df[(df['popularity'] > 0)]
|
|
top = df['artist_top_genre'].value_counts()
|
|
plt.figure(figsize=(10,7))
|
|
sns.barplot(x=top.index,y=top.values)
|
|
plt.xticks(rotation=45)
|
|
plt.title('Top genres',color = 'blue')
|
|
```
|
|
|
|
1. ਇੱਕ ਛੋਟੀ ਟੈਸਟ ਕਰੋ ਜੁੜਾਵਾਂ ਨੂੰ ਕਿਸੇ ਖ਼ਾਸ ਤਾਕਤਵਰ ਢੰਗ ਨਾਲ ਦੇਖਣ ਲਈ:
|
|
|
|
```python
|
|
corrmat = df.corr(numeric_only=True)
|
|
f, ax = plt.subplots(figsize=(12, 9))
|
|
sns.heatmap(corrmat, vmax=.8, square=True)
|
|
```
|
|
|
|

|
|
|
|
ਸਿਰਫ਼ `energy` ਅਤੇ `loudness` ਵਿਚਕਾਰ ਹੀ ਤਾਕਤਵਰ ਜੁੜਾਵ ਹੈ, ਜੋ ਕਿ ਹੈਰਾਨ ਕਰਨ ਵਾਲੀ ਗੱਲ ਨਹੀਂ, ਕਿਉਂਕਿ ਉੱਚ ਸ਼ੋਰ ਵਾਲਾ ਸੰਗੀਤ ਆਮਤੌਰ 'ਤੇ ਬਹੁਤ ਉਰਜਾਵਾਨ ਹੁੰਦਾ ਹੈ। ਹੋਰਾਂ correlations ਕਾਫੀ ਨਰਮ ਹਨ। ਦੇਖਣਾ ਮਨੋਰੰਜਕ ਰਹੇਗਾ ਕਿ ਕਲੱਸਟਰਿੰਗ ਐਲਗੋਰਿਦਮ ਇਸ ਡੇਟਾ ਨਾਲ ਕੀ ਕਰਦਾ ਹੈ।
|
|
|
|
> 🎓 ਧਿਆਨ ਦਿਓ ਕਿ correlation causation ਨੂੰ ਸਾਬਤ ਨਹੀਂ ਕਰਦਾ! ਸਾਡੇ ਕੋਲ correlation ਦਾ ਸਬੂਤ ਹੈ ਪਰ causation ਦਾ ਨਹੀਂ। ਇੱਕ [ਮਜ਼ੇਦਾਰ ਵੈੱਬਸਾਈਟ](https://tylervigen.com/spurious-correlations) ਕੁਝ ਵਿਜ਼ੂਅਲਜ਼ ਦੇ ਕੇ ਇਸ ਬਿੰਦੂ ਨੂੰ ਝਲਕਾਉਂਦੀ ਹੈ।
|
|
|
|
ਕੀ ਇਸ ਡੇਟਾਸੇਟ ਵਿੱਚ ਗੀਤ ਦੀ ਸਮਝੀ ਗਈ ਪ੍ਰਸਿੱਧੀ ਅਤੇ ਨੱਚਣਯੋਗਤਾ ਵਿਚ ਕੋਈ ਇਕੱਤਰਤਾ ਹੈ? FacetGrid ਦਿਖਾਉਂਦਾ ਹੈ ਕਿ ਉਹਨਾਂ ਦੇ ਗੋਲ-ਗੋਲ ਚੱਕਰ ਹਨ ਜੋ ਜਾਨਰ ਦੀ ਪਰਵਾਹ ਕੀਤੇ ਬਿਨਾਂ ਲਗਦੇ ਹਨ। ਕੀ ਇਹ ਹੋ ਸਕਦਾ ਹੈ ਕਿ ਨਾਈਜੀਰੀਆਈ ਸਵਾਦ ਇਸ ਜਾਨਰ ਲਈ ਇੱਕ ਨੱਚਣਯੋਗਤਾ ਦੇ ਇੱਕ ਖਾਸ ਸਤਰ 'ਤੇ ਮਿਲਦੇ ਹਨ?
|
|
|
|
✅ ਵੱਖ-ਵੱਖ ਡੇਟਾਪੋਇੰਟ (energy, loudness, speechiness) ਅਤੇ ਹੋਰ ਜਾਂ ਵੱਖਰੇ ਸੰਗੀਤਕ ਜਾਨਰਾਂ ਦੀ ਕੋਸ਼ਿਸ਼ ਕਰੋ। ਤੁਸੀਂ ਕੀ ਖੋਜ ਸਕਦੇ ਹੋ? ਗਲੋਬਲ ਡੇਟਾਪੋਇੰਟ ਦੇ ਫੈਲਾਵ ਨੂੰ ਵੇਖਣ ਲਈ `df.describe()` ਟੇਬਲ ਨੂੰ ਦੇਖੋ।
|
|
|
|
### ਵਿਆਯਾਮ - ਡੇਟਾ ਵੰਡ
|
|
|
|
ਕੀ ਇਹ ਤਿੰਨ ਜਾਨਰ ਆਪਣੇ ਪ੍ਰਸਿੱਧੀ ਦੇ ਆਧਾਰ 'ਤੇ ਆਪਣੇ ਨੱਚਣਯੋਗਤਾ ਦੀ ਸਮਝ ਵਿੱਚ ਮਹੱਤਵਪੂਰਨ ਤੌਰ 'ਤੇ ਵੱਖਰੇ ਹਨ?
|
|
|
|
1. ਸਾਡੇ ਟਾਪ ਤਿੰਨ ਜਾਨਰਾਂ ਦੀ ਡੇਟਾ ਵੰਡ ਦੀ ਜਾਂਚ ਕਰੋ, ਪ੍ਰਸਿੱਧੀ ਅਤੇ ਨੱਚਣਯੋਗਤਾ ਲਈ ਦਿੱਤੇ ਹੋਏ x ਅਤੇ y ਧੁਰੀਆਂ 'ਤੇ।
|
|
|
|
```python
|
|
sns.set_theme(style="ticks")
|
|
|
|
g = sns.jointplot(
|
|
data=df,
|
|
x="popularity", y="danceability", hue="artist_top_genre",
|
|
kind="kde",
|
|
)
|
|
```
|
|
|
|
ਤੁਸੀਂ ਇੱਕ ਆਮ ਇਕੱਤਰਤਾ ਬਿੰਦੂ ਦੇ ਆਸ-ਪਾਸ ਗੋਲ-ਗੋਲ ਚੱਕਰ ਖੋਜ ਸਕਦੇ ਹੋ, ਜੋ ਪੌਇੰਟਸ ਦੀ ਵੰਡ ਦਰਸਾਉਂਦਾ ਹੈ।
|
|
|
|
> 🎓 ਧਿਆਨ ਦਿਓ ਕਿ ਇਹ ਉਦਾਹਰਨ KDE (Kernel Density Estimate) ਗ੍ਰਾਫ ਦੀ ਵਰਤੋਂ ਕਰਦੀ ਹੈ ਜੋ ਡੇਟਾ ਨੂੰ ਇੱਕ ਲਗਾਤਾਰ ਸੰਭਾਵਨਾ ਘਣਤਾ ਵੇਖਾਵਟ ਨਾਲ ਦਰਸਾਉਂਦਾ ਹੈ। ਇਹ ਸਾਨੂੰ ਕਈ ਵੰਡਾਂ ਨਾਲ ਕੰਮ ਕਰਦੇ ਸਮੇਂ ਡੇਟਾ ਦੀ ਵਿਵਖਿਆ ਕਰਨ ਦੀ ਆਗਿਆ ਦਿੰਦਾ ਹੈ।
|
|
|
|
ਆਮ ਤੌਰ 'ਤੇ, ਇਹ ਤਿੰਨ ਜਾਨਰ ਆਪਣੀ ਪ੍ਰਸਿੱਧੀ ਅਤੇ ਨੱਚਣਯੋਗਤਾ ਦੇ ਮਾਮਲੇ ਵਿੱਚ ਖੁਲ੍ਹੇ ਤੌਰ 'ਤੇ ਮਿਲਦੇ ਹਨ। ਇਸ ਖੁੱਲੀ ਵੰਡ ਵਿੱਚ ਕਲੱਸਟਰ ਤੈਅ ਕਰਨਾ ਚੁਣੌਤੀਪੂਰਨ ਹੋਵੇਗਾ:
|
|
|
|

|
|
|
|
1. ਇੱਕ ਸਕੈਟਰ ਪਲੌਟ ਬਣਾਓ:
|
|
|
|
```python
|
|
sns.FacetGrid(df, hue="artist_top_genre", height=5) \
|
|
.map(plt.scatter, "popularity", "danceability") \
|
|
.add_legend()
|
|
```
|
|
|
|
ਉਹੀ ਧੁਰੀਆਂ ਵਾਲਾ ਸਕੈਟਰਪਲੌਟ ਇੱਕ ਸਮਾਨ ਇਕੱਤਰਤਾ ਪੈਟਰਨ ਦਰਸਾਉਂਦਾ ਹੈ
|
|
|
|

|
|
|
|
ਆਮ ਤੌਰ 'ਤੇ, ਕਲੱਸਟਰਿੰਗ ਲਈ, ਤੁਸੀਂ ਡੇਟਾ ਦੇ ਕਲੱਸਟਰਾਂ ਨੂੰ ਵੇਖਾਉਣ ਲਈ ਸਕੈਟਰਪਲੌਟ ਵਰਤ ਸਕਦੇ ਹੋ, ਇਸ ਲਈ ਇਸ ਕਿਸਮ ਦੀ ਵਿਜ਼ੂਅਲਾਈਜ਼ੇਸ਼ਨ ਨੂੰ ਜਾਣਨਾ ਬਹੁਤ ਲਾਭਦਾਇਕ ਹੈ। ਅਗਲੇ ਪਾਠ ਵਿੱਚ, ਅਸੀਂ ਇਸ ਫਿਲਟਰਡ ਡੇਟਾ ਦੀ ਵਰਤੋਂ ਕਰਕੇ k-means ਕਲੱਸਟਰਿੰਗ ਨਾਲ ਉਹ ਗਰੁੱਪ ਖੋਜਾਂਗੇ ਜੋ ਇਸ ਡੇਟਾ ਵਿੱਚ ਦਿਲਚਸਪ ਤਰੀਕੇ ਨਾਲ ਓਵਰਲੈਪ ਹੋਦੇ ਹਨ।
|
|
|
|
---
|
|
|
|
## 🚀ਚੁਣੌਤੀ
|
|
|
|
ਅਗਲੇ ਪਾਠ ਦੀ ਤਿਆਰੀ ਲਈ, ਉਹ ਵੱਖ-ਵੱਖ ਕਲੱਸਟਰਿੰਗ ਐਲਗੋਰਿਦਮਾਂ ਬਾਰੇ ਇੱਕ ਚਾਰਟ ਬਣਾਓ ਜੋ ਤੁਸੀਂ ਪ੍ਰੋਡਕਸ਼ਨ ਮਾਹੌਲ ਵਿੱਚ ਲੱਭ ਸਕਦੇ ਹੋ ਅਤੇ ਵਰਤ ਸਕਦੇ ਹੋ। ਕਿਹੜੇ ਕਿਸਮ ਦੇ ਸਮੱਸਿਆਵਾਂ ਨੂੰ ਕਲੱਸਟਰਿੰਗ ਹੱਲ ਕਰਨ ਦੀ ਕੋਸ਼ਿਸ਼ ਕਰ ਰਹੀ ਹੈ?
|
|
|
|
## [ਪੋਸਟ-ਲੈੱਕਚਰ ਕੁਇਜ਼](https://ff-quizzes.netlify.app/en/ml/)
|
|
|
|
## ਸਮੀਖਿਆ ਅਤੇ ਖੁਦ-ਅਧਿਐਨ
|
|
|
|
ਕਲੱਸਟਰਿੰਗ ਐਲਗੋਰਿਦਮ ਲਾਗੂ ਕਰਨ ਤੋਂ ਪਹਿਲਾਂ, ਜਿਵੇਂ ਕਿ ਅਸੀਂ ਸਿੱਖਿਆ ਹੈ, ਇਹ ਬਿਹਤਰ ਹੈ ਕਿ ਤੁਸੀਂ ਆਪਣੇ ਡੇਟਾਸੇਟ ਦੀ ਕੁਦਰਤ ਜਾਨਣ। ਇਸ ਵਿਸ਼ੇ 'ਤੇ ਵਧੇਰੇ ਪੜ੍ਹੋ [ਇੱਥੇ](https://www.kdnuggets.com/2019/10/right-clustering-algorithm.html)
|
|
|
|
[ਇਹ ਸਹਾਇਕ ਲੇਖ](https://www.freecodecamp.org/news/8-clustering-algorithms-in-machine-learning-that-all-data-scientists-should-know/) ਤੁਹਾਨੂੰ ਵੱਖ-ਵੱਖ ਕਲੱਸਟਰਿੰਗ ਐਲਗੋਰਿਦਮਾਂ ਦੇ ਵਿਵਹਾਰ ਬਾਰੇ ਗਾਈਡ ਕਰਦਾ ਹੈ, ਜੋ ਵੱਖਰੇ ਡੇਟਾ ਰੂਪਾਂ 'ਤੇ ਆਧਾਰਿਤ ਹਨ।
|
|
|
|
## ਅਸਾਈਨਮੈਂਟ
|
|
|
|
[ਕਲੱਸਟਰਿੰਗ ਲਈ ਹੋਰ ਵਿਜ਼ੂਅਲਾਈਜ਼ੇਸ਼ਨਾਂ ਦੀ ਖੋਜ ਕਰੋ](assignment.md)
|
|
|
|
---
|
|
|
|
<!-- CO-OP TRANSLATOR DISCLAIMER START -->
|
|
**ਅਸਵੀਕਾਰੋਪਣ**:
|
|
ਇਸ ਦਸਤਾਵੇਜ਼ ਦਾ ਅਨੁਵਾਦ ਏਆਈ ਅਨੁਵਾਦ ਸੇਵਾ [Co-op Translator](https://github.com/Azure/co-op-translator) ਦੀ ਵਰਤੋਂ ਕਰਕੇ ਕੀਤਾ ਗਿਆ ਹੈ। ਜਦੋਂ ਕਿ ਅਸੀਂ ਸਹੀਤਾਵਾਂ ਲਈ ਯਤਨਸ਼ੀਲ ਹਾਂ, ਕਿਰਪਾ ਕਰਕੇ ਧਿਆਨ ਰੱਖੋ ਕਿ ਸਵੈਚਾਲਿਤ ਅਨੁਵਾਦਾਂ ਵਿੱਚ ਗਲਤੀਆਂ ਜਾਂ ਅਸਮੱਤਿਆਵਾਂ ਹੋ ਸਕਦੀਆਂ ਹਨ। ਮੂਲ ਦਸਤਾਵੇਜ਼ ਆਪਣੀ ਮੂਲ ਭਾਸ਼ਾ ਵਿੱਚ ਅਧਿਕਾਰਕ ਸਰੋਤ ਮੰਨਿਆ ਜਾਣਾ ਚਾਹੀਦਾ ਹੈ। ਜਰੂਰੀ ਜਾਣਕਾਰੀ ਲਈ, ਪੇਸ਼ੇਵਰ ਮਨੁੱਖੀ ਅਨੁਵਾਦ ਦੀ ਸਿਫ਼ਾਰਸ਼ ਕੀਤੀ ਜਾਂਦੀ ਹੈ। ਅਸੀਂ ਇਸ ਅਨੁਵਾਦ ਦੇ ਉਪਯੋਗ ਤੋਂ ਪੈਦਾ ਹੋਣ ਵਾਲੀਆਂ ਕਿਸੇ ਵੀ ਗਲਤਫਹਿਮੀਆਂ ਜਾਂ ਗਲਤ ਵਿਆਖਿਆਵਾਂ ਲਈ ਜਵਾਬਦੇਹ ਨਹੀਂ ਹਾਂ।
|
|
<!-- CO-OP TRANSLATOR DISCLAIMER END --> |