diff --git a/translated_images/9-feature-importance.cd3193b4bba3fd4bccd415f566c2437fb3298c4824a3dabbcab15270d783606e.ar.png b/translated_images/9-feature-importance.cd3193b4bba3fd4bccd415f566c2437fb3298c4824a3dabbcab15270d783606e.ar.png
new file mode 100644
index 000000000..21ac354d7
Binary files /dev/null and b/translated_images/9-feature-importance.cd3193b4bba3fd4bccd415f566c2437fb3298c4824a3dabbcab15270d783606e.ar.png differ
diff --git a/translated_images/9-feature-importance.cd3193b4bba3fd4bccd415f566c2437fb3298c4824a3dabbcab15270d783606e.tl.png b/translated_images/9-feature-importance.cd3193b4bba3fd4bccd415f566c2437fb3298c4824a3dabbcab15270d783606e.tl.png
new file mode 100644
index 000000000..21ac354d7
Binary files /dev/null and b/translated_images/9-feature-importance.cd3193b4bba3fd4bccd415f566c2437fb3298c4824a3dabbcab15270d783606e.tl.png differ
diff --git a/translated_images/9-feature-importance.cd3193b4bba3fd4bccd415f566c2437fb3298c4824a3dabbcab15270d783606e.ur.png b/translated_images/9-feature-importance.cd3193b4bba3fd4bccd415f566c2437fb3298c4824a3dabbcab15270d783606e.ur.png
new file mode 100644
index 000000000..21ac354d7
Binary files /dev/null and b/translated_images/9-feature-importance.cd3193b4bba3fd4bccd415f566c2437fb3298c4824a3dabbcab15270d783606e.ur.png differ
diff --git a/translated_images/9-features-influence.3ead3d3f68a84029f1e40d3eba82107445d3d3b6975d4682b23d8acc905da6d0.ar.png b/translated_images/9-features-influence.3ead3d3f68a84029f1e40d3eba82107445d3d3b6975d4682b23d8acc905da6d0.ar.png
new file mode 100644
index 000000000..c4dbb1e9c
Binary files /dev/null and b/translated_images/9-features-influence.3ead3d3f68a84029f1e40d3eba82107445d3d3b6975d4682b23d8acc905da6d0.ar.png differ
diff --git a/translated_images/9-features-influence.3ead3d3f68a84029f1e40d3eba82107445d3d3b6975d4682b23d8acc905da6d0.tl.png b/translated_images/9-features-influence.3ead3d3f68a84029f1e40d3eba82107445d3d3b6975d4682b23d8acc905da6d0.tl.png
new file mode 100644
index 000000000..c4dbb1e9c
Binary files /dev/null and b/translated_images/9-features-influence.3ead3d3f68a84029f1e40d3eba82107445d3d3b6975d4682b23d8acc905da6d0.tl.png differ
diff --git a/translated_images/9-features-influence.3ead3d3f68a84029f1e40d3eba82107445d3d3b6975d4682b23d8acc905da6d0.ur.png b/translated_images/9-features-influence.3ead3d3f68a84029f1e40d3eba82107445d3d3b6975d4682b23d8acc905da6d0.ur.png
new file mode 100644
index 000000000..c4dbb1e9c
Binary files /dev/null and b/translated_images/9-features-influence.3ead3d3f68a84029f1e40d3eba82107445d3d3b6975d4682b23d8acc905da6d0.ur.png differ
diff --git a/translated_images/ROC.167a70519c5bf8983f04e959942bb550de0fa37c220ff12c0f272d1af16e764a.ar.png b/translated_images/ROC.167a70519c5bf8983f04e959942bb550de0fa37c220ff12c0f272d1af16e764a.ar.png
new file mode 100644
index 000000000..3117bbc41
Binary files /dev/null and b/translated_images/ROC.167a70519c5bf8983f04e959942bb550de0fa37c220ff12c0f272d1af16e764a.ar.png differ
diff --git a/translated_images/ROC.167a70519c5bf8983f04e959942bb550de0fa37c220ff12c0f272d1af16e764a.tl.png b/translated_images/ROC.167a70519c5bf8983f04e959942bb550de0fa37c220ff12c0f272d1af16e764a.tl.png
new file mode 100644
index 000000000..3117bbc41
Binary files /dev/null and b/translated_images/ROC.167a70519c5bf8983f04e959942bb550de0fa37c220ff12c0f272d1af16e764a.tl.png differ
diff --git a/translated_images/ROC.167a70519c5bf8983f04e959942bb550de0fa37c220ff12c0f272d1af16e764a.ur.png b/translated_images/ROC.167a70519c5bf8983f04e959942bb550de0fa37c220ff12c0f272d1af16e764a.ur.png
new file mode 100644
index 000000000..3117bbc41
Binary files /dev/null and b/translated_images/ROC.167a70519c5bf8983f04e959942bb550de0fa37c220ff12c0f272d1af16e764a.ur.png differ
diff --git a/translated_images/ROC_2.777f20cdfc4988ca683ade6850ac832cb70c96c12f1b910d294f270ef36e1a1c.ar.png b/translated_images/ROC_2.777f20cdfc4988ca683ade6850ac832cb70c96c12f1b910d294f270ef36e1a1c.ar.png
new file mode 100644
index 000000000..b5ee41043
Binary files /dev/null and b/translated_images/ROC_2.777f20cdfc4988ca683ade6850ac832cb70c96c12f1b910d294f270ef36e1a1c.ar.png differ
diff --git a/translated_images/ROC_2.777f20cdfc4988ca683ade6850ac832cb70c96c12f1b910d294f270ef36e1a1c.tl.png b/translated_images/ROC_2.777f20cdfc4988ca683ade6850ac832cb70c96c12f1b910d294f270ef36e1a1c.tl.png
new file mode 100644
index 000000000..b5ee41043
Binary files /dev/null and b/translated_images/ROC_2.777f20cdfc4988ca683ade6850ac832cb70c96c12f1b910d294f270ef36e1a1c.tl.png differ
diff --git a/translated_images/ROC_2.777f20cdfc4988ca683ade6850ac832cb70c96c12f1b910d294f270ef36e1a1c.ur.png b/translated_images/ROC_2.777f20cdfc4988ca683ade6850ac832cb70c96c12f1b910d294f270ef36e1a1c.ur.png
new file mode 100644
index 000000000..b5ee41043
Binary files /dev/null and b/translated_images/ROC_2.777f20cdfc4988ca683ade6850ac832cb70c96c12f1b910d294f270ef36e1a1c.ur.png differ
diff --git a/translated_images/accessibility.c1be5ce816eaea652fe1879bbaf74d97ef15d895ee852a7b0e3542a77b735137.ar.png b/translated_images/accessibility.c1be5ce816eaea652fe1879bbaf74d97ef15d895ee852a7b0e3542a77b735137.ar.png
new file mode 100644
index 000000000..aa9d4d053
Binary files /dev/null and b/translated_images/accessibility.c1be5ce816eaea652fe1879bbaf74d97ef15d895ee852a7b0e3542a77b735137.ar.png differ
diff --git a/translated_images/accessibility.c1be5ce816eaea652fe1879bbaf74d97ef15d895ee852a7b0e3542a77b735137.tl.png b/translated_images/accessibility.c1be5ce816eaea652fe1879bbaf74d97ef15d895ee852a7b0e3542a77b735137.tl.png
new file mode 100644
index 000000000..aa9d4d053
Binary files /dev/null and b/translated_images/accessibility.c1be5ce816eaea652fe1879bbaf74d97ef15d895ee852a7b0e3542a77b735137.tl.png differ
diff --git a/translated_images/accessibility.c1be5ce816eaea652fe1879bbaf74d97ef15d895ee852a7b0e3542a77b735137.ur.png b/translated_images/accessibility.c1be5ce816eaea652fe1879bbaf74d97ef15d895ee852a7b0e3542a77b735137.ur.png
new file mode 100644
index 000000000..aa9d4d053
Binary files /dev/null and b/translated_images/accessibility.c1be5ce816eaea652fe1879bbaf74d97ef15d895ee852a7b0e3542a77b735137.ur.png differ
diff --git a/translated_images/accountability.41d8c0f4b85b6231301d97f17a450a805b7a07aaeb56b34015d71c757cad142e.ar.png b/translated_images/accountability.41d8c0f4b85b6231301d97f17a450a805b7a07aaeb56b34015d71c757cad142e.ar.png
new file mode 100644
index 000000000..591e7c695
Binary files /dev/null and b/translated_images/accountability.41d8c0f4b85b6231301d97f17a450a805b7a07aaeb56b34015d71c757cad142e.ar.png differ
diff --git a/translated_images/accountability.41d8c0f4b85b6231301d97f17a450a805b7a07aaeb56b34015d71c757cad142e.tl.png b/translated_images/accountability.41d8c0f4b85b6231301d97f17a450a805b7a07aaeb56b34015d71c757cad142e.tl.png
new file mode 100644
index 000000000..591e7c695
Binary files /dev/null and b/translated_images/accountability.41d8c0f4b85b6231301d97f17a450a805b7a07aaeb56b34015d71c757cad142e.tl.png differ
diff --git a/translated_images/accountability.41d8c0f4b85b6231301d97f17a450a805b7a07aaeb56b34015d71c757cad142e.ur.png b/translated_images/accountability.41d8c0f4b85b6231301d97f17a450a805b7a07aaeb56b34015d71c757cad142e.ur.png
new file mode 100644
index 000000000..591e7c695
Binary files /dev/null and b/translated_images/accountability.41d8c0f4b85b6231301d97f17a450a805b7a07aaeb56b34015d71c757cad142e.ur.png differ
diff --git a/translated_images/accuracy.2c47fe1bf15f44b3656651c84d5e2ba9b37cd929cd2aa8ab6cc3073f50570f4e.ar.png b/translated_images/accuracy.2c47fe1bf15f44b3656651c84d5e2ba9b37cd929cd2aa8ab6cc3073f50570f4e.ar.png
new file mode 100644
index 000000000..4fa08b2cc
Binary files /dev/null and b/translated_images/accuracy.2c47fe1bf15f44b3656651c84d5e2ba9b37cd929cd2aa8ab6cc3073f50570f4e.ar.png differ
diff --git a/translated_images/accuracy.2c47fe1bf15f44b3656651c84d5e2ba9b37cd929cd2aa8ab6cc3073f50570f4e.tl.png b/translated_images/accuracy.2c47fe1bf15f44b3656651c84d5e2ba9b37cd929cd2aa8ab6cc3073f50570f4e.tl.png
new file mode 100644
index 000000000..4fa08b2cc
Binary files /dev/null and b/translated_images/accuracy.2c47fe1bf15f44b3656651c84d5e2ba9b37cd929cd2aa8ab6cc3073f50570f4e.tl.png differ
diff --git a/translated_images/accuracy.2c47fe1bf15f44b3656651c84d5e2ba9b37cd929cd2aa8ab6cc3073f50570f4e.ur.png b/translated_images/accuracy.2c47fe1bf15f44b3656651c84d5e2ba9b37cd929cd2aa8ab6cc3073f50570f4e.ur.png
new file mode 100644
index 000000000..4fa08b2cc
Binary files /dev/null and b/translated_images/accuracy.2c47fe1bf15f44b3656651c84d5e2ba9b37cd929cd2aa8ab6cc3073f50570f4e.ur.png differ
diff --git a/translated_images/ai-ml-ds.537ea441b124ebf69c144a52c0eb13a7af63c4355c2f92f440979380a2fb08b8.ar.png b/translated_images/ai-ml-ds.537ea441b124ebf69c144a52c0eb13a7af63c4355c2f92f440979380a2fb08b8.ar.png
new file mode 100644
index 000000000..8ab82c166
Binary files /dev/null and b/translated_images/ai-ml-ds.537ea441b124ebf69c144a52c0eb13a7af63c4355c2f92f440979380a2fb08b8.ar.png differ
diff --git a/translated_images/ai-ml-ds.537ea441b124ebf69c144a52c0eb13a7af63c4355c2f92f440979380a2fb08b8.tl.png b/translated_images/ai-ml-ds.537ea441b124ebf69c144a52c0eb13a7af63c4355c2f92f440979380a2fb08b8.tl.png
new file mode 100644
index 000000000..8ab82c166
Binary files /dev/null and b/translated_images/ai-ml-ds.537ea441b124ebf69c144a52c0eb13a7af63c4355c2f92f440979380a2fb08b8.tl.png differ
diff --git a/translated_images/ai-ml-ds.537ea441b124ebf69c144a52c0eb13a7af63c4355c2f92f440979380a2fb08b8.ur.png b/translated_images/ai-ml-ds.537ea441b124ebf69c144a52c0eb13a7af63c4355c2f92f440979380a2fb08b8.ur.png
new file mode 100644
index 000000000..8ab82c166
Binary files /dev/null and b/translated_images/ai-ml-ds.537ea441b124ebf69c144a52c0eb13a7af63c4355c2f92f440979380a2fb08b8.ur.png differ
diff --git a/translated_images/all-genres.1d56ef06cefbfcd61183023834ed3cb891a5ee638a3ba5c924b3151bf80208d7.ar.png b/translated_images/all-genres.1d56ef06cefbfcd61183023834ed3cb891a5ee638a3ba5c924b3151bf80208d7.ar.png
new file mode 100644
index 000000000..88f5c2e88
Binary files /dev/null and b/translated_images/all-genres.1d56ef06cefbfcd61183023834ed3cb891a5ee638a3ba5c924b3151bf80208d7.ar.png differ
diff --git a/translated_images/all-genres.1d56ef06cefbfcd61183023834ed3cb891a5ee638a3ba5c924b3151bf80208d7.tl.png b/translated_images/all-genres.1d56ef06cefbfcd61183023834ed3cb891a5ee638a3ba5c924b3151bf80208d7.tl.png
new file mode 100644
index 000000000..88f5c2e88
Binary files /dev/null and b/translated_images/all-genres.1d56ef06cefbfcd61183023834ed3cb891a5ee638a3ba5c924b3151bf80208d7.tl.png differ
diff --git a/translated_images/all-genres.1d56ef06cefbfcd61183023834ed3cb891a5ee638a3ba5c924b3151bf80208d7.ur.png b/translated_images/all-genres.1d56ef06cefbfcd61183023834ed3cb891a5ee638a3ba5c924b3151bf80208d7.ur.png
new file mode 100644
index 000000000..88f5c2e88
Binary files /dev/null and b/translated_images/all-genres.1d56ef06cefbfcd61183023834ed3cb891a5ee638a3ba5c924b3151bf80208d7.ur.png differ
diff --git a/translated_images/apple.c81c8d5965e5e5daab4a5f6d6aa08162915f2118ce0e46f2867f1a46335e874c.ar.png b/translated_images/apple.c81c8d5965e5e5daab4a5f6d6aa08162915f2118ce0e46f2867f1a46335e874c.ar.png
new file mode 100644
index 000000000..a2f8cd88e
Binary files /dev/null and b/translated_images/apple.c81c8d5965e5e5daab4a5f6d6aa08162915f2118ce0e46f2867f1a46335e874c.ar.png differ
diff --git a/translated_images/apple.c81c8d5965e5e5daab4a5f6d6aa08162915f2118ce0e46f2867f1a46335e874c.tl.png b/translated_images/apple.c81c8d5965e5e5daab4a5f6d6aa08162915f2118ce0e46f2867f1a46335e874c.tl.png
new file mode 100644
index 000000000..a2f8cd88e
Binary files /dev/null and b/translated_images/apple.c81c8d5965e5e5daab4a5f6d6aa08162915f2118ce0e46f2867f1a46335e874c.tl.png differ
diff --git a/translated_images/apple.c81c8d5965e5e5daab4a5f6d6aa08162915f2118ce0e46f2867f1a46335e874c.ur.png b/translated_images/apple.c81c8d5965e5e5daab4a5f6d6aa08162915f2118ce0e46f2867f1a46335e874c.ur.png
new file mode 100644
index 000000000..a2f8cd88e
Binary files /dev/null and b/translated_images/apple.c81c8d5965e5e5daab4a5f6d6aa08162915f2118ce0e46f2867f1a46335e874c.ur.png differ
diff --git a/translated_images/barchart.a833ea9194346d769c77a3a870f7d8aee51574cd1138ca902e5500830a41cbce.ar.png b/translated_images/barchart.a833ea9194346d769c77a3a870f7d8aee51574cd1138ca902e5500830a41cbce.ar.png
new file mode 100644
index 000000000..1689371ad
Binary files /dev/null and b/translated_images/barchart.a833ea9194346d769c77a3a870f7d8aee51574cd1138ca902e5500830a41cbce.ar.png differ
diff --git a/translated_images/barchart.a833ea9194346d769c77a3a870f7d8aee51574cd1138ca902e5500830a41cbce.tl.png b/translated_images/barchart.a833ea9194346d769c77a3a870f7d8aee51574cd1138ca902e5500830a41cbce.tl.png
new file mode 100644
index 000000000..1689371ad
Binary files /dev/null and b/translated_images/barchart.a833ea9194346d769c77a3a870f7d8aee51574cd1138ca902e5500830a41cbce.tl.png differ
diff --git a/translated_images/barchart.a833ea9194346d769c77a3a870f7d8aee51574cd1138ca902e5500830a41cbce.ur.png b/translated_images/barchart.a833ea9194346d769c77a3a870f7d8aee51574cd1138ca902e5500830a41cbce.ur.png
new file mode 100644
index 000000000..1689371ad
Binary files /dev/null and b/translated_images/barchart.a833ea9194346d769c77a3a870f7d8aee51574cd1138ca902e5500830a41cbce.ur.png differ
diff --git a/translated_images/bellman-equation.7c0c4c722e5a6b7c208071a0bae51664965050848e4f8a84bb377cd18bdd838b.ar.png b/translated_images/bellman-equation.7c0c4c722e5a6b7c208071a0bae51664965050848e4f8a84bb377cd18bdd838b.ar.png
new file mode 100644
index 000000000..d51931923
Binary files /dev/null and b/translated_images/bellman-equation.7c0c4c722e5a6b7c208071a0bae51664965050848e4f8a84bb377cd18bdd838b.ar.png differ
diff --git a/translated_images/bellman-equation.7c0c4c722e5a6b7c208071a0bae51664965050848e4f8a84bb377cd18bdd838b.tl.png b/translated_images/bellman-equation.7c0c4c722e5a6b7c208071a0bae51664965050848e4f8a84bb377cd18bdd838b.tl.png
new file mode 100644
index 000000000..d51931923
Binary files /dev/null and b/translated_images/bellman-equation.7c0c4c722e5a6b7c208071a0bae51664965050848e4f8a84bb377cd18bdd838b.tl.png differ
diff --git a/translated_images/bellman-equation.7c0c4c722e5a6b7c208071a0bae51664965050848e4f8a84bb377cd18bdd838b.ur.png b/translated_images/bellman-equation.7c0c4c722e5a6b7c208071a0bae51664965050848e4f8a84bb377cd18bdd838b.ur.png
new file mode 100644
index 000000000..d51931923
Binary files /dev/null and b/translated_images/bellman-equation.7c0c4c722e5a6b7c208071a0bae51664965050848e4f8a84bb377cd18bdd838b.ur.png differ
diff --git a/translated_images/binary-multiclass.b56d0c86c81105a697dddd82242c1d11e4d78b7afefea07a44627a0f1111c1a9.ar.png b/translated_images/binary-multiclass.b56d0c86c81105a697dddd82242c1d11e4d78b7afefea07a44627a0f1111c1a9.ar.png
new file mode 100644
index 000000000..0a61a2ffc
Binary files /dev/null and b/translated_images/binary-multiclass.b56d0c86c81105a697dddd82242c1d11e4d78b7afefea07a44627a0f1111c1a9.ar.png differ
diff --git a/translated_images/binary-multiclass.b56d0c86c81105a697dddd82242c1d11e4d78b7afefea07a44627a0f1111c1a9.tl.png b/translated_images/binary-multiclass.b56d0c86c81105a697dddd82242c1d11e4d78b7afefea07a44627a0f1111c1a9.tl.png
new file mode 100644
index 000000000..0a61a2ffc
Binary files /dev/null and b/translated_images/binary-multiclass.b56d0c86c81105a697dddd82242c1d11e4d78b7afefea07a44627a0f1111c1a9.tl.png differ
diff --git a/translated_images/binary-multiclass.b56d0c86c81105a697dddd82242c1d11e4d78b7afefea07a44627a0f1111c1a9.ur.png b/translated_images/binary-multiclass.b56d0c86c81105a697dddd82242c1d11e4d78b7afefea07a44627a0f1111c1a9.ur.png
new file mode 100644
index 000000000..0a61a2ffc
Binary files /dev/null and b/translated_images/binary-multiclass.b56d0c86c81105a697dddd82242c1d11e4d78b7afefea07a44627a0f1111c1a9.ur.png differ
diff --git a/translated_images/boxplots.8228c29dabd0f29227dd38624231a175f411f1d8d4d7c012cb770e00e4fdf8b6.ar.png b/translated_images/boxplots.8228c29dabd0f29227dd38624231a175f411f1d8d4d7c012cb770e00e4fdf8b6.ar.png
new file mode 100644
index 000000000..14982b3aa
Binary files /dev/null and b/translated_images/boxplots.8228c29dabd0f29227dd38624231a175f411f1d8d4d7c012cb770e00e4fdf8b6.ar.png differ
diff --git a/translated_images/boxplots.8228c29dabd0f29227dd38624231a175f411f1d8d4d7c012cb770e00e4fdf8b6.tl.png b/translated_images/boxplots.8228c29dabd0f29227dd38624231a175f411f1d8d4d7c012cb770e00e4fdf8b6.tl.png
new file mode 100644
index 000000000..14982b3aa
Binary files /dev/null and b/translated_images/boxplots.8228c29dabd0f29227dd38624231a175f411f1d8d4d7c012cb770e00e4fdf8b6.tl.png differ
diff --git a/translated_images/boxplots.8228c29dabd0f29227dd38624231a175f411f1d8d4d7c012cb770e00e4fdf8b6.ur.png b/translated_images/boxplots.8228c29dabd0f29227dd38624231a175f411f1d8d4d7c012cb770e00e4fdf8b6.ur.png
new file mode 100644
index 000000000..14982b3aa
Binary files /dev/null and b/translated_images/boxplots.8228c29dabd0f29227dd38624231a175f411f1d8d4d7c012cb770e00e4fdf8b6.ur.png differ
diff --git a/translated_images/calculation.a209813050a1ddb141cdc4bc56f3af31e67157ed499e16a2ecf9837542704c94.ar.png b/translated_images/calculation.a209813050a1ddb141cdc4bc56f3af31e67157ed499e16a2ecf9837542704c94.ar.png
new file mode 100644
index 000000000..df42204e5
Binary files /dev/null and b/translated_images/calculation.a209813050a1ddb141cdc4bc56f3af31e67157ed499e16a2ecf9837542704c94.ar.png differ
diff --git a/translated_images/calculation.a209813050a1ddb141cdc4bc56f3af31e67157ed499e16a2ecf9837542704c94.tl.png b/translated_images/calculation.a209813050a1ddb141cdc4bc56f3af31e67157ed499e16a2ecf9837542704c94.tl.png
new file mode 100644
index 000000000..df42204e5
Binary files /dev/null and b/translated_images/calculation.a209813050a1ddb141cdc4bc56f3af31e67157ed499e16a2ecf9837542704c94.tl.png differ
diff --git a/translated_images/calculation.a209813050a1ddb141cdc4bc56f3af31e67157ed499e16a2ecf9837542704c94.ur.png b/translated_images/calculation.a209813050a1ddb141cdc4bc56f3af31e67157ed499e16a2ecf9837542704c94.ur.png
new file mode 100644
index 000000000..df42204e5
Binary files /dev/null and b/translated_images/calculation.a209813050a1ddb141cdc4bc56f3af31e67157ed499e16a2ecf9837542704c94.ur.png differ
diff --git a/translated_images/cartpole.b5609cc0494a14f75d121299495ae24fd8f1c30465e7b40961af94ecda2e1cd0.ar.png b/translated_images/cartpole.b5609cc0494a14f75d121299495ae24fd8f1c30465e7b40961af94ecda2e1cd0.ar.png
new file mode 100644
index 000000000..76b66c47c
Binary files /dev/null and b/translated_images/cartpole.b5609cc0494a14f75d121299495ae24fd8f1c30465e7b40961af94ecda2e1cd0.ar.png differ
diff --git a/translated_images/cartpole.b5609cc0494a14f75d121299495ae24fd8f1c30465e7b40961af94ecda2e1cd0.tl.png b/translated_images/cartpole.b5609cc0494a14f75d121299495ae24fd8f1c30465e7b40961af94ecda2e1cd0.tl.png
new file mode 100644
index 000000000..76b66c47c
Binary files /dev/null and b/translated_images/cartpole.b5609cc0494a14f75d121299495ae24fd8f1c30465e7b40961af94ecda2e1cd0.tl.png differ
diff --git a/translated_images/cartpole.b5609cc0494a14f75d121299495ae24fd8f1c30465e7b40961af94ecda2e1cd0.ur.png b/translated_images/cartpole.b5609cc0494a14f75d121299495ae24fd8f1c30465e7b40961af94ecda2e1cd0.ur.png
new file mode 100644
index 000000000..76b66c47c
Binary files /dev/null and b/translated_images/cartpole.b5609cc0494a14f75d121299495ae24fd8f1c30465e7b40961af94ecda2e1cd0.ur.png differ
diff --git a/translated_images/centroid.097fde836cf6c9187d0b2033e9f94441829f9d86f4f0b1604dd4b3d1931aee34.ar.png b/translated_images/centroid.097fde836cf6c9187d0b2033e9f94441829f9d86f4f0b1604dd4b3d1931aee34.ar.png
new file mode 100644
index 000000000..81c85893c
Binary files /dev/null and b/translated_images/centroid.097fde836cf6c9187d0b2033e9f94441829f9d86f4f0b1604dd4b3d1931aee34.ar.png differ
diff --git a/translated_images/centroid.097fde836cf6c9187d0b2033e9f94441829f9d86f4f0b1604dd4b3d1931aee34.tl.png b/translated_images/centroid.097fde836cf6c9187d0b2033e9f94441829f9d86f4f0b1604dd4b3d1931aee34.tl.png
new file mode 100644
index 000000000..81c85893c
Binary files /dev/null and b/translated_images/centroid.097fde836cf6c9187d0b2033e9f94441829f9d86f4f0b1604dd4b3d1931aee34.tl.png differ
diff --git a/translated_images/centroid.097fde836cf6c9187d0b2033e9f94441829f9d86f4f0b1604dd4b3d1931aee34.ur.png b/translated_images/centroid.097fde836cf6c9187d0b2033e9f94441829f9d86f4f0b1604dd4b3d1931aee34.ur.png
new file mode 100644
index 000000000..81c85893c
Binary files /dev/null and b/translated_images/centroid.097fde836cf6c9187d0b2033e9f94441829f9d86f4f0b1604dd4b3d1931aee34.ur.png differ
diff --git a/translated_images/ceos.3de5d092ce8d2753d22b48605c1d936a1477081c0646c006a07e9c80a2249fe4.ar.png b/translated_images/ceos.3de5d092ce8d2753d22b48605c1d936a1477081c0646c006a07e9c80a2249fe4.ar.png
new file mode 100644
index 000000000..bbb373a47
Binary files /dev/null and b/translated_images/ceos.3de5d092ce8d2753d22b48605c1d936a1477081c0646c006a07e9c80a2249fe4.ar.png differ
diff --git a/translated_images/ceos.3de5d092ce8d2753d22b48605c1d936a1477081c0646c006a07e9c80a2249fe4.tl.png b/translated_images/ceos.3de5d092ce8d2753d22b48605c1d936a1477081c0646c006a07e9c80a2249fe4.tl.png
new file mode 100644
index 000000000..bbb373a47
Binary files /dev/null and b/translated_images/ceos.3de5d092ce8d2753d22b48605c1d936a1477081c0646c006a07e9c80a2249fe4.tl.png differ
diff --git a/translated_images/ceos.3de5d092ce8d2753d22b48605c1d936a1477081c0646c006a07e9c80a2249fe4.ur.png b/translated_images/ceos.3de5d092ce8d2753d22b48605c1d936a1477081c0646c006a07e9c80a2249fe4.ur.png
new file mode 100644
index 000000000..bbb373a47
Binary files /dev/null and b/translated_images/ceos.3de5d092ce8d2753d22b48605c1d936a1477081c0646c006a07e9c80a2249fe4.ur.png differ
diff --git a/translated_images/ceos.7a9a67871424a6c07986e7c22ddae062ac660c469f6a54435196e0ae73a1c4da.ar.png b/translated_images/ceos.7a9a67871424a6c07986e7c22ddae062ac660c469f6a54435196e0ae73a1c4da.ar.png
new file mode 100644
index 000000000..bbb373a47
Binary files /dev/null and b/translated_images/ceos.7a9a67871424a6c07986e7c22ddae062ac660c469f6a54435196e0ae73a1c4da.ar.png differ
diff --git a/translated_images/ceos.7a9a67871424a6c07986e7c22ddae062ac660c469f6a54435196e0ae73a1c4da.tl.png b/translated_images/ceos.7a9a67871424a6c07986e7c22ddae062ac660c469f6a54435196e0ae73a1c4da.tl.png
new file mode 100644
index 000000000..bbb373a47
Binary files /dev/null and b/translated_images/ceos.7a9a67871424a6c07986e7c22ddae062ac660c469f6a54435196e0ae73a1c4da.tl.png differ
diff --git a/translated_images/ceos.7a9a67871424a6c07986e7c22ddae062ac660c469f6a54435196e0ae73a1c4da.ur.png b/translated_images/ceos.7a9a67871424a6c07986e7c22ddae062ac660c469f6a54435196e0ae73a1c4da.ur.png
new file mode 100644
index 000000000..bbb373a47
Binary files /dev/null and b/translated_images/ceos.7a9a67871424a6c07986e7c22ddae062ac660c469f6a54435196e0ae73a1c4da.ur.png differ
diff --git a/translated_images/cf-what-if-features.5a92a6924da3e9b58b654c974d7560bfbfc067c123b73e98ab4935448b3f70d5.ar.png b/translated_images/cf-what-if-features.5a92a6924da3e9b58b654c974d7560bfbfc067c123b73e98ab4935448b3f70d5.ar.png
new file mode 100644
index 000000000..126b60378
Binary files /dev/null and b/translated_images/cf-what-if-features.5a92a6924da3e9b58b654c974d7560bfbfc067c123b73e98ab4935448b3f70d5.ar.png differ
diff --git a/translated_images/cf-what-if-features.5a92a6924da3e9b58b654c974d7560bfbfc067c123b73e98ab4935448b3f70d5.tl.png b/translated_images/cf-what-if-features.5a92a6924da3e9b58b654c974d7560bfbfc067c123b73e98ab4935448b3f70d5.tl.png
new file mode 100644
index 000000000..126b60378
Binary files /dev/null and b/translated_images/cf-what-if-features.5a92a6924da3e9b58b654c974d7560bfbfc067c123b73e98ab4935448b3f70d5.tl.png differ
diff --git a/translated_images/cf-what-if-features.5a92a6924da3e9b58b654c974d7560bfbfc067c123b73e98ab4935448b3f70d5.ur.png b/translated_images/cf-what-if-features.5a92a6924da3e9b58b654c974d7560bfbfc067c123b73e98ab4935448b3f70d5.ur.png
new file mode 100644
index 000000000..126b60378
Binary files /dev/null and b/translated_images/cf-what-if-features.5a92a6924da3e9b58b654c974d7560bfbfc067c123b73e98ab4935448b3f70d5.ur.png differ
diff --git a/translated_images/cheatsheet.07a475ea444d22234cb8907a3826df5bdd1953efec94bd18e4496f36ff60624a.ar.png b/translated_images/cheatsheet.07a475ea444d22234cb8907a3826df5bdd1953efec94bd18e4496f36ff60624a.ar.png
new file mode 100644
index 000000000..685bef623
Binary files /dev/null and b/translated_images/cheatsheet.07a475ea444d22234cb8907a3826df5bdd1953efec94bd18e4496f36ff60624a.ar.png differ
diff --git a/translated_images/cheatsheet.07a475ea444d22234cb8907a3826df5bdd1953efec94bd18e4496f36ff60624a.tl.png b/translated_images/cheatsheet.07a475ea444d22234cb8907a3826df5bdd1953efec94bd18e4496f36ff60624a.tl.png
new file mode 100644
index 000000000..685bef623
Binary files /dev/null and b/translated_images/cheatsheet.07a475ea444d22234cb8907a3826df5bdd1953efec94bd18e4496f36ff60624a.tl.png differ
diff --git a/translated_images/cheatsheet.07a475ea444d22234cb8907a3826df5bdd1953efec94bd18e4496f36ff60624a.ur.png b/translated_images/cheatsheet.07a475ea444d22234cb8907a3826df5bdd1953efec94bd18e4496f36ff60624a.ur.png
new file mode 100644
index 000000000..685bef623
Binary files /dev/null and b/translated_images/cheatsheet.07a475ea444d22234cb8907a3826df5bdd1953efec94bd18e4496f36ff60624a.ur.png differ
diff --git a/translated_images/chess.e704a268781bdad85d1876b6c2295742fa0d856e7dcf3659147052df9d3db205.ar.jpg b/translated_images/chess.e704a268781bdad85d1876b6c2295742fa0d856e7dcf3659147052df9d3db205.ar.jpg
new file mode 100644
index 000000000..afef99916
Binary files /dev/null and b/translated_images/chess.e704a268781bdad85d1876b6c2295742fa0d856e7dcf3659147052df9d3db205.ar.jpg differ
diff --git a/translated_images/chess.e704a268781bdad85d1876b6c2295742fa0d856e7dcf3659147052df9d3db205.tl.jpg b/translated_images/chess.e704a268781bdad85d1876b6c2295742fa0d856e7dcf3659147052df9d3db205.tl.jpg
new file mode 100644
index 000000000..afef99916
Binary files /dev/null and b/translated_images/chess.e704a268781bdad85d1876b6c2295742fa0d856e7dcf3659147052df9d3db205.tl.jpg differ
diff --git a/translated_images/chess.e704a268781bdad85d1876b6c2295742fa0d856e7dcf3659147052df9d3db205.ur.jpg b/translated_images/chess.e704a268781bdad85d1876b6c2295742fa0d856e7dcf3659147052df9d3db205.ur.jpg
new file mode 100644
index 000000000..afef99916
Binary files /dev/null and b/translated_images/chess.e704a268781bdad85d1876b6c2295742fa0d856e7dcf3659147052df9d3db205.ur.jpg differ
diff --git a/translated_images/chinese.e62cafa5309f111afd1b54490336daf4e927ce32bed837069a0b7ce481dfae8d.ar.png b/translated_images/chinese.e62cafa5309f111afd1b54490336daf4e927ce32bed837069a0b7ce481dfae8d.ar.png
new file mode 100644
index 000000000..13cc9b4ed
Binary files /dev/null and b/translated_images/chinese.e62cafa5309f111afd1b54490336daf4e927ce32bed837069a0b7ce481dfae8d.ar.png differ
diff --git a/translated_images/chinese.e62cafa5309f111afd1b54490336daf4e927ce32bed837069a0b7ce481dfae8d.tl.png b/translated_images/chinese.e62cafa5309f111afd1b54490336daf4e927ce32bed837069a0b7ce481dfae8d.tl.png
new file mode 100644
index 000000000..13cc9b4ed
Binary files /dev/null and b/translated_images/chinese.e62cafa5309f111afd1b54490336daf4e927ce32bed837069a0b7ce481dfae8d.tl.png differ
diff --git a/translated_images/chinese.e62cafa5309f111afd1b54490336daf4e927ce32bed837069a0b7ce481dfae8d.ur.png b/translated_images/chinese.e62cafa5309f111afd1b54490336daf4e927ce32bed837069a0b7ce481dfae8d.ur.png
new file mode 100644
index 000000000..13cc9b4ed
Binary files /dev/null and b/translated_images/chinese.e62cafa5309f111afd1b54490336daf4e927ce32bed837069a0b7ce481dfae8d.ur.png differ
diff --git a/translated_images/clusters.b635354640d8e4fd4a49ef545495518e7be76172c97c13bd748f5b79f171f69a.ar.png b/translated_images/clusters.b635354640d8e4fd4a49ef545495518e7be76172c97c13bd748f5b79f171f69a.ar.png
new file mode 100644
index 000000000..5f991e289
Binary files /dev/null and b/translated_images/clusters.b635354640d8e4fd4a49ef545495518e7be76172c97c13bd748f5b79f171f69a.ar.png differ
diff --git a/translated_images/clusters.b635354640d8e4fd4a49ef545495518e7be76172c97c13bd748f5b79f171f69a.tl.png b/translated_images/clusters.b635354640d8e4fd4a49ef545495518e7be76172c97c13bd748f5b79f171f69a.tl.png
new file mode 100644
index 000000000..5f991e289
Binary files /dev/null and b/translated_images/clusters.b635354640d8e4fd4a49ef545495518e7be76172c97c13bd748f5b79f171f69a.tl.png differ
diff --git a/translated_images/clusters.b635354640d8e4fd4a49ef545495518e7be76172c97c13bd748f5b79f171f69a.ur.png b/translated_images/clusters.b635354640d8e4fd4a49ef545495518e7be76172c97c13bd748f5b79f171f69a.ur.png
new file mode 100644
index 000000000..5f991e289
Binary files /dev/null and b/translated_images/clusters.b635354640d8e4fd4a49ef545495518e7be76172c97c13bd748f5b79f171f69a.ur.png differ
diff --git a/translated_images/comparison.edfab56193a85e7fdecbeaa1b1f8c99e94adbf7178bed0de902090cf93d6734f.ar.png b/translated_images/comparison.edfab56193a85e7fdecbeaa1b1f8c99e94adbf7178bed0de902090cf93d6734f.ar.png
new file mode 100644
index 000000000..a64781283
Binary files /dev/null and b/translated_images/comparison.edfab56193a85e7fdecbeaa1b1f8c99e94adbf7178bed0de902090cf93d6734f.ar.png differ
diff --git a/translated_images/comparison.edfab56193a85e7fdecbeaa1b1f8c99e94adbf7178bed0de902090cf93d6734f.tl.png b/translated_images/comparison.edfab56193a85e7fdecbeaa1b1f8c99e94adbf7178bed0de902090cf93d6734f.tl.png
new file mode 100644
index 000000000..a64781283
Binary files /dev/null and b/translated_images/comparison.edfab56193a85e7fdecbeaa1b1f8c99e94adbf7178bed0de902090cf93d6734f.tl.png differ
diff --git a/translated_images/comparison.edfab56193a85e7fdecbeaa1b1f8c99e94adbf7178bed0de902090cf93d6734f.ur.png b/translated_images/comparison.edfab56193a85e7fdecbeaa1b1f8c99e94adbf7178bed0de902090cf93d6734f.ur.png
new file mode 100644
index 000000000..a64781283
Binary files /dev/null and b/translated_images/comparison.edfab56193a85e7fdecbeaa1b1f8c99e94adbf7178bed0de902090cf93d6734f.ur.png differ
diff --git a/translated_images/comprehension.619708fc5959b0f6a24ebffba2ad7b0625391a476141df65b43b59de24e45c6f.ar.png b/translated_images/comprehension.619708fc5959b0f6a24ebffba2ad7b0625391a476141df65b43b59de24e45c6f.ar.png
new file mode 100644
index 000000000..aabba0910
Binary files /dev/null and b/translated_images/comprehension.619708fc5959b0f6a24ebffba2ad7b0625391a476141df65b43b59de24e45c6f.ar.png differ
diff --git a/translated_images/comprehension.619708fc5959b0f6a24ebffba2ad7b0625391a476141df65b43b59de24e45c6f.tl.png b/translated_images/comprehension.619708fc5959b0f6a24ebffba2ad7b0625391a476141df65b43b59de24e45c6f.tl.png
new file mode 100644
index 000000000..aabba0910
Binary files /dev/null and b/translated_images/comprehension.619708fc5959b0f6a24ebffba2ad7b0625391a476141df65b43b59de24e45c6f.tl.png differ
diff --git a/translated_images/comprehension.619708fc5959b0f6a24ebffba2ad7b0625391a476141df65b43b59de24e45c6f.ur.png b/translated_images/comprehension.619708fc5959b0f6a24ebffba2ad7b0625391a476141df65b43b59de24e45c6f.ur.png
new file mode 100644
index 000000000..aabba0910
Binary files /dev/null and b/translated_images/comprehension.619708fc5959b0f6a24ebffba2ad7b0625391a476141df65b43b59de24e45c6f.ur.png differ
diff --git a/translated_images/confusion-matrix.3cc5496a1a37c3e4311e74790f15a1426e03e27af7e611aaabda56bc0a802aaf.ar.png b/translated_images/confusion-matrix.3cc5496a1a37c3e4311e74790f15a1426e03e27af7e611aaabda56bc0a802aaf.ar.png
new file mode 100644
index 000000000..5dae1c7d5
Binary files /dev/null and b/translated_images/confusion-matrix.3cc5496a1a37c3e4311e74790f15a1426e03e27af7e611aaabda56bc0a802aaf.ar.png differ
diff --git a/translated_images/confusion-matrix.3cc5496a1a37c3e4311e74790f15a1426e03e27af7e611aaabda56bc0a802aaf.tl.png b/translated_images/confusion-matrix.3cc5496a1a37c3e4311e74790f15a1426e03e27af7e611aaabda56bc0a802aaf.tl.png
new file mode 100644
index 000000000..5dae1c7d5
Binary files /dev/null and b/translated_images/confusion-matrix.3cc5496a1a37c3e4311e74790f15a1426e03e27af7e611aaabda56bc0a802aaf.tl.png differ
diff --git a/translated_images/confusion-matrix.3cc5496a1a37c3e4311e74790f15a1426e03e27af7e611aaabda56bc0a802aaf.ur.png b/translated_images/confusion-matrix.3cc5496a1a37c3e4311e74790f15a1426e03e27af7e611aaabda56bc0a802aaf.ur.png
new file mode 100644
index 000000000..5dae1c7d5
Binary files /dev/null and b/translated_images/confusion-matrix.3cc5496a1a37c3e4311e74790f15a1426e03e27af7e611aaabda56bc0a802aaf.ur.png differ
diff --git a/translated_images/correlation.a9356bb798f5eea51f47185968e1ebac5c078c92fce9931e28ccf0d7fab71c2b.ar.png b/translated_images/correlation.a9356bb798f5eea51f47185968e1ebac5c078c92fce9931e28ccf0d7fab71c2b.ar.png
new file mode 100644
index 000000000..fa4dd0b42
Binary files /dev/null and b/translated_images/correlation.a9356bb798f5eea51f47185968e1ebac5c078c92fce9931e28ccf0d7fab71c2b.ar.png differ
diff --git a/translated_images/correlation.a9356bb798f5eea51f47185968e1ebac5c078c92fce9931e28ccf0d7fab71c2b.tl.png b/translated_images/correlation.a9356bb798f5eea51f47185968e1ebac5c078c92fce9931e28ccf0d7fab71c2b.tl.png
new file mode 100644
index 000000000..fa4dd0b42
Binary files /dev/null and b/translated_images/correlation.a9356bb798f5eea51f47185968e1ebac5c078c92fce9931e28ccf0d7fab71c2b.tl.png differ
diff --git a/translated_images/correlation.a9356bb798f5eea51f47185968e1ebac5c078c92fce9931e28ccf0d7fab71c2b.ur.png b/translated_images/correlation.a9356bb798f5eea51f47185968e1ebac5c078c92fce9931e28ccf0d7fab71c2b.ur.png
new file mode 100644
index 000000000..fa4dd0b42
Binary files /dev/null and b/translated_images/correlation.a9356bb798f5eea51f47185968e1ebac5c078c92fce9931e28ccf0d7fab71c2b.ur.png differ
diff --git a/translated_images/counterfactuals-examples.b38a50a504ee0a9fc6087aba050a212a5f838adc5b0d76c5c656f8b1ccaab822.ar.png b/translated_images/counterfactuals-examples.b38a50a504ee0a9fc6087aba050a212a5f838adc5b0d76c5c656f8b1ccaab822.ar.png
new file mode 100644
index 000000000..40dd5206e
Binary files /dev/null and b/translated_images/counterfactuals-examples.b38a50a504ee0a9fc6087aba050a212a5f838adc5b0d76c5c656f8b1ccaab822.ar.png differ
diff --git a/translated_images/counterfactuals-examples.b38a50a504ee0a9fc6087aba050a212a5f838adc5b0d76c5c656f8b1ccaab822.tl.png b/translated_images/counterfactuals-examples.b38a50a504ee0a9fc6087aba050a212a5f838adc5b0d76c5c656f8b1ccaab822.tl.png
new file mode 100644
index 000000000..40dd5206e
Binary files /dev/null and b/translated_images/counterfactuals-examples.b38a50a504ee0a9fc6087aba050a212a5f838adc5b0d76c5c656f8b1ccaab822.tl.png differ
diff --git a/translated_images/counterfactuals-examples.b38a50a504ee0a9fc6087aba050a212a5f838adc5b0d76c5c656f8b1ccaab822.ur.png b/translated_images/counterfactuals-examples.b38a50a504ee0a9fc6087aba050a212a5f838adc5b0d76c5c656f8b1ccaab822.ur.png
new file mode 100644
index 000000000..40dd5206e
Binary files /dev/null and b/translated_images/counterfactuals-examples.b38a50a504ee0a9fc6087aba050a212a5f838adc5b0d76c5c656f8b1ccaab822.ur.png differ
diff --git a/translated_images/cuisine-dist.d0cc2d551abe5c25f83d73a5f560927e4a061e9a4560bac1e97d35682ef3ca6d.ar.png b/translated_images/cuisine-dist.d0cc2d551abe5c25f83d73a5f560927e4a061e9a4560bac1e97d35682ef3ca6d.ar.png
new file mode 100644
index 000000000..97b45b02a
Binary files /dev/null and b/translated_images/cuisine-dist.d0cc2d551abe5c25f83d73a5f560927e4a061e9a4560bac1e97d35682ef3ca6d.ar.png differ
diff --git a/translated_images/cuisine-dist.d0cc2d551abe5c25f83d73a5f560927e4a061e9a4560bac1e97d35682ef3ca6d.tl.png b/translated_images/cuisine-dist.d0cc2d551abe5c25f83d73a5f560927e4a061e9a4560bac1e97d35682ef3ca6d.tl.png
new file mode 100644
index 000000000..97b45b02a
Binary files /dev/null and b/translated_images/cuisine-dist.d0cc2d551abe5c25f83d73a5f560927e4a061e9a4560bac1e97d35682ef3ca6d.tl.png differ
diff --git a/translated_images/cuisine-dist.d0cc2d551abe5c25f83d73a5f560927e4a061e9a4560bac1e97d35682ef3ca6d.ur.png b/translated_images/cuisine-dist.d0cc2d551abe5c25f83d73a5f560927e4a061e9a4560bac1e97d35682ef3ca6d.ur.png
new file mode 100644
index 000000000..97b45b02a
Binary files /dev/null and b/translated_images/cuisine-dist.d0cc2d551abe5c25f83d73a5f560927e4a061e9a4560bac1e97d35682ef3ca6d.ur.png differ
diff --git a/translated_images/currency.e7429812bfc8c6087b2d4c410faaa4aaa11b2fcaabf6f09549b8249c9fbdb641.ar.png b/translated_images/currency.e7429812bfc8c6087b2d4c410faaa4aaa11b2fcaabf6f09549b8249c9fbdb641.ar.png
new file mode 100644
index 000000000..0f56c6528
Binary files /dev/null and b/translated_images/currency.e7429812bfc8c6087b2d4c410faaa4aaa11b2fcaabf6f09549b8249c9fbdb641.ar.png differ
diff --git a/translated_images/currency.e7429812bfc8c6087b2d4c410faaa4aaa11b2fcaabf6f09549b8249c9fbdb641.tl.png b/translated_images/currency.e7429812bfc8c6087b2d4c410faaa4aaa11b2fcaabf6f09549b8249c9fbdb641.tl.png
new file mode 100644
index 000000000..0f56c6528
Binary files /dev/null and b/translated_images/currency.e7429812bfc8c6087b2d4c410faaa4aaa11b2fcaabf6f09549b8249c9fbdb641.tl.png differ
diff --git a/translated_images/currency.e7429812bfc8c6087b2d4c410faaa4aaa11b2fcaabf6f09549b8249c9fbdb641.ur.png b/translated_images/currency.e7429812bfc8c6087b2d4c410faaa4aaa11b2fcaabf6f09549b8249c9fbdb641.ur.png
new file mode 100644
index 000000000..0f56c6528
Binary files /dev/null and b/translated_images/currency.e7429812bfc8c6087b2d4c410faaa4aaa11b2fcaabf6f09549b8249c9fbdb641.ur.png differ
diff --git a/translated_images/data-visualization.54e56dded7c1a804d00d027543f2881cb32da73aeadda2d4a4f10f3497526114.ar.png b/translated_images/data-visualization.54e56dded7c1a804d00d027543f2881cb32da73aeadda2d4a4f10f3497526114.ar.png
new file mode 100644
index 000000000..76a1c12ad
Binary files /dev/null and b/translated_images/data-visualization.54e56dded7c1a804d00d027543f2881cb32da73aeadda2d4a4f10f3497526114.ar.png differ
diff --git a/translated_images/data-visualization.54e56dded7c1a804d00d027543f2881cb32da73aeadda2d4a4f10f3497526114.tl.png b/translated_images/data-visualization.54e56dded7c1a804d00d027543f2881cb32da73aeadda2d4a4f10f3497526114.tl.png
new file mode 100644
index 000000000..76a1c12ad
Binary files /dev/null and b/translated_images/data-visualization.54e56dded7c1a804d00d027543f2881cb32da73aeadda2d4a4f10f3497526114.tl.png differ
diff --git a/translated_images/data-visualization.54e56dded7c1a804d00d027543f2881cb32da73aeadda2d4a4f10f3497526114.ur.png b/translated_images/data-visualization.54e56dded7c1a804d00d027543f2881cb32da73aeadda2d4a4f10f3497526114.ur.png
new file mode 100644
index 000000000..76a1c12ad
Binary files /dev/null and b/translated_images/data-visualization.54e56dded7c1a804d00d027543f2881cb32da73aeadda2d4a4f10f3497526114.ur.png differ
diff --git a/translated_images/dataanalysis-cover.8d6d0683a70a5c1e274e5a94b27a71137e3d0a3b707761d7170eb340dd07f11d.ar.png b/translated_images/dataanalysis-cover.8d6d0683a70a5c1e274e5a94b27a71137e3d0a3b707761d7170eb340dd07f11d.ar.png
new file mode 100644
index 000000000..6568a1d64
Binary files /dev/null and b/translated_images/dataanalysis-cover.8d6d0683a70a5c1e274e5a94b27a71137e3d0a3b707761d7170eb340dd07f11d.ar.png differ
diff --git a/translated_images/dataanalysis-cover.8d6d0683a70a5c1e274e5a94b27a71137e3d0a3b707761d7170eb340dd07f11d.tl.png b/translated_images/dataanalysis-cover.8d6d0683a70a5c1e274e5a94b27a71137e3d0a3b707761d7170eb340dd07f11d.tl.png
new file mode 100644
index 000000000..6568a1d64
Binary files /dev/null and b/translated_images/dataanalysis-cover.8d6d0683a70a5c1e274e5a94b27a71137e3d0a3b707761d7170eb340dd07f11d.tl.png differ
diff --git a/translated_images/dataanalysis-cover.8d6d0683a70a5c1e274e5a94b27a71137e3d0a3b707761d7170eb340dd07f11d.ur.png b/translated_images/dataanalysis-cover.8d6d0683a70a5c1e274e5a94b27a71137e3d0a3b707761d7170eb340dd07f11d.ur.png
new file mode 100644
index 000000000..6568a1d64
Binary files /dev/null and b/translated_images/dataanalysis-cover.8d6d0683a70a5c1e274e5a94b27a71137e3d0a3b707761d7170eb340dd07f11d.ur.png differ
diff --git a/translated_images/datapoints.aaf6815cd5d873541b61b73b9a6ee6a53914b5d62ed2cbbedaa2e1d9a414c5c1.ar.png b/translated_images/datapoints.aaf6815cd5d873541b61b73b9a6ee6a53914b5d62ed2cbbedaa2e1d9a414c5c1.ar.png
new file mode 100644
index 000000000..86c6b1f1f
Binary files /dev/null and b/translated_images/datapoints.aaf6815cd5d873541b61b73b9a6ee6a53914b5d62ed2cbbedaa2e1d9a414c5c1.ar.png differ
diff --git a/translated_images/datapoints.aaf6815cd5d873541b61b73b9a6ee6a53914b5d62ed2cbbedaa2e1d9a414c5c1.tl.png b/translated_images/datapoints.aaf6815cd5d873541b61b73b9a6ee6a53914b5d62ed2cbbedaa2e1d9a414c5c1.tl.png
new file mode 100644
index 000000000..86c6b1f1f
Binary files /dev/null and b/translated_images/datapoints.aaf6815cd5d873541b61b73b9a6ee6a53914b5d62ed2cbbedaa2e1d9a414c5c1.tl.png differ
diff --git a/translated_images/datapoints.aaf6815cd5d873541b61b73b9a6ee6a53914b5d62ed2cbbedaa2e1d9a414c5c1.ur.png b/translated_images/datapoints.aaf6815cd5d873541b61b73b9a6ee6a53914b5d62ed2cbbedaa2e1d9a414c5c1.ur.png
new file mode 100644
index 000000000..86c6b1f1f
Binary files /dev/null and b/translated_images/datapoints.aaf6815cd5d873541b61b73b9a6ee6a53914b5d62ed2cbbedaa2e1d9a414c5c1.ur.png differ
diff --git a/translated_images/distribution.9be11df42356ca958dc8e06e87865e09d77cab78f94fe4fea8a1e6796c64dc4b.ar.png b/translated_images/distribution.9be11df42356ca958dc8e06e87865e09d77cab78f94fe4fea8a1e6796c64dc4b.ar.png
new file mode 100644
index 000000000..102756eae
Binary files /dev/null and b/translated_images/distribution.9be11df42356ca958dc8e06e87865e09d77cab78f94fe4fea8a1e6796c64dc4b.ar.png differ
diff --git a/translated_images/distribution.9be11df42356ca958dc8e06e87865e09d77cab78f94fe4fea8a1e6796c64dc4b.tl.png b/translated_images/distribution.9be11df42356ca958dc8e06e87865e09d77cab78f94fe4fea8a1e6796c64dc4b.tl.png
new file mode 100644
index 000000000..102756eae
Binary files /dev/null and b/translated_images/distribution.9be11df42356ca958dc8e06e87865e09d77cab78f94fe4fea8a1e6796c64dc4b.tl.png differ
diff --git a/translated_images/distribution.9be11df42356ca958dc8e06e87865e09d77cab78f94fe4fea8a1e6796c64dc4b.ur.png b/translated_images/distribution.9be11df42356ca958dc8e06e87865e09d77cab78f94fe4fea8a1e6796c64dc4b.ur.png
new file mode 100644
index 000000000..102756eae
Binary files /dev/null and b/translated_images/distribution.9be11df42356ca958dc8e06e87865e09d77cab78f94fe4fea8a1e6796c64dc4b.ur.png differ
diff --git a/translated_images/dplyr_filter.b480b264b03439ff7051232a8de1df9a8fd4df723db316feb4f9f5e990db4318.ar.jpg b/translated_images/dplyr_filter.b480b264b03439ff7051232a8de1df9a8fd4df723db316feb4f9f5e990db4318.ar.jpg
new file mode 100644
index 000000000..a0790a754
Binary files /dev/null and b/translated_images/dplyr_filter.b480b264b03439ff7051232a8de1df9a8fd4df723db316feb4f9f5e990db4318.ar.jpg differ
diff --git a/translated_images/dplyr_filter.b480b264b03439ff7051232a8de1df9a8fd4df723db316feb4f9f5e990db4318.tl.jpg b/translated_images/dplyr_filter.b480b264b03439ff7051232a8de1df9a8fd4df723db316feb4f9f5e990db4318.tl.jpg
new file mode 100644
index 000000000..a0790a754
Binary files /dev/null and b/translated_images/dplyr_filter.b480b264b03439ff7051232a8de1df9a8fd4df723db316feb4f9f5e990db4318.tl.jpg differ
diff --git a/translated_images/dplyr_filter.b480b264b03439ff7051232a8de1df9a8fd4df723db316feb4f9f5e990db4318.ur.jpg b/translated_images/dplyr_filter.b480b264b03439ff7051232a8de1df9a8fd4df723db316feb4f9f5e990db4318.ur.jpg
new file mode 100644
index 000000000..a0790a754
Binary files /dev/null and b/translated_images/dplyr_filter.b480b264b03439ff7051232a8de1df9a8fd4df723db316feb4f9f5e990db4318.ur.jpg differ
diff --git a/translated_images/dplyr_wrangling.f5f99c64fd4580f1377fee3ea428b6f8fd073845ec0f8409d483cfe148f0984e.ar.png b/translated_images/dplyr_wrangling.f5f99c64fd4580f1377fee3ea428b6f8fd073845ec0f8409d483cfe148f0984e.ar.png
new file mode 100644
index 000000000..6f6a9f3c7
Binary files /dev/null and b/translated_images/dplyr_wrangling.f5f99c64fd4580f1377fee3ea428b6f8fd073845ec0f8409d483cfe148f0984e.ar.png differ
diff --git a/translated_images/dplyr_wrangling.f5f99c64fd4580f1377fee3ea428b6f8fd073845ec0f8409d483cfe148f0984e.tl.png b/translated_images/dplyr_wrangling.f5f99c64fd4580f1377fee3ea428b6f8fd073845ec0f8409d483cfe148f0984e.tl.png
new file mode 100644
index 000000000..6f6a9f3c7
Binary files /dev/null and b/translated_images/dplyr_wrangling.f5f99c64fd4580f1377fee3ea428b6f8fd073845ec0f8409d483cfe148f0984e.tl.png differ
diff --git a/translated_images/dplyr_wrangling.f5f99c64fd4580f1377fee3ea428b6f8fd073845ec0f8409d483cfe148f0984e.ur.png b/translated_images/dplyr_wrangling.f5f99c64fd4580f1377fee3ea428b6f8fd073845ec0f8409d483cfe148f0984e.ur.png
new file mode 100644
index 000000000..6f6a9f3c7
Binary files /dev/null and b/translated_images/dplyr_wrangling.f5f99c64fd4580f1377fee3ea428b6f8fd073845ec0f8409d483cfe148f0984e.ur.png differ
diff --git a/translated_images/ea-error-cohort.6886209ea5d438c4daa8bfbf5ce3a7042586364dd3eccda4a4e3d05623ac702a.ar.png b/translated_images/ea-error-cohort.6886209ea5d438c4daa8bfbf5ce3a7042586364dd3eccda4a4e3d05623ac702a.ar.png
new file mode 100644
index 000000000..1f3d2840b
Binary files /dev/null and b/translated_images/ea-error-cohort.6886209ea5d438c4daa8bfbf5ce3a7042586364dd3eccda4a4e3d05623ac702a.ar.png differ
diff --git a/translated_images/ea-error-cohort.6886209ea5d438c4daa8bfbf5ce3a7042586364dd3eccda4a4e3d05623ac702a.tl.png b/translated_images/ea-error-cohort.6886209ea5d438c4daa8bfbf5ce3a7042586364dd3eccda4a4e3d05623ac702a.tl.png
new file mode 100644
index 000000000..1f3d2840b
Binary files /dev/null and b/translated_images/ea-error-cohort.6886209ea5d438c4daa8bfbf5ce3a7042586364dd3eccda4a4e3d05623ac702a.tl.png differ
diff --git a/translated_images/ea-error-cohort.6886209ea5d438c4daa8bfbf5ce3a7042586364dd3eccda4a4e3d05623ac702a.ur.png b/translated_images/ea-error-cohort.6886209ea5d438c4daa8bfbf5ce3a7042586364dd3eccda4a4e3d05623ac702a.ur.png
new file mode 100644
index 000000000..1f3d2840b
Binary files /dev/null and b/translated_images/ea-error-cohort.6886209ea5d438c4daa8bfbf5ce3a7042586364dd3eccda4a4e3d05623ac702a.ur.png differ
diff --git a/translated_images/ea-error-distribution.117452e1177c1dd84fab2369967a68bcde787c76c6ea7fdb92fcf15d1fce8206.ar.png b/translated_images/ea-error-distribution.117452e1177c1dd84fab2369967a68bcde787c76c6ea7fdb92fcf15d1fce8206.ar.png
new file mode 100644
index 000000000..ddf5156e2
Binary files /dev/null and b/translated_images/ea-error-distribution.117452e1177c1dd84fab2369967a68bcde787c76c6ea7fdb92fcf15d1fce8206.ar.png differ
diff --git a/translated_images/ea-error-distribution.117452e1177c1dd84fab2369967a68bcde787c76c6ea7fdb92fcf15d1fce8206.tl.png b/translated_images/ea-error-distribution.117452e1177c1dd84fab2369967a68bcde787c76c6ea7fdb92fcf15d1fce8206.tl.png
new file mode 100644
index 000000000..ddf5156e2
Binary files /dev/null and b/translated_images/ea-error-distribution.117452e1177c1dd84fab2369967a68bcde787c76c6ea7fdb92fcf15d1fce8206.tl.png differ
diff --git a/translated_images/ea-error-distribution.117452e1177c1dd84fab2369967a68bcde787c76c6ea7fdb92fcf15d1fce8206.ur.png b/translated_images/ea-error-distribution.117452e1177c1dd84fab2369967a68bcde787c76c6ea7fdb92fcf15d1fce8206.ur.png
new file mode 100644
index 000000000..ddf5156e2
Binary files /dev/null and b/translated_images/ea-error-distribution.117452e1177c1dd84fab2369967a68bcde787c76c6ea7fdb92fcf15d1fce8206.ur.png differ
diff --git a/translated_images/ea-heatmap.8d27185e28cee3830c85e1b2e9df9d2d5e5c8c940f41678efdb68753f2f7e56c.ar.png b/translated_images/ea-heatmap.8d27185e28cee3830c85e1b2e9df9d2d5e5c8c940f41678efdb68753f2f7e56c.ar.png
new file mode 100644
index 000000000..ab9ecf66d
Binary files /dev/null and b/translated_images/ea-heatmap.8d27185e28cee3830c85e1b2e9df9d2d5e5c8c940f41678efdb68753f2f7e56c.ar.png differ
diff --git a/translated_images/ea-heatmap.8d27185e28cee3830c85e1b2e9df9d2d5e5c8c940f41678efdb68753f2f7e56c.tl.png b/translated_images/ea-heatmap.8d27185e28cee3830c85e1b2e9df9d2d5e5c8c940f41678efdb68753f2f7e56c.tl.png
new file mode 100644
index 000000000..ab9ecf66d
Binary files /dev/null and b/translated_images/ea-heatmap.8d27185e28cee3830c85e1b2e9df9d2d5e5c8c940f41678efdb68753f2f7e56c.tl.png differ
diff --git a/translated_images/ea-heatmap.8d27185e28cee3830c85e1b2e9df9d2d5e5c8c940f41678efdb68753f2f7e56c.ur.png b/translated_images/ea-heatmap.8d27185e28cee3830c85e1b2e9df9d2d5e5c8c940f41678efdb68753f2f7e56c.ur.png
new file mode 100644
index 000000000..ab9ecf66d
Binary files /dev/null and b/translated_images/ea-heatmap.8d27185e28cee3830c85e1b2e9df9d2d5e5c8c940f41678efdb68753f2f7e56c.ur.png differ
diff --git a/translated_images/elbow.72676169eed744ff03677e71334a16c6b8f751e9e716e3d7f40dd7cdef674cca.ar.png b/translated_images/elbow.72676169eed744ff03677e71334a16c6b8f751e9e716e3d7f40dd7cdef674cca.ar.png
new file mode 100644
index 000000000..1528be449
Binary files /dev/null and b/translated_images/elbow.72676169eed744ff03677e71334a16c6b8f751e9e716e3d7f40dd7cdef674cca.ar.png differ
diff --git a/translated_images/elbow.72676169eed744ff03677e71334a16c6b8f751e9e716e3d7f40dd7cdef674cca.tl.png b/translated_images/elbow.72676169eed744ff03677e71334a16c6b8f751e9e716e3d7f40dd7cdef674cca.tl.png
new file mode 100644
index 000000000..1528be449
Binary files /dev/null and b/translated_images/elbow.72676169eed744ff03677e71334a16c6b8f751e9e716e3d7f40dd7cdef674cca.tl.png differ
diff --git a/translated_images/elbow.72676169eed744ff03677e71334a16c6b8f751e9e716e3d7f40dd7cdef674cca.ur.png b/translated_images/elbow.72676169eed744ff03677e71334a16c6b8f751e9e716e3d7f40dd7cdef674cca.ur.png
new file mode 100644
index 000000000..1528be449
Binary files /dev/null and b/translated_images/elbow.72676169eed744ff03677e71334a16c6b8f751e9e716e3d7f40dd7cdef674cca.ur.png differ
diff --git a/translated_images/electric-grid.0c21d5214db09ffae93c06a87ca2abbb9ba7475ef815129c5b423d7f9a7cf136.ar.jpg b/translated_images/electric-grid.0c21d5214db09ffae93c06a87ca2abbb9ba7475ef815129c5b423d7f9a7cf136.ar.jpg
new file mode 100644
index 000000000..9616118e7
Binary files /dev/null and b/translated_images/electric-grid.0c21d5214db09ffae93c06a87ca2abbb9ba7475ef815129c5b423d7f9a7cf136.ar.jpg differ
diff --git a/translated_images/electric-grid.0c21d5214db09ffae93c06a87ca2abbb9ba7475ef815129c5b423d7f9a7cf136.tl.jpg b/translated_images/electric-grid.0c21d5214db09ffae93c06a87ca2abbb9ba7475ef815129c5b423d7f9a7cf136.tl.jpg
new file mode 100644
index 000000000..9616118e7
Binary files /dev/null and b/translated_images/electric-grid.0c21d5214db09ffae93c06a87ca2abbb9ba7475ef815129c5b423d7f9a7cf136.tl.jpg differ
diff --git a/translated_images/electric-grid.0c21d5214db09ffae93c06a87ca2abbb9ba7475ef815129c5b423d7f9a7cf136.ur.jpg b/translated_images/electric-grid.0c21d5214db09ffae93c06a87ca2abbb9ba7475ef815129c5b423d7f9a7cf136.ur.jpg
new file mode 100644
index 000000000..9616118e7
Binary files /dev/null and b/translated_images/electric-grid.0c21d5214db09ffae93c06a87ca2abbb9ba7475ef815129c5b423d7f9a7cf136.ur.jpg differ
diff --git a/translated_images/eliza.84397454cda9559bb5ec296b5b8fff067571c0cccc5405f9c1ab1c3f105c075c.ar.png b/translated_images/eliza.84397454cda9559bb5ec296b5b8fff067571c0cccc5405f9c1ab1c3f105c075c.ar.png
new file mode 100644
index 000000000..334858f4b
Binary files /dev/null and b/translated_images/eliza.84397454cda9559bb5ec296b5b8fff067571c0cccc5405f9c1ab1c3f105c075c.ar.png differ
diff --git a/translated_images/eliza.84397454cda9559bb5ec296b5b8fff067571c0cccc5405f9c1ab1c3f105c075c.tl.png b/translated_images/eliza.84397454cda9559bb5ec296b5b8fff067571c0cccc5405f9c1ab1c3f105c075c.tl.png
new file mode 100644
index 000000000..334858f4b
Binary files /dev/null and b/translated_images/eliza.84397454cda9559bb5ec296b5b8fff067571c0cccc5405f9c1ab1c3f105c075c.tl.png differ
diff --git a/translated_images/eliza.84397454cda9559bb5ec296b5b8fff067571c0cccc5405f9c1ab1c3f105c075c.ur.png b/translated_images/eliza.84397454cda9559bb5ec296b5b8fff067571c0cccc5405f9c1ab1c3f105c075c.ur.png
new file mode 100644
index 000000000..334858f4b
Binary files /dev/null and b/translated_images/eliza.84397454cda9559bb5ec296b5b8fff067571c0cccc5405f9c1ab1c3f105c075c.ur.png differ
diff --git a/translated_images/embedding.2cf8953c4b3101d188c2f61a5de5b6f53caaa5ad4ed99236d42bc3b6bd6a1fe2.ar.png b/translated_images/embedding.2cf8953c4b3101d188c2f61a5de5b6f53caaa5ad4ed99236d42bc3b6bd6a1fe2.ar.png
new file mode 100644
index 000000000..459dcf565
Binary files /dev/null and b/translated_images/embedding.2cf8953c4b3101d188c2f61a5de5b6f53caaa5ad4ed99236d42bc3b6bd6a1fe2.ar.png differ
diff --git a/translated_images/embedding.2cf8953c4b3101d188c2f61a5de5b6f53caaa5ad4ed99236d42bc3b6bd6a1fe2.tl.png b/translated_images/embedding.2cf8953c4b3101d188c2f61a5de5b6f53caaa5ad4ed99236d42bc3b6bd6a1fe2.tl.png
new file mode 100644
index 000000000..459dcf565
Binary files /dev/null and b/translated_images/embedding.2cf8953c4b3101d188c2f61a5de5b6f53caaa5ad4ed99236d42bc3b6bd6a1fe2.tl.png differ
diff --git a/translated_images/embedding.2cf8953c4b3101d188c2f61a5de5b6f53caaa5ad4ed99236d42bc3b6bd6a1fe2.ur.png b/translated_images/embedding.2cf8953c4b3101d188c2f61a5de5b6f53caaa5ad4ed99236d42bc3b6bd6a1fe2.ur.png
new file mode 100644
index 000000000..459dcf565
Binary files /dev/null and b/translated_images/embedding.2cf8953c4b3101d188c2f61a5de5b6f53caaa5ad4ed99236d42bc3b6bd6a1fe2.ur.png differ
diff --git a/translated_images/encouRage.e75d5fe0367fb9136b78104baf4e2032a7622bc42a2bc34c0ad36c294eeb83f5.ar.jpg b/translated_images/encouRage.e75d5fe0367fb9136b78104baf4e2032a7622bc42a2bc34c0ad36c294eeb83f5.ar.jpg
new file mode 100644
index 000000000..7e685a520
Binary files /dev/null and b/translated_images/encouRage.e75d5fe0367fb9136b78104baf4e2032a7622bc42a2bc34c0ad36c294eeb83f5.ar.jpg differ
diff --git a/translated_images/encouRage.e75d5fe0367fb9136b78104baf4e2032a7622bc42a2bc34c0ad36c294eeb83f5.tl.jpg b/translated_images/encouRage.e75d5fe0367fb9136b78104baf4e2032a7622bc42a2bc34c0ad36c294eeb83f5.tl.jpg
new file mode 100644
index 000000000..7e685a520
Binary files /dev/null and b/translated_images/encouRage.e75d5fe0367fb9136b78104baf4e2032a7622bc42a2bc34c0ad36c294eeb83f5.tl.jpg differ
diff --git a/translated_images/encouRage.e75d5fe0367fb9136b78104baf4e2032a7622bc42a2bc34c0ad36c294eeb83f5.ur.jpg b/translated_images/encouRage.e75d5fe0367fb9136b78104baf4e2032a7622bc42a2bc34c0ad36c294eeb83f5.ur.jpg
new file mode 100644
index 000000000..7e685a520
Binary files /dev/null and b/translated_images/encouRage.e75d5fe0367fb9136b78104baf4e2032a7622bc42a2bc34c0ad36c294eeb83f5.ur.jpg differ
diff --git a/translated_images/energy-plot.5fdac3f397a910bc6070602e9e45bea8860d4c239354813fa8fc3c9d556f5bad.ar.png b/translated_images/energy-plot.5fdac3f397a910bc6070602e9e45bea8860d4c239354813fa8fc3c9d556f5bad.ar.png
new file mode 100644
index 000000000..9826bdb57
Binary files /dev/null and b/translated_images/energy-plot.5fdac3f397a910bc6070602e9e45bea8860d4c239354813fa8fc3c9d556f5bad.ar.png differ
diff --git a/translated_images/energy-plot.5fdac3f397a910bc6070602e9e45bea8860d4c239354813fa8fc3c9d556f5bad.tl.png b/translated_images/energy-plot.5fdac3f397a910bc6070602e9e45bea8860d4c239354813fa8fc3c9d556f5bad.tl.png
new file mode 100644
index 000000000..9826bdb57
Binary files /dev/null and b/translated_images/energy-plot.5fdac3f397a910bc6070602e9e45bea8860d4c239354813fa8fc3c9d556f5bad.tl.png differ
diff --git a/translated_images/energy-plot.5fdac3f397a910bc6070602e9e45bea8860d4c239354813fa8fc3c9d556f5bad.ur.png b/translated_images/energy-plot.5fdac3f397a910bc6070602e9e45bea8860d4c239354813fa8fc3c9d556f5bad.ur.png
new file mode 100644
index 000000000..9826bdb57
Binary files /dev/null and b/translated_images/energy-plot.5fdac3f397a910bc6070602e9e45bea8860d4c239354813fa8fc3c9d556f5bad.ur.png differ
diff --git a/translated_images/env_init.04e8f26d2d60089e128f21d22e5fef57d580e559f0d5937b06c689e5e7cdd438.ar.png b/translated_images/env_init.04e8f26d2d60089e128f21d22e5fef57d580e559f0d5937b06c689e5e7cdd438.ar.png
new file mode 100644
index 000000000..15f84e910
Binary files /dev/null and b/translated_images/env_init.04e8f26d2d60089e128f21d22e5fef57d580e559f0d5937b06c689e5e7cdd438.ar.png differ
diff --git a/translated_images/env_init.04e8f26d2d60089e128f21d22e5fef57d580e559f0d5937b06c689e5e7cdd438.tl.png b/translated_images/env_init.04e8f26d2d60089e128f21d22e5fef57d580e559f0d5937b06c689e5e7cdd438.tl.png
new file mode 100644
index 000000000..15f84e910
Binary files /dev/null and b/translated_images/env_init.04e8f26d2d60089e128f21d22e5fef57d580e559f0d5937b06c689e5e7cdd438.tl.png differ
diff --git a/translated_images/env_init.04e8f26d2d60089e128f21d22e5fef57d580e559f0d5937b06c689e5e7cdd438.ur.png b/translated_images/env_init.04e8f26d2d60089e128f21d22e5fef57d580e559f0d5937b06c689e5e7cdd438.ur.png
new file mode 100644
index 000000000..15f84e910
Binary files /dev/null and b/translated_images/env_init.04e8f26d2d60089e128f21d22e5fef57d580e559f0d5937b06c689e5e7cdd438.ur.png differ
diff --git a/translated_images/environment.40ba3cb66256c93fa7e92f6f7214e1d1f588aafa97d266c11d108c5c5d101b6c.ar.png b/translated_images/environment.40ba3cb66256c93fa7e92f6f7214e1d1f588aafa97d266c11d108c5c5d101b6c.ar.png
new file mode 100644
index 000000000..f340cf46f
Binary files /dev/null and b/translated_images/environment.40ba3cb66256c93fa7e92f6f7214e1d1f588aafa97d266c11d108c5c5d101b6c.ar.png differ
diff --git a/translated_images/environment.40ba3cb66256c93fa7e92f6f7214e1d1f588aafa97d266c11d108c5c5d101b6c.tl.png b/translated_images/environment.40ba3cb66256c93fa7e92f6f7214e1d1f588aafa97d266c11d108c5c5d101b6c.tl.png
new file mode 100644
index 000000000..f340cf46f
Binary files /dev/null and b/translated_images/environment.40ba3cb66256c93fa7e92f6f7214e1d1f588aafa97d266c11d108c5c5d101b6c.tl.png differ
diff --git a/translated_images/environment.40ba3cb66256c93fa7e92f6f7214e1d1f588aafa97d266c11d108c5c5d101b6c.ur.png b/translated_images/environment.40ba3cb66256c93fa7e92f6f7214e1d1f588aafa97d266c11d108c5c5d101b6c.ur.png
new file mode 100644
index 000000000..f340cf46f
Binary files /dev/null and b/translated_images/environment.40ba3cb66256c93fa7e92f6f7214e1d1f588aafa97d266c11d108c5c5d101b6c.ur.png differ
diff --git a/translated_images/escape.18862db9930337e3fce23a9b6a76a06445f229dadea2268e12a6f0a1fde12115.ar.png b/translated_images/escape.18862db9930337e3fce23a9b6a76a06445f229dadea2268e12a6f0a1fde12115.ar.png
new file mode 100644
index 000000000..891e0750e
Binary files /dev/null and b/translated_images/escape.18862db9930337e3fce23a9b6a76a06445f229dadea2268e12a6f0a1fde12115.ar.png differ
diff --git a/translated_images/escape.18862db9930337e3fce23a9b6a76a06445f229dadea2268e12a6f0a1fde12115.tl.png b/translated_images/escape.18862db9930337e3fce23a9b6a76a06445f229dadea2268e12a6f0a1fde12115.tl.png
new file mode 100644
index 000000000..891e0750e
Binary files /dev/null and b/translated_images/escape.18862db9930337e3fce23a9b6a76a06445f229dadea2268e12a6f0a1fde12115.tl.png differ
diff --git a/translated_images/escape.18862db9930337e3fce23a9b6a76a06445f229dadea2268e12a6f0a1fde12115.ur.png b/translated_images/escape.18862db9930337e3fce23a9b6a76a06445f229dadea2268e12a6f0a1fde12115.ur.png
new file mode 100644
index 000000000..891e0750e
Binary files /dev/null and b/translated_images/escape.18862db9930337e3fce23a9b6a76a06445f229dadea2268e12a6f0a1fde12115.ur.png differ
diff --git a/translated_images/facetgrid.9b2e65ce707eba1f983b7cdfed5d952e60f385947afa3011df6e3cc7d200eb5b.ar.png b/translated_images/facetgrid.9b2e65ce707eba1f983b7cdfed5d952e60f385947afa3011df6e3cc7d200eb5b.ar.png
new file mode 100644
index 000000000..e9871d987
Binary files /dev/null and b/translated_images/facetgrid.9b2e65ce707eba1f983b7cdfed5d952e60f385947afa3011df6e3cc7d200eb5b.ar.png differ
diff --git a/translated_images/facetgrid.9b2e65ce707eba1f983b7cdfed5d952e60f385947afa3011df6e3cc7d200eb5b.tl.png b/translated_images/facetgrid.9b2e65ce707eba1f983b7cdfed5d952e60f385947afa3011df6e3cc7d200eb5b.tl.png
new file mode 100644
index 000000000..e9871d987
Binary files /dev/null and b/translated_images/facetgrid.9b2e65ce707eba1f983b7cdfed5d952e60f385947afa3011df6e3cc7d200eb5b.tl.png differ
diff --git a/translated_images/facetgrid.9b2e65ce707eba1f983b7cdfed5d952e60f385947afa3011df6e3cc7d200eb5b.ur.png b/translated_images/facetgrid.9b2e65ce707eba1f983b7cdfed5d952e60f385947afa3011df6e3cc7d200eb5b.ur.png
new file mode 100644
index 000000000..e9871d987
Binary files /dev/null and b/translated_images/facetgrid.9b2e65ce707eba1f983b7cdfed5d952e60f385947afa3011df6e3cc7d200eb5b.ur.png differ
diff --git a/translated_images/fairness.25d7c8ce9817272d25dd0e2b42a6addf7d3b8241cb6c3088fa9fc3eb7227781d.ar.png b/translated_images/fairness.25d7c8ce9817272d25dd0e2b42a6addf7d3b8241cb6c3088fa9fc3eb7227781d.ar.png
new file mode 100644
index 000000000..9a9d55f1d
Binary files /dev/null and b/translated_images/fairness.25d7c8ce9817272d25dd0e2b42a6addf7d3b8241cb6c3088fa9fc3eb7227781d.ar.png differ
diff --git a/translated_images/fairness.25d7c8ce9817272d25dd0e2b42a6addf7d3b8241cb6c3088fa9fc3eb7227781d.tl.png b/translated_images/fairness.25d7c8ce9817272d25dd0e2b42a6addf7d3b8241cb6c3088fa9fc3eb7227781d.tl.png
new file mode 100644
index 000000000..9a9d55f1d
Binary files /dev/null and b/translated_images/fairness.25d7c8ce9817272d25dd0e2b42a6addf7d3b8241cb6c3088fa9fc3eb7227781d.tl.png differ
diff --git a/translated_images/fairness.25d7c8ce9817272d25dd0e2b42a6addf7d3b8241cb6c3088fa9fc3eb7227781d.ur.png b/translated_images/fairness.25d7c8ce9817272d25dd0e2b42a6addf7d3b8241cb6c3088fa9fc3eb7227781d.ur.png
new file mode 100644
index 000000000..9a9d55f1d
Binary files /dev/null and b/translated_images/fairness.25d7c8ce9817272d25dd0e2b42a6addf7d3b8241cb6c3088fa9fc3eb7227781d.ur.png differ
diff --git a/translated_images/fairness.b9f9893a4e3dc28bec350a714555c3be39040c3fe7e0aa4da10bb8e3c54a1cc9.ar.png b/translated_images/fairness.b9f9893a4e3dc28bec350a714555c3be39040c3fe7e0aa4da10bb8e3c54a1cc9.ar.png
new file mode 100644
index 000000000..9a9d55f1d
Binary files /dev/null and b/translated_images/fairness.b9f9893a4e3dc28bec350a714555c3be39040c3fe7e0aa4da10bb8e3c54a1cc9.ar.png differ
diff --git a/translated_images/fairness.b9f9893a4e3dc28bec350a714555c3be39040c3fe7e0aa4da10bb8e3c54a1cc9.tl.png b/translated_images/fairness.b9f9893a4e3dc28bec350a714555c3be39040c3fe7e0aa4da10bb8e3c54a1cc9.tl.png
new file mode 100644
index 000000000..9a9d55f1d
Binary files /dev/null and b/translated_images/fairness.b9f9893a4e3dc28bec350a714555c3be39040c3fe7e0aa4da10bb8e3c54a1cc9.tl.png differ
diff --git a/translated_images/fairness.b9f9893a4e3dc28bec350a714555c3be39040c3fe7e0aa4da10bb8e3c54a1cc9.ur.png b/translated_images/fairness.b9f9893a4e3dc28bec350a714555c3be39040c3fe7e0aa4da10bb8e3c54a1cc9.ur.png
new file mode 100644
index 000000000..9a9d55f1d
Binary files /dev/null and b/translated_images/fairness.b9f9893a4e3dc28bec350a714555c3be39040c3fe7e0aa4da10bb8e3c54a1cc9.ur.png differ
diff --git a/translated_images/favicon.37b561214b36d454f9fd1f725d77f310fe256eb88f2a0ae08b9cb18aeb30650c.ar.png b/translated_images/favicon.37b561214b36d454f9fd1f725d77f310fe256eb88f2a0ae08b9cb18aeb30650c.ar.png
new file mode 100644
index 000000000..26e0ae439
Binary files /dev/null and b/translated_images/favicon.37b561214b36d454f9fd1f725d77f310fe256eb88f2a0ae08b9cb18aeb30650c.ar.png differ
diff --git a/translated_images/favicon.37b561214b36d454f9fd1f725d77f310fe256eb88f2a0ae08b9cb18aeb30650c.tl.png b/translated_images/favicon.37b561214b36d454f9fd1f725d77f310fe256eb88f2a0ae08b9cb18aeb30650c.tl.png
new file mode 100644
index 000000000..26e0ae439
Binary files /dev/null and b/translated_images/favicon.37b561214b36d454f9fd1f725d77f310fe256eb88f2a0ae08b9cb18aeb30650c.tl.png differ
diff --git a/translated_images/favicon.37b561214b36d454f9fd1f725d77f310fe256eb88f2a0ae08b9cb18aeb30650c.ur.png b/translated_images/favicon.37b561214b36d454f9fd1f725d77f310fe256eb88f2a0ae08b9cb18aeb30650c.ur.png
new file mode 100644
index 000000000..26e0ae439
Binary files /dev/null and b/translated_images/favicon.37b561214b36d454f9fd1f725d77f310fe256eb88f2a0ae08b9cb18aeb30650c.ur.png differ
diff --git a/translated_images/flat-nonflat.d1c8c6e2a96110c1d57fa0b72913f6aab3c245478524d25baf7f4a18efcde224.ar.png b/translated_images/flat-nonflat.d1c8c6e2a96110c1d57fa0b72913f6aab3c245478524d25baf7f4a18efcde224.ar.png
new file mode 100644
index 000000000..a1648bf77
Binary files /dev/null and b/translated_images/flat-nonflat.d1c8c6e2a96110c1d57fa0b72913f6aab3c245478524d25baf7f4a18efcde224.ar.png differ
diff --git a/translated_images/flat-nonflat.d1c8c6e2a96110c1d57fa0b72913f6aab3c245478524d25baf7f4a18efcde224.tl.png b/translated_images/flat-nonflat.d1c8c6e2a96110c1d57fa0b72913f6aab3c245478524d25baf7f4a18efcde224.tl.png
new file mode 100644
index 000000000..a1648bf77
Binary files /dev/null and b/translated_images/flat-nonflat.d1c8c6e2a96110c1d57fa0b72913f6aab3c245478524d25baf7f4a18efcde224.tl.png differ
diff --git a/translated_images/flat-nonflat.d1c8c6e2a96110c1d57fa0b72913f6aab3c245478524d25baf7f4a18efcde224.ur.png b/translated_images/flat-nonflat.d1c8c6e2a96110c1d57fa0b72913f6aab3c245478524d25baf7f4a18efcde224.ur.png
new file mode 100644
index 000000000..a1648bf77
Binary files /dev/null and b/translated_images/flat-nonflat.d1c8c6e2a96110c1d57fa0b72913f6aab3c245478524d25baf7f4a18efcde224.ur.png differ
diff --git a/translated_images/full-data-predict.4f0fed16a131c8f3bcc57a3060039dc7f2f714a05b07b68c513e0fe7fb3d8964.ar.png b/translated_images/full-data-predict.4f0fed16a131c8f3bcc57a3060039dc7f2f714a05b07b68c513e0fe7fb3d8964.ar.png
new file mode 100644
index 000000000..23d0506f5
Binary files /dev/null and b/translated_images/full-data-predict.4f0fed16a131c8f3bcc57a3060039dc7f2f714a05b07b68c513e0fe7fb3d8964.ar.png differ
diff --git a/translated_images/full-data-predict.4f0fed16a131c8f3bcc57a3060039dc7f2f714a05b07b68c513e0fe7fb3d8964.tl.png b/translated_images/full-data-predict.4f0fed16a131c8f3bcc57a3060039dc7f2f714a05b07b68c513e0fe7fb3d8964.tl.png
new file mode 100644
index 000000000..23d0506f5
Binary files /dev/null and b/translated_images/full-data-predict.4f0fed16a131c8f3bcc57a3060039dc7f2f714a05b07b68c513e0fe7fb3d8964.tl.png differ
diff --git a/translated_images/full-data-predict.4f0fed16a131c8f3bcc57a3060039dc7f2f714a05b07b68c513e0fe7fb3d8964.ur.png b/translated_images/full-data-predict.4f0fed16a131c8f3bcc57a3060039dc7f2f714a05b07b68c513e0fe7fb3d8964.ur.png
new file mode 100644
index 000000000..23d0506f5
Binary files /dev/null and b/translated_images/full-data-predict.4f0fed16a131c8f3bcc57a3060039dc7f2f714a05b07b68c513e0fe7fb3d8964.ur.png differ
diff --git a/translated_images/full-data.a82ec9957e580e976f651a4fc38f280b9229c6efdbe3cfe7c60abaa9486d2cbe.ar.png b/translated_images/full-data.a82ec9957e580e976f651a4fc38f280b9229c6efdbe3cfe7c60abaa9486d2cbe.ar.png
new file mode 100644
index 000000000..c1029876e
Binary files /dev/null and b/translated_images/full-data.a82ec9957e580e976f651a4fc38f280b9229c6efdbe3cfe7c60abaa9486d2cbe.ar.png differ
diff --git a/translated_images/full-data.a82ec9957e580e976f651a4fc38f280b9229c6efdbe3cfe7c60abaa9486d2cbe.tl.png b/translated_images/full-data.a82ec9957e580e976f651a4fc38f280b9229c6efdbe3cfe7c60abaa9486d2cbe.tl.png
new file mode 100644
index 000000000..c1029876e
Binary files /dev/null and b/translated_images/full-data.a82ec9957e580e976f651a4fc38f280b9229c6efdbe3cfe7c60abaa9486d2cbe.tl.png differ
diff --git a/translated_images/full-data.a82ec9957e580e976f651a4fc38f280b9229c6efdbe3cfe7c60abaa9486d2cbe.ur.png b/translated_images/full-data.a82ec9957e580e976f651a4fc38f280b9229c6efdbe3cfe7c60abaa9486d2cbe.ur.png
new file mode 100644
index 000000000..c1029876e
Binary files /dev/null and b/translated_images/full-data.a82ec9957e580e976f651a4fc38f280b9229c6efdbe3cfe7c60abaa9486d2cbe.ur.png differ
diff --git a/translated_images/gender-bias-translate-en-tr.bfd87c45da23c08526ec072e397d571d96b6051c8b538600b1ada80289d6ac58.ar.png b/translated_images/gender-bias-translate-en-tr.bfd87c45da23c08526ec072e397d571d96b6051c8b538600b1ada80289d6ac58.ar.png
new file mode 100644
index 000000000..253ddfd62
Binary files /dev/null and b/translated_images/gender-bias-translate-en-tr.bfd87c45da23c08526ec072e397d571d96b6051c8b538600b1ada80289d6ac58.ar.png differ
diff --git a/translated_images/gender-bias-translate-en-tr.bfd87c45da23c08526ec072e397d571d96b6051c8b538600b1ada80289d6ac58.tl.png b/translated_images/gender-bias-translate-en-tr.bfd87c45da23c08526ec072e397d571d96b6051c8b538600b1ada80289d6ac58.tl.png
new file mode 100644
index 000000000..253ddfd62
Binary files /dev/null and b/translated_images/gender-bias-translate-en-tr.bfd87c45da23c08526ec072e397d571d96b6051c8b538600b1ada80289d6ac58.tl.png differ
diff --git a/translated_images/gender-bias-translate-en-tr.bfd87c45da23c08526ec072e397d571d96b6051c8b538600b1ada80289d6ac58.ur.png b/translated_images/gender-bias-translate-en-tr.bfd87c45da23c08526ec072e397d571d96b6051c8b538600b1ada80289d6ac58.ur.png
new file mode 100644
index 000000000..253ddfd62
Binary files /dev/null and b/translated_images/gender-bias-translate-en-tr.bfd87c45da23c08526ec072e397d571d96b6051c8b538600b1ada80289d6ac58.ur.png differ
diff --git a/translated_images/gender-bias-translate-en-tr.f185fd8822c2d4372912f2b690f6aaddd306ffbb49d795ad8d12a4bf141e7af0.ar.png b/translated_images/gender-bias-translate-en-tr.f185fd8822c2d4372912f2b690f6aaddd306ffbb49d795ad8d12a4bf141e7af0.ar.png
new file mode 100644
index 000000000..253ddfd62
Binary files /dev/null and b/translated_images/gender-bias-translate-en-tr.f185fd8822c2d4372912f2b690f6aaddd306ffbb49d795ad8d12a4bf141e7af0.ar.png differ
diff --git a/translated_images/gender-bias-translate-en-tr.f185fd8822c2d4372912f2b690f6aaddd306ffbb49d795ad8d12a4bf141e7af0.tl.png b/translated_images/gender-bias-translate-en-tr.f185fd8822c2d4372912f2b690f6aaddd306ffbb49d795ad8d12a4bf141e7af0.tl.png
new file mode 100644
index 000000000..253ddfd62
Binary files /dev/null and b/translated_images/gender-bias-translate-en-tr.f185fd8822c2d4372912f2b690f6aaddd306ffbb49d795ad8d12a4bf141e7af0.tl.png differ
diff --git a/translated_images/gender-bias-translate-en-tr.f185fd8822c2d4372912f2b690f6aaddd306ffbb49d795ad8d12a4bf141e7af0.ur.png b/translated_images/gender-bias-translate-en-tr.f185fd8822c2d4372912f2b690f6aaddd306ffbb49d795ad8d12a4bf141e7af0.ur.png
new file mode 100644
index 000000000..253ddfd62
Binary files /dev/null and b/translated_images/gender-bias-translate-en-tr.f185fd8822c2d4372912f2b690f6aaddd306ffbb49d795ad8d12a4bf141e7af0.ur.png differ
diff --git a/translated_images/gender-bias-translate-tr-en.1f97568ba9e40e20eb5b40e8538fc38994b794597d2e446f8e43cf40a4baced9.ar.png b/translated_images/gender-bias-translate-tr-en.1f97568ba9e40e20eb5b40e8538fc38994b794597d2e446f8e43cf40a4baced9.ar.png
new file mode 100644
index 000000000..c0847d32d
Binary files /dev/null and b/translated_images/gender-bias-translate-tr-en.1f97568ba9e40e20eb5b40e8538fc38994b794597d2e446f8e43cf40a4baced9.ar.png differ
diff --git a/translated_images/gender-bias-translate-tr-en.1f97568ba9e40e20eb5b40e8538fc38994b794597d2e446f8e43cf40a4baced9.tl.png b/translated_images/gender-bias-translate-tr-en.1f97568ba9e40e20eb5b40e8538fc38994b794597d2e446f8e43cf40a4baced9.tl.png
new file mode 100644
index 000000000..c0847d32d
Binary files /dev/null and b/translated_images/gender-bias-translate-tr-en.1f97568ba9e40e20eb5b40e8538fc38994b794597d2e446f8e43cf40a4baced9.tl.png differ
diff --git a/translated_images/gender-bias-translate-tr-en.1f97568ba9e40e20eb5b40e8538fc38994b794597d2e446f8e43cf40a4baced9.ur.png b/translated_images/gender-bias-translate-tr-en.1f97568ba9e40e20eb5b40e8538fc38994b794597d2e446f8e43cf40a4baced9.ur.png
new file mode 100644
index 000000000..c0847d32d
Binary files /dev/null and b/translated_images/gender-bias-translate-tr-en.1f97568ba9e40e20eb5b40e8538fc38994b794597d2e446f8e43cf40a4baced9.ur.png differ
diff --git a/translated_images/gender-bias-translate-tr-en.4eee7e3cecb8c70e13a8abbc379209bc8032714169e585bdeac75af09b1752aa.ar.png b/translated_images/gender-bias-translate-tr-en.4eee7e3cecb8c70e13a8abbc379209bc8032714169e585bdeac75af09b1752aa.ar.png
new file mode 100644
index 000000000..c0847d32d
Binary files /dev/null and b/translated_images/gender-bias-translate-tr-en.4eee7e3cecb8c70e13a8abbc379209bc8032714169e585bdeac75af09b1752aa.ar.png differ
diff --git a/translated_images/gender-bias-translate-tr-en.4eee7e3cecb8c70e13a8abbc379209bc8032714169e585bdeac75af09b1752aa.tl.png b/translated_images/gender-bias-translate-tr-en.4eee7e3cecb8c70e13a8abbc379209bc8032714169e585bdeac75af09b1752aa.tl.png
new file mode 100644
index 000000000..c0847d32d
Binary files /dev/null and b/translated_images/gender-bias-translate-tr-en.4eee7e3cecb8c70e13a8abbc379209bc8032714169e585bdeac75af09b1752aa.tl.png differ
diff --git a/translated_images/gender-bias-translate-tr-en.4eee7e3cecb8c70e13a8abbc379209bc8032714169e585bdeac75af09b1752aa.ur.png b/translated_images/gender-bias-translate-tr-en.4eee7e3cecb8c70e13a8abbc379209bc8032714169e585bdeac75af09b1752aa.ur.png
new file mode 100644
index 000000000..c0847d32d
Binary files /dev/null and b/translated_images/gender-bias-translate-tr-en.4eee7e3cecb8c70e13a8abbc379209bc8032714169e585bdeac75af09b1752aa.ur.png differ
diff --git a/translated_images/globe.59f26379ceb40428672b4d9a568044618a2bf6292ecd53a5c481b90e3fa805eb.ar.jpg b/translated_images/globe.59f26379ceb40428672b4d9a568044618a2bf6292ecd53a5c481b90e3fa805eb.ar.jpg
new file mode 100644
index 000000000..31ba4b334
Binary files /dev/null and b/translated_images/globe.59f26379ceb40428672b4d9a568044618a2bf6292ecd53a5c481b90e3fa805eb.ar.jpg differ
diff --git a/translated_images/globe.59f26379ceb40428672b4d9a568044618a2bf6292ecd53a5c481b90e3fa805eb.tl.jpg b/translated_images/globe.59f26379ceb40428672b4d9a568044618a2bf6292ecd53a5c481b90e3fa805eb.tl.jpg
new file mode 100644
index 000000000..31ba4b334
Binary files /dev/null and b/translated_images/globe.59f26379ceb40428672b4d9a568044618a2bf6292ecd53a5c481b90e3fa805eb.tl.jpg differ
diff --git a/translated_images/globe.59f26379ceb40428672b4d9a568044618a2bf6292ecd53a5c481b90e3fa805eb.ur.jpg b/translated_images/globe.59f26379ceb40428672b4d9a568044618a2bf6292ecd53a5c481b90e3fa805eb.ur.jpg
new file mode 100644
index 000000000..31ba4b334
Binary files /dev/null and b/translated_images/globe.59f26379ceb40428672b4d9a568044618a2bf6292ecd53a5c481b90e3fa805eb.ur.jpg differ
diff --git a/translated_images/grid.464370ad00f3696ce81c7488a963158b69d3b1cfd3f020c58a28360e5cf4239c.ar.png b/translated_images/grid.464370ad00f3696ce81c7488a963158b69d3b1cfd3f020c58a28360e5cf4239c.ar.png
new file mode 100644
index 000000000..bde6517f7
Binary files /dev/null and b/translated_images/grid.464370ad00f3696ce81c7488a963158b69d3b1cfd3f020c58a28360e5cf4239c.ar.png differ
diff --git a/translated_images/grid.464370ad00f3696ce81c7488a963158b69d3b1cfd3f020c58a28360e5cf4239c.tl.png b/translated_images/grid.464370ad00f3696ce81c7488a963158b69d3b1cfd3f020c58a28360e5cf4239c.tl.png
new file mode 100644
index 000000000..bde6517f7
Binary files /dev/null and b/translated_images/grid.464370ad00f3696ce81c7488a963158b69d3b1cfd3f020c58a28360e5cf4239c.tl.png differ
diff --git a/translated_images/grid.464370ad00f3696ce81c7488a963158b69d3b1cfd3f020c58a28360e5cf4239c.ur.png b/translated_images/grid.464370ad00f3696ce81c7488a963158b69d3b1cfd3f020c58a28360e5cf4239c.ur.png
new file mode 100644
index 000000000..bde6517f7
Binary files /dev/null and b/translated_images/grid.464370ad00f3696ce81c7488a963158b69d3b1cfd3f020c58a28360e5cf4239c.ur.png differ
diff --git a/translated_images/heatmap.39952045da50b4eb206764735021552f31cff773a79997ece7481fe614897a25.ar.png b/translated_images/heatmap.39952045da50b4eb206764735021552f31cff773a79997ece7481fe614897a25.ar.png
new file mode 100644
index 000000000..bc2472735
Binary files /dev/null and b/translated_images/heatmap.39952045da50b4eb206764735021552f31cff773a79997ece7481fe614897a25.ar.png differ
diff --git a/translated_images/heatmap.39952045da50b4eb206764735021552f31cff773a79997ece7481fe614897a25.tl.png b/translated_images/heatmap.39952045da50b4eb206764735021552f31cff773a79997ece7481fe614897a25.tl.png
new file mode 100644
index 000000000..bc2472735
Binary files /dev/null and b/translated_images/heatmap.39952045da50b4eb206764735021552f31cff773a79997ece7481fe614897a25.tl.png differ
diff --git a/translated_images/heatmap.39952045da50b4eb206764735021552f31cff773a79997ece7481fe614897a25.ur.png b/translated_images/heatmap.39952045da50b4eb206764735021552f31cff773a79997ece7481fe614897a25.ur.png
new file mode 100644
index 000000000..bc2472735
Binary files /dev/null and b/translated_images/heatmap.39952045da50b4eb206764735021552f31cff773a79997ece7481fe614897a25.ur.png differ
diff --git a/translated_images/hierarchical.bf59403aa43c8c47493bfdf1cc25230f26e45f4e38a3d62e8769cd324129ac15.ar.png b/translated_images/hierarchical.bf59403aa43c8c47493bfdf1cc25230f26e45f4e38a3d62e8769cd324129ac15.ar.png
new file mode 100644
index 000000000..eb84fc9a7
Binary files /dev/null and b/translated_images/hierarchical.bf59403aa43c8c47493bfdf1cc25230f26e45f4e38a3d62e8769cd324129ac15.ar.png differ
diff --git a/translated_images/hierarchical.bf59403aa43c8c47493bfdf1cc25230f26e45f4e38a3d62e8769cd324129ac15.tl.png b/translated_images/hierarchical.bf59403aa43c8c47493bfdf1cc25230f26e45f4e38a3d62e8769cd324129ac15.tl.png
new file mode 100644
index 000000000..eb84fc9a7
Binary files /dev/null and b/translated_images/hierarchical.bf59403aa43c8c47493bfdf1cc25230f26e45f4e38a3d62e8769cd324129ac15.tl.png differ
diff --git a/translated_images/hierarchical.bf59403aa43c8c47493bfdf1cc25230f26e45f4e38a3d62e8769cd324129ac15.ur.png b/translated_images/hierarchical.bf59403aa43c8c47493bfdf1cc25230f26e45f4e38a3d62e8769cd324129ac15.ur.png
new file mode 100644
index 000000000..eb84fc9a7
Binary files /dev/null and b/translated_images/hierarchical.bf59403aa43c8c47493bfdf1cc25230f26e45f4e38a3d62e8769cd324129ac15.ur.png differ
diff --git a/translated_images/human.e3840390a2ab76901f465c17f568637801ab0df39d7c3fdcb6a112b0c74c6288.ar.png b/translated_images/human.e3840390a2ab76901f465c17f568637801ab0df39d7c3fdcb6a112b0c74c6288.ar.png
new file mode 100644
index 000000000..3070781f6
Binary files /dev/null and b/translated_images/human.e3840390a2ab76901f465c17f568637801ab0df39d7c3fdcb6a112b0c74c6288.ar.png differ
diff --git a/translated_images/human.e3840390a2ab76901f465c17f568637801ab0df39d7c3fdcb6a112b0c74c6288.tl.png b/translated_images/human.e3840390a2ab76901f465c17f568637801ab0df39d7c3fdcb6a112b0c74c6288.tl.png
new file mode 100644
index 000000000..3070781f6
Binary files /dev/null and b/translated_images/human.e3840390a2ab76901f465c17f568637801ab0df39d7c3fdcb6a112b0c74c6288.tl.png differ
diff --git a/translated_images/human.e3840390a2ab76901f465c17f568637801ab0df39d7c3fdcb6a112b0c74c6288.ur.png b/translated_images/human.e3840390a2ab76901f465c17f568637801ab0df39d7c3fdcb6a112b0c74c6288.ur.png
new file mode 100644
index 000000000..3070781f6
Binary files /dev/null and b/translated_images/human.e3840390a2ab76901f465c17f568637801ab0df39d7c3fdcb6a112b0c74c6288.ur.png differ
diff --git a/translated_images/hype.07183d711a17aafe70915909a0e45aa286ede136ee9424d418026ab00fec344c.ar.png b/translated_images/hype.07183d711a17aafe70915909a0e45aa286ede136ee9424d418026ab00fec344c.ar.png
new file mode 100644
index 000000000..d0e31337f
Binary files /dev/null and b/translated_images/hype.07183d711a17aafe70915909a0e45aa286ede136ee9424d418026ab00fec344c.ar.png differ
diff --git a/translated_images/hype.07183d711a17aafe70915909a0e45aa286ede136ee9424d418026ab00fec344c.tl.png b/translated_images/hype.07183d711a17aafe70915909a0e45aa286ede136ee9424d418026ab00fec344c.tl.png
new file mode 100644
index 000000000..d0e31337f
Binary files /dev/null and b/translated_images/hype.07183d711a17aafe70915909a0e45aa286ede136ee9424d418026ab00fec344c.tl.png differ
diff --git a/translated_images/hype.07183d711a17aafe70915909a0e45aa286ede136ee9424d418026ab00fec344c.ur.png b/translated_images/hype.07183d711a17aafe70915909a0e45aa286ede136ee9424d418026ab00fec344c.ur.png
new file mode 100644
index 000000000..d0e31337f
Binary files /dev/null and b/translated_images/hype.07183d711a17aafe70915909a0e45aa286ede136ee9424d418026ab00fec344c.ur.png differ
diff --git a/translated_images/indian.2c4292002af1a1f97a4a24fec6b1459ee8ff616c3822ae56bb62b9903e192af6.ar.png b/translated_images/indian.2c4292002af1a1f97a4a24fec6b1459ee8ff616c3822ae56bb62b9903e192af6.ar.png
new file mode 100644
index 000000000..ce4e65402
Binary files /dev/null and b/translated_images/indian.2c4292002af1a1f97a4a24fec6b1459ee8ff616c3822ae56bb62b9903e192af6.ar.png differ
diff --git a/translated_images/indian.2c4292002af1a1f97a4a24fec6b1459ee8ff616c3822ae56bb62b9903e192af6.tl.png b/translated_images/indian.2c4292002af1a1f97a4a24fec6b1459ee8ff616c3822ae56bb62b9903e192af6.tl.png
new file mode 100644
index 000000000..ce4e65402
Binary files /dev/null and b/translated_images/indian.2c4292002af1a1f97a4a24fec6b1459ee8ff616c3822ae56bb62b9903e192af6.tl.png differ
diff --git a/translated_images/indian.2c4292002af1a1f97a4a24fec6b1459ee8ff616c3822ae56bb62b9903e192af6.ur.png b/translated_images/indian.2c4292002af1a1f97a4a24fec6b1459ee8ff616c3822ae56bb62b9903e192af6.ur.png
new file mode 100644
index 000000000..ce4e65402
Binary files /dev/null and b/translated_images/indian.2c4292002af1a1f97a4a24fec6b1459ee8ff616c3822ae56bb62b9903e192af6.ur.png differ
diff --git a/translated_images/individual-causal-what-if.00e7b86b52a083cea6344c73c76463e9d41e0fe44fecd6f48671cb2a2d280d81.ar.png b/translated_images/individual-causal-what-if.00e7b86b52a083cea6344c73c76463e9d41e0fe44fecd6f48671cb2a2d280d81.ar.png
new file mode 100644
index 000000000..17be6837a
Binary files /dev/null and b/translated_images/individual-causal-what-if.00e7b86b52a083cea6344c73c76463e9d41e0fe44fecd6f48671cb2a2d280d81.ar.png differ
diff --git a/translated_images/individual-causal-what-if.00e7b86b52a083cea6344c73c76463e9d41e0fe44fecd6f48671cb2a2d280d81.tl.png b/translated_images/individual-causal-what-if.00e7b86b52a083cea6344c73c76463e9d41e0fe44fecd6f48671cb2a2d280d81.tl.png
new file mode 100644
index 000000000..17be6837a
Binary files /dev/null and b/translated_images/individual-causal-what-if.00e7b86b52a083cea6344c73c76463e9d41e0fe44fecd6f48671cb2a2d280d81.tl.png differ
diff --git a/translated_images/individual-causal-what-if.00e7b86b52a083cea6344c73c76463e9d41e0fe44fecd6f48671cb2a2d280d81.ur.png b/translated_images/individual-causal-what-if.00e7b86b52a083cea6344c73c76463e9d41e0fe44fecd6f48671cb2a2d280d81.ur.png
new file mode 100644
index 000000000..17be6837a
Binary files /dev/null and b/translated_images/individual-causal-what-if.00e7b86b52a083cea6344c73c76463e9d41e0fe44fecd6f48671cb2a2d280d81.ur.png differ
diff --git a/translated_images/jack-o-lanterns.181c661a9212457d7756f37219f660f1358af27554d856e5a991f16b4e15337c.ar.jpg b/translated_images/jack-o-lanterns.181c661a9212457d7756f37219f660f1358af27554d856e5a991f16b4e15337c.ar.jpg
new file mode 100644
index 000000000..97b3aa950
Binary files /dev/null and b/translated_images/jack-o-lanterns.181c661a9212457d7756f37219f660f1358af27554d856e5a991f16b4e15337c.ar.jpg differ
diff --git a/translated_images/jack-o-lanterns.181c661a9212457d7756f37219f660f1358af27554d856e5a991f16b4e15337c.tl.jpg b/translated_images/jack-o-lanterns.181c661a9212457d7756f37219f660f1358af27554d856e5a991f16b4e15337c.tl.jpg
new file mode 100644
index 000000000..97b3aa950
Binary files /dev/null and b/translated_images/jack-o-lanterns.181c661a9212457d7756f37219f660f1358af27554d856e5a991f16b4e15337c.tl.jpg differ
diff --git a/translated_images/jack-o-lanterns.181c661a9212457d7756f37219f660f1358af27554d856e5a991f16b4e15337c.ur.jpg b/translated_images/jack-o-lanterns.181c661a9212457d7756f37219f660f1358af27554d856e5a991f16b4e15337c.ur.jpg
new file mode 100644
index 000000000..97b3aa950
Binary files /dev/null and b/translated_images/jack-o-lanterns.181c661a9212457d7756f37219f660f1358af27554d856e5a991f16b4e15337c.ur.jpg differ
diff --git a/translated_images/janitor.e4a77dd3d3e6a32e25327090b8a9c00dc7cf459c44fa9f184c5ecb0d48ce3794.ar.jpg b/translated_images/janitor.e4a77dd3d3e6a32e25327090b8a9c00dc7cf459c44fa9f184c5ecb0d48ce3794.ar.jpg
new file mode 100644
index 000000000..cccf08c43
Binary files /dev/null and b/translated_images/janitor.e4a77dd3d3e6a32e25327090b8a9c00dc7cf459c44fa9f184c5ecb0d48ce3794.ar.jpg differ
diff --git a/translated_images/janitor.e4a77dd3d3e6a32e25327090b8a9c00dc7cf459c44fa9f184c5ecb0d48ce3794.tl.jpg b/translated_images/janitor.e4a77dd3d3e6a32e25327090b8a9c00dc7cf459c44fa9f184c5ecb0d48ce3794.tl.jpg
new file mode 100644
index 000000000..cccf08c43
Binary files /dev/null and b/translated_images/janitor.e4a77dd3d3e6a32e25327090b8a9c00dc7cf459c44fa9f184c5ecb0d48ce3794.tl.jpg differ
diff --git a/translated_images/janitor.e4a77dd3d3e6a32e25327090b8a9c00dc7cf459c44fa9f184c5ecb0d48ce3794.ur.jpg b/translated_images/janitor.e4a77dd3d3e6a32e25327090b8a9c00dc7cf459c44fa9f184c5ecb0d48ce3794.ur.jpg
new file mode 100644
index 000000000..cccf08c43
Binary files /dev/null and b/translated_images/janitor.e4a77dd3d3e6a32e25327090b8a9c00dc7cf459c44fa9f184c5ecb0d48ce3794.ur.jpg differ
diff --git a/translated_images/japanese.30260486f2a05c463c8faa62ebe7b38f0961ed293bd9a6db8eef5d3f0cf17155.ar.png b/translated_images/japanese.30260486f2a05c463c8faa62ebe7b38f0961ed293bd9a6db8eef5d3f0cf17155.ar.png
new file mode 100644
index 000000000..cfdf5122d
Binary files /dev/null and b/translated_images/japanese.30260486f2a05c463c8faa62ebe7b38f0961ed293bd9a6db8eef5d3f0cf17155.ar.png differ
diff --git a/translated_images/japanese.30260486f2a05c463c8faa62ebe7b38f0961ed293bd9a6db8eef5d3f0cf17155.tl.png b/translated_images/japanese.30260486f2a05c463c8faa62ebe7b38f0961ed293bd9a6db8eef5d3f0cf17155.tl.png
new file mode 100644
index 000000000..cfdf5122d
Binary files /dev/null and b/translated_images/japanese.30260486f2a05c463c8faa62ebe7b38f0961ed293bd9a6db8eef5d3f0cf17155.tl.png differ
diff --git a/translated_images/japanese.30260486f2a05c463c8faa62ebe7b38f0961ed293bd9a6db8eef5d3f0cf17155.ur.png b/translated_images/japanese.30260486f2a05c463c8faa62ebe7b38f0961ed293bd9a6db8eef5d3f0cf17155.ur.png
new file mode 100644
index 000000000..cfdf5122d
Binary files /dev/null and b/translated_images/japanese.30260486f2a05c463c8faa62ebe7b38f0961ed293bd9a6db8eef5d3f0cf17155.ur.png differ
diff --git a/translated_images/july-2014.9e1f7c318ec6d5b30b0d7e1e20be3643501f64a53f3d426d7c7d7b62addb335e.ar.png b/translated_images/july-2014.9e1f7c318ec6d5b30b0d7e1e20be3643501f64a53f3d426d7c7d7b62addb335e.ar.png
new file mode 100644
index 000000000..fe1c23bf3
Binary files /dev/null and b/translated_images/july-2014.9e1f7c318ec6d5b30b0d7e1e20be3643501f64a53f3d426d7c7d7b62addb335e.ar.png differ
diff --git a/translated_images/july-2014.9e1f7c318ec6d5b30b0d7e1e20be3643501f64a53f3d426d7c7d7b62addb335e.tl.png b/translated_images/july-2014.9e1f7c318ec6d5b30b0d7e1e20be3643501f64a53f3d426d7c7d7b62addb335e.tl.png
new file mode 100644
index 000000000..fe1c23bf3
Binary files /dev/null and b/translated_images/july-2014.9e1f7c318ec6d5b30b0d7e1e20be3643501f64a53f3d426d7c7d7b62addb335e.tl.png differ
diff --git a/translated_images/july-2014.9e1f7c318ec6d5b30b0d7e1e20be3643501f64a53f3d426d7c7d7b62addb335e.ur.png b/translated_images/july-2014.9e1f7c318ec6d5b30b0d7e1e20be3643501f64a53f3d426d7c7d7b62addb335e.ur.png
new file mode 100644
index 000000000..fe1c23bf3
Binary files /dev/null and b/translated_images/july-2014.9e1f7c318ec6d5b30b0d7e1e20be3643501f64a53f3d426d7c7d7b62addb335e.ur.png differ
diff --git a/translated_images/korean.4a4f0274f3d9805a65e61f05597eeaad8620b03be23a2c0a705c023f65fad2c0.ar.png b/translated_images/korean.4a4f0274f3d9805a65e61f05597eeaad8620b03be23a2c0a705c023f65fad2c0.ar.png
new file mode 100644
index 000000000..1cdc61d30
Binary files /dev/null and b/translated_images/korean.4a4f0274f3d9805a65e61f05597eeaad8620b03be23a2c0a705c023f65fad2c0.ar.png differ
diff --git a/translated_images/korean.4a4f0274f3d9805a65e61f05597eeaad8620b03be23a2c0a705c023f65fad2c0.tl.png b/translated_images/korean.4a4f0274f3d9805a65e61f05597eeaad8620b03be23a2c0a705c023f65fad2c0.tl.png
new file mode 100644
index 000000000..1cdc61d30
Binary files /dev/null and b/translated_images/korean.4a4f0274f3d9805a65e61f05597eeaad8620b03be23a2c0a705c023f65fad2c0.tl.png differ
diff --git a/translated_images/korean.4a4f0274f3d9805a65e61f05597eeaad8620b03be23a2c0a705c023f65fad2c0.ur.png b/translated_images/korean.4a4f0274f3d9805a65e61f05597eeaad8620b03be23a2c0a705c023f65fad2c0.ur.png
new file mode 100644
index 000000000..1cdc61d30
Binary files /dev/null and b/translated_images/korean.4a4f0274f3d9805a65e61f05597eeaad8620b03be23a2c0a705c023f65fad2c0.ur.png differ
diff --git a/translated_images/learned.ed28bcd8484b5287a31925c96c43b43e2c2bb876b8ca41a0e1e754f77bb3db20.ar.png b/translated_images/learned.ed28bcd8484b5287a31925c96c43b43e2c2bb876b8ca41a0e1e754f77bb3db20.ar.png
new file mode 100644
index 000000000..0fc22438a
Binary files /dev/null and b/translated_images/learned.ed28bcd8484b5287a31925c96c43b43e2c2bb876b8ca41a0e1e754f77bb3db20.ar.png differ
diff --git a/translated_images/learned.ed28bcd8484b5287a31925c96c43b43e2c2bb876b8ca41a0e1e754f77bb3db20.tl.png b/translated_images/learned.ed28bcd8484b5287a31925c96c43b43e2c2bb876b8ca41a0e1e754f77bb3db20.tl.png
new file mode 100644
index 000000000..0fc22438a
Binary files /dev/null and b/translated_images/learned.ed28bcd8484b5287a31925c96c43b43e2c2bb876b8ca41a0e1e754f77bb3db20.tl.png differ
diff --git a/translated_images/learned.ed28bcd8484b5287a31925c96c43b43e2c2bb876b8ca41a0e1e754f77bb3db20.ur.png b/translated_images/learned.ed28bcd8484b5287a31925c96c43b43e2c2bb876b8ca41a0e1e754f77bb3db20.ur.png
new file mode 100644
index 000000000..0fc22438a
Binary files /dev/null and b/translated_images/learned.ed28bcd8484b5287a31925c96c43b43e2c2bb876b8ca41a0e1e754f77bb3db20.ur.png differ
diff --git a/translated_images/linear-polynomial.5523c7cb6576ccab0fecbd0e3505986eb2d191d9378e785f82befcf3a578a6e7.ar.png b/translated_images/linear-polynomial.5523c7cb6576ccab0fecbd0e3505986eb2d191d9378e785f82befcf3a578a6e7.ar.png
new file mode 100644
index 000000000..7e7da0343
Binary files /dev/null and b/translated_images/linear-polynomial.5523c7cb6576ccab0fecbd0e3505986eb2d191d9378e785f82befcf3a578a6e7.ar.png differ
diff --git a/translated_images/linear-polynomial.5523c7cb6576ccab0fecbd0e3505986eb2d191d9378e785f82befcf3a578a6e7.tl.png b/translated_images/linear-polynomial.5523c7cb6576ccab0fecbd0e3505986eb2d191d9378e785f82befcf3a578a6e7.tl.png
new file mode 100644
index 000000000..7e7da0343
Binary files /dev/null and b/translated_images/linear-polynomial.5523c7cb6576ccab0fecbd0e3505986eb2d191d9378e785f82befcf3a578a6e7.tl.png differ
diff --git a/translated_images/linear-polynomial.5523c7cb6576ccab0fecbd0e3505986eb2d191d9378e785f82befcf3a578a6e7.ur.png b/translated_images/linear-polynomial.5523c7cb6576ccab0fecbd0e3505986eb2d191d9378e785f82befcf3a578a6e7.ur.png
new file mode 100644
index 000000000..7e7da0343
Binary files /dev/null and b/translated_images/linear-polynomial.5523c7cb6576ccab0fecbd0e3505986eb2d191d9378e785f82befcf3a578a6e7.ur.png differ
diff --git a/translated_images/linear-results.f7c3552c85b0ed1ce2808276c870656733f6878c8fd37ec220812ee77686c3ef.ar.png b/translated_images/linear-results.f7c3552c85b0ed1ce2808276c870656733f6878c8fd37ec220812ee77686c3ef.ar.png
new file mode 100644
index 000000000..2b636a72e
Binary files /dev/null and b/translated_images/linear-results.f7c3552c85b0ed1ce2808276c870656733f6878c8fd37ec220812ee77686c3ef.ar.png differ
diff --git a/translated_images/linear-results.f7c3552c85b0ed1ce2808276c870656733f6878c8fd37ec220812ee77686c3ef.tl.png b/translated_images/linear-results.f7c3552c85b0ed1ce2808276c870656733f6878c8fd37ec220812ee77686c3ef.tl.png
new file mode 100644
index 000000000..2b636a72e
Binary files /dev/null and b/translated_images/linear-results.f7c3552c85b0ed1ce2808276c870656733f6878c8fd37ec220812ee77686c3ef.tl.png differ
diff --git a/translated_images/linear-results.f7c3552c85b0ed1ce2808276c870656733f6878c8fd37ec220812ee77686c3ef.ur.png b/translated_images/linear-results.f7c3552c85b0ed1ce2808276c870656733f6878c8fd37ec220812ee77686c3ef.ur.png
new file mode 100644
index 000000000..2b636a72e
Binary files /dev/null and b/translated_images/linear-results.f7c3552c85b0ed1ce2808276c870656733f6878c8fd37ec220812ee77686c3ef.ur.png differ
diff --git a/translated_images/linear-vs-logistic.ba180bf95e7ee66721ba10ebf2dac2666acbd64a88b003c83928712433a13c7d.ar.png b/translated_images/linear-vs-logistic.ba180bf95e7ee66721ba10ebf2dac2666acbd64a88b003c83928712433a13c7d.ar.png
new file mode 100644
index 000000000..cae05d6af
Binary files /dev/null and b/translated_images/linear-vs-logistic.ba180bf95e7ee66721ba10ebf2dac2666acbd64a88b003c83928712433a13c7d.ar.png differ
diff --git a/translated_images/linear-vs-logistic.ba180bf95e7ee66721ba10ebf2dac2666acbd64a88b003c83928712433a13c7d.tl.png b/translated_images/linear-vs-logistic.ba180bf95e7ee66721ba10ebf2dac2666acbd64a88b003c83928712433a13c7d.tl.png
new file mode 100644
index 000000000..cae05d6af
Binary files /dev/null and b/translated_images/linear-vs-logistic.ba180bf95e7ee66721ba10ebf2dac2666acbd64a88b003c83928712433a13c7d.tl.png differ
diff --git a/translated_images/linear-vs-logistic.ba180bf95e7ee66721ba10ebf2dac2666acbd64a88b003c83928712433a13c7d.ur.png b/translated_images/linear-vs-logistic.ba180bf95e7ee66721ba10ebf2dac2666acbd64a88b003c83928712433a13c7d.ur.png
new file mode 100644
index 000000000..cae05d6af
Binary files /dev/null and b/translated_images/linear-vs-logistic.ba180bf95e7ee66721ba10ebf2dac2666acbd64a88b003c83928712433a13c7d.ur.png differ
diff --git a/translated_images/linear.a1b0760a56132551947c85988ff1753b2bccea6c29097394744d3f8a986ac3bf.ar.png b/translated_images/linear.a1b0760a56132551947c85988ff1753b2bccea6c29097394744d3f8a986ac3bf.ar.png
new file mode 100644
index 000000000..fd72fdf81
Binary files /dev/null and b/translated_images/linear.a1b0760a56132551947c85988ff1753b2bccea6c29097394744d3f8a986ac3bf.ar.png differ
diff --git a/translated_images/linear.a1b0760a56132551947c85988ff1753b2bccea6c29097394744d3f8a986ac3bf.tl.png b/translated_images/linear.a1b0760a56132551947c85988ff1753b2bccea6c29097394744d3f8a986ac3bf.tl.png
new file mode 100644
index 000000000..fd72fdf81
Binary files /dev/null and b/translated_images/linear.a1b0760a56132551947c85988ff1753b2bccea6c29097394744d3f8a986ac3bf.tl.png differ
diff --git a/translated_images/linear.a1b0760a56132551947c85988ff1753b2bccea6c29097394744d3f8a986ac3bf.ur.png b/translated_images/linear.a1b0760a56132551947c85988ff1753b2bccea6c29097394744d3f8a986ac3bf.ur.png
new file mode 100644
index 000000000..fd72fdf81
Binary files /dev/null and b/translated_images/linear.a1b0760a56132551947c85988ff1753b2bccea6c29097394744d3f8a986ac3bf.ur.png differ
diff --git a/translated_images/lobe.2fa0806408ef9923ad81b63f5094b5d832a2e52227c4f0abb9fef6e1132fde15.ar.png b/translated_images/lobe.2fa0806408ef9923ad81b63f5094b5d832a2e52227c4f0abb9fef6e1132fde15.ar.png
new file mode 100644
index 000000000..73ca29080
Binary files /dev/null and b/translated_images/lobe.2fa0806408ef9923ad81b63f5094b5d832a2e52227c4f0abb9fef6e1132fde15.ar.png differ
diff --git a/translated_images/lobe.2fa0806408ef9923ad81b63f5094b5d832a2e52227c4f0abb9fef6e1132fde15.tl.png b/translated_images/lobe.2fa0806408ef9923ad81b63f5094b5d832a2e52227c4f0abb9fef6e1132fde15.tl.png
new file mode 100644
index 000000000..73ca29080
Binary files /dev/null and b/translated_images/lobe.2fa0806408ef9923ad81b63f5094b5d832a2e52227c4f0abb9fef6e1132fde15.tl.png differ
diff --git a/translated_images/lobe.2fa0806408ef9923ad81b63f5094b5d832a2e52227c4f0abb9fef6e1132fde15.ur.png b/translated_images/lobe.2fa0806408ef9923ad81b63f5094b5d832a2e52227c4f0abb9fef6e1132fde15.ur.png
new file mode 100644
index 000000000..73ca29080
Binary files /dev/null and b/translated_images/lobe.2fa0806408ef9923ad81b63f5094b5d832a2e52227c4f0abb9fef6e1132fde15.ur.png differ
diff --git a/translated_images/logistic-linear.0f2f6bb73b3134c1b1463fb22452aefe74b21b7c357ddccac31831a836dcce73.ar.png b/translated_images/logistic-linear.0f2f6bb73b3134c1b1463fb22452aefe74b21b7c357ddccac31831a836dcce73.ar.png
new file mode 100644
index 000000000..46e4c00ec
Binary files /dev/null and b/translated_images/logistic-linear.0f2f6bb73b3134c1b1463fb22452aefe74b21b7c357ddccac31831a836dcce73.ar.png differ
diff --git a/translated_images/logistic-linear.0f2f6bb73b3134c1b1463fb22452aefe74b21b7c357ddccac31831a836dcce73.tl.png b/translated_images/logistic-linear.0f2f6bb73b3134c1b1463fb22452aefe74b21b7c357ddccac31831a836dcce73.tl.png
new file mode 100644
index 000000000..46e4c00ec
Binary files /dev/null and b/translated_images/logistic-linear.0f2f6bb73b3134c1b1463fb22452aefe74b21b7c357ddccac31831a836dcce73.tl.png differ
diff --git a/translated_images/logistic-linear.0f2f6bb73b3134c1b1463fb22452aefe74b21b7c357ddccac31831a836dcce73.ur.png b/translated_images/logistic-linear.0f2f6bb73b3134c1b1463fb22452aefe74b21b7c357ddccac31831a836dcce73.ur.png
new file mode 100644
index 000000000..46e4c00ec
Binary files /dev/null and b/translated_images/logistic-linear.0f2f6bb73b3134c1b1463fb22452aefe74b21b7c357ddccac31831a836dcce73.ur.png differ
diff --git a/translated_images/logistic.b0cba6b7db4d57899f5a6ae74876bd34a0bd5dc492458b80b3293e948fa46a2d.ar.png b/translated_images/logistic.b0cba6b7db4d57899f5a6ae74876bd34a0bd5dc492458b80b3293e948fa46a2d.ar.png
new file mode 100644
index 000000000..d745453cd
Binary files /dev/null and b/translated_images/logistic.b0cba6b7db4d57899f5a6ae74876bd34a0bd5dc492458b80b3293e948fa46a2d.ar.png differ
diff --git a/translated_images/logistic.b0cba6b7db4d57899f5a6ae74876bd34a0bd5dc492458b80b3293e948fa46a2d.tl.png b/translated_images/logistic.b0cba6b7db4d57899f5a6ae74876bd34a0bd5dc492458b80b3293e948fa46a2d.tl.png
new file mode 100644
index 000000000..d745453cd
Binary files /dev/null and b/translated_images/logistic.b0cba6b7db4d57899f5a6ae74876bd34a0bd5dc492458b80b3293e948fa46a2d.tl.png differ
diff --git a/translated_images/logistic.b0cba6b7db4d57899f5a6ae74876bd34a0bd5dc492458b80b3293e948fa46a2d.ur.png b/translated_images/logistic.b0cba6b7db4d57899f5a6ae74876bd34a0bd5dc492458b80b3293e948fa46a2d.ur.png
new file mode 100644
index 000000000..d745453cd
Binary files /dev/null and b/translated_images/logistic.b0cba6b7db4d57899f5a6ae74876bd34a0bd5dc492458b80b3293e948fa46a2d.ur.png differ
diff --git a/translated_images/lpathlen.94f211521ed609400dc64c3d8423b9effc5406f33d2648d0002c14c04ba820c1.ar.png b/translated_images/lpathlen.94f211521ed609400dc64c3d8423b9effc5406f33d2648d0002c14c04ba820c1.ar.png
new file mode 100644
index 000000000..3d6401011
Binary files /dev/null and b/translated_images/lpathlen.94f211521ed609400dc64c3d8423b9effc5406f33d2648d0002c14c04ba820c1.ar.png differ
diff --git a/translated_images/lpathlen.94f211521ed609400dc64c3d8423b9effc5406f33d2648d0002c14c04ba820c1.tl.png b/translated_images/lpathlen.94f211521ed609400dc64c3d8423b9effc5406f33d2648d0002c14c04ba820c1.tl.png
new file mode 100644
index 000000000..3d6401011
Binary files /dev/null and b/translated_images/lpathlen.94f211521ed609400dc64c3d8423b9effc5406f33d2648d0002c14c04ba820c1.tl.png differ
diff --git a/translated_images/lpathlen.94f211521ed609400dc64c3d8423b9effc5406f33d2648d0002c14c04ba820c1.ur.png b/translated_images/lpathlen.94f211521ed609400dc64c3d8423b9effc5406f33d2648d0002c14c04ba820c1.ur.png
new file mode 100644
index 000000000..3d6401011
Binary files /dev/null and b/translated_images/lpathlen.94f211521ed609400dc64c3d8423b9effc5406f33d2648d0002c14c04ba820c1.ur.png differ
diff --git a/translated_images/lpathlen1.0534784add58d4ebf25c21d4a1da9bceab4f96743a35817f1b49ab963c64c572.ar.png b/translated_images/lpathlen1.0534784add58d4ebf25c21d4a1da9bceab4f96743a35817f1b49ab963c64c572.ar.png
new file mode 100644
index 000000000..ca5ced7c0
Binary files /dev/null and b/translated_images/lpathlen1.0534784add58d4ebf25c21d4a1da9bceab4f96743a35817f1b49ab963c64c572.ar.png differ
diff --git a/translated_images/lpathlen1.0534784add58d4ebf25c21d4a1da9bceab4f96743a35817f1b49ab963c64c572.tl.png b/translated_images/lpathlen1.0534784add58d4ebf25c21d4a1da9bceab4f96743a35817f1b49ab963c64c572.tl.png
new file mode 100644
index 000000000..ca5ced7c0
Binary files /dev/null and b/translated_images/lpathlen1.0534784add58d4ebf25c21d4a1da9bceab4f96743a35817f1b49ab963c64c572.tl.png differ
diff --git a/translated_images/lpathlen1.0534784add58d4ebf25c21d4a1da9bceab4f96743a35817f1b49ab963c64c572.ur.png b/translated_images/lpathlen1.0534784add58d4ebf25c21d4a1da9bceab4f96743a35817f1b49ab963c64c572.ur.png
new file mode 100644
index 000000000..ca5ced7c0
Binary files /dev/null and b/translated_images/lpathlen1.0534784add58d4ebf25c21d4a1da9bceab4f96743a35817f1b49ab963c64c572.ur.png differ
diff --git a/translated_images/map.e963a6a51349425ab107b38f6c7307eb4c0d0c7ccdd2e81a5e1919292bab9ac7.ar.png b/translated_images/map.e963a6a51349425ab107b38f6c7307eb4c0d0c7ccdd2e81a5e1919292bab9ac7.ar.png
new file mode 100644
index 000000000..484731132
Binary files /dev/null and b/translated_images/map.e963a6a51349425ab107b38f6c7307eb4c0d0c7ccdd2e81a5e1919292bab9ac7.ar.png differ
diff --git a/translated_images/map.e963a6a51349425ab107b38f6c7307eb4c0d0c7ccdd2e81a5e1919292bab9ac7.tl.png b/translated_images/map.e963a6a51349425ab107b38f6c7307eb4c0d0c7ccdd2e81a5e1919292bab9ac7.tl.png
new file mode 100644
index 000000000..484731132
Binary files /dev/null and b/translated_images/map.e963a6a51349425ab107b38f6c7307eb4c0d0c7ccdd2e81a5e1919292bab9ac7.tl.png differ
diff --git a/translated_images/map.e963a6a51349425ab107b38f6c7307eb4c0d0c7ccdd2e81a5e1919292bab9ac7.ur.png b/translated_images/map.e963a6a51349425ab107b38f6c7307eb4c0d0c7ccdd2e81a5e1919292bab9ac7.ur.png
new file mode 100644
index 000000000..484731132
Binary files /dev/null and b/translated_images/map.e963a6a51349425ab107b38f6c7307eb4c0d0c7ccdd2e81a5e1919292bab9ac7.ur.png differ
diff --git a/translated_images/mape.fd87bbaf4d346846df6af88b26bf6f0926bf9a5027816d5e23e1200866e3e8a4.ar.png b/translated_images/mape.fd87bbaf4d346846df6af88b26bf6f0926bf9a5027816d5e23e1200866e3e8a4.ar.png
new file mode 100644
index 000000000..6a061bf4d
Binary files /dev/null and b/translated_images/mape.fd87bbaf4d346846df6af88b26bf6f0926bf9a5027816d5e23e1200866e3e8a4.ar.png differ
diff --git a/translated_images/mape.fd87bbaf4d346846df6af88b26bf6f0926bf9a5027816d5e23e1200866e3e8a4.tl.png b/translated_images/mape.fd87bbaf4d346846df6af88b26bf6f0926bf9a5027816d5e23e1200866e3e8a4.tl.png
new file mode 100644
index 000000000..6a061bf4d
Binary files /dev/null and b/translated_images/mape.fd87bbaf4d346846df6af88b26bf6f0926bf9a5027816d5e23e1200866e3e8a4.tl.png differ
diff --git a/translated_images/mape.fd87bbaf4d346846df6af88b26bf6f0926bf9a5027816d5e23e1200866e3e8a4.ur.png b/translated_images/mape.fd87bbaf4d346846df6af88b26bf6f0926bf9a5027816d5e23e1200866e3e8a4.ur.png
new file mode 100644
index 000000000..6a061bf4d
Binary files /dev/null and b/translated_images/mape.fd87bbaf4d346846df6af88b26bf6f0926bf9a5027816d5e23e1200866e3e8a4.ur.png differ
diff --git a/translated_images/ml-fairness.ef296ebec6afc98a44566d7b6c1ed18dc2bf1115c13ec679bb626028e852fa1d.ar.png b/translated_images/ml-fairness.ef296ebec6afc98a44566d7b6c1ed18dc2bf1115c13ec679bb626028e852fa1d.ar.png
new file mode 100644
index 000000000..713b55034
Binary files /dev/null and b/translated_images/ml-fairness.ef296ebec6afc98a44566d7b6c1ed18dc2bf1115c13ec679bb626028e852fa1d.ar.png differ
diff --git a/translated_images/ml-fairness.ef296ebec6afc98a44566d7b6c1ed18dc2bf1115c13ec679bb626028e852fa1d.tl.png b/translated_images/ml-fairness.ef296ebec6afc98a44566d7b6c1ed18dc2bf1115c13ec679bb626028e852fa1d.tl.png
new file mode 100644
index 000000000..713b55034
Binary files /dev/null and b/translated_images/ml-fairness.ef296ebec6afc98a44566d7b6c1ed18dc2bf1115c13ec679bb626028e852fa1d.tl.png differ
diff --git a/translated_images/ml-fairness.ef296ebec6afc98a44566d7b6c1ed18dc2bf1115c13ec679bb626028e852fa1d.ur.png b/translated_images/ml-fairness.ef296ebec6afc98a44566d7b6c1ed18dc2bf1115c13ec679bb626028e852fa1d.ur.png
new file mode 100644
index 000000000..713b55034
Binary files /dev/null and b/translated_images/ml-fairness.ef296ebec6afc98a44566d7b6c1ed18dc2bf1115c13ec679bb626028e852fa1d.ur.png differ
diff --git a/translated_images/ml-for-beginners-video-banner.279f2a268d2130758668f4044f8c252d42f7c0a141c2cb56294c1ccc157cdd1c.ar.png b/translated_images/ml-for-beginners-video-banner.279f2a268d2130758668f4044f8c252d42f7c0a141c2cb56294c1ccc157cdd1c.ar.png
new file mode 100644
index 000000000..966c1b8c0
Binary files /dev/null and b/translated_images/ml-for-beginners-video-banner.279f2a268d2130758668f4044f8c252d42f7c0a141c2cb56294c1ccc157cdd1c.ar.png differ
diff --git a/translated_images/ml-for-beginners-video-banner.279f2a268d2130758668f4044f8c252d42f7c0a141c2cb56294c1ccc157cdd1c.tl.png b/translated_images/ml-for-beginners-video-banner.279f2a268d2130758668f4044f8c252d42f7c0a141c2cb56294c1ccc157cdd1c.tl.png
new file mode 100644
index 000000000..966c1b8c0
Binary files /dev/null and b/translated_images/ml-for-beginners-video-banner.279f2a268d2130758668f4044f8c252d42f7c0a141c2cb56294c1ccc157cdd1c.tl.png differ
diff --git a/translated_images/ml-for-beginners-video-banner.279f2a268d2130758668f4044f8c252d42f7c0a141c2cb56294c1ccc157cdd1c.ur.png b/translated_images/ml-for-beginners-video-banner.279f2a268d2130758668f4044f8c252d42f7c0a141c2cb56294c1ccc157cdd1c.ur.png
new file mode 100644
index 000000000..966c1b8c0
Binary files /dev/null and b/translated_images/ml-for-beginners-video-banner.279f2a268d2130758668f4044f8c252d42f7c0a141c2cb56294c1ccc157cdd1c.ur.png differ
diff --git a/translated_images/ml-for-beginners.7b65fdd1f4f4159800d88d4e11fac859dd5eb2dc500be72f788085b38ab1bccb.ar.png b/translated_images/ml-for-beginners.7b65fdd1f4f4159800d88d4e11fac859dd5eb2dc500be72f788085b38ab1bccb.ar.png
new file mode 100644
index 000000000..2b2904a4b
Binary files /dev/null and b/translated_images/ml-for-beginners.7b65fdd1f4f4159800d88d4e11fac859dd5eb2dc500be72f788085b38ab1bccb.ar.png differ
diff --git a/translated_images/ml-for-beginners.7b65fdd1f4f4159800d88d4e11fac859dd5eb2dc500be72f788085b38ab1bccb.tl.png b/translated_images/ml-for-beginners.7b65fdd1f4f4159800d88d4e11fac859dd5eb2dc500be72f788085b38ab1bccb.tl.png
new file mode 100644
index 000000000..2b2904a4b
Binary files /dev/null and b/translated_images/ml-for-beginners.7b65fdd1f4f4159800d88d4e11fac859dd5eb2dc500be72f788085b38ab1bccb.tl.png differ
diff --git a/translated_images/ml-for-beginners.7b65fdd1f4f4159800d88d4e11fac859dd5eb2dc500be72f788085b38ab1bccb.ur.png b/translated_images/ml-for-beginners.7b65fdd1f4f4159800d88d4e11fac859dd5eb2dc500be72f788085b38ab1bccb.ur.png
new file mode 100644
index 000000000..2b2904a4b
Binary files /dev/null and b/translated_images/ml-for-beginners.7b65fdd1f4f4159800d88d4e11fac859dd5eb2dc500be72f788085b38ab1bccb.ur.png differ
diff --git a/translated_images/ml-history.a1bdfd4ce1f464d9a0502f38d355ffda384c95cd5278297a46c9a391b5053bc4.ar.png b/translated_images/ml-history.a1bdfd4ce1f464d9a0502f38d355ffda384c95cd5278297a46c9a391b5053bc4.ar.png
new file mode 100644
index 000000000..b79ba265c
Binary files /dev/null and b/translated_images/ml-history.a1bdfd4ce1f464d9a0502f38d355ffda384c95cd5278297a46c9a391b5053bc4.ar.png differ
diff --git a/translated_images/ml-history.a1bdfd4ce1f464d9a0502f38d355ffda384c95cd5278297a46c9a391b5053bc4.tl.png b/translated_images/ml-history.a1bdfd4ce1f464d9a0502f38d355ffda384c95cd5278297a46c9a391b5053bc4.tl.png
new file mode 100644
index 000000000..b79ba265c
Binary files /dev/null and b/translated_images/ml-history.a1bdfd4ce1f464d9a0502f38d355ffda384c95cd5278297a46c9a391b5053bc4.tl.png differ
diff --git a/translated_images/ml-history.a1bdfd4ce1f464d9a0502f38d355ffda384c95cd5278297a46c9a391b5053bc4.ur.png b/translated_images/ml-history.a1bdfd4ce1f464d9a0502f38d355ffda384c95cd5278297a46c9a391b5053bc4.ur.png
new file mode 100644
index 000000000..b79ba265c
Binary files /dev/null and b/translated_images/ml-history.a1bdfd4ce1f464d9a0502f38d355ffda384c95cd5278297a46c9a391b5053bc4.ur.png differ
diff --git a/translated_images/ml-realworld.26ee2746716155771f8076598b6145e6533fe4a9e2e465ea745f46648cbf1b84.ar.png b/translated_images/ml-realworld.26ee2746716155771f8076598b6145e6533fe4a9e2e465ea745f46648cbf1b84.ar.png
new file mode 100644
index 000000000..9bd65dae9
Binary files /dev/null and b/translated_images/ml-realworld.26ee2746716155771f8076598b6145e6533fe4a9e2e465ea745f46648cbf1b84.ar.png differ
diff --git a/translated_images/ml-realworld.26ee2746716155771f8076598b6145e6533fe4a9e2e465ea745f46648cbf1b84.tl.png b/translated_images/ml-realworld.26ee2746716155771f8076598b6145e6533fe4a9e2e465ea745f46648cbf1b84.tl.png
new file mode 100644
index 000000000..9bd65dae9
Binary files /dev/null and b/translated_images/ml-realworld.26ee2746716155771f8076598b6145e6533fe4a9e2e465ea745f46648cbf1b84.tl.png differ
diff --git a/translated_images/ml-realworld.26ee2746716155771f8076598b6145e6533fe4a9e2e465ea745f46648cbf1b84.ur.png b/translated_images/ml-realworld.26ee2746716155771f8076598b6145e6533fe4a9e2e465ea745f46648cbf1b84.ur.png
new file mode 100644
index 000000000..9bd65dae9
Binary files /dev/null and b/translated_images/ml-realworld.26ee2746716155771f8076598b6145e6533fe4a9e2e465ea745f46648cbf1b84.ur.png differ
diff --git a/translated_images/ml-regression.4e4f70e3b3ed446e3ace348dec973e133fa5d3680fbc8412b61879507369b98d.ar.png b/translated_images/ml-regression.4e4f70e3b3ed446e3ace348dec973e133fa5d3680fbc8412b61879507369b98d.ar.png
new file mode 100644
index 000000000..a6a94731a
Binary files /dev/null and b/translated_images/ml-regression.4e4f70e3b3ed446e3ace348dec973e133fa5d3680fbc8412b61879507369b98d.ar.png differ
diff --git a/translated_images/ml-regression.4e4f70e3b3ed446e3ace348dec973e133fa5d3680fbc8412b61879507369b98d.tl.png b/translated_images/ml-regression.4e4f70e3b3ed446e3ace348dec973e133fa5d3680fbc8412b61879507369b98d.tl.png
new file mode 100644
index 000000000..a6a94731a
Binary files /dev/null and b/translated_images/ml-regression.4e4f70e3b3ed446e3ace348dec973e133fa5d3680fbc8412b61879507369b98d.tl.png differ
diff --git a/translated_images/ml-regression.4e4f70e3b3ed446e3ace348dec973e133fa5d3680fbc8412b61879507369b98d.ur.png b/translated_images/ml-regression.4e4f70e3b3ed446e3ace348dec973e133fa5d3680fbc8412b61879507369b98d.ur.png
new file mode 100644
index 000000000..a6a94731a
Binary files /dev/null and b/translated_images/ml-regression.4e4f70e3b3ed446e3ace348dec973e133fa5d3680fbc8412b61879507369b98d.ur.png differ
diff --git a/translated_images/ml-reinforcement.94024374d63348dbb3571c343ca7ddabef72adac0b8086d47164b769ba3a8a1d.ar.png b/translated_images/ml-reinforcement.94024374d63348dbb3571c343ca7ddabef72adac0b8086d47164b769ba3a8a1d.ar.png
new file mode 100644
index 000000000..a6dfbc88c
Binary files /dev/null and b/translated_images/ml-reinforcement.94024374d63348dbb3571c343ca7ddabef72adac0b8086d47164b769ba3a8a1d.ar.png differ
diff --git a/translated_images/ml-reinforcement.94024374d63348dbb3571c343ca7ddabef72adac0b8086d47164b769ba3a8a1d.tl.png b/translated_images/ml-reinforcement.94024374d63348dbb3571c343ca7ddabef72adac0b8086d47164b769ba3a8a1d.tl.png
new file mode 100644
index 000000000..a6dfbc88c
Binary files /dev/null and b/translated_images/ml-reinforcement.94024374d63348dbb3571c343ca7ddabef72adac0b8086d47164b769ba3a8a1d.tl.png differ
diff --git a/translated_images/ml-reinforcement.94024374d63348dbb3571c343ca7ddabef72adac0b8086d47164b769ba3a8a1d.ur.png b/translated_images/ml-reinforcement.94024374d63348dbb3571c343ca7ddabef72adac0b8086d47164b769ba3a8a1d.ur.png
new file mode 100644
index 000000000..a6dfbc88c
Binary files /dev/null and b/translated_images/ml-reinforcement.94024374d63348dbb3571c343ca7ddabef72adac0b8086d47164b769ba3a8a1d.ur.png differ
diff --git a/translated_images/ml-timeseries.fb98d25f1013fc0c59090030080b5d1911ff336427bec31dbaf1ad08193812e9.ar.png b/translated_images/ml-timeseries.fb98d25f1013fc0c59090030080b5d1911ff336427bec31dbaf1ad08193812e9.ar.png
new file mode 100644
index 000000000..d4259d60d
Binary files /dev/null and b/translated_images/ml-timeseries.fb98d25f1013fc0c59090030080b5d1911ff336427bec31dbaf1ad08193812e9.ar.png differ
diff --git a/translated_images/ml-timeseries.fb98d25f1013fc0c59090030080b5d1911ff336427bec31dbaf1ad08193812e9.tl.png b/translated_images/ml-timeseries.fb98d25f1013fc0c59090030080b5d1911ff336427bec31dbaf1ad08193812e9.tl.png
new file mode 100644
index 000000000..d4259d60d
Binary files /dev/null and b/translated_images/ml-timeseries.fb98d25f1013fc0c59090030080b5d1911ff336427bec31dbaf1ad08193812e9.tl.png differ
diff --git a/translated_images/ml-timeseries.fb98d25f1013fc0c59090030080b5d1911ff336427bec31dbaf1ad08193812e9.ur.png b/translated_images/ml-timeseries.fb98d25f1013fc0c59090030080b5d1911ff336427bec31dbaf1ad08193812e9.ur.png
new file mode 100644
index 000000000..d4259d60d
Binary files /dev/null and b/translated_images/ml-timeseries.fb98d25f1013fc0c59090030080b5d1911ff336427bec31dbaf1ad08193812e9.ur.png differ
diff --git a/translated_images/model-overview-dataset-cohorts.dfa463fb527a35a0afc01b7b012fc87bf2cad756763f3652bbd810cac5d6cf33.ar.png b/translated_images/model-overview-dataset-cohorts.dfa463fb527a35a0afc01b7b012fc87bf2cad756763f3652bbd810cac5d6cf33.ar.png
new file mode 100644
index 000000000..673aeaca4
Binary files /dev/null and b/translated_images/model-overview-dataset-cohorts.dfa463fb527a35a0afc01b7b012fc87bf2cad756763f3652bbd810cac5d6cf33.ar.png differ
diff --git a/translated_images/model-overview-dataset-cohorts.dfa463fb527a35a0afc01b7b012fc87bf2cad756763f3652bbd810cac5d6cf33.tl.png b/translated_images/model-overview-dataset-cohorts.dfa463fb527a35a0afc01b7b012fc87bf2cad756763f3652bbd810cac5d6cf33.tl.png
new file mode 100644
index 000000000..673aeaca4
Binary files /dev/null and b/translated_images/model-overview-dataset-cohorts.dfa463fb527a35a0afc01b7b012fc87bf2cad756763f3652bbd810cac5d6cf33.tl.png differ
diff --git a/translated_images/model-overview-dataset-cohorts.dfa463fb527a35a0afc01b7b012fc87bf2cad756763f3652bbd810cac5d6cf33.ur.png b/translated_images/model-overview-dataset-cohorts.dfa463fb527a35a0afc01b7b012fc87bf2cad756763f3652bbd810cac5d6cf33.ur.png
new file mode 100644
index 000000000..673aeaca4
Binary files /dev/null and b/translated_images/model-overview-dataset-cohorts.dfa463fb527a35a0afc01b7b012fc87bf2cad756763f3652bbd810cac5d6cf33.ur.png differ
diff --git a/translated_images/model-overview-feature-cohorts.c5104d575ffd0c80b7ad8ede7703fab6166bfc6f9125dd395dcc4ace2f522f70.ar.png b/translated_images/model-overview-feature-cohorts.c5104d575ffd0c80b7ad8ede7703fab6166bfc6f9125dd395dcc4ace2f522f70.ar.png
new file mode 100644
index 000000000..c8f514d41
Binary files /dev/null and b/translated_images/model-overview-feature-cohorts.c5104d575ffd0c80b7ad8ede7703fab6166bfc6f9125dd395dcc4ace2f522f70.ar.png differ
diff --git a/translated_images/model-overview-feature-cohorts.c5104d575ffd0c80b7ad8ede7703fab6166bfc6f9125dd395dcc4ace2f522f70.tl.png b/translated_images/model-overview-feature-cohorts.c5104d575ffd0c80b7ad8ede7703fab6166bfc6f9125dd395dcc4ace2f522f70.tl.png
new file mode 100644
index 000000000..c8f514d41
Binary files /dev/null and b/translated_images/model-overview-feature-cohorts.c5104d575ffd0c80b7ad8ede7703fab6166bfc6f9125dd395dcc4ace2f522f70.tl.png differ
diff --git a/translated_images/model-overview-feature-cohorts.c5104d575ffd0c80b7ad8ede7703fab6166bfc6f9125dd395dcc4ace2f522f70.ur.png b/translated_images/model-overview-feature-cohorts.c5104d575ffd0c80b7ad8ede7703fab6166bfc6f9125dd395dcc4ace2f522f70.ur.png
new file mode 100644
index 000000000..c8f514d41
Binary files /dev/null and b/translated_images/model-overview-feature-cohorts.c5104d575ffd0c80b7ad8ede7703fab6166bfc6f9125dd395dcc4ace2f522f70.ur.png differ
diff --git a/translated_images/monnaie.606c5fa8369d5c3b3031ef0713e2069485c87985dd475cd9056bdf4c76c1f4b8.ar.png b/translated_images/monnaie.606c5fa8369d5c3b3031ef0713e2069485c87985dd475cd9056bdf4c76c1f4b8.ar.png
new file mode 100644
index 000000000..b8c9c5044
Binary files /dev/null and b/translated_images/monnaie.606c5fa8369d5c3b3031ef0713e2069485c87985dd475cd9056bdf4c76c1f4b8.ar.png differ
diff --git a/translated_images/monnaie.606c5fa8369d5c3b3031ef0713e2069485c87985dd475cd9056bdf4c76c1f4b8.tl.png b/translated_images/monnaie.606c5fa8369d5c3b3031ef0713e2069485c87985dd475cd9056bdf4c76c1f4b8.tl.png
new file mode 100644
index 000000000..b8c9c5044
Binary files /dev/null and b/translated_images/monnaie.606c5fa8369d5c3b3031ef0713e2069485c87985dd475cd9056bdf4c76c1f4b8.tl.png differ
diff --git a/translated_images/monnaie.606c5fa8369d5c3b3031ef0713e2069485c87985dd475cd9056bdf4c76c1f4b8.ur.png b/translated_images/monnaie.606c5fa8369d5c3b3031ef0713e2069485c87985dd475cd9056bdf4c76c1f4b8.ur.png
new file mode 100644
index 000000000..b8c9c5044
Binary files /dev/null and b/translated_images/monnaie.606c5fa8369d5c3b3031ef0713e2069485c87985dd475cd9056bdf4c76c1f4b8.ur.png differ
diff --git a/translated_images/mountaincar.43d56e588ce581c2d035f28cf038a9af112bec043b2ef8da40ac86119b1e3a93.ar.png b/translated_images/mountaincar.43d56e588ce581c2d035f28cf038a9af112bec043b2ef8da40ac86119b1e3a93.ar.png
new file mode 100644
index 000000000..f84dfd1a0
Binary files /dev/null and b/translated_images/mountaincar.43d56e588ce581c2d035f28cf038a9af112bec043b2ef8da40ac86119b1e3a93.ar.png differ
diff --git a/translated_images/mountaincar.43d56e588ce581c2d035f28cf038a9af112bec043b2ef8da40ac86119b1e3a93.tl.png b/translated_images/mountaincar.43d56e588ce581c2d035f28cf038a9af112bec043b2ef8da40ac86119b1e3a93.tl.png
new file mode 100644
index 000000000..f84dfd1a0
Binary files /dev/null and b/translated_images/mountaincar.43d56e588ce581c2d035f28cf038a9af112bec043b2ef8da40ac86119b1e3a93.tl.png differ
diff --git a/translated_images/mountaincar.43d56e588ce581c2d035f28cf038a9af112bec043b2ef8da40ac86119b1e3a93.ur.png b/translated_images/mountaincar.43d56e588ce581c2d035f28cf038a9af112bec043b2ef8da40ac86119b1e3a93.ur.png
new file mode 100644
index 000000000..f84dfd1a0
Binary files /dev/null and b/translated_images/mountaincar.43d56e588ce581c2d035f28cf038a9af112bec043b2ef8da40ac86119b1e3a93.ur.png differ
diff --git a/translated_images/multinomial-ordinal.944fe02295fd6cdffa68facf540d0534c6f428a5d906edc40507cda4356950ee.ar.png b/translated_images/multinomial-ordinal.944fe02295fd6cdffa68facf540d0534c6f428a5d906edc40507cda4356950ee.ar.png
new file mode 100644
index 000000000..a9d28008e
Binary files /dev/null and b/translated_images/multinomial-ordinal.944fe02295fd6cdffa68facf540d0534c6f428a5d906edc40507cda4356950ee.ar.png differ
diff --git a/translated_images/multinomial-ordinal.944fe02295fd6cdffa68facf540d0534c6f428a5d906edc40507cda4356950ee.tl.png b/translated_images/multinomial-ordinal.944fe02295fd6cdffa68facf540d0534c6f428a5d906edc40507cda4356950ee.tl.png
new file mode 100644
index 000000000..a9d28008e
Binary files /dev/null and b/translated_images/multinomial-ordinal.944fe02295fd6cdffa68facf540d0534c6f428a5d906edc40507cda4356950ee.tl.png differ
diff --git a/translated_images/multinomial-ordinal.944fe02295fd6cdffa68facf540d0534c6f428a5d906edc40507cda4356950ee.ur.png b/translated_images/multinomial-ordinal.944fe02295fd6cdffa68facf540d0534c6f428a5d906edc40507cda4356950ee.ur.png
new file mode 100644
index 000000000..a9d28008e
Binary files /dev/null and b/translated_images/multinomial-ordinal.944fe02295fd6cdffa68facf540d0534c6f428a5d906edc40507cda4356950ee.ur.png differ
diff --git a/translated_images/multinomial-vs-ordinal.36701b4850e37d86c9dd49f7bef93a2f94dbdb8fe03443eb68f0542f97f28f29.ar.png b/translated_images/multinomial-vs-ordinal.36701b4850e37d86c9dd49f7bef93a2f94dbdb8fe03443eb68f0542f97f28f29.ar.png
new file mode 100644
index 000000000..8e9246960
Binary files /dev/null and b/translated_images/multinomial-vs-ordinal.36701b4850e37d86c9dd49f7bef93a2f94dbdb8fe03443eb68f0542f97f28f29.ar.png differ
diff --git a/translated_images/multinomial-vs-ordinal.36701b4850e37d86c9dd49f7bef93a2f94dbdb8fe03443eb68f0542f97f28f29.tl.png b/translated_images/multinomial-vs-ordinal.36701b4850e37d86c9dd49f7bef93a2f94dbdb8fe03443eb68f0542f97f28f29.tl.png
new file mode 100644
index 000000000..8e9246960
Binary files /dev/null and b/translated_images/multinomial-vs-ordinal.36701b4850e37d86c9dd49f7bef93a2f94dbdb8fe03443eb68f0542f97f28f29.tl.png differ
diff --git a/translated_images/multinomial-vs-ordinal.36701b4850e37d86c9dd49f7bef93a2f94dbdb8fe03443eb68f0542f97f28f29.ur.png b/translated_images/multinomial-vs-ordinal.36701b4850e37d86c9dd49f7bef93a2f94dbdb8fe03443eb68f0542f97f28f29.ur.png
new file mode 100644
index 000000000..8e9246960
Binary files /dev/null and b/translated_images/multinomial-vs-ordinal.36701b4850e37d86c9dd49f7bef93a2f94dbdb8fe03443eb68f0542f97f28f29.ur.png differ
diff --git a/translated_images/netron.a05f39410211915e0f95e2c0e8b88f41e7d13d725faf660188f3802ba5c9e831.ar.png b/translated_images/netron.a05f39410211915e0f95e2c0e8b88f41e7d13d725faf660188f3802ba5c9e831.ar.png
new file mode 100644
index 000000000..29e55a863
Binary files /dev/null and b/translated_images/netron.a05f39410211915e0f95e2c0e8b88f41e7d13d725faf660188f3802ba5c9e831.ar.png differ
diff --git a/translated_images/netron.a05f39410211915e0f95e2c0e8b88f41e7d13d725faf660188f3802ba5c9e831.tl.png b/translated_images/netron.a05f39410211915e0f95e2c0e8b88f41e7d13d725faf660188f3802ba5c9e831.tl.png
new file mode 100644
index 000000000..29e55a863
Binary files /dev/null and b/translated_images/netron.a05f39410211915e0f95e2c0e8b88f41e7d13d725faf660188f3802ba5c9e831.tl.png differ
diff --git a/translated_images/netron.a05f39410211915e0f95e2c0e8b88f41e7d13d725faf660188f3802ba5c9e831.ur.png b/translated_images/netron.a05f39410211915e0f95e2c0e8b88f41e7d13d725faf660188f3802ba5c9e831.ur.png
new file mode 100644
index 000000000..29e55a863
Binary files /dev/null and b/translated_images/netron.a05f39410211915e0f95e2c0e8b88f41e7d13d725faf660188f3802ba5c9e831.ur.png differ
diff --git a/translated_images/notebook.4a3ee31f396b88325607afda33cadcc6368de98040ff33942424260aa84d75f2.ar.jpg b/translated_images/notebook.4a3ee31f396b88325607afda33cadcc6368de98040ff33942424260aa84d75f2.ar.jpg
new file mode 100644
index 000000000..d1e4f52d6
Binary files /dev/null and b/translated_images/notebook.4a3ee31f396b88325607afda33cadcc6368de98040ff33942424260aa84d75f2.ar.jpg differ
diff --git a/translated_images/notebook.4a3ee31f396b88325607afda33cadcc6368de98040ff33942424260aa84d75f2.tl.jpg b/translated_images/notebook.4a3ee31f396b88325607afda33cadcc6368de98040ff33942424260aa84d75f2.tl.jpg
new file mode 100644
index 000000000..d1e4f52d6
Binary files /dev/null and b/translated_images/notebook.4a3ee31f396b88325607afda33cadcc6368de98040ff33942424260aa84d75f2.tl.jpg differ
diff --git a/translated_images/notebook.4a3ee31f396b88325607afda33cadcc6368de98040ff33942424260aa84d75f2.ur.jpg b/translated_images/notebook.4a3ee31f396b88325607afda33cadcc6368de98040ff33942424260aa84d75f2.ur.jpg
new file mode 100644
index 000000000..d1e4f52d6
Binary files /dev/null and b/translated_images/notebook.4a3ee31f396b88325607afda33cadcc6368de98040ff33942424260aa84d75f2.ur.jpg differ
diff --git a/translated_images/original.b2b15efe0ce92b8745918f071dceec2231661bf49c8db6918e3ff4b3b0b183c2.ar.png b/translated_images/original.b2b15efe0ce92b8745918f071dceec2231661bf49c8db6918e3ff4b3b0b183c2.ar.png
new file mode 100644
index 000000000..14649e72f
Binary files /dev/null and b/translated_images/original.b2b15efe0ce92b8745918f071dceec2231661bf49c8db6918e3ff4b3b0b183c2.ar.png differ
diff --git a/translated_images/original.b2b15efe0ce92b8745918f071dceec2231661bf49c8db6918e3ff4b3b0b183c2.tl.png b/translated_images/original.b2b15efe0ce92b8745918f071dceec2231661bf49c8db6918e3ff4b3b0b183c2.tl.png
new file mode 100644
index 000000000..14649e72f
Binary files /dev/null and b/translated_images/original.b2b15efe0ce92b8745918f071dceec2231661bf49c8db6918e3ff4b3b0b183c2.tl.png differ
diff --git a/translated_images/original.b2b15efe0ce92b8745918f071dceec2231661bf49c8db6918e3ff4b3b0b183c2.ur.png b/translated_images/original.b2b15efe0ce92b8745918f071dceec2231661bf49c8db6918e3ff4b3b0b183c2.ur.png
new file mode 100644
index 000000000..14649e72f
Binary files /dev/null and b/translated_images/original.b2b15efe0ce92b8745918f071dceec2231661bf49c8db6918e3ff4b3b0b183c2.ur.png differ
diff --git a/translated_images/overfitting.1c132d92bfd93cb63240baf63ebdf82c30e30a0a44e1ad49861b82ff600c2b5c.ar.png b/translated_images/overfitting.1c132d92bfd93cb63240baf63ebdf82c30e30a0a44e1ad49861b82ff600c2b5c.ar.png
new file mode 100644
index 000000000..65dc241c5
Binary files /dev/null and b/translated_images/overfitting.1c132d92bfd93cb63240baf63ebdf82c30e30a0a44e1ad49861b82ff600c2b5c.ar.png differ
diff --git a/translated_images/overfitting.1c132d92bfd93cb63240baf63ebdf82c30e30a0a44e1ad49861b82ff600c2b5c.tl.png b/translated_images/overfitting.1c132d92bfd93cb63240baf63ebdf82c30e30a0a44e1ad49861b82ff600c2b5c.tl.png
new file mode 100644
index 000000000..65dc241c5
Binary files /dev/null and b/translated_images/overfitting.1c132d92bfd93cb63240baf63ebdf82c30e30a0a44e1ad49861b82ff600c2b5c.tl.png differ
diff --git a/translated_images/overfitting.1c132d92bfd93cb63240baf63ebdf82c30e30a0a44e1ad49861b82ff600c2b5c.ur.png b/translated_images/overfitting.1c132d92bfd93cb63240baf63ebdf82c30e30a0a44e1ad49861b82ff600c2b5c.ur.png
new file mode 100644
index 000000000..65dc241c5
Binary files /dev/null and b/translated_images/overfitting.1c132d92bfd93cb63240baf63ebdf82c30e30a0a44e1ad49861b82ff600c2b5c.ur.png differ
diff --git a/translated_images/p&p.279f1c49ecd889419e4ce6206525e9aa30d32a976955cd24daa636c361c6391f.ar.jpg b/translated_images/p&p.279f1c49ecd889419e4ce6206525e9aa30d32a976955cd24daa636c361c6391f.ar.jpg
new file mode 100644
index 000000000..81cca6e4c
Binary files /dev/null and b/translated_images/p&p.279f1c49ecd889419e4ce6206525e9aa30d32a976955cd24daa636c361c6391f.ar.jpg differ
diff --git a/translated_images/p&p.279f1c49ecd889419e4ce6206525e9aa30d32a976955cd24daa636c361c6391f.tl.jpg b/translated_images/p&p.279f1c49ecd889419e4ce6206525e9aa30d32a976955cd24daa636c361c6391f.tl.jpg
new file mode 100644
index 000000000..81cca6e4c
Binary files /dev/null and b/translated_images/p&p.279f1c49ecd889419e4ce6206525e9aa30d32a976955cd24daa636c361c6391f.tl.jpg differ
diff --git a/translated_images/p&p.279f1c49ecd889419e4ce6206525e9aa30d32a976955cd24daa636c361c6391f.ur.jpg b/translated_images/p&p.279f1c49ecd889419e4ce6206525e9aa30d32a976955cd24daa636c361c6391f.ur.jpg
new file mode 100644
index 000000000..81cca6e4c
Binary files /dev/null and b/translated_images/p&p.279f1c49ecd889419e4ce6206525e9aa30d32a976955cd24daa636c361c6391f.ur.jpg differ
diff --git a/translated_images/parse.d0c5bbe1106eae8fe7d60a183cd1736c8b6cec907f38000366535f84f3036101.ar.png b/translated_images/parse.d0c5bbe1106eae8fe7d60a183cd1736c8b6cec907f38000366535f84f3036101.ar.png
new file mode 100644
index 000000000..f78d1dc36
Binary files /dev/null and b/translated_images/parse.d0c5bbe1106eae8fe7d60a183cd1736c8b6cec907f38000366535f84f3036101.ar.png differ
diff --git a/translated_images/parse.d0c5bbe1106eae8fe7d60a183cd1736c8b6cec907f38000366535f84f3036101.tl.png b/translated_images/parse.d0c5bbe1106eae8fe7d60a183cd1736c8b6cec907f38000366535f84f3036101.tl.png
new file mode 100644
index 000000000..f78d1dc36
Binary files /dev/null and b/translated_images/parse.d0c5bbe1106eae8fe7d60a183cd1736c8b6cec907f38000366535f84f3036101.tl.png differ
diff --git a/translated_images/parse.d0c5bbe1106eae8fe7d60a183cd1736c8b6cec907f38000366535f84f3036101.ur.png b/translated_images/parse.d0c5bbe1106eae8fe7d60a183cd1736c8b6cec907f38000366535f84f3036101.ur.png
new file mode 100644
index 000000000..f78d1dc36
Binary files /dev/null and b/translated_images/parse.d0c5bbe1106eae8fe7d60a183cd1736c8b6cec907f38000366535f84f3036101.ur.png differ
diff --git a/translated_images/parsnip.cd2ce92622976502a80714e69ce67e3f2da3274a9ef5ac484c1308c5f3cb0f4a.ar.jpg b/translated_images/parsnip.cd2ce92622976502a80714e69ce67e3f2da3274a9ef5ac484c1308c5f3cb0f4a.ar.jpg
new file mode 100644
index 000000000..f25b446ec
Binary files /dev/null and b/translated_images/parsnip.cd2ce92622976502a80714e69ce67e3f2da3274a9ef5ac484c1308c5f3cb0f4a.ar.jpg differ
diff --git a/translated_images/parsnip.cd2ce92622976502a80714e69ce67e3f2da3274a9ef5ac484c1308c5f3cb0f4a.tl.jpg b/translated_images/parsnip.cd2ce92622976502a80714e69ce67e3f2da3274a9ef5ac484c1308c5f3cb0f4a.tl.jpg
new file mode 100644
index 000000000..f25b446ec
Binary files /dev/null and b/translated_images/parsnip.cd2ce92622976502a80714e69ce67e3f2da3274a9ef5ac484c1308c5f3cb0f4a.tl.jpg differ
diff --git a/translated_images/parsnip.cd2ce92622976502a80714e69ce67e3f2da3274a9ef5ac484c1308c5f3cb0f4a.ur.jpg b/translated_images/parsnip.cd2ce92622976502a80714e69ce67e3f2da3274a9ef5ac484c1308c5f3cb0f4a.ur.jpg
new file mode 100644
index 000000000..f25b446ec
Binary files /dev/null and b/translated_images/parsnip.cd2ce92622976502a80714e69ce67e3f2da3274a9ef5ac484c1308c5f3cb0f4a.ur.jpg differ
diff --git a/translated_images/peter.779730f9ba3a8a8d9290600dcf55f2e491c0640c785af7ac0d64f583c49b8864.ar.png b/translated_images/peter.779730f9ba3a8a8d9290600dcf55f2e491c0640c785af7ac0d64f583c49b8864.ar.png
new file mode 100644
index 000000000..43581e5f3
Binary files /dev/null and b/translated_images/peter.779730f9ba3a8a8d9290600dcf55f2e491c0640c785af7ac0d64f583c49b8864.ar.png differ
diff --git a/translated_images/peter.779730f9ba3a8a8d9290600dcf55f2e491c0640c785af7ac0d64f583c49b8864.tl.png b/translated_images/peter.779730f9ba3a8a8d9290600dcf55f2e491c0640c785af7ac0d64f583c49b8864.tl.png
new file mode 100644
index 000000000..43581e5f3
Binary files /dev/null and b/translated_images/peter.779730f9ba3a8a8d9290600dcf55f2e491c0640c785af7ac0d64f583c49b8864.tl.png differ
diff --git a/translated_images/peter.779730f9ba3a8a8d9290600dcf55f2e491c0640c785af7ac0d64f583c49b8864.ur.png b/translated_images/peter.779730f9ba3a8a8d9290600dcf55f2e491c0640c785af7ac0d64f583c49b8864.ur.png
new file mode 100644
index 000000000..43581e5f3
Binary files /dev/null and b/translated_images/peter.779730f9ba3a8a8d9290600dcf55f2e491c0640c785af7ac0d64f583c49b8864.ur.png differ
diff --git a/translated_images/pie-pumpkins-scatter.d14f9804a53f927e7fe39aa072486f4ed1bdd7f31c8bb08f476855f4b02350c3.ar.png b/translated_images/pie-pumpkins-scatter.d14f9804a53f927e7fe39aa072486f4ed1bdd7f31c8bb08f476855f4b02350c3.ar.png
new file mode 100644
index 000000000..06ab9e06b
Binary files /dev/null and b/translated_images/pie-pumpkins-scatter.d14f9804a53f927e7fe39aa072486f4ed1bdd7f31c8bb08f476855f4b02350c3.ar.png differ
diff --git a/translated_images/pie-pumpkins-scatter.d14f9804a53f927e7fe39aa072486f4ed1bdd7f31c8bb08f476855f4b02350c3.tl.png b/translated_images/pie-pumpkins-scatter.d14f9804a53f927e7fe39aa072486f4ed1bdd7f31c8bb08f476855f4b02350c3.tl.png
new file mode 100644
index 000000000..06ab9e06b
Binary files /dev/null and b/translated_images/pie-pumpkins-scatter.d14f9804a53f927e7fe39aa072486f4ed1bdd7f31c8bb08f476855f4b02350c3.tl.png differ
diff --git a/translated_images/pie-pumpkins-scatter.d14f9804a53f927e7fe39aa072486f4ed1bdd7f31c8bb08f476855f4b02350c3.ur.png b/translated_images/pie-pumpkins-scatter.d14f9804a53f927e7fe39aa072486f4ed1bdd7f31c8bb08f476855f4b02350c3.ur.png
new file mode 100644
index 000000000..06ab9e06b
Binary files /dev/null and b/translated_images/pie-pumpkins-scatter.d14f9804a53f927e7fe39aa072486f4ed1bdd7f31c8bb08f476855f4b02350c3.ur.png differ
diff --git a/translated_images/pinch.1b035ec9ba7e0d408313b551b60c721c9c290b2dd2094115bc87e6ddacd114c9.ar.png b/translated_images/pinch.1b035ec9ba7e0d408313b551b60c721c9c290b2dd2094115bc87e6ddacd114c9.ar.png
new file mode 100644
index 000000000..e66b95652
Binary files /dev/null and b/translated_images/pinch.1b035ec9ba7e0d408313b551b60c721c9c290b2dd2094115bc87e6ddacd114c9.ar.png differ
diff --git a/translated_images/pinch.1b035ec9ba7e0d408313b551b60c721c9c290b2dd2094115bc87e6ddacd114c9.tl.png b/translated_images/pinch.1b035ec9ba7e0d408313b551b60c721c9c290b2dd2094115bc87e6ddacd114c9.tl.png
new file mode 100644
index 000000000..e66b95652
Binary files /dev/null and b/translated_images/pinch.1b035ec9ba7e0d408313b551b60c721c9c290b2dd2094115bc87e6ddacd114c9.tl.png differ
diff --git a/translated_images/pinch.1b035ec9ba7e0d408313b551b60c721c9c290b2dd2094115bc87e6ddacd114c9.ur.png b/translated_images/pinch.1b035ec9ba7e0d408313b551b60c721c9c290b2dd2094115bc87e6ddacd114c9.ur.png
new file mode 100644
index 000000000..e66b95652
Binary files /dev/null and b/translated_images/pinch.1b035ec9ba7e0d408313b551b60c721c9c290b2dd2094115bc87e6ddacd114c9.ur.png differ
diff --git a/translated_images/poly-results.ee587348f0f1f60bd16c471321b0b2f2457d0eaa99d99ec0ced4affc900fa96c.ar.png b/translated_images/poly-results.ee587348f0f1f60bd16c471321b0b2f2457d0eaa99d99ec0ced4affc900fa96c.ar.png
new file mode 100644
index 000000000..f6ee37ec1
Binary files /dev/null and b/translated_images/poly-results.ee587348f0f1f60bd16c471321b0b2f2457d0eaa99d99ec0ced4affc900fa96c.ar.png differ
diff --git a/translated_images/poly-results.ee587348f0f1f60bd16c471321b0b2f2457d0eaa99d99ec0ced4affc900fa96c.tl.png b/translated_images/poly-results.ee587348f0f1f60bd16c471321b0b2f2457d0eaa99d99ec0ced4affc900fa96c.tl.png
new file mode 100644
index 000000000..f6ee37ec1
Binary files /dev/null and b/translated_images/poly-results.ee587348f0f1f60bd16c471321b0b2f2457d0eaa99d99ec0ced4affc900fa96c.tl.png differ
diff --git a/translated_images/poly-results.ee587348f0f1f60bd16c471321b0b2f2457d0eaa99d99ec0ced4affc900fa96c.ur.png b/translated_images/poly-results.ee587348f0f1f60bd16c471321b0b2f2457d0eaa99d99ec0ced4affc900fa96c.ur.png
new file mode 100644
index 000000000..f6ee37ec1
Binary files /dev/null and b/translated_images/poly-results.ee587348f0f1f60bd16c471321b0b2f2457d0eaa99d99ec0ced4affc900fa96c.ur.png differ
diff --git a/translated_images/polynomial.8fce4663e7283dfb9864eef62255b57cc2799e187c6d0a6dbfcf29fec6e52faa.ar.png b/translated_images/polynomial.8fce4663e7283dfb9864eef62255b57cc2799e187c6d0a6dbfcf29fec6e52faa.ar.png
new file mode 100644
index 000000000..bdf4f7ffe
Binary files /dev/null and b/translated_images/polynomial.8fce4663e7283dfb9864eef62255b57cc2799e187c6d0a6dbfcf29fec6e52faa.ar.png differ
diff --git a/translated_images/polynomial.8fce4663e7283dfb9864eef62255b57cc2799e187c6d0a6dbfcf29fec6e52faa.tl.png b/translated_images/polynomial.8fce4663e7283dfb9864eef62255b57cc2799e187c6d0a6dbfcf29fec6e52faa.tl.png
new file mode 100644
index 000000000..bdf4f7ffe
Binary files /dev/null and b/translated_images/polynomial.8fce4663e7283dfb9864eef62255b57cc2799e187c6d0a6dbfcf29fec6e52faa.tl.png differ
diff --git a/translated_images/polynomial.8fce4663e7283dfb9864eef62255b57cc2799e187c6d0a6dbfcf29fec6e52faa.ur.png b/translated_images/polynomial.8fce4663e7283dfb9864eef62255b57cc2799e187c6d0a6dbfcf29fec6e52faa.ur.png
new file mode 100644
index 000000000..bdf4f7ffe
Binary files /dev/null and b/translated_images/polynomial.8fce4663e7283dfb9864eef62255b57cc2799e187c6d0a6dbfcf29fec6e52faa.ur.png differ
diff --git a/translated_images/popular.9c48d84b3386705f98bf44e26e9655bee9eb7c849d73be65195e37895bfedb5d.ar.png b/translated_images/popular.9c48d84b3386705f98bf44e26e9655bee9eb7c849d73be65195e37895bfedb5d.ar.png
new file mode 100644
index 000000000..384e2d9e3
Binary files /dev/null and b/translated_images/popular.9c48d84b3386705f98bf44e26e9655bee9eb7c849d73be65195e37895bfedb5d.ar.png differ
diff --git a/translated_images/popular.9c48d84b3386705f98bf44e26e9655bee9eb7c849d73be65195e37895bfedb5d.tl.png b/translated_images/popular.9c48d84b3386705f98bf44e26e9655bee9eb7c849d73be65195e37895bfedb5d.tl.png
new file mode 100644
index 000000000..384e2d9e3
Binary files /dev/null and b/translated_images/popular.9c48d84b3386705f98bf44e26e9655bee9eb7c849d73be65195e37895bfedb5d.tl.png differ
diff --git a/translated_images/popular.9c48d84b3386705f98bf44e26e9655bee9eb7c849d73be65195e37895bfedb5d.ur.png b/translated_images/popular.9c48d84b3386705f98bf44e26e9655bee9eb7c849d73be65195e37895bfedb5d.ur.png
new file mode 100644
index 000000000..384e2d9e3
Binary files /dev/null and b/translated_images/popular.9c48d84b3386705f98bf44e26e9655bee9eb7c849d73be65195e37895bfedb5d.ur.png differ
diff --git a/translated_images/price-by-variety.744a2f9925d9bcb43a9a8c69469ce2520c9524fabfa270b1b2422cc2450d6d11.ar.png b/translated_images/price-by-variety.744a2f9925d9bcb43a9a8c69469ce2520c9524fabfa270b1b2422cc2450d6d11.ar.png
new file mode 100644
index 000000000..11efe5d61
Binary files /dev/null and b/translated_images/price-by-variety.744a2f9925d9bcb43a9a8c69469ce2520c9524fabfa270b1b2422cc2450d6d11.ar.png differ
diff --git a/translated_images/price-by-variety.744a2f9925d9bcb43a9a8c69469ce2520c9524fabfa270b1b2422cc2450d6d11.tl.png b/translated_images/price-by-variety.744a2f9925d9bcb43a9a8c69469ce2520c9524fabfa270b1b2422cc2450d6d11.tl.png
new file mode 100644
index 000000000..11efe5d61
Binary files /dev/null and b/translated_images/price-by-variety.744a2f9925d9bcb43a9a8c69469ce2520c9524fabfa270b1b2422cc2450d6d11.tl.png differ
diff --git a/translated_images/price-by-variety.744a2f9925d9bcb43a9a8c69469ce2520c9524fabfa270b1b2422cc2450d6d11.ur.png b/translated_images/price-by-variety.744a2f9925d9bcb43a9a8c69469ce2520c9524fabfa270b1b2422cc2450d6d11.ur.png
new file mode 100644
index 000000000..11efe5d61
Binary files /dev/null and b/translated_images/price-by-variety.744a2f9925d9bcb43a9a8c69469ce2520c9524fabfa270b1b2422cc2450d6d11.ur.png differ
diff --git a/translated_images/problems.f7fb539ccd80608e1f35c319cf5e3ad1809faa3c08537aead8018c6b5ba2e33a.ar.png b/translated_images/problems.f7fb539ccd80608e1f35c319cf5e3ad1809faa3c08537aead8018c6b5ba2e33a.ar.png
new file mode 100644
index 000000000..55a81a2f3
Binary files /dev/null and b/translated_images/problems.f7fb539ccd80608e1f35c319cf5e3ad1809faa3c08537aead8018c6b5ba2e33a.ar.png differ
diff --git a/translated_images/problems.f7fb539ccd80608e1f35c319cf5e3ad1809faa3c08537aead8018c6b5ba2e33a.tl.png b/translated_images/problems.f7fb539ccd80608e1f35c319cf5e3ad1809faa3c08537aead8018c6b5ba2e33a.tl.png
new file mode 100644
index 000000000..55a81a2f3
Binary files /dev/null and b/translated_images/problems.f7fb539ccd80608e1f35c319cf5e3ad1809faa3c08537aead8018c6b5ba2e33a.tl.png differ
diff --git a/translated_images/problems.f7fb539ccd80608e1f35c319cf5e3ad1809faa3c08537aead8018c6b5ba2e33a.ur.png b/translated_images/problems.f7fb539ccd80608e1f35c319cf5e3ad1809faa3c08537aead8018c6b5ba2e33a.ur.png
new file mode 100644
index 000000000..55a81a2f3
Binary files /dev/null and b/translated_images/problems.f7fb539ccd80608e1f35c319cf5e3ad1809faa3c08537aead8018c6b5ba2e33a.ur.png differ
diff --git a/translated_images/pumpkin-classifier.562771f104ad5436b87d1c67bca02a42a17841133556559325c0a0e348e5b774.ar.png b/translated_images/pumpkin-classifier.562771f104ad5436b87d1c67bca02a42a17841133556559325c0a0e348e5b774.ar.png
new file mode 100644
index 000000000..3e303968f
Binary files /dev/null and b/translated_images/pumpkin-classifier.562771f104ad5436b87d1c67bca02a42a17841133556559325c0a0e348e5b774.ar.png differ
diff --git a/translated_images/pumpkin-classifier.562771f104ad5436b87d1c67bca02a42a17841133556559325c0a0e348e5b774.tl.png b/translated_images/pumpkin-classifier.562771f104ad5436b87d1c67bca02a42a17841133556559325c0a0e348e5b774.tl.png
new file mode 100644
index 000000000..3e303968f
Binary files /dev/null and b/translated_images/pumpkin-classifier.562771f104ad5436b87d1c67bca02a42a17841133556559325c0a0e348e5b774.tl.png differ
diff --git a/translated_images/pumpkin-classifier.562771f104ad5436b87d1c67bca02a42a17841133556559325c0a0e348e5b774.ur.png b/translated_images/pumpkin-classifier.562771f104ad5436b87d1c67bca02a42a17841133556559325c0a0e348e5b774.ur.png
new file mode 100644
index 000000000..3e303968f
Binary files /dev/null and b/translated_images/pumpkin-classifier.562771f104ad5436b87d1c67bca02a42a17841133556559325c0a0e348e5b774.ur.png differ
diff --git a/translated_images/pumpkins_catplot_1.c55c409b71fea2ecc01921e64b91970542101f90bcccfa4aa3a205db8936f48b.ar.png b/translated_images/pumpkins_catplot_1.c55c409b71fea2ecc01921e64b91970542101f90bcccfa4aa3a205db8936f48b.ar.png
new file mode 100644
index 000000000..01a2dc518
Binary files /dev/null and b/translated_images/pumpkins_catplot_1.c55c409b71fea2ecc01921e64b91970542101f90bcccfa4aa3a205db8936f48b.ar.png differ
diff --git a/translated_images/pumpkins_catplot_1.c55c409b71fea2ecc01921e64b91970542101f90bcccfa4aa3a205db8936f48b.tl.png b/translated_images/pumpkins_catplot_1.c55c409b71fea2ecc01921e64b91970542101f90bcccfa4aa3a205db8936f48b.tl.png
new file mode 100644
index 000000000..01a2dc518
Binary files /dev/null and b/translated_images/pumpkins_catplot_1.c55c409b71fea2ecc01921e64b91970542101f90bcccfa4aa3a205db8936f48b.tl.png differ
diff --git a/translated_images/pumpkins_catplot_1.c55c409b71fea2ecc01921e64b91970542101f90bcccfa4aa3a205db8936f48b.ur.png b/translated_images/pumpkins_catplot_1.c55c409b71fea2ecc01921e64b91970542101f90bcccfa4aa3a205db8936f48b.ur.png
new file mode 100644
index 000000000..01a2dc518
Binary files /dev/null and b/translated_images/pumpkins_catplot_1.c55c409b71fea2ecc01921e64b91970542101f90bcccfa4aa3a205db8936f48b.ur.png differ
diff --git a/translated_images/pumpkins_catplot_2.87a354447880b3889278155957f8f60dd63db4598de5a6d0fda91c334d31f9f1.ar.png b/translated_images/pumpkins_catplot_2.87a354447880b3889278155957f8f60dd63db4598de5a6d0fda91c334d31f9f1.ar.png
new file mode 100644
index 000000000..7de8e90f5
Binary files /dev/null and b/translated_images/pumpkins_catplot_2.87a354447880b3889278155957f8f60dd63db4598de5a6d0fda91c334d31f9f1.ar.png differ
diff --git a/translated_images/pumpkins_catplot_2.87a354447880b3889278155957f8f60dd63db4598de5a6d0fda91c334d31f9f1.tl.png b/translated_images/pumpkins_catplot_2.87a354447880b3889278155957f8f60dd63db4598de5a6d0fda91c334d31f9f1.tl.png
new file mode 100644
index 000000000..7de8e90f5
Binary files /dev/null and b/translated_images/pumpkins_catplot_2.87a354447880b3889278155957f8f60dd63db4598de5a6d0fda91c334d31f9f1.tl.png differ
diff --git a/translated_images/pumpkins_catplot_2.87a354447880b3889278155957f8f60dd63db4598de5a6d0fda91c334d31f9f1.ur.png b/translated_images/pumpkins_catplot_2.87a354447880b3889278155957f8f60dd63db4598de5a6d0fda91c334d31f9f1.ur.png
new file mode 100644
index 000000000..7de8e90f5
Binary files /dev/null and b/translated_images/pumpkins_catplot_2.87a354447880b3889278155957f8f60dd63db4598de5a6d0fda91c334d31f9f1.ur.png differ
diff --git a/translated_images/r_learners_sm.cd14eb3581a9f28d32086cc042ee8c46f621a5b4e0d59c75f7c642d891327043.ar.jpeg b/translated_images/r_learners_sm.cd14eb3581a9f28d32086cc042ee8c46f621a5b4e0d59c75f7c642d891327043.ar.jpeg
new file mode 100644
index 000000000..2d42e2f24
Binary files /dev/null and b/translated_images/r_learners_sm.cd14eb3581a9f28d32086cc042ee8c46f621a5b4e0d59c75f7c642d891327043.ar.jpeg differ
diff --git a/translated_images/r_learners_sm.cd14eb3581a9f28d32086cc042ee8c46f621a5b4e0d59c75f7c642d891327043.tl.jpeg b/translated_images/r_learners_sm.cd14eb3581a9f28d32086cc042ee8c46f621a5b4e0d59c75f7c642d891327043.tl.jpeg
new file mode 100644
index 000000000..2d42e2f24
Binary files /dev/null and b/translated_images/r_learners_sm.cd14eb3581a9f28d32086cc042ee8c46f621a5b4e0d59c75f7c642d891327043.tl.jpeg differ
diff --git a/translated_images/r_learners_sm.cd14eb3581a9f28d32086cc042ee8c46f621a5b4e0d59c75f7c642d891327043.ur.jpeg b/translated_images/r_learners_sm.cd14eb3581a9f28d32086cc042ee8c46f621a5b4e0d59c75f7c642d891327043.ur.jpeg
new file mode 100644
index 000000000..2d42e2f24
Binary files /dev/null and b/translated_images/r_learners_sm.cd14eb3581a9f28d32086cc042ee8c46f621a5b4e0d59c75f7c642d891327043.ur.jpeg differ
diff --git a/translated_images/r_learners_sm.e25fa9c205b3a3f98d66476321637b48f61d9c23526309ce82d0a43e88b90f66.ar.jpeg b/translated_images/r_learners_sm.e25fa9c205b3a3f98d66476321637b48f61d9c23526309ce82d0a43e88b90f66.ar.jpeg
new file mode 100644
index 000000000..2d42e2f24
Binary files /dev/null and b/translated_images/r_learners_sm.e25fa9c205b3a3f98d66476321637b48f61d9c23526309ce82d0a43e88b90f66.ar.jpeg differ
diff --git a/translated_images/r_learners_sm.e25fa9c205b3a3f98d66476321637b48f61d9c23526309ce82d0a43e88b90f66.tl.jpeg b/translated_images/r_learners_sm.e25fa9c205b3a3f98d66476321637b48f61d9c23526309ce82d0a43e88b90f66.tl.jpeg
new file mode 100644
index 000000000..2d42e2f24
Binary files /dev/null and b/translated_images/r_learners_sm.e25fa9c205b3a3f98d66476321637b48f61d9c23526309ce82d0a43e88b90f66.tl.jpeg differ
diff --git a/translated_images/r_learners_sm.e25fa9c205b3a3f98d66476321637b48f61d9c23526309ce82d0a43e88b90f66.ur.jpeg b/translated_images/r_learners_sm.e25fa9c205b3a3f98d66476321637b48f61d9c23526309ce82d0a43e88b90f66.ur.jpeg
new file mode 100644
index 000000000..2d42e2f24
Binary files /dev/null and b/translated_images/r_learners_sm.e25fa9c205b3a3f98d66476321637b48f61d9c23526309ce82d0a43e88b90f66.ur.jpeg differ
diff --git a/translated_images/r_learners_sm.e4a71b113ffbedfe727048ec69741a9295954195d8761c35c46f20277de5f684.ar.jpeg b/translated_images/r_learners_sm.e4a71b113ffbedfe727048ec69741a9295954195d8761c35c46f20277de5f684.ar.jpeg
new file mode 100644
index 000000000..2d42e2f24
Binary files /dev/null and b/translated_images/r_learners_sm.e4a71b113ffbedfe727048ec69741a9295954195d8761c35c46f20277de5f684.ar.jpeg differ
diff --git a/translated_images/r_learners_sm.e4a71b113ffbedfe727048ec69741a9295954195d8761c35c46f20277de5f684.tl.jpeg b/translated_images/r_learners_sm.e4a71b113ffbedfe727048ec69741a9295954195d8761c35c46f20277de5f684.tl.jpeg
new file mode 100644
index 000000000..2d42e2f24
Binary files /dev/null and b/translated_images/r_learners_sm.e4a71b113ffbedfe727048ec69741a9295954195d8761c35c46f20277de5f684.tl.jpeg differ
diff --git a/translated_images/r_learners_sm.e4a71b113ffbedfe727048ec69741a9295954195d8761c35c46f20277de5f684.ur.jpeg b/translated_images/r_learners_sm.e4a71b113ffbedfe727048ec69741a9295954195d8761c35c46f20277de5f684.ur.jpeg
new file mode 100644
index 000000000..2d42e2f24
Binary files /dev/null and b/translated_images/r_learners_sm.e4a71b113ffbedfe727048ec69741a9295954195d8761c35c46f20277de5f684.ur.jpeg differ
diff --git a/translated_images/r_learners_sm.f9199f76f1e2e49304b19155ebcfb8bad375aface4625be7e95404486a48d332.ar.jpeg b/translated_images/r_learners_sm.f9199f76f1e2e49304b19155ebcfb8bad375aface4625be7e95404486a48d332.ar.jpeg
new file mode 100644
index 000000000..2d42e2f24
Binary files /dev/null and b/translated_images/r_learners_sm.f9199f76f1e2e49304b19155ebcfb8bad375aface4625be7e95404486a48d332.ar.jpeg differ
diff --git a/translated_images/r_learners_sm.f9199f76f1e2e49304b19155ebcfb8bad375aface4625be7e95404486a48d332.tl.jpeg b/translated_images/r_learners_sm.f9199f76f1e2e49304b19155ebcfb8bad375aface4625be7e95404486a48d332.tl.jpeg
new file mode 100644
index 000000000..2d42e2f24
Binary files /dev/null and b/translated_images/r_learners_sm.f9199f76f1e2e49304b19155ebcfb8bad375aface4625be7e95404486a48d332.tl.jpeg differ
diff --git a/translated_images/r_learners_sm.f9199f76f1e2e49304b19155ebcfb8bad375aface4625be7e95404486a48d332.ur.jpeg b/translated_images/r_learners_sm.f9199f76f1e2e49304b19155ebcfb8bad375aface4625be7e95404486a48d332.ur.jpeg
new file mode 100644
index 000000000..2d42e2f24
Binary files /dev/null and b/translated_images/r_learners_sm.f9199f76f1e2e49304b19155ebcfb8bad375aface4625be7e95404486a48d332.ur.jpeg differ
diff --git a/translated_images/recipes.186acfa8ed2e8f0059ce17ef22c9452d7b25e7e1e4b044573bacec9a18e040d2.ar.png b/translated_images/recipes.186acfa8ed2e8f0059ce17ef22c9452d7b25e7e1e4b044573bacec9a18e040d2.ar.png
new file mode 100644
index 000000000..75cc4826e
Binary files /dev/null and b/translated_images/recipes.186acfa8ed2e8f0059ce17ef22c9452d7b25e7e1e4b044573bacec9a18e040d2.ar.png differ
diff --git a/translated_images/recipes.186acfa8ed2e8f0059ce17ef22c9452d7b25e7e1e4b044573bacec9a18e040d2.tl.png b/translated_images/recipes.186acfa8ed2e8f0059ce17ef22c9452d7b25e7e1e4b044573bacec9a18e040d2.tl.png
new file mode 100644
index 000000000..75cc4826e
Binary files /dev/null and b/translated_images/recipes.186acfa8ed2e8f0059ce17ef22c9452d7b25e7e1e4b044573bacec9a18e040d2.tl.png differ
diff --git a/translated_images/recipes.186acfa8ed2e8f0059ce17ef22c9452d7b25e7e1e4b044573bacec9a18e040d2.ur.png b/translated_images/recipes.186acfa8ed2e8f0059ce17ef22c9452d7b25e7e1e4b044573bacec9a18e040d2.ur.png
new file mode 100644
index 000000000..75cc4826e
Binary files /dev/null and b/translated_images/recipes.186acfa8ed2e8f0059ce17ef22c9452d7b25e7e1e4b044573bacec9a18e040d2.ur.png differ
diff --git a/translated_images/recipes.9ad10d8a4056bf89413fc33644924e0bd29d7c12fb2154e03a1ca3d2d6ea9323.ar.png b/translated_images/recipes.9ad10d8a4056bf89413fc33644924e0bd29d7c12fb2154e03a1ca3d2d6ea9323.ar.png
new file mode 100644
index 000000000..75cc4826e
Binary files /dev/null and b/translated_images/recipes.9ad10d8a4056bf89413fc33644924e0bd29d7c12fb2154e03a1ca3d2d6ea9323.ar.png differ
diff --git a/translated_images/recipes.9ad10d8a4056bf89413fc33644924e0bd29d7c12fb2154e03a1ca3d2d6ea9323.tl.png b/translated_images/recipes.9ad10d8a4056bf89413fc33644924e0bd29d7c12fb2154e03a1ca3d2d6ea9323.tl.png
new file mode 100644
index 000000000..75cc4826e
Binary files /dev/null and b/translated_images/recipes.9ad10d8a4056bf89413fc33644924e0bd29d7c12fb2154e03a1ca3d2d6ea9323.tl.png differ
diff --git a/translated_images/recipes.9ad10d8a4056bf89413fc33644924e0bd29d7c12fb2154e03a1ca3d2d6ea9323.ur.png b/translated_images/recipes.9ad10d8a4056bf89413fc33644924e0bd29d7c12fb2154e03a1ca3d2d6ea9323.ur.png
new file mode 100644
index 000000000..75cc4826e
Binary files /dev/null and b/translated_images/recipes.9ad10d8a4056bf89413fc33644924e0bd29d7c12fb2154e03a1ca3d2d6ea9323.ur.png differ
diff --git a/translated_images/scaled.91897dfbaa26ca4a5f45c99aaabe79b1f1bcd1237f8124c20c0510df482e9f49.ar.png b/translated_images/scaled.91897dfbaa26ca4a5f45c99aaabe79b1f1bcd1237f8124c20c0510df482e9f49.ar.png
new file mode 100644
index 000000000..a11e46fae
Binary files /dev/null and b/translated_images/scaled.91897dfbaa26ca4a5f45c99aaabe79b1f1bcd1237f8124c20c0510df482e9f49.ar.png differ
diff --git a/translated_images/scaled.91897dfbaa26ca4a5f45c99aaabe79b1f1bcd1237f8124c20c0510df482e9f49.tl.png b/translated_images/scaled.91897dfbaa26ca4a5f45c99aaabe79b1f1bcd1237f8124c20c0510df482e9f49.tl.png
new file mode 100644
index 000000000..a11e46fae
Binary files /dev/null and b/translated_images/scaled.91897dfbaa26ca4a5f45c99aaabe79b1f1bcd1237f8124c20c0510df482e9f49.tl.png differ
diff --git a/translated_images/scaled.91897dfbaa26ca4a5f45c99aaabe79b1f1bcd1237f8124c20c0510df482e9f49.ur.png b/translated_images/scaled.91897dfbaa26ca4a5f45c99aaabe79b1f1bcd1237f8124c20c0510df482e9f49.ur.png
new file mode 100644
index 000000000..a11e46fae
Binary files /dev/null and b/translated_images/scaled.91897dfbaa26ca4a5f45c99aaabe79b1f1bcd1237f8124c20c0510df482e9f49.ur.png differ
diff --git a/translated_images/scaled.e35258ca5cd3d43f86d5175e584ba96b38d51501f234abf52e11f4fe2631e45f.ar.png b/translated_images/scaled.e35258ca5cd3d43f86d5175e584ba96b38d51501f234abf52e11f4fe2631e45f.ar.png
new file mode 100644
index 000000000..a11e46fae
Binary files /dev/null and b/translated_images/scaled.e35258ca5cd3d43f86d5175e584ba96b38d51501f234abf52e11f4fe2631e45f.ar.png differ
diff --git a/translated_images/scaled.e35258ca5cd3d43f86d5175e584ba96b38d51501f234abf52e11f4fe2631e45f.tl.png b/translated_images/scaled.e35258ca5cd3d43f86d5175e584ba96b38d51501f234abf52e11f4fe2631e45f.tl.png
new file mode 100644
index 000000000..a11e46fae
Binary files /dev/null and b/translated_images/scaled.e35258ca5cd3d43f86d5175e584ba96b38d51501f234abf52e11f4fe2631e45f.tl.png differ
diff --git a/translated_images/scaled.e35258ca5cd3d43f86d5175e584ba96b38d51501f234abf52e11f4fe2631e45f.ur.png b/translated_images/scaled.e35258ca5cd3d43f86d5175e584ba96b38d51501f234abf52e11f4fe2631e45f.ur.png
new file mode 100644
index 000000000..a11e46fae
Binary files /dev/null and b/translated_images/scaled.e35258ca5cd3d43f86d5175e584ba96b38d51501f234abf52e11f4fe2631e45f.ur.png differ
diff --git a/translated_images/scatter-dayofyear-color.65790faefbb9d54fb8f6223c566c445b9fac58a1c15f41f8641c3842af9d548b.ar.png b/translated_images/scatter-dayofyear-color.65790faefbb9d54fb8f6223c566c445b9fac58a1c15f41f8641c3842af9d548b.ar.png
new file mode 100644
index 000000000..be0bf88f9
Binary files /dev/null and b/translated_images/scatter-dayofyear-color.65790faefbb9d54fb8f6223c566c445b9fac58a1c15f41f8641c3842af9d548b.ar.png differ
diff --git a/translated_images/scatter-dayofyear-color.65790faefbb9d54fb8f6223c566c445b9fac58a1c15f41f8641c3842af9d548b.tl.png b/translated_images/scatter-dayofyear-color.65790faefbb9d54fb8f6223c566c445b9fac58a1c15f41f8641c3842af9d548b.tl.png
new file mode 100644
index 000000000..be0bf88f9
Binary files /dev/null and b/translated_images/scatter-dayofyear-color.65790faefbb9d54fb8f6223c566c445b9fac58a1c15f41f8641c3842af9d548b.tl.png differ
diff --git a/translated_images/scatter-dayofyear-color.65790faefbb9d54fb8f6223c566c445b9fac58a1c15f41f8641c3842af9d548b.ur.png b/translated_images/scatter-dayofyear-color.65790faefbb9d54fb8f6223c566c445b9fac58a1c15f41f8641c3842af9d548b.ur.png
new file mode 100644
index 000000000..be0bf88f9
Binary files /dev/null and b/translated_images/scatter-dayofyear-color.65790faefbb9d54fb8f6223c566c445b9fac58a1c15f41f8641c3842af9d548b.ur.png differ
diff --git a/translated_images/scatter-dayofyear.bc171c189c9fd553fe93030180b9c00ed123148a577640e4d7481c4c01811972.ar.png b/translated_images/scatter-dayofyear.bc171c189c9fd553fe93030180b9c00ed123148a577640e4d7481c4c01811972.ar.png
new file mode 100644
index 000000000..38538e271
Binary files /dev/null and b/translated_images/scatter-dayofyear.bc171c189c9fd553fe93030180b9c00ed123148a577640e4d7481c4c01811972.ar.png differ
diff --git a/translated_images/scatter-dayofyear.bc171c189c9fd553fe93030180b9c00ed123148a577640e4d7481c4c01811972.tl.png b/translated_images/scatter-dayofyear.bc171c189c9fd553fe93030180b9c00ed123148a577640e4d7481c4c01811972.tl.png
new file mode 100644
index 000000000..38538e271
Binary files /dev/null and b/translated_images/scatter-dayofyear.bc171c189c9fd553fe93030180b9c00ed123148a577640e4d7481c4c01811972.tl.png differ
diff --git a/translated_images/scatter-dayofyear.bc171c189c9fd553fe93030180b9c00ed123148a577640e4d7481c4c01811972.ur.png b/translated_images/scatter-dayofyear.bc171c189c9fd553fe93030180b9c00ed123148a577640e4d7481c4c01811972.ur.png
new file mode 100644
index 000000000..38538e271
Binary files /dev/null and b/translated_images/scatter-dayofyear.bc171c189c9fd553fe93030180b9c00ed123148a577640e4d7481c4c01811972.ur.png differ
diff --git a/translated_images/scatterplot.ad8b356bcbb33be68d54050e09b9b7bfc03e94fde7371f2609ae43f4c563b2d7.ar.png b/translated_images/scatterplot.ad8b356bcbb33be68d54050e09b9b7bfc03e94fde7371f2609ae43f4c563b2d7.ar.png
new file mode 100644
index 000000000..0b61bb73f
Binary files /dev/null and b/translated_images/scatterplot.ad8b356bcbb33be68d54050e09b9b7bfc03e94fde7371f2609ae43f4c563b2d7.ar.png differ
diff --git a/translated_images/scatterplot.ad8b356bcbb33be68d54050e09b9b7bfc03e94fde7371f2609ae43f4c563b2d7.tl.png b/translated_images/scatterplot.ad8b356bcbb33be68d54050e09b9b7bfc03e94fde7371f2609ae43f4c563b2d7.tl.png
new file mode 100644
index 000000000..0b61bb73f
Binary files /dev/null and b/translated_images/scatterplot.ad8b356bcbb33be68d54050e09b9b7bfc03e94fde7371f2609ae43f4c563b2d7.tl.png differ
diff --git a/translated_images/scatterplot.ad8b356bcbb33be68d54050e09b9b7bfc03e94fde7371f2609ae43f4c563b2d7.ur.png b/translated_images/scatterplot.ad8b356bcbb33be68d54050e09b9b7bfc03e94fde7371f2609ae43f4c563b2d7.ur.png
new file mode 100644
index 000000000..0b61bb73f
Binary files /dev/null and b/translated_images/scatterplot.ad8b356bcbb33be68d54050e09b9b7bfc03e94fde7371f2609ae43f4c563b2d7.ur.png differ
diff --git a/translated_images/scatterplot.b6868f44cbd2051c6680ccdbb1510697d06a3ff6cd4abda656f5009c0ed4e3fc.ar.png b/translated_images/scatterplot.b6868f44cbd2051c6680ccdbb1510697d06a3ff6cd4abda656f5009c0ed4e3fc.ar.png
new file mode 100644
index 000000000..1dce2f9c3
Binary files /dev/null and b/translated_images/scatterplot.b6868f44cbd2051c6680ccdbb1510697d06a3ff6cd4abda656f5009c0ed4e3fc.ar.png differ
diff --git a/translated_images/scatterplot.b6868f44cbd2051c6680ccdbb1510697d06a3ff6cd4abda656f5009c0ed4e3fc.tl.png b/translated_images/scatterplot.b6868f44cbd2051c6680ccdbb1510697d06a3ff6cd4abda656f5009c0ed4e3fc.tl.png
new file mode 100644
index 000000000..1dce2f9c3
Binary files /dev/null and b/translated_images/scatterplot.b6868f44cbd2051c6680ccdbb1510697d06a3ff6cd4abda656f5009c0ed4e3fc.tl.png differ
diff --git a/translated_images/scatterplot.b6868f44cbd2051c6680ccdbb1510697d06a3ff6cd4abda656f5009c0ed4e3fc.ur.png b/translated_images/scatterplot.b6868f44cbd2051c6680ccdbb1510697d06a3ff6cd4abda656f5009c0ed4e3fc.ur.png
new file mode 100644
index 000000000..1dce2f9c3
Binary files /dev/null and b/translated_images/scatterplot.b6868f44cbd2051c6680ccdbb1510697d06a3ff6cd4abda656f5009c0ed4e3fc.ur.png differ
diff --git a/translated_images/shakey.4dc17819c447c05bf4b52f76da0bdd28817d056fdb906252ec20124dd4cfa55e.ar.jpg b/translated_images/shakey.4dc17819c447c05bf4b52f76da0bdd28817d056fdb906252ec20124dd4cfa55e.ar.jpg
new file mode 100644
index 000000000..cfaa90905
Binary files /dev/null and b/translated_images/shakey.4dc17819c447c05bf4b52f76da0bdd28817d056fdb906252ec20124dd4cfa55e.ar.jpg differ
diff --git a/translated_images/shakey.4dc17819c447c05bf4b52f76da0bdd28817d056fdb906252ec20124dd4cfa55e.tl.jpg b/translated_images/shakey.4dc17819c447c05bf4b52f76da0bdd28817d056fdb906252ec20124dd4cfa55e.tl.jpg
new file mode 100644
index 000000000..cfaa90905
Binary files /dev/null and b/translated_images/shakey.4dc17819c447c05bf4b52f76da0bdd28817d056fdb906252ec20124dd4cfa55e.tl.jpg differ
diff --git a/translated_images/shakey.4dc17819c447c05bf4b52f76da0bdd28817d056fdb906252ec20124dd4cfa55e.ur.jpg b/translated_images/shakey.4dc17819c447c05bf4b52f76da0bdd28817d056fdb906252ec20124dd4cfa55e.ur.jpg
new file mode 100644
index 000000000..cfaa90905
Binary files /dev/null and b/translated_images/shakey.4dc17819c447c05bf4b52f76da0bdd28817d056fdb906252ec20124dd4cfa55e.ur.jpg differ
diff --git a/translated_images/sigmoid.8b7ba9d095c789cf72780675d0d1d44980c3736617329abfc392dfc859799704.ar.png b/translated_images/sigmoid.8b7ba9d095c789cf72780675d0d1d44980c3736617329abfc392dfc859799704.ar.png
new file mode 100644
index 000000000..41dbdc339
Binary files /dev/null and b/translated_images/sigmoid.8b7ba9d095c789cf72780675d0d1d44980c3736617329abfc392dfc859799704.ar.png differ
diff --git a/translated_images/sigmoid.8b7ba9d095c789cf72780675d0d1d44980c3736617329abfc392dfc859799704.tl.png b/translated_images/sigmoid.8b7ba9d095c789cf72780675d0d1d44980c3736617329abfc392dfc859799704.tl.png
new file mode 100644
index 000000000..41dbdc339
Binary files /dev/null and b/translated_images/sigmoid.8b7ba9d095c789cf72780675d0d1d44980c3736617329abfc392dfc859799704.tl.png differ
diff --git a/translated_images/sigmoid.8b7ba9d095c789cf72780675d0d1d44980c3736617329abfc392dfc859799704.ur.png b/translated_images/sigmoid.8b7ba9d095c789cf72780675d0d1d44980c3736617329abfc392dfc859799704.ur.png
new file mode 100644
index 000000000..41dbdc339
Binary files /dev/null and b/translated_images/sigmoid.8b7ba9d095c789cf72780675d0d1d44980c3736617329abfc392dfc859799704.ur.png differ
diff --git a/translated_images/slope.f3c9d5910ddbfcf9096eb5564254ba22c9a32d7acd7694cab905d29ad8261db3.ar.png b/translated_images/slope.f3c9d5910ddbfcf9096eb5564254ba22c9a32d7acd7694cab905d29ad8261db3.ar.png
new file mode 100644
index 000000000..024fcdc3f
Binary files /dev/null and b/translated_images/slope.f3c9d5910ddbfcf9096eb5564254ba22c9a32d7acd7694cab905d29ad8261db3.ar.png differ
diff --git a/translated_images/slope.f3c9d5910ddbfcf9096eb5564254ba22c9a32d7acd7694cab905d29ad8261db3.tl.png b/translated_images/slope.f3c9d5910ddbfcf9096eb5564254ba22c9a32d7acd7694cab905d29ad8261db3.tl.png
new file mode 100644
index 000000000..024fcdc3f
Binary files /dev/null and b/translated_images/slope.f3c9d5910ddbfcf9096eb5564254ba22c9a32d7acd7694cab905d29ad8261db3.tl.png differ
diff --git a/translated_images/slope.f3c9d5910ddbfcf9096eb5564254ba22c9a32d7acd7694cab905d29ad8261db3.ur.png b/translated_images/slope.f3c9d5910ddbfcf9096eb5564254ba22c9a32d7acd7694cab905d29ad8261db3.ur.png
new file mode 100644
index 000000000..024fcdc3f
Binary files /dev/null and b/translated_images/slope.f3c9d5910ddbfcf9096eb5564254ba22c9a32d7acd7694cab905d29ad8261db3.ur.png differ
diff --git a/translated_images/solvers.5fc648618529e627dfac29b917b3ccabda4b45ee8ed41b0acb1ce1441e8d1ef1.ar.png b/translated_images/solvers.5fc648618529e627dfac29b917b3ccabda4b45ee8ed41b0acb1ce1441e8d1ef1.ar.png
new file mode 100644
index 000000000..9a25f6739
Binary files /dev/null and b/translated_images/solvers.5fc648618529e627dfac29b917b3ccabda4b45ee8ed41b0acb1ce1441e8d1ef1.ar.png differ
diff --git a/translated_images/solvers.5fc648618529e627dfac29b917b3ccabda4b45ee8ed41b0acb1ce1441e8d1ef1.tl.png b/translated_images/solvers.5fc648618529e627dfac29b917b3ccabda4b45ee8ed41b0acb1ce1441e8d1ef1.tl.png
new file mode 100644
index 000000000..9a25f6739
Binary files /dev/null and b/translated_images/solvers.5fc648618529e627dfac29b917b3ccabda4b45ee8ed41b0acb1ce1441e8d1ef1.tl.png differ
diff --git a/translated_images/solvers.5fc648618529e627dfac29b917b3ccabda4b45ee8ed41b0acb1ce1441e8d1ef1.ur.png b/translated_images/solvers.5fc648618529e627dfac29b917b3ccabda4b45ee8ed41b0acb1ce1441e8d1ef1.ur.png
new file mode 100644
index 000000000..9a25f6739
Binary files /dev/null and b/translated_images/solvers.5fc648618529e627dfac29b917b3ccabda4b45ee8ed41b0acb1ce1441e8d1ef1.ur.png differ
diff --git a/translated_images/svm.621ae7b516d678e08ed23af77ff1750b5fe392976917f0606861567b779e8862.ar.png b/translated_images/svm.621ae7b516d678e08ed23af77ff1750b5fe392976917f0606861567b779e8862.ar.png
new file mode 100644
index 000000000..636c5f258
Binary files /dev/null and b/translated_images/svm.621ae7b516d678e08ed23af77ff1750b5fe392976917f0606861567b779e8862.ar.png differ
diff --git a/translated_images/svm.621ae7b516d678e08ed23af77ff1750b5fe392976917f0606861567b779e8862.tl.png b/translated_images/svm.621ae7b516d678e08ed23af77ff1750b5fe392976917f0606861567b779e8862.tl.png
new file mode 100644
index 000000000..636c5f258
Binary files /dev/null and b/translated_images/svm.621ae7b516d678e08ed23af77ff1750b5fe392976917f0606861567b779e8862.tl.png differ
diff --git a/translated_images/svm.621ae7b516d678e08ed23af77ff1750b5fe392976917f0606861567b779e8862.ur.png b/translated_images/svm.621ae7b516d678e08ed23af77ff1750b5fe392976917f0606861567b779e8862.ur.png
new file mode 100644
index 000000000..636c5f258
Binary files /dev/null and b/translated_images/svm.621ae7b516d678e08ed23af77ff1750b5fe392976917f0606861567b779e8862.ur.png differ
diff --git a/translated_images/swarm.56d253ae80a2c0f5940dec8ed3c02e57161891ff44cc0dce5c3cb2f65a4233e7.ar.png b/translated_images/swarm.56d253ae80a2c0f5940dec8ed3c02e57161891ff44cc0dce5c3cb2f65a4233e7.ar.png
new file mode 100644
index 000000000..13510aa1f
Binary files /dev/null and b/translated_images/swarm.56d253ae80a2c0f5940dec8ed3c02e57161891ff44cc0dce5c3cb2f65a4233e7.ar.png differ
diff --git a/translated_images/swarm.56d253ae80a2c0f5940dec8ed3c02e57161891ff44cc0dce5c3cb2f65a4233e7.tl.png b/translated_images/swarm.56d253ae80a2c0f5940dec8ed3c02e57161891ff44cc0dce5c3cb2f65a4233e7.tl.png
new file mode 100644
index 000000000..13510aa1f
Binary files /dev/null and b/translated_images/swarm.56d253ae80a2c0f5940dec8ed3c02e57161891ff44cc0dce5c3cb2f65a4233e7.tl.png differ
diff --git a/translated_images/swarm.56d253ae80a2c0f5940dec8ed3c02e57161891ff44cc0dce5c3cb2f65a4233e7.ur.png b/translated_images/swarm.56d253ae80a2c0f5940dec8ed3c02e57161891ff44cc0dce5c3cb2f65a4233e7.ur.png
new file mode 100644
index 000000000..13510aa1f
Binary files /dev/null and b/translated_images/swarm.56d253ae80a2c0f5940dec8ed3c02e57161891ff44cc0dce5c3cb2f65a4233e7.ur.png differ
diff --git a/translated_images/swarm_2.efeacfca536c2b577dc7b5f8891f28926663fbf62d893ab5e1278ae734ca104e.ar.png b/translated_images/swarm_2.efeacfca536c2b577dc7b5f8891f28926663fbf62d893ab5e1278ae734ca104e.ar.png
new file mode 100644
index 000000000..425f08cd7
Binary files /dev/null and b/translated_images/swarm_2.efeacfca536c2b577dc7b5f8891f28926663fbf62d893ab5e1278ae734ca104e.ar.png differ
diff --git a/translated_images/swarm_2.efeacfca536c2b577dc7b5f8891f28926663fbf62d893ab5e1278ae734ca104e.tl.png b/translated_images/swarm_2.efeacfca536c2b577dc7b5f8891f28926663fbf62d893ab5e1278ae734ca104e.tl.png
new file mode 100644
index 000000000..425f08cd7
Binary files /dev/null and b/translated_images/swarm_2.efeacfca536c2b577dc7b5f8891f28926663fbf62d893ab5e1278ae734ca104e.tl.png differ
diff --git a/translated_images/swarm_2.efeacfca536c2b577dc7b5f8891f28926663fbf62d893ab5e1278ae734ca104e.ur.png b/translated_images/swarm_2.efeacfca536c2b577dc7b5f8891f28926663fbf62d893ab5e1278ae734ca104e.ur.png
new file mode 100644
index 000000000..425f08cd7
Binary files /dev/null and b/translated_images/swarm_2.efeacfca536c2b577dc7b5f8891f28926663fbf62d893ab5e1278ae734ca104e.ur.png differ
diff --git a/translated_images/test-data-predict.8afc47ee7e52874f514ebdda4a798647e9ecf44a97cc927c535246fcf7a28aa9.ar.png b/translated_images/test-data-predict.8afc47ee7e52874f514ebdda4a798647e9ecf44a97cc927c535246fcf7a28aa9.ar.png
new file mode 100644
index 000000000..1aa2d71ab
Binary files /dev/null and b/translated_images/test-data-predict.8afc47ee7e52874f514ebdda4a798647e9ecf44a97cc927c535246fcf7a28aa9.ar.png differ
diff --git a/translated_images/test-data-predict.8afc47ee7e52874f514ebdda4a798647e9ecf44a97cc927c535246fcf7a28aa9.tl.png b/translated_images/test-data-predict.8afc47ee7e52874f514ebdda4a798647e9ecf44a97cc927c535246fcf7a28aa9.tl.png
new file mode 100644
index 000000000..1aa2d71ab
Binary files /dev/null and b/translated_images/test-data-predict.8afc47ee7e52874f514ebdda4a798647e9ecf44a97cc927c535246fcf7a28aa9.tl.png differ
diff --git a/translated_images/test-data-predict.8afc47ee7e52874f514ebdda4a798647e9ecf44a97cc927c535246fcf7a28aa9.ur.png b/translated_images/test-data-predict.8afc47ee7e52874f514ebdda4a798647e9ecf44a97cc927c535246fcf7a28aa9.ur.png
new file mode 100644
index 000000000..1aa2d71ab
Binary files /dev/null and b/translated_images/test-data-predict.8afc47ee7e52874f514ebdda4a798647e9ecf44a97cc927c535246fcf7a28aa9.ur.png differ
diff --git a/translated_images/thai-food.c47a7a7f9f05c21892a1f9dc7bf30669e6d18dfda420c5c7ebb4153f6a304edd.ar.jpg b/translated_images/thai-food.c47a7a7f9f05c21892a1f9dc7bf30669e6d18dfda420c5c7ebb4153f6a304edd.ar.jpg
new file mode 100644
index 000000000..d9f7349ab
Binary files /dev/null and b/translated_images/thai-food.c47a7a7f9f05c21892a1f9dc7bf30669e6d18dfda420c5c7ebb4153f6a304edd.ar.jpg differ
diff --git a/translated_images/thai-food.c47a7a7f9f05c21892a1f9dc7bf30669e6d18dfda420c5c7ebb4153f6a304edd.tl.jpg b/translated_images/thai-food.c47a7a7f9f05c21892a1f9dc7bf30669e6d18dfda420c5c7ebb4153f6a304edd.tl.jpg
new file mode 100644
index 000000000..d9f7349ab
Binary files /dev/null and b/translated_images/thai-food.c47a7a7f9f05c21892a1f9dc7bf30669e6d18dfda420c5c7ebb4153f6a304edd.tl.jpg differ
diff --git a/translated_images/thai-food.c47a7a7f9f05c21892a1f9dc7bf30669e6d18dfda420c5c7ebb4153f6a304edd.ur.jpg b/translated_images/thai-food.c47a7a7f9f05c21892a1f9dc7bf30669e6d18dfda420c5c7ebb4153f6a304edd.ur.jpg
new file mode 100644
index 000000000..d9f7349ab
Binary files /dev/null and b/translated_images/thai-food.c47a7a7f9f05c21892a1f9dc7bf30669e6d18dfda420c5c7ebb4153f6a304edd.ur.jpg differ
diff --git a/translated_images/thai.0269dbab2e78bd38a132067759fe980008bdb80b6d778e5313448dbe12bed846.ar.png b/translated_images/thai.0269dbab2e78bd38a132067759fe980008bdb80b6d778e5313448dbe12bed846.ar.png
new file mode 100644
index 000000000..d680b55de
Binary files /dev/null and b/translated_images/thai.0269dbab2e78bd38a132067759fe980008bdb80b6d778e5313448dbe12bed846.ar.png differ
diff --git a/translated_images/thai.0269dbab2e78bd38a132067759fe980008bdb80b6d778e5313448dbe12bed846.tl.png b/translated_images/thai.0269dbab2e78bd38a132067759fe980008bdb80b6d778e5313448dbe12bed846.tl.png
new file mode 100644
index 000000000..d680b55de
Binary files /dev/null and b/translated_images/thai.0269dbab2e78bd38a132067759fe980008bdb80b6d778e5313448dbe12bed846.tl.png differ
diff --git a/translated_images/thai.0269dbab2e78bd38a132067759fe980008bdb80b6d778e5313448dbe12bed846.ur.png b/translated_images/thai.0269dbab2e78bd38a132067759fe980008bdb80b6d778e5313448dbe12bed846.ur.png
new file mode 100644
index 000000000..d680b55de
Binary files /dev/null and b/translated_images/thai.0269dbab2e78bd38a132067759fe980008bdb80b6d778e5313448dbe12bed846.ur.png differ
diff --git a/translated_images/tokenization.1641a160c66cd2d93d4524e8114e93158a9ce0eba3ecf117bae318e8a6ad3487.ar.png b/translated_images/tokenization.1641a160c66cd2d93d4524e8114e93158a9ce0eba3ecf117bae318e8a6ad3487.ar.png
new file mode 100644
index 000000000..990cacf94
Binary files /dev/null and b/translated_images/tokenization.1641a160c66cd2d93d4524e8114e93158a9ce0eba3ecf117bae318e8a6ad3487.ar.png differ
diff --git a/translated_images/tokenization.1641a160c66cd2d93d4524e8114e93158a9ce0eba3ecf117bae318e8a6ad3487.tl.png b/translated_images/tokenization.1641a160c66cd2d93d4524e8114e93158a9ce0eba3ecf117bae318e8a6ad3487.tl.png
new file mode 100644
index 000000000..990cacf94
Binary files /dev/null and b/translated_images/tokenization.1641a160c66cd2d93d4524e8114e93158a9ce0eba3ecf117bae318e8a6ad3487.tl.png differ
diff --git a/translated_images/tokenization.1641a160c66cd2d93d4524e8114e93158a9ce0eba3ecf117bae318e8a6ad3487.ur.png b/translated_images/tokenization.1641a160c66cd2d93d4524e8114e93158a9ce0eba3ecf117bae318e8a6ad3487.ur.png
new file mode 100644
index 000000000..990cacf94
Binary files /dev/null and b/translated_images/tokenization.1641a160c66cd2d93d4524e8114e93158a9ce0eba3ecf117bae318e8a6ad3487.ur.png differ
diff --git a/translated_images/train-data-predict.3c4ef4e78553104ffdd53d47a4c06414007947ea328e9261ddf48d3eafdefbbf.ar.png b/translated_images/train-data-predict.3c4ef4e78553104ffdd53d47a4c06414007947ea328e9261ddf48d3eafdefbbf.ar.png
new file mode 100644
index 000000000..253c13709
Binary files /dev/null and b/translated_images/train-data-predict.3c4ef4e78553104ffdd53d47a4c06414007947ea328e9261ddf48d3eafdefbbf.ar.png differ
diff --git a/translated_images/train-data-predict.3c4ef4e78553104ffdd53d47a4c06414007947ea328e9261ddf48d3eafdefbbf.tl.png b/translated_images/train-data-predict.3c4ef4e78553104ffdd53d47a4c06414007947ea328e9261ddf48d3eafdefbbf.tl.png
new file mode 100644
index 000000000..253c13709
Binary files /dev/null and b/translated_images/train-data-predict.3c4ef4e78553104ffdd53d47a4c06414007947ea328e9261ddf48d3eafdefbbf.tl.png differ
diff --git a/translated_images/train-data-predict.3c4ef4e78553104ffdd53d47a4c06414007947ea328e9261ddf48d3eafdefbbf.ur.png b/translated_images/train-data-predict.3c4ef4e78553104ffdd53d47a4c06414007947ea328e9261ddf48d3eafdefbbf.ur.png
new file mode 100644
index 000000000..253c13709
Binary files /dev/null and b/translated_images/train-data-predict.3c4ef4e78553104ffdd53d47a4c06414007947ea328e9261ddf48d3eafdefbbf.ur.png differ
diff --git a/translated_images/train-test.8928d14e5b91fc942f0ca9201b2d36c890ea7e98f7619fd94f75de3a4c2bacb9.ar.png b/translated_images/train-test.8928d14e5b91fc942f0ca9201b2d36c890ea7e98f7619fd94f75de3a4c2bacb9.ar.png
new file mode 100644
index 000000000..1149b1644
Binary files /dev/null and b/translated_images/train-test.8928d14e5b91fc942f0ca9201b2d36c890ea7e98f7619fd94f75de3a4c2bacb9.ar.png differ
diff --git a/translated_images/train-test.8928d14e5b91fc942f0ca9201b2d36c890ea7e98f7619fd94f75de3a4c2bacb9.tl.png b/translated_images/train-test.8928d14e5b91fc942f0ca9201b2d36c890ea7e98f7619fd94f75de3a4c2bacb9.tl.png
new file mode 100644
index 000000000..1149b1644
Binary files /dev/null and b/translated_images/train-test.8928d14e5b91fc942f0ca9201b2d36c890ea7e98f7619fd94f75de3a4c2bacb9.tl.png differ
diff --git a/translated_images/train-test.8928d14e5b91fc942f0ca9201b2d36c890ea7e98f7619fd94f75de3a4c2bacb9.ur.png b/translated_images/train-test.8928d14e5b91fc942f0ca9201b2d36c890ea7e98f7619fd94f75de3a4c2bacb9.ur.png
new file mode 100644
index 000000000..1149b1644
Binary files /dev/null and b/translated_images/train-test.8928d14e5b91fc942f0ca9201b2d36c890ea7e98f7619fd94f75de3a4c2bacb9.ur.png differ
diff --git a/translated_images/train-test.ead0cecbfc341921d4875eccf25fed5eefbb860cdbb69cabcc2276c49e4b33e5.ar.png b/translated_images/train-test.ead0cecbfc341921d4875eccf25fed5eefbb860cdbb69cabcc2276c49e4b33e5.ar.png
new file mode 100644
index 000000000..1149b1644
Binary files /dev/null and b/translated_images/train-test.ead0cecbfc341921d4875eccf25fed5eefbb860cdbb69cabcc2276c49e4b33e5.ar.png differ
diff --git a/translated_images/train-test.ead0cecbfc341921d4875eccf25fed5eefbb860cdbb69cabcc2276c49e4b33e5.tl.png b/translated_images/train-test.ead0cecbfc341921d4875eccf25fed5eefbb860cdbb69cabcc2276c49e4b33e5.tl.png
new file mode 100644
index 000000000..1149b1644
Binary files /dev/null and b/translated_images/train-test.ead0cecbfc341921d4875eccf25fed5eefbb860cdbb69cabcc2276c49e4b33e5.tl.png differ
diff --git a/translated_images/train-test.ead0cecbfc341921d4875eccf25fed5eefbb860cdbb69cabcc2276c49e4b33e5.ur.png b/translated_images/train-test.ead0cecbfc341921d4875eccf25fed5eefbb860cdbb69cabcc2276c49e4b33e5.ur.png
new file mode 100644
index 000000000..1149b1644
Binary files /dev/null and b/translated_images/train-test.ead0cecbfc341921d4875eccf25fed5eefbb860cdbb69cabcc2276c49e4b33e5.ur.png differ
diff --git a/translated_images/train_progress_raw.2adfdf2daea09c596fc786fa347a23e9aceffe1b463e2257d20a9505794823ec.ar.png b/translated_images/train_progress_raw.2adfdf2daea09c596fc786fa347a23e9aceffe1b463e2257d20a9505794823ec.ar.png
new file mode 100644
index 000000000..b995b24b9
Binary files /dev/null and b/translated_images/train_progress_raw.2adfdf2daea09c596fc786fa347a23e9aceffe1b463e2257d20a9505794823ec.ar.png differ
diff --git a/translated_images/train_progress_raw.2adfdf2daea09c596fc786fa347a23e9aceffe1b463e2257d20a9505794823ec.tl.png b/translated_images/train_progress_raw.2adfdf2daea09c596fc786fa347a23e9aceffe1b463e2257d20a9505794823ec.tl.png
new file mode 100644
index 000000000..b995b24b9
Binary files /dev/null and b/translated_images/train_progress_raw.2adfdf2daea09c596fc786fa347a23e9aceffe1b463e2257d20a9505794823ec.tl.png differ
diff --git a/translated_images/train_progress_raw.2adfdf2daea09c596fc786fa347a23e9aceffe1b463e2257d20a9505794823ec.ur.png b/translated_images/train_progress_raw.2adfdf2daea09c596fc786fa347a23e9aceffe1b463e2257d20a9505794823ec.ur.png
new file mode 100644
index 000000000..b995b24b9
Binary files /dev/null and b/translated_images/train_progress_raw.2adfdf2daea09c596fc786fa347a23e9aceffe1b463e2257d20a9505794823ec.ur.png differ
diff --git a/translated_images/train_progress_runav.c71694a8fa9ab35935aff6f109e5ecdfdbdf1b0ae265da49479a81b5fae8f0aa.ar.png b/translated_images/train_progress_runav.c71694a8fa9ab35935aff6f109e5ecdfdbdf1b0ae265da49479a81b5fae8f0aa.ar.png
new file mode 100644
index 000000000..f5527d750
Binary files /dev/null and b/translated_images/train_progress_runav.c71694a8fa9ab35935aff6f109e5ecdfdbdf1b0ae265da49479a81b5fae8f0aa.ar.png differ
diff --git a/translated_images/train_progress_runav.c71694a8fa9ab35935aff6f109e5ecdfdbdf1b0ae265da49479a81b5fae8f0aa.tl.png b/translated_images/train_progress_runav.c71694a8fa9ab35935aff6f109e5ecdfdbdf1b0ae265da49479a81b5fae8f0aa.tl.png
new file mode 100644
index 000000000..f5527d750
Binary files /dev/null and b/translated_images/train_progress_runav.c71694a8fa9ab35935aff6f109e5ecdfdbdf1b0ae265da49479a81b5fae8f0aa.tl.png differ
diff --git a/translated_images/train_progress_runav.c71694a8fa9ab35935aff6f109e5ecdfdbdf1b0ae265da49479a81b5fae8f0aa.ur.png b/translated_images/train_progress_runav.c71694a8fa9ab35935aff6f109e5ecdfdbdf1b0ae265da49479a81b5fae8f0aa.ur.png
new file mode 100644
index 000000000..f5527d750
Binary files /dev/null and b/translated_images/train_progress_runav.c71694a8fa9ab35935aff6f109e5ecdfdbdf1b0ae265da49479a81b5fae8f0aa.ur.png differ
diff --git a/translated_images/turntable.f2b86b13c53302dc106aa741de9dc96ac372864cf458dd6f879119857aab01da.ar.jpg b/translated_images/turntable.f2b86b13c53302dc106aa741de9dc96ac372864cf458dd6f879119857aab01da.ar.jpg
new file mode 100644
index 000000000..631db5fad
Binary files /dev/null and b/translated_images/turntable.f2b86b13c53302dc106aa741de9dc96ac372864cf458dd6f879119857aab01da.ar.jpg differ
diff --git a/translated_images/turntable.f2b86b13c53302dc106aa741de9dc96ac372864cf458dd6f879119857aab01da.tl.jpg b/translated_images/turntable.f2b86b13c53302dc106aa741de9dc96ac372864cf458dd6f879119857aab01da.tl.jpg
new file mode 100644
index 000000000..631db5fad
Binary files /dev/null and b/translated_images/turntable.f2b86b13c53302dc106aa741de9dc96ac372864cf458dd6f879119857aab01da.tl.jpg differ
diff --git a/translated_images/turntable.f2b86b13c53302dc106aa741de9dc96ac372864cf458dd6f879119857aab01da.ur.jpg b/translated_images/turntable.f2b86b13c53302dc106aa741de9dc96ac372864cf458dd6f879119857aab01da.ur.jpg
new file mode 100644
index 000000000..631db5fad
Binary files /dev/null and b/translated_images/turntable.f2b86b13c53302dc106aa741de9dc96ac372864cf458dd6f879119857aab01da.ur.jpg differ
diff --git a/translated_images/ufo.9e787f5161da9d4d1dafc537e1da09be8210f2ee996cb638aa5cee1d92867a04.ar.jpg b/translated_images/ufo.9e787f5161da9d4d1dafc537e1da09be8210f2ee996cb638aa5cee1d92867a04.ar.jpg
new file mode 100644
index 000000000..0db92ac89
Binary files /dev/null and b/translated_images/ufo.9e787f5161da9d4d1dafc537e1da09be8210f2ee996cb638aa5cee1d92867a04.ar.jpg differ
diff --git a/translated_images/ufo.9e787f5161da9d4d1dafc537e1da09be8210f2ee996cb638aa5cee1d92867a04.tl.jpg b/translated_images/ufo.9e787f5161da9d4d1dafc537e1da09be8210f2ee996cb638aa5cee1d92867a04.tl.jpg
new file mode 100644
index 000000000..0db92ac89
Binary files /dev/null and b/translated_images/ufo.9e787f5161da9d4d1dafc537e1da09be8210f2ee996cb638aa5cee1d92867a04.tl.jpg differ
diff --git a/translated_images/ufo.9e787f5161da9d4d1dafc537e1da09be8210f2ee996cb638aa5cee1d92867a04.ur.jpg b/translated_images/ufo.9e787f5161da9d4d1dafc537e1da09be8210f2ee996cb638aa5cee1d92867a04.ur.jpg
new file mode 100644
index 000000000..0db92ac89
Binary files /dev/null and b/translated_images/ufo.9e787f5161da9d4d1dafc537e1da09be8210f2ee996cb638aa5cee1d92867a04.ur.jpg differ
diff --git a/translated_images/unruly_data.0eedc7ced92d2d919cf5ea197bfe0fe9a30780c4bf7cdcf14ff4e9dc5a4c7267.ar.jpg b/translated_images/unruly_data.0eedc7ced92d2d919cf5ea197bfe0fe9a30780c4bf7cdcf14ff4e9dc5a4c7267.ar.jpg
new file mode 100644
index 000000000..d09c41c8c
Binary files /dev/null and b/translated_images/unruly_data.0eedc7ced92d2d919cf5ea197bfe0fe9a30780c4bf7cdcf14ff4e9dc5a4c7267.ar.jpg differ
diff --git a/translated_images/unruly_data.0eedc7ced92d2d919cf5ea197bfe0fe9a30780c4bf7cdcf14ff4e9dc5a4c7267.tl.jpg b/translated_images/unruly_data.0eedc7ced92d2d919cf5ea197bfe0fe9a30780c4bf7cdcf14ff4e9dc5a4c7267.tl.jpg
new file mode 100644
index 000000000..d09c41c8c
Binary files /dev/null and b/translated_images/unruly_data.0eedc7ced92d2d919cf5ea197bfe0fe9a30780c4bf7cdcf14ff4e9dc5a4c7267.tl.jpg differ
diff --git a/translated_images/unruly_data.0eedc7ced92d2d919cf5ea197bfe0fe9a30780c4bf7cdcf14ff4e9dc5a4c7267.ur.jpg b/translated_images/unruly_data.0eedc7ced92d2d919cf5ea197bfe0fe9a30780c4bf7cdcf14ff4e9dc5a4c7267.ur.jpg
new file mode 100644
index 000000000..d09c41c8c
Binary files /dev/null and b/translated_images/unruly_data.0eedc7ced92d2d919cf5ea197bfe0fe9a30780c4bf7cdcf14ff4e9dc5a4c7267.ur.jpg differ
diff --git a/translated_images/violin.ffceb68923177011dc8f1ae08f78297c69f2b868d82fa4e754cc923b185d4f7d.ar.png b/translated_images/violin.ffceb68923177011dc8f1ae08f78297c69f2b868d82fa4e754cc923b185d4f7d.ar.png
new file mode 100644
index 000000000..935f6530f
Binary files /dev/null and b/translated_images/violin.ffceb68923177011dc8f1ae08f78297c69f2b868d82fa4e754cc923b185d4f7d.ar.png differ
diff --git a/translated_images/violin.ffceb68923177011dc8f1ae08f78297c69f2b868d82fa4e754cc923b185d4f7d.tl.png b/translated_images/violin.ffceb68923177011dc8f1ae08f78297c69f2b868d82fa4e754cc923b185d4f7d.tl.png
new file mode 100644
index 000000000..935f6530f
Binary files /dev/null and b/translated_images/violin.ffceb68923177011dc8f1ae08f78297c69f2b868d82fa4e754cc923b185d4f7d.tl.png differ
diff --git a/translated_images/violin.ffceb68923177011dc8f1ae08f78297c69f2b868d82fa4e754cc923b185d4f7d.ur.png b/translated_images/violin.ffceb68923177011dc8f1ae08f78297c69f2b868d82fa4e754cc923b185d4f7d.ur.png
new file mode 100644
index 000000000..935f6530f
Binary files /dev/null and b/translated_images/violin.ffceb68923177011dc8f1ae08f78297c69f2b868d82fa4e754cc923b185d4f7d.ur.png differ
diff --git a/translated_images/voronoi.1dc1613fb0439b9564615eca8df47a4bcd1ce06217e7e72325d2406ef2180795.ar.png b/translated_images/voronoi.1dc1613fb0439b9564615eca8df47a4bcd1ce06217e7e72325d2406ef2180795.ar.png
new file mode 100644
index 000000000..e4db5db46
Binary files /dev/null and b/translated_images/voronoi.1dc1613fb0439b9564615eca8df47a4bcd1ce06217e7e72325d2406ef2180795.ar.png differ
diff --git a/translated_images/voronoi.1dc1613fb0439b9564615eca8df47a4bcd1ce06217e7e72325d2406ef2180795.tl.png b/translated_images/voronoi.1dc1613fb0439b9564615eca8df47a4bcd1ce06217e7e72325d2406ef2180795.tl.png
new file mode 100644
index 000000000..e4db5db46
Binary files /dev/null and b/translated_images/voronoi.1dc1613fb0439b9564615eca8df47a4bcd1ce06217e7e72325d2406ef2180795.tl.png differ
diff --git a/translated_images/voronoi.1dc1613fb0439b9564615eca8df47a4bcd1ce06217e7e72325d2406ef2180795.ur.png b/translated_images/voronoi.1dc1613fb0439b9564615eca8df47a4bcd1ce06217e7e72325d2406ef2180795.ur.png
new file mode 100644
index 000000000..e4db5db46
Binary files /dev/null and b/translated_images/voronoi.1dc1613fb0439b9564615eca8df47a4bcd1ce06217e7e72325d2406ef2180795.ur.png differ
diff --git a/translated_images/web-app.4c76450cabe20036f8ec6d5e05ccc0c1c064f0d8f2fe3304d3bcc0198f7dc139.ar.png b/translated_images/web-app.4c76450cabe20036f8ec6d5e05ccc0c1c064f0d8f2fe3304d3bcc0198f7dc139.ar.png
new file mode 100644
index 000000000..ebb533ea9
Binary files /dev/null and b/translated_images/web-app.4c76450cabe20036f8ec6d5e05ccc0c1c064f0d8f2fe3304d3bcc0198f7dc139.ar.png differ
diff --git a/translated_images/web-app.4c76450cabe20036f8ec6d5e05ccc0c1c064f0d8f2fe3304d3bcc0198f7dc139.tl.png b/translated_images/web-app.4c76450cabe20036f8ec6d5e05ccc0c1c064f0d8f2fe3304d3bcc0198f7dc139.tl.png
new file mode 100644
index 000000000..ebb533ea9
Binary files /dev/null and b/translated_images/web-app.4c76450cabe20036f8ec6d5e05ccc0c1c064f0d8f2fe3304d3bcc0198f7dc139.tl.png differ
diff --git a/translated_images/web-app.4c76450cabe20036f8ec6d5e05ccc0c1c064f0d8f2fe3304d3bcc0198f7dc139.ur.png b/translated_images/web-app.4c76450cabe20036f8ec6d5e05ccc0c1c064f0d8f2fe3304d3bcc0198f7dc139.ur.png
new file mode 100644
index 000000000..ebb533ea9
Binary files /dev/null and b/translated_images/web-app.4c76450cabe20036f8ec6d5e05ccc0c1c064f0d8f2fe3304d3bcc0198f7dc139.ur.png differ
diff --git a/translated_images/wolf.a56d3d4070ca0c79007b28aa2203a1801ebd496f242525381225992ece6c369d.ar.png b/translated_images/wolf.a56d3d4070ca0c79007b28aa2203a1801ebd496f242525381225992ece6c369d.ar.png
new file mode 100644
index 000000000..a7f831a76
Binary files /dev/null and b/translated_images/wolf.a56d3d4070ca0c79007b28aa2203a1801ebd496f242525381225992ece6c369d.ar.png differ
diff --git a/translated_images/wolf.a56d3d4070ca0c79007b28aa2203a1801ebd496f242525381225992ece6c369d.tl.png b/translated_images/wolf.a56d3d4070ca0c79007b28aa2203a1801ebd496f242525381225992ece6c369d.tl.png
new file mode 100644
index 000000000..a7f831a76
Binary files /dev/null and b/translated_images/wolf.a56d3d4070ca0c79007b28aa2203a1801ebd496f242525381225992ece6c369d.tl.png differ
diff --git a/translated_images/wolf.a56d3d4070ca0c79007b28aa2203a1801ebd496f242525381225992ece6c369d.ur.png b/translated_images/wolf.a56d3d4070ca0c79007b28aa2203a1801ebd496f242525381225992ece6c369d.ur.png
new file mode 100644
index 000000000..a7f831a76
Binary files /dev/null and b/translated_images/wolf.a56d3d4070ca0c79007b28aa2203a1801ebd496f242525381225992ece6c369d.ur.png differ
diff --git a/translations/ar/1-Introduction/1-intro-to-ML/README.md b/translations/ar/1-Introduction/1-intro-to-ML/README.md
new file mode 100644
index 000000000..38b19dbaf
--- /dev/null
+++ b/translations/ar/1-Introduction/1-intro-to-ML/README.md
@@ -0,0 +1,159 @@
+
+# مقدمة في تعلم الآلة
+
+## [اختبار ما قبل المحاضرة](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/1/)
+
+---
+
+[](https://youtu.be/6mSx_KJxcHI "تعلم الآلة للمبتدئين - مقدمة في تعلم الآلة للمبتدئين")
+
+> 🎥 انقر على الصورة أعلاه لمشاهدة فيديو قصير يشرح هذه الدرس.
+
+مرحبًا بكم في هذه الدورة حول تعلم الآلة الكلاسيكي للمبتدئين! سواء كنت جديدًا تمامًا على هذا الموضوع، أو ممارسًا متمرسًا في تعلم الآلة وترغب في تحسين معرفتك في مجال معين، نحن سعداء بانضمامك إلينا! نهدف إلى إنشاء نقطة انطلاق ودية لدراستك في تعلم الآلة، وسنكون سعداء بتقييم ملاحظاتك [هنا](https://github.com/microsoft/ML-For-Beginners/discussions) والاستجابة لها ودمجها.
+
+[](https://youtu.be/h0e2HAPTGF4 "مقدمة في تعلم الآلة")
+
+> 🎥 انقر على الصورة أعلاه لمشاهدة فيديو: جون غوتاغ من MIT يقدم مقدمة في تعلم الآلة.
+
+---
+## البدء مع تعلم الآلة
+
+قبل البدء في هذه المنهجية، تحتاج إلى إعداد جهاز الكمبيوتر الخاص بك ليكون جاهزًا لتشغيل الدفاتر محليًا.
+
+- **قم بإعداد جهازك باستخدام هذه الفيديوهات**. استخدم الروابط التالية لتتعلم [كيفية تثبيت Python](https://youtu.be/CXZYvNRIAKM) على نظامك و[إعداد محرر نصوص](https://youtu.be/EU8eayHWoZg) للتطوير.
+- **تعلم Python**. يُوصى أيضًا بأن يكون لديك فهم أساسي لـ [Python](https://docs.microsoft.com/learn/paths/python-language/?WT.mc_id=academic-77952-leestott)، وهي لغة برمجة مفيدة لعلماء البيانات ونستخدمها في هذه الدورة.
+- **تعلم Node.js وJavaScript**. نستخدم JavaScript أيضًا في بعض الأحيان في هذه الدورة عند بناء تطبيقات ويب، لذا ستحتاج إلى تثبيت [node](https://nodejs.org) و[npm](https://www.npmjs.com/) بالإضافة إلى [Visual Studio Code](https://code.visualstudio.com/) لتطوير Python وJavaScript.
+- **إنشاء حساب GitHub**. بما أنك وجدتنا هنا على [GitHub](https://github.com)، قد يكون لديك حساب بالفعل، ولكن إذا لم يكن لديك، قم بإنشاء حساب ثم قم بعمل fork لهذه المنهجية لاستخدامها بنفسك. (لا تنسَ أن تعطينا نجمة 😊)
+- **استكشاف Scikit-learn**. تعرف على [Scikit-learn](https://scikit-learn.org/stable/user_guide.html)، وهي مجموعة من مكتبات تعلم الآلة التي نستخدمها في هذه الدروس.
+
+---
+## ما هو تعلم الآلة؟
+
+مصطلح "تعلم الآلة" هو واحد من أكثر المصطلحات شيوعًا واستخدامًا في الوقت الحالي. هناك احتمال كبير أنك سمعت هذا المصطلح مرة واحدة على الأقل إذا كنت على دراية بالتكنولوجيا، بغض النظر عن المجال الذي تعمل فيه. ومع ذلك، فإن آليات تعلم الآلة تظل غامضة بالنسبة لمعظم الناس. بالنسبة للمبتدئين في تعلم الآلة، قد يبدو الموضوع أحيانًا مربكًا. لذلك، من المهم فهم ما هو تعلم الآلة فعليًا، وتعلمه خطوة بخطوة من خلال أمثلة عملية.
+
+---
+## منحنى الضجة
+
+
+
+> يظهر Google Trends منحنى الضجة الأخير لمصطلح "تعلم الآلة".
+
+---
+## كون غامض
+
+نعيش في كون مليء بالألغاز المثيرة. علماء عظماء مثل ستيفن هوكينغ وألبرت أينشتاين وغيرهم كرسوا حياتهم للبحث عن معلومات ذات معنى تكشف عن ألغاز العالم من حولنا. هذه هي طبيعة الإنسان في التعلم: يتعلم الطفل البشري أشياء جديدة ويكتشف هيكل العالم من حوله عامًا بعد عام أثناء نموه.
+
+---
+## دماغ الطفل
+
+يدرك دماغ الطفل وحواسه حقائق محيطه ويتعلم تدريجيًا الأنماط المخفية للحياة التي تساعده على صياغة قواعد منطقية للتعرف على الأنماط المكتسبة. عملية التعلم في الدماغ البشري تجعل البشر أكثر الكائنات الحية تطورًا في هذا العالم. التعلم المستمر من خلال اكتشاف الأنماط المخفية ثم الابتكار بناءً عليها يمكننا من تحسين أنفسنا باستمرار طوال حياتنا. هذه القدرة على التعلم والتطور ترتبط بمفهوم يسمى [مرونة الدماغ](https://www.simplypsychology.org/brain-plasticity.html). بشكل سطحي، يمكننا رسم بعض التشابهات التحفيزية بين عملية التعلم في الدماغ البشري ومفاهيم تعلم الآلة.
+
+---
+## الدماغ البشري
+
+[الدماغ البشري](https://www.livescience.com/29365-human-brain.html) يدرك الأشياء من العالم الحقيقي، ويعالج المعلومات المدركة، ويتخذ قرارات عقلانية، وينفذ إجراءات معينة بناءً على الظروف. هذا ما نسميه التصرف بذكاء. عندما نبرمج عملية مشابهة للسلوك الذكي في آلة، يُطلق عليها الذكاء الاصطناعي (AI).
+
+---
+## بعض المصطلحات
+
+على الرغم من أن المصطلحات قد تكون مربكة، فإن تعلم الآلة (ML) هو جزء مهم من الذكاء الاصطناعي. **تعلم الآلة يهتم باستخدام خوارزميات متخصصة لاكتشاف معلومات ذات معنى والعثور على أنماط مخفية من البيانات المدركة لدعم عملية اتخاذ القرارات العقلانية**.
+
+---
+## الذكاء الاصطناعي، تعلم الآلة، التعلم العميق
+
+
+
+> رسم بياني يوضح العلاقات بين الذكاء الاصطناعي، تعلم الآلة، التعلم العميق، وعلم البيانات. إنفوجرافيك من [جين لوبر](https://twitter.com/jenlooper) مستوحى من [هذا الرسم](https://softwareengineering.stackexchange.com/questions/366996/distinction-between-ai-ml-neural-networks-deep-learning-and-data-mining).
+
+---
+## المفاهيم التي سنغطيها
+
+في هذه المنهجية، سنغطي فقط المفاهيم الأساسية لتعلم الآلة التي يجب أن يعرفها المبتدئ. سنركز على ما نسميه "تعلم الآلة الكلاسيكي" باستخدام مكتبة Scikit-learn الممتازة التي يستخدمها العديد من الطلاب لتعلم الأساسيات. لفهم المفاهيم الأوسع للذكاء الاصطناعي أو التعلم العميق، فإن المعرفة الأساسية القوية بتعلم الآلة لا غنى عنها، ونرغب في تقديمها هنا.
+
+---
+## في هذه الدورة ستتعلم:
+
+- المفاهيم الأساسية لتعلم الآلة
+- تاريخ تعلم الآلة
+- تعلم الآلة والإنصاف
+- تقنيات الانحدار في تعلم الآلة
+- تقنيات التصنيف في تعلم الآلة
+- تقنيات التجميع في تعلم الآلة
+- تقنيات معالجة اللغة الطبيعية في تعلم الآلة
+- تقنيات التنبؤ بالسلاسل الزمنية في تعلم الآلة
+- التعلم المعزز
+- تطبيقات واقعية لتعلم الآلة
+
+---
+## ما لن نغطيه
+
+- التعلم العميق
+- الشبكات العصبية
+- الذكاء الاصطناعي
+
+لتحسين تجربة التعلم، سنتجنب تعقيدات الشبكات العصبية و"التعلم العميق" - بناء النماذج متعددة الطبقات باستخدام الشبكات العصبية - والذكاء الاصطناعي، الذي سنناقشه في منهجية مختلفة. سنقدم أيضًا منهجية قادمة لعلم البيانات للتركيز على هذا الجانب من هذا المجال الأوسع.
+
+---
+## لماذا ندرس تعلم الآلة؟
+
+من منظور الأنظمة، يُعرف تعلم الآلة بأنه إنشاء أنظمة مؤتمتة يمكنها تعلم الأنماط المخفية من البيانات للمساعدة في اتخاذ قرارات ذكية.
+
+هذا الدافع مستوحى بشكل فضفاض من كيفية تعلم الدماغ البشري أشياء معينة بناءً على البيانات التي يدركها من العالم الخارجي.
+
+✅ فكر للحظة لماذا قد ترغب شركة ما في استخدام استراتيجيات تعلم الآلة بدلاً من إنشاء محرك يعتمد على قواعد مشفرة يدويًا.
+
+---
+## تطبيقات تعلم الآلة
+
+تطبيقات تعلم الآلة موجودة الآن في كل مكان، وهي منتشرة بقدر البيانات التي تتدفق في مجتمعاتنا، والتي يتم توليدها من هواتفنا الذكية، والأجهزة المتصلة، والأنظمة الأخرى. بالنظر إلى الإمكانات الهائلة لخوارزميات تعلم الآلة المتقدمة، استكشف الباحثون قدرتها على حل المشكلات الواقعية متعددة الأبعاد والتخصصات بنتائج إيجابية كبيرة.
+
+---
+## أمثلة على تعلم الآلة المطبق
+
+**يمكنك استخدام تعلم الآلة بطرق عديدة**:
+
+- للتنبؤ باحتمالية الإصابة بمرض بناءً على التاريخ الطبي أو التقارير.
+- لاستخدام بيانات الطقس للتنبؤ بالأحداث الجوية.
+- لفهم مشاعر النصوص.
+- لاكتشاف الأخبار المزيفة لوقف انتشار الدعاية.
+
+مجالات مثل التمويل، الاقتصاد، علوم الأرض، استكشاف الفضاء، الهندسة الطبية الحيوية، العلوم الإدراكية، وحتى المجالات الإنسانية، تبنت تعلم الآلة لحل المشكلات الصعبة التي تعتمد على معالجة البيانات بكثافة.
+
+---
+## الخلاصة
+
+يعمل تعلم الآلة على أتمتة عملية اكتشاف الأنماط من خلال العثور على رؤى ذات معنى من البيانات الواقعية أو المولدة. وقد أثبتت قيمته العالية في التطبيقات التجارية، الصحية، والمالية، وغيرها.
+
+في المستقبل القريب، سيكون فهم أساسيات تعلم الآلة ضرورة للأشخاص من أي مجال نظرًا لاعتماده الواسع.
+
+---
+# 🚀 التحدي
+
+قم برسم، على الورق أو باستخدام تطبيق عبر الإنترنت مثل [Excalidraw](https://excalidraw.com/)، فهمك للاختلافات بين الذكاء الاصطناعي، تعلم الآلة، التعلم العميق، وعلم البيانات. أضف بعض الأفكار حول المشكلات التي يمكن لكل من هذه التقنيات حلها.
+
+# [اختبار ما بعد المحاضرة](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/2/)
+
+---
+# المراجعة والدراسة الذاتية
+
+لتعلم المزيد حول كيفية العمل مع خوارزميات تعلم الآلة في السحابة، تابع [مسار التعلم](https://docs.microsoft.com/learn/paths/create-no-code-predictive-models-azure-machine-learning/?WT.mc_id=academic-77952-leestott).
+
+خذ [مسار التعلم](https://docs.microsoft.com/learn/modules/introduction-to-machine-learning/?WT.mc_id=academic-77952-leestott) حول أساسيات تعلم الآلة.
+
+---
+# الواجب
+
+[ابدأ العمل](assignment.md)
+
+---
+
+**إخلاء المسؤولية**:
+تمت ترجمة هذا المستند باستخدام خدمة الترجمة الآلية [Co-op Translator](https://github.com/Azure/co-op-translator). بينما نسعى لتحقيق الدقة، يرجى العلم أن الترجمات الآلية قد تحتوي على أخطاء أو معلومات غير دقيقة. يجب اعتبار المستند الأصلي بلغته الأصلية هو المصدر الموثوق. للحصول على معلومات حساسة أو هامة، يُوصى بالاستعانة بترجمة بشرية احترافية. نحن غير مسؤولين عن أي سوء فهم أو تفسيرات خاطئة تنشأ عن استخدام هذه الترجمة.
\ No newline at end of file
diff --git a/translations/ar/1-Introduction/1-intro-to-ML/assignment.md b/translations/ar/1-Introduction/1-intro-to-ML/assignment.md
new file mode 100644
index 000000000..be4e5e631
--- /dev/null
+++ b/translations/ar/1-Introduction/1-intro-to-ML/assignment.md
@@ -0,0 +1,23 @@
+
+# البدء والتشغيل
+
+## التعليمات
+
+في هذا التمرين غير المُقيَّم، يجب أن تُراجع مهاراتك في لغة Python وتُجهز بيئتك لتكون قادرة على تشغيل الدفاتر (notebooks).
+
+اتبع هذا [مسار تعلم Python](https://docs.microsoft.com/learn/paths/python-language/?WT.mc_id=academic-77952-leestott)، ثم قم بإعداد أنظمتك من خلال مشاهدة هذه الفيديوهات التمهيدية:
+
+https://www.youtube.com/playlist?list=PLlrxD0HtieHhS8VzuMCfQD4uJ9yne1mE6
+
+---
+
+**إخلاء المسؤولية**:
+تم ترجمة هذا المستند باستخدام خدمة الترجمة بالذكاء الاصطناعي [Co-op Translator](https://github.com/Azure/co-op-translator). بينما نسعى لتحقيق الدقة، يرجى العلم أن الترجمات الآلية قد تحتوي على أخطاء أو معلومات غير دقيقة. يجب اعتبار المستند الأصلي بلغته الأصلية المصدر الموثوق. للحصول على معلومات حاسمة، يُوصى بالاستعانة بترجمة بشرية احترافية. نحن غير مسؤولين عن أي سوء فهم أو تفسيرات خاطئة تنشأ عن استخدام هذه الترجمة.
\ No newline at end of file
diff --git a/translations/ar/1-Introduction/2-history-of-ML/README.md b/translations/ar/1-Introduction/2-history-of-ML/README.md
new file mode 100644
index 000000000..08b678d70
--- /dev/null
+++ b/translations/ar/1-Introduction/2-history-of-ML/README.md
@@ -0,0 +1,164 @@
+
+# تاريخ تعلم الآلة
+
+
+> رسم تخطيطي بواسطة [تومومي إيمورا](https://www.twitter.com/girlie_mac)
+
+## [اختبار ما قبل المحاضرة](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/3/)
+
+---
+
+[](https://youtu.be/N6wxM4wZ7V0 "تعلم الآلة للمبتدئين - تاريخ تعلم الآلة")
+
+> 🎥 انقر على الصورة أعلاه لمشاهدة فيديو قصير يشرح هذه الدرس.
+
+في هذا الدرس، سنستعرض أهم المحطات في تاريخ تعلم الآلة والذكاء الاصطناعي.
+
+تاريخ الذكاء الاصطناعي (AI) كحقل علمي مرتبط ارتباطًا وثيقًا بتاريخ تعلم الآلة، حيث أن الخوارزميات والتطورات الحاسوبية التي تدعم تعلم الآلة ساهمت في تطوير الذكاء الاصطناعي. من المفيد أن نتذكر أنه، على الرغم من أن هذه المجالات بدأت تتبلور كمجالات بحثية متميزة في الخمسينيات، فإن الاكتشافات [الخوارزمية، الإحصائية، الرياضية، الحاسوبية والتقنية](https://wikipedia.org/wiki/Timeline_of_machine_learning) سبقت وتداخلت مع هذه الحقبة. في الواقع، كان الناس يفكرون في هذه الأسئلة منذ [مئات السنين](https://wikipedia.org/wiki/History_of_artificial_intelligence): يناقش هذا المقال الأسس الفكرية التاريخية لفكرة "الآلة المفكرة".
+
+---
+## اكتشافات بارزة
+
+- 1763، 1812 [نظرية بايز](https://wikipedia.org/wiki/Bayes%27_theorem) وأسلافها. هذه النظرية وتطبيقاتها تشكل أساس الاستدلال، حيث تصف احتمال حدوث حدث بناءً على المعرفة السابقة.
+- 1805 [نظرية المربعات الصغرى](https://wikipedia.org/wiki/Least_squares) بواسطة عالم الرياضيات الفرنسي أدريان-ماري ليجيندر. هذه النظرية، التي ستتعلم عنها في وحدة الانحدار، تساعد في ملاءمة البيانات.
+- 1913 [سلاسل ماركوف](https://wikipedia.org/wiki/Markov_chain)، التي سميت باسم عالم الرياضيات الروسي أندريه ماركوف، تُستخدم لوصف سلسلة من الأحداث المحتملة بناءً على الحالة السابقة.
+- 1957 [بيرسيبترون](https://wikipedia.org/wiki/Perceptron) هو نوع من المصنفات الخطية اخترعه عالم النفس الأمريكي فرانك روزنبلات ويشكل أساس التقدم في التعلم العميق.
+
+---
+
+- 1967 [أقرب جار](https://wikipedia.org/wiki/Nearest_neighbor) هو خوارزمية صُممت في الأصل لتخطيط الطرق. في سياق تعلم الآلة، تُستخدم لاكتشاف الأنماط.
+- 1970 [الانتشار العكسي](https://wikipedia.org/wiki/Backpropagation) يُستخدم لتدريب [الشبكات العصبية الأمامية](https://wikipedia.org/wiki/Feedforward_neural_network).
+- 1982 [الشبكات العصبية المتكررة](https://wikipedia.org/wiki/Recurrent_neural_network) هي شبكات عصبية اصطناعية مشتقة من الشبكات العصبية الأمامية وتُنشئ رسومًا بيانية زمنية.
+
+✅ قم ببعض البحث. ما هي التواريخ الأخرى التي تبرز كمحورية في تاريخ تعلم الآلة والذكاء الاصطناعي؟
+
+---
+## 1950: آلات تفكر
+
+آلان تورينغ، شخصية استثنائية تم التصويت عليها [من قبل الجمهور في عام 2019](https://wikipedia.org/wiki/Icons:_The_Greatest_Person_of_the_20th_Century) كأعظم عالم في القرن العشرين، يُنسب إليه المساهمة في وضع الأساس لفكرة "آلة يمكنها التفكير". تعامل مع المشككين وحاجته الشخصية إلى أدلة تجريبية لهذه الفكرة جزئيًا من خلال إنشاء [اختبار تورينغ](https://www.bbc.com/news/technology-18475646)، الذي ستستكشفه في دروس معالجة اللغة الطبيعية.
+
+---
+## 1956: مشروع بحث صيف دارتموث
+
+"كان مشروع البحث الصيفي في دارتموث حول الذكاء الاصطناعي حدثًا بارزًا في مجال الذكاء الاصطناعي"، وفيه تم صياغة مصطلح "الذكاء الاصطناعي" ([المصدر](https://250.dartmouth.edu/highlights/artificial-intelligence-ai-coined-dartmouth)).
+
+> يمكن وصف كل جانب من جوانب التعلم أو أي ميزة أخرى للذكاء بدقة بحيث يمكن إنشاء آلة لمحاكاته.
+
+---
+
+كان الباحث الرئيسي، أستاذ الرياضيات جون مكارثي، يأمل "في المضي قدمًا بناءً على فرضية أن كل جانب من جوانب التعلم أو أي ميزة أخرى للذكاء يمكن وصفها بدقة بحيث يمكن إنشاء آلة لمحاكاته." وكان من بين المشاركين شخصية بارزة أخرى في المجال، مارفن مينسكي.
+
+يُنسب إلى الورشة الفضل في بدء وتشجيع العديد من المناقشات بما في ذلك "ظهور الأساليب الرمزية، الأنظمة التي تركز على مجالات محدودة (أنظمة الخبراء المبكرة)، والأنظمة الاستنتاجية مقابل الأنظمة الاستقرائية." ([المصدر](https://wikipedia.org/wiki/Dartmouth_workshop)).
+
+---
+## 1956 - 1974: "السنوات الذهبية"
+
+من الخمسينيات وحتى منتصف السبعينيات، كان هناك تفاؤل كبير بأن الذكاء الاصطناعي يمكن أن يحل العديد من المشاكل. في عام 1967، صرح مارفن مينسكي بثقة أن "في غضون جيل ... سيتم حل مشكلة إنشاء 'الذكاء الاصطناعي' بشكل كبير." (مينسكي، مارفن (1967)، الحساب: الآلات المحدودة واللامحدودة، إنجلوود كليفس، نيوجيرسي: برنتيس-هول)
+
+ازدهرت أبحاث معالجة اللغة الطبيعية، وتم تحسين البحث وجعله أكثر قوة، وتم إنشاء مفهوم "العوالم المصغرة"، حيث تم تنفيذ المهام البسيطة باستخدام تعليمات بلغة واضحة.
+
+---
+
+تم تمويل الأبحاث بشكل جيد من قبل الوكالات الحكومية، وتم تحقيق تقدم في الحساب والخوارزميات، وتم بناء نماذج أولية للآلات الذكية. بعض هذه الآلات تشمل:
+
+* [الروبوت شاكي](https://wikipedia.org/wiki/Shakey_the_robot)، الذي كان يمكنه المناورة واتخاذ قرارات لتنفيذ المهام "بذكاء".
+
+ 
+ > شاكي في عام 1972
+
+---
+
+* إليزا، "روبوت محادثة" مبكر، كان يمكنه التحدث مع الناس والتصرف كـ "معالج" بدائي. ستتعرف أكثر على إليزا في دروس معالجة اللغة الطبيعية.
+
+ 
+ > نسخة من إليزا، روبوت محادثة
+
+---
+
+* "عالم الكتل" كان مثالًا على عالم مصغر حيث يمكن تكديس الكتل وفرزها، وتم اختبار التجارب في تعليم الآلات اتخاذ القرارات. ساعدت المكتبات مثل [SHRDLU](https://wikipedia.org/wiki/SHRDLU) في دفع معالجة اللغة إلى الأمام.
+
+ [](https://www.youtube.com/watch?v=QAJz4YKUwqw "عالم الكتل مع SHRDLU")
+
+ > 🎥 انقر على الصورة أعلاه لمشاهدة فيديو: عالم الكتل مع SHRDLU
+
+---
+## 1974 - 1980: "شتاء الذكاء الاصطناعي"
+
+بحلول منتصف السبعينيات، أصبح واضحًا أن تعقيد إنشاء "آلات ذكية" قد تم التقليل من شأنه وأن وعوده، بالنظر إلى قوة الحوسبة المتاحة، قد تم تضخيمها. جف التمويل وتباطأت الثقة في المجال. بعض القضايا التي أثرت على الثقة تشمل:
+---
+- **القيود**. كانت قوة الحوسبة محدودة للغاية.
+- **الانفجار التوافقي**. زاد عدد المعلمات التي يجب تدريبها بشكل كبير مع زيادة الطلبات على الحواسيب، دون تطور موازٍ في قوة الحوسبة والقدرات.
+- **ندرة البيانات**. كانت هناك ندرة في البيانات التي أعاقت عملية اختبار وتطوير وتحسين الخوارزميات.
+- **هل نطرح الأسئلة الصحيحة؟**. بدأت الأسئلة التي كانت تُطرح في المجال تخضع للتشكيك. بدأ الباحثون في مواجهة النقد حول مناهجهم:
+ - تم التشكيك في اختبارات تورينغ من خلال نظريات مثل "نظرية الغرفة الصينية" التي افترضت أن "برمجة الكمبيوتر الرقمي قد تجعل الأمر يبدو وكأنه يفهم اللغة ولكنها لا يمكن أن تنتج فهمًا حقيقيًا." ([المصدر](https://plato.stanford.edu/entries/chinese-room/))
+ - تم تحدي أخلاقيات إدخال ذكاء اصطناعي مثل "المعالج" إليزا إلى المجتمع.
+
+---
+
+في الوقت نفسه، بدأت تتشكل مدارس مختلفة للذكاء الاصطناعي. تم إنشاء تفرقة بين ممارسات ["الذكاء الاصطناعي الفوضوي" مقابل "الذكاء الاصطناعي المنظم"](https://wikipedia.org/wiki/Neats_and_scruffies). كانت المختبرات "الفوضوية" تعدل البرامج لساعات حتى تحصل على النتائج المطلوبة. أما المختبرات "المنظمة" فكانت "تركز على المنطق وحل المشكلات بشكل رسمي". كانت إليزا وSHRDLU من الأنظمة "الفوضوية" المعروفة. في الثمانينيات، مع ظهور الطلب على جعل أنظمة تعلم الآلة قابلة للتكرار، بدأ النهج "المنظم" يأخذ الصدارة لأن نتائجه أكثر قابلية للتفسير.
+
+---
+## أنظمة الخبراء في الثمانينيات
+
+مع نمو المجال، أصبح واضحًا فائدته للأعمال التجارية، وفي الثمانينيات انتشرت "أنظمة الخبراء". "كانت أنظمة الخبراء من بين أول أشكال البرمجيات الناجحة حقًا للذكاء الاصطناعي (AI)." ([المصدر](https://wikipedia.org/wiki/Expert_system)).
+
+هذا النوع من الأنظمة هو في الواقع _هجين_، يتكون جزئيًا من محرك قواعد يحدد متطلبات الأعمال، ومحرك استنتاج يستفيد من نظام القواعد لاستنتاج حقائق جديدة.
+
+شهدت هذه الحقبة أيضًا اهتمامًا متزايدًا بالشبكات العصبية.
+
+---
+## 1987 - 1993: "برودة الذكاء الاصطناعي"
+
+كان لتوسع أجهزة أنظمة الخبراء المتخصصة تأثير سلبي حيث أصبحت متخصصة للغاية. كما تنافست أجهزة الكمبيوتر الشخصية مع هذه الأنظمة الكبيرة والمركزية. بدأت ديمقراطية الحوسبة، مما مهد الطريق لانفجار البيانات الضخمة الحديث.
+
+---
+## 1993 - 2011
+
+شهدت هذه الحقبة عصرًا جديدًا لتعلم الآلة والذكاء الاصطناعي لحل بعض المشاكل التي كانت قد ظهرت سابقًا بسبب نقص البيانات وقوة الحوسبة. بدأت كمية البيانات في الزيادة بسرعة وأصبحت أكثر توفرًا، للأفضل وللأسوأ، خاصة مع ظهور الهواتف الذكية حوالي عام 2007. توسعت قوة الحوسبة بشكل كبير، وتطورت الخوارزميات جنبًا إلى جنب. بدأ المجال في اكتساب النضج حيث بدأت الأيام الحرة السابقة تتبلور إلى تخصص حقيقي.
+
+---
+## الآن
+
+اليوم، تعلم الآلة والذكاء الاصطناعي يؤثران على كل جزء تقريبًا من حياتنا. هذه الحقبة تتطلب فهمًا دقيقًا للمخاطر والتأثيرات المحتملة لهذه الخوارزميات على حياة البشر. كما قال براد سميث من مايكروسوفت: "تثير تكنولوجيا المعلومات قضايا تتعلق بجوهر حماية حقوق الإنسان الأساسية مثل الخصوصية وحرية التعبير. هذه القضايا تزيد من مسؤولية شركات التكنولوجيا التي تبتكر هذه المنتجات. في رأينا، تدعو أيضًا إلى تنظيم حكومي مدروس وتطوير معايير حول الاستخدامات المقبولة" ([المصدر](https://www.technologyreview.com/2019/12/18/102365/the-future-of-ais-impact-on-society/)).
+
+---
+
+يبقى أن نرى ما يحمله المستقبل، ولكن من المهم فهم هذه الأنظمة الحاسوبية والبرمجيات والخوارزميات التي تعمل عليها. نأمل أن يساعدك هذا المنهج الدراسي في اكتساب فهم أفضل بحيث يمكنك اتخاذ قراراتك بنفسك.
+
+[](https://www.youtube.com/watch?v=mTtDfKgLm54 "تاريخ التعلم العميق")
+> 🎥 انقر على الصورة أعلاه لمشاهدة فيديو: يان ليكون يناقش تاريخ التعلم العميق في هذه المحاضرة
+
+---
+## 🚀تحدي
+
+استكشف واحدة من هذه اللحظات التاريخية وتعرف أكثر على الأشخاص الذين كانوا وراءها. هناك شخصيات مثيرة للاهتمام، ولم يتم إنشاء أي اكتشاف علمي في فراغ ثقافي. ماذا تكتشف؟
+
+## [اختبار ما بعد المحاضرة](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/4/)
+
+---
+## المراجعة والدراسة الذاتية
+
+إليك بعض العناصر للمشاهدة والاستماع:
+
+[هذا البودكاست حيث تناقش آمي بويد تطور الذكاء الاصطناعي](http://runasradio.com/Shows/Show/739)
+
+[](https://www.youtube.com/watch?v=EJt3_bFYKss "تاريخ الذكاء الاصطناعي بواسطة آمي بويد")
+
+---
+
+## الواجب
+
+[قم بإنشاء خط زمني](assignment.md)
+
+---
+
+**إخلاء المسؤولية**:
+تمت ترجمة هذه الوثيقة باستخدام خدمة الترجمة الآلية [Co-op Translator](https://github.com/Azure/co-op-translator). بينما نسعى لتحقيق الدقة، يرجى العلم أن الترجمات الآلية قد تحتوي على أخطاء أو معلومات غير دقيقة. يجب اعتبار الوثيقة الأصلية بلغتها الأصلية المصدر الموثوق. للحصول على معلومات حساسة أو هامة، يُوصى بالاستعانة بترجمة بشرية احترافية. نحن غير مسؤولين عن أي سوء فهم أو تفسيرات خاطئة تنشأ عن استخدام هذه الترجمة.
\ No newline at end of file
diff --git a/translations/ar/1-Introduction/2-history-of-ML/assignment.md b/translations/ar/1-Introduction/2-history-of-ML/assignment.md
new file mode 100644
index 000000000..2f7a4c4fb
--- /dev/null
+++ b/translations/ar/1-Introduction/2-history-of-ML/assignment.md
@@ -0,0 +1,25 @@
+
+# إنشاء خط زمني
+
+## التعليمات
+
+باستخدام [هذا المستودع](https://github.com/Digital-Humanities-Toolkit/timeline-builder)، قم بإنشاء خط زمني حول جانب معين من تاريخ الخوارزميات، الرياضيات، الإحصاء، الذكاء الاصطناعي، أو التعلم الآلي، أو مزيج من هذه المواضيع. يمكنك التركيز على شخص واحد، فكرة واحدة، أو فترة زمنية طويلة من التفكير. تأكد من إضافة عناصر وسائط متعددة.
+
+## المعايير
+
+| المعايير | متميز | مقبول | يحتاج إلى تحسين |
+| -------- | ----------------------------------------------- | ------------------------------------- | ---------------------------------------------------------------- |
+| | يتم تقديم خط زمني منشور كصفحة على GitHub | الكود غير مكتمل ولم يتم نشره | الخط الزمني غير مكتمل، غير مدروس جيدًا ولم يتم نشره |
+
+---
+
+**إخلاء المسؤولية**:
+تمت ترجمة هذا المستند باستخدام خدمة الترجمة بالذكاء الاصطناعي [Co-op Translator](https://github.com/Azure/co-op-translator). بينما نسعى لتحقيق الدقة، يرجى العلم أن الترجمات الآلية قد تحتوي على أخطاء أو معلومات غير دقيقة. يجب اعتبار المستند الأصلي بلغته الأصلية هو المصدر الموثوق. للحصول على معلومات حساسة، يُوصى بالاستعانة بترجمة بشرية احترافية. نحن غير مسؤولين عن أي سوء فهم أو تفسيرات خاطئة ناتجة عن استخدام هذه الترجمة.
\ No newline at end of file
diff --git a/translations/ar/1-Introduction/3-fairness/README.md b/translations/ar/1-Introduction/3-fairness/README.md
new file mode 100644
index 000000000..7f3ec7e9e
--- /dev/null
+++ b/translations/ar/1-Introduction/3-fairness/README.md
@@ -0,0 +1,169 @@
+
+# بناء حلول تعلم الآلة باستخدام الذكاء الاصطناعي المسؤول
+
+
+> رسم تخطيطي بواسطة [Tomomi Imura](https://www.twitter.com/girlie_mac)
+
+## [اختبار ما قبل المحاضرة](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/5/)
+
+## المقدمة
+
+في هذا المنهج، ستبدأ في اكتشاف كيف يؤثر تعلم الآلة على حياتنا اليومية. حتى الآن، يتم استخدام الأنظمة والنماذج في اتخاذ القرارات اليومية مثل تشخيصات الرعاية الصحية، الموافقة على القروض، أو اكتشاف الاحتيال. لذلك، من المهم أن تعمل هذه النماذج بشكل جيد لتقديم نتائج موثوقة. كما هو الحال مع أي تطبيق برمجي، قد تخفق أنظمة الذكاء الاصطناعي في تلبية التوقعات أو تؤدي إلى نتائج غير مرغوبة. لهذا السبب، من الضروري فهم وتفسير سلوك نموذج الذكاء الاصطناعي.
+
+تخيل ما يمكن أن يحدث عندما تفتقر البيانات التي تستخدمها لبناء هذه النماذج إلى تمثيل بعض الفئات الديموغرافية مثل العرق، الجنس، الرأي السياسي، الدين، أو تمثلها بشكل غير متناسب. ماذا عن عندما يتم تفسير نتائج النموذج لتفضيل فئة ديموغرافية معينة؟ ما هي العواقب على التطبيق؟ بالإضافة إلى ذلك، ماذا يحدث عندما يؤدي النموذج إلى نتائج ضارة؟ من يتحمل المسؤولية عن سلوك أنظمة الذكاء الاصطناعي؟ هذه بعض الأسئلة التي سنستكشفها في هذا المنهج.
+
+في هذه الدرس، ستتعلم:
+
+- رفع مستوى الوعي بأهمية الإنصاف في تعلم الآلة والأضرار المتعلقة بالإنصاف.
+- التعرف على ممارسة استكشاف الحالات الشاذة والسيناريوهات غير المعتادة لضمان الموثوقية والسلامة.
+- فهم الحاجة إلى تمكين الجميع من خلال تصميم أنظمة شاملة.
+- استكشاف أهمية حماية خصوصية وأمان البيانات والأفراد.
+- إدراك أهمية النهج الشفاف لتفسير سلوك نماذج الذكاء الاصطناعي.
+- التفكير في كيف أن المساءلة ضرورية لبناء الثقة في أنظمة الذكاء الاصطناعي.
+
+## المتطلبات الأساسية
+
+كشرط أساسي، يرجى أخذ مسار التعلم "مبادئ الذكاء الاصطناعي المسؤول" ومشاهدة الفيديو أدناه حول الموضوع:
+
+تعرف على المزيد حول الذكاء الاصطناعي المسؤول من خلال متابعة هذا [مسار التعلم](https://docs.microsoft.com/learn/modules/responsible-ai-principles/?WT.mc_id=academic-77952-leestott)
+
+[](https://youtu.be/dnC8-uUZXSc "نهج مايكروسوفت تجاه الذكاء الاصطناعي المسؤول")
+
+> 🎥 انقر على الصورة أعلاه لمشاهدة الفيديو: نهج مايكروسوفت تجاه الذكاء الاصطناعي المسؤول
+
+## الإنصاف
+
+يجب أن تعامل أنظمة الذكاء الاصطناعي الجميع بإنصاف وتتجنب التأثير على مجموعات متشابهة من الناس بطرق مختلفة. على سبيل المثال، عندما تقدم أنظمة الذكاء الاصطناعي إرشادات حول العلاج الطبي، طلبات القروض، أو التوظيف، يجب أن تقدم نفس التوصيات للجميع الذين لديهم أعراض مشابهة، ظروف مالية متشابهة، أو مؤهلات مهنية متشابهة. كل واحد منا كبشر يحمل تحيزات موروثة تؤثر على قراراتنا وأفعالنا. يمكن أن تكون هذه التحيزات واضحة في البيانات التي نستخدمها لتدريب أنظمة الذكاء الاصطناعي. قد يحدث هذا التلاعب أحيانًا دون قصد. غالبًا ما يكون من الصعب إدراك متى يتم إدخال التحيز في البيانات.
+
+**"عدم الإنصاف"** يشمل التأثيرات السلبية أو "الأضرار" لمجموعة من الناس، مثل تلك المعرفة من حيث العرق، الجنس، العمر، أو حالة الإعاقة. يمكن تصنيف الأضرار الرئيسية المتعلقة بالإنصاف على النحو التالي:
+
+- **التخصيص**، إذا تم تفضيل جنس أو عرق معين على آخر.
+- **جودة الخدمة**. إذا قمت بتدريب البيانات على سيناريو محدد ولكن الواقع أكثر تعقيدًا، يؤدي ذلك إلى خدمة ضعيفة الأداء. على سبيل المثال، موزع صابون لم يتمكن من التعرف على الأشخاص ذوي البشرة الداكنة. [مرجع](https://gizmodo.com/why-cant-this-soap-dispenser-identify-dark-skin-1797931773)
+- **التقليل**. النقد غير العادل أو تصنيف شيء أو شخص بشكل غير منصف. على سبيل المثال، تقنية تصنيف الصور التي وصفت بشكل خاطئ صور الأشخاص ذوي البشرة الداكنة كغوريلات.
+- **التمثيل الزائد أو الناقص**. الفكرة هي أن مجموعة معينة لا تُرى في مهنة معينة، وأي خدمة أو وظيفة تستمر في تعزيز ذلك تساهم في الضرر.
+- **التنميط**. ربط مجموعة معينة بصفات محددة مسبقًا. على سبيل المثال، قد يكون هناك أخطاء في نظام ترجمة اللغة بين الإنجليزية والتركية بسبب الكلمات المرتبطة بتنميط الجنس.
+
+
+> الترجمة إلى التركية
+
+
+> الترجمة إلى الإنجليزية
+
+عند تصميم واختبار أنظمة الذكاء الاصطناعي، يجب أن نضمن أن الذكاء الاصطناعي عادل وغير مبرمج لاتخاذ قرارات متحيزة أو تمييزية، وهو ما يُحظر على البشر أيضًا القيام به. ضمان الإنصاف في الذكاء الاصطناعي وتعلم الآلة يظل تحديًا اجتماعيًا تقنيًا معقدًا.
+
+### الموثوقية والسلامة
+
+لبناء الثقة، يجب أن تكون أنظمة الذكاء الاصطناعي موثوقة وآمنة ومتسقة في الظروف العادية وغير المتوقعة. من المهم معرفة كيف ستتصرف أنظمة الذكاء الاصطناعي في مجموعة متنوعة من المواقف، خاصة عندما تكون هناك حالات شاذة. عند بناء حلول الذكاء الاصطناعي، يجب التركيز بشكل كبير على كيفية التعامل مع مجموعة واسعة من الظروف التي قد تواجهها حلول الذكاء الاصطناعي. على سبيل المثال، يجب أن تضع السيارة ذاتية القيادة سلامة الناس كأولوية قصوى. نتيجة لذلك، يجب أن يأخذ الذكاء الاصطناعي الذي يشغل السيارة في الاعتبار جميع السيناريوهات الممكنة التي قد تواجهها السيارة مثل الليل، العواصف الرعدية أو الثلوج، الأطفال الذين يركضون عبر الشارع، الحيوانات الأليفة، أعمال الطرق، إلخ. مدى قدرة نظام الذكاء الاصطناعي على التعامل مع مجموعة واسعة من الظروف بشكل موثوق وآمن يعكس مستوى التوقعات التي أخذها عالم البيانات أو مطور الذكاء الاصطناعي في الاعتبار أثناء تصميم أو اختبار النظام.
+
+> [🎥 انقر هنا لمشاهدة الفيديو: ](https://www.microsoft.com/videoplayer/embed/RE4vvIl)
+
+### الشمولية
+
+يجب تصميم أنظمة الذكاء الاصطناعي لتشرك وتمكن الجميع. عند تصميم وتنفيذ أنظمة الذكاء الاصطناعي، يقوم علماء البيانات ومطورو الذكاء الاصطناعي بتحديد ومعالجة الحواجز المحتملة في النظام التي قد تستبعد الناس دون قصد. على سبيل المثال، هناك مليار شخص يعانون من إعاقات حول العالم. مع تقدم الذكاء الاصطناعي، يمكنهم الوصول إلى مجموعة واسعة من المعلومات والفرص بسهولة أكبر في حياتهم اليومية. من خلال معالجة الحواجز، يتم خلق فرص للابتكار وتطوير منتجات الذكاء الاصطناعي بتجارب أفضل تفيد الجميع.
+
+> [🎥 انقر هنا لمشاهدة الفيديو: الشمولية في الذكاء الاصطناعي](https://www.microsoft.com/videoplayer/embed/RE4vl9v)
+
+### الأمن والخصوصية
+
+يجب أن تكون أنظمة الذكاء الاصطناعي آمنة وتحترم خصوصية الناس. الناس لديهم ثقة أقل في الأنظمة التي تعرض خصوصيتهم، معلوماتهم، أو حياتهم للخطر. عند تدريب نماذج تعلم الآلة، نعتمد على البيانات للحصول على أفضل النتائج. أثناء القيام بذلك، يجب مراعاة مصدر البيانات وسلامتها. على سبيل المثال، هل كانت البيانات مقدمة من المستخدم أو متاحة للجمهور؟ بعد ذلك، أثناء العمل مع البيانات، من الضروري تطوير أنظمة الذكاء الاصطناعي التي يمكنها حماية المعلومات السرية ومقاومة الهجمات. مع انتشار الذكاء الاصطناعي، أصبح حماية الخصوصية وتأمين المعلومات الشخصية والتجارية الهامة أكثر أهمية وتعقيدًا. تتطلب قضايا الخصوصية وأمن البيانات اهتمامًا خاصًا للذكاء الاصطناعي لأن الوصول إلى البيانات ضروري لأنظمة الذكاء الاصطناعي لتقديم توقعات وقرارات دقيقة ومستنيرة حول الناس.
+
+> [🎥 انقر هنا لمشاهدة الفيديو: الأمن في الذكاء الاصطناعي](https://www.microsoft.com/videoplayer/embed/RE4voJF)
+
+- كصناعة، حققنا تقدمًا كبيرًا في الخصوصية والأمن، مدفوعًا بشكل كبير باللوائح مثل اللائحة العامة لحماية البيانات (GDPR).
+- ومع ذلك، مع أنظمة الذكاء الاصطناعي، يجب أن نعترف بالتوتر بين الحاجة إلى المزيد من البيانات الشخصية لجعل الأنظمة أكثر شخصية وفعالية - والخصوصية.
+- كما هو الحال مع ولادة أجهزة الكمبيوتر المتصلة بالإنترنت، نشهد أيضًا زيادة كبيرة في عدد القضايا الأمنية المتعلقة بالذكاء الاصطناعي.
+- في الوقت نفسه، رأينا استخدام الذكاء الاصطناعي لتحسين الأمن. على سبيل المثال، معظم ماسحات الفيروسات الحديثة تعتمد على استدلالات الذكاء الاصطناعي اليوم.
+- يجب أن نضمن أن عمليات علم البيانات لدينا تتناغم بشكل متناغم مع أحدث ممارسات الخصوصية والأمن.
+
+### الشفافية
+
+يجب أن تكون أنظمة الذكاء الاصطناعي مفهومة. جزء أساسي من الشفافية هو تفسير سلوك أنظمة الذكاء الاصطناعي ومكوناتها. تحسين فهم أنظمة الذكاء الاصطناعي يتطلب أن يفهم أصحاب المصلحة كيف ولماذا تعمل حتى يتمكنوا من تحديد مشكلات الأداء المحتملة، مخاوف السلامة والخصوصية، التحيزات، الممارسات الإقصائية، أو النتائج غير المقصودة. نعتقد أيضًا أن أولئك الذين يستخدمون أنظمة الذكاء الاصطناعي يجب أن يكونوا صادقين وصريحين بشأن متى ولماذا وكيف يختارون نشرها. وكذلك حدود الأنظمة التي يستخدمونها. على سبيل المثال، إذا استخدم بنك نظام ذكاء اصطناعي لدعم قرارات الإقراض للمستهلكين، فمن المهم فحص النتائج وفهم البيانات التي تؤثر على توصيات النظام. بدأت الحكومات في تنظيم الذكاء الاصطناعي عبر الصناعات، لذا يجب على علماء البيانات والمنظمات تفسير ما إذا كان نظام الذكاء الاصطناعي يفي بالمتطلبات التنظيمية، خاصة عندما تكون هناك نتيجة غير مرغوبة.
+
+> [🎥 انقر هنا لمشاهدة الفيديو: الشفافية في الذكاء الاصطناعي](https://www.microsoft.com/videoplayer/embed/RE4voJF)
+
+- نظرًا لأن أنظمة الذكاء الاصطناعي معقدة للغاية، من الصعب فهم كيفية عملها وتفسير النتائج.
+- يؤثر هذا الفهم المحدود على طريقة إدارة هذه الأنظمة، تشغيلها، وتوثيقها.
+- يؤثر هذا الفهم المحدود بشكل أكبر على القرارات التي يتم اتخاذها باستخدام النتائج التي تنتجها هذه الأنظمة.
+
+### المساءلة
+
+يجب أن يكون الأشخاص الذين يصممون وينشرون أنظمة الذكاء الاصطناعي مسؤولين عن كيفية عمل أنظمتهم. الحاجة إلى المساءلة مهمة بشكل خاص مع التقنيات الحساسة مثل التعرف على الوجه. مؤخرًا، كان هناك طلب متزايد على تقنية التعرف على الوجه، خاصة من المنظمات القانونية التي ترى إمكانات التكنولوجيا في استخدامات مثل العثور على الأطفال المفقودين. ومع ذلك، يمكن أن تُستخدم هذه التقنيات من قبل الحكومات لتعريض الحريات الأساسية للمواطنين للخطر من خلال، على سبيل المثال، تمكين المراقبة المستمرة لأفراد معينين. لذلك، يجب أن يكون علماء البيانات والمنظمات مسؤولين عن كيفية تأثير نظام الذكاء الاصطناعي على الأفراد أو المجتمع.
+
+[](https://www.youtube.com/watch?v=Wldt8P5V6D0 "نهج مايكروسوفت تجاه الذكاء الاصطناعي المسؤول")
+
+> 🎥 انقر على الصورة أعلاه لمشاهدة الفيديو: تحذيرات من المراقبة الجماعية عبر التعرف على الوجه
+
+في النهاية، أحد أكبر الأسئلة لجيلنا، كأول جيل يجلب الذكاء الاصطناعي إلى المجتمع، هو كيفية ضمان أن تظل أجهزة الكمبيوتر مسؤولة أمام الناس وكيفية ضمان أن يظل الأشخاص الذين يصممون أجهزة الكمبيوتر مسؤولين أمام الجميع.
+
+## تقييم التأثير
+
+قبل تدريب نموذج تعلم الآلة، من المهم إجراء تقييم للتأثير لفهم الغرض من نظام الذكاء الاصطناعي؛ ما هو الاستخدام المقصود؛ أين سيتم نشره؛ ومن سيتفاعل مع النظام. هذه التقييمات مفيدة للمراجعين أو المختبرين لتقييم النظام ومعرفة العوامل التي يجب أخذها في الاعتبار عند تحديد المخاطر المحتملة والعواقب المتوقعة.
+
+تشمل المجالات التي يجب التركيز عليها عند إجراء تقييم التأثير:
+
+* **التأثير السلبي على الأفراد**. إدراك أي قيود أو متطلبات، استخدام غير مدعوم أو أي قيود معروفة تعيق أداء النظام أمر ضروري لضمان عدم استخدام النظام بطريقة قد تسبب ضررًا للأفراد.
+* **متطلبات البيانات**. فهم كيفية وأين سيستخدم النظام البيانات يمكّن المراجعين من استكشاف أي متطلبات بيانات يجب أن تكون على دراية بها (مثل لوائح GDPR أو HIPPA). بالإضافة إلى ذلك، فحص ما إذا كان مصدر أو كمية البيانات كافية للتدريب.
+* **ملخص التأثير**. جمع قائمة بالأضرار المحتملة التي قد تنشأ عن استخدام النظام. خلال دورة حياة تعلم الآلة، مراجعة ما إذا كانت المشكلات المحددة قد تم تخفيفها أو معالجتها.
+* **الأهداف القابلة للتطبيق** لكل من المبادئ الستة الأساسية. تقييم ما إذا كانت الأهداف من كل مبدأ قد تم تحقيقها وما إذا كانت هناك أي فجوات.
+
+## تصحيح الأخطاء باستخدام الذكاء الاصطناعي المسؤول
+
+مثل تصحيح الأخطاء في تطبيق برمجي، فإن تصحيح الأخطاء في نظام الذكاء الاصطناعي هو عملية ضرورية لتحديد وحل المشكلات في النظام. هناك العديد من العوامل التي قد تؤثر على أداء النموذج بشكل غير متوقع أو غير مسؤول. معظم مقاييس أداء النموذج التقليدية هي تجميعات كمية لأداء النموذج، والتي لا تكفي لتحليل كيفية انتهاك النموذج لمبادئ الذكاء الاصطناعي المسؤول. علاوة على ذلك، يعد نموذج تعلم الآلة صندوقًا أسودًا يجعل من الصعب فهم ما يدفع نتائجه أو تقديم تفسير عندما يرتكب خطأ. لاحقًا في هذه الدورة، سنتعلم كيفية استخدام لوحة معلومات الذكاء الاصطناعي المسؤول للمساعدة في تصحيح أخطاء أنظمة الذكاء الاصطناعي. توفر لوحة المعلومات أداة شاملة لعلماء البيانات ومطوري الذكاء الاصطناعي لأداء:
+
+* **تحليل الأخطاء**. لتحديد توزيع الأخطاء في النموذج الذي يمكن أن يؤثر على إنصاف النظام أو موثوقيته.
+* **نظرة عامة على النموذج**. لاكتشاف أين توجد تفاوتات في أداء النموذج عبر مجموعات البيانات.
+* **تحليل البيانات**. لفهم توزيع البيانات وتحديد أي تحيز محتمل في البيانات قد يؤدي إلى مشكلات في الإنصاف، الشمولية، والموثوقية.
+* **تفسير النموذج**. لفهم ما يؤثر أو يؤثر على توقعات النموذج. يساعد ذلك في تفسير سلوك النموذج، وهو أمر مهم للشفافية والمساءلة.
+
+## 🚀 التحدي
+
+لمنع الأضرار من أن يتم إدخالها في المقام الأول، يجب علينا:
+
+- وجود تنوع في الخلفيات ووجهات النظر بين الأشخاص الذين يعملون على الأنظمة
+- الاستثمار في مجموعات بيانات تعكس تنوع مجتمعنا
+- تطوير طرق أفضل خلال دورة حياة تعلم الآلة للكشف عن الذكاء الاصطناعي المسؤول وتصحيحه عند حدوثه
+
+فكر في سيناريوهات الحياة الواقعية حيث يكون عدم موثوقية النموذج واضحًا في بناء النموذج واستخدامه. ما الذي يجب أن نأخذه في الاعتبار أيضًا؟
+
+## [اختبار ما بعد المحاضرة](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/6/)
+## المراجعة والدراسة الذاتية
+في هذه الدرس، تعلمت بعض الأساسيات حول مفاهيم العدالة وعدم العدالة في تعلم الآلة.
+
+شاهد هذا الورشة لتتعرف أكثر على المواضيع:
+
+- السعي نحو الذكاء الاصطناعي المسؤول: تحويل المبادئ إلى ممارسة بواسطة بسميرة نوشي، مهرنوش سامكي وأميت شارما
+
+[](https://www.youtube.com/watch?v=tGgJCrA-MZU "RAI Toolbox: إطار عمل مفتوح المصدر لبناء الذكاء الاصطناعي المسؤول")
+
+> 🎥 اضغط على الصورة أعلاه لمشاهدة الفيديو: RAI Toolbox: إطار عمل مفتوح المصدر لبناء الذكاء الاصطناعي المسؤول بواسطة بسميرة نوشي، مهرنوش سامكي وأميت شارما
+
+اقرأ أيضًا:
+
+- مركز موارد الذكاء الاصطناعي المسؤول من مايكروسوفت: [Responsible AI Resources – Microsoft AI](https://www.microsoft.com/ai/responsible-ai-resources?activetab=pivot1%3aprimaryr4)
+
+- مجموعة أبحاث FATE من مايكروسوفت: [FATE: Fairness, Accountability, Transparency, and Ethics in AI - Microsoft Research](https://www.microsoft.com/research/theme/fate/)
+
+RAI Toolbox:
+
+- [مستودع GitHub الخاص بـ Responsible AI Toolbox](https://github.com/microsoft/responsible-ai-toolbox)
+
+اقرأ عن أدوات Azure Machine Learning لضمان العدالة:
+
+- [Azure Machine Learning](https://docs.microsoft.com/azure/machine-learning/concept-fairness-ml?WT.mc_id=academic-77952-leestott)
+
+## المهمة
+
+[استكشف RAI Toolbox](assignment.md)
+
+---
+
+**إخلاء المسؤولية**:
+تمت ترجمة هذه الوثيقة باستخدام خدمة الترجمة الآلية [Co-op Translator](https://github.com/Azure/co-op-translator). بينما نسعى لتحقيق الدقة، يرجى العلم أن الترجمات الآلية قد تحتوي على أخطاء أو عدم دقة. يجب اعتبار الوثيقة الأصلية بلغتها الأصلية المصدر الموثوق. للحصول على معلومات حساسة أو هامة، يُوصى بالاستعانة بترجمة بشرية احترافية. نحن غير مسؤولين عن أي سوء فهم أو تفسيرات خاطئة تنشأ عن استخدام هذه الترجمة.
\ No newline at end of file
diff --git a/translations/ar/1-Introduction/3-fairness/assignment.md b/translations/ar/1-Introduction/3-fairness/assignment.md
new file mode 100644
index 000000000..c607e6be4
--- /dev/null
+++ b/translations/ar/1-Introduction/3-fairness/assignment.md
@@ -0,0 +1,25 @@
+
+# استكشاف أدوات الذكاء الاصطناعي المسؤول
+
+## التعليمات
+
+في هذا الدرس، تعلمت عن أدوات الذكاء الاصطناعي المسؤول، وهو "مشروع مفتوح المصدر يقوده المجتمع لمساعدة علماء البيانات في تحليل وتحسين أنظمة الذكاء الاصطناعي." في هذه المهمة، قم باستكشاف أحد [دفاتر الملاحظات](https://github.com/microsoft/responsible-ai-toolbox/blob/main/notebooks/responsibleaidashboard/getting-started.ipynb) الخاصة بأدوات الذكاء الاصطناعي المسؤول وقدم نتائجك في ورقة أو عرض تقديمي.
+
+## معايير التقييم
+
+| المعايير | ممتاز | مقبول | يحتاج إلى تحسين |
+| -------- | ------ | ------ | --------------- |
+| | يتم تقديم ورقة أو عرض تقديمي يناقش أنظمة Fairlearn، دفتر الملاحظات الذي تم تشغيله، والاستنتاجات المستخلصة من تشغيله | يتم تقديم ورقة بدون استنتاجات | لم يتم تقديم أي ورقة |
+
+---
+
+**إخلاء المسؤولية**:
+تمت ترجمة هذا المستند باستخدام خدمة الترجمة الآلية [Co-op Translator](https://github.com/Azure/co-op-translator). بينما نسعى لتحقيق الدقة، يرجى العلم أن الترجمات الآلية قد تحتوي على أخطاء أو معلومات غير دقيقة. يجب اعتبار المستند الأصلي بلغته الأصلية هو المصدر الموثوق. للحصول على معلومات حساسة أو هامة، يُوصى بالاستعانة بترجمة بشرية احترافية. نحن غير مسؤولين عن أي سوء فهم أو تفسيرات خاطئة تنشأ عن استخدام هذه الترجمة.
\ No newline at end of file
diff --git a/translations/ar/1-Introduction/4-techniques-of-ML/README.md b/translations/ar/1-Introduction/4-techniques-of-ML/README.md
new file mode 100644
index 000000000..3aed8451f
--- /dev/null
+++ b/translations/ar/1-Introduction/4-techniques-of-ML/README.md
@@ -0,0 +1,132 @@
+
+# تقنيات تعلم الآلة
+
+عملية بناء واستخدام وصيانة نماذج تعلم الآلة والبيانات التي تستخدمها تختلف بشكل كبير عن العديد من عمليات تطوير البرمجيات الأخرى. في هذه الدرس، سنقوم بتبسيط العملية، ونوضح التقنيات الرئيسية التي تحتاج إلى معرفتها. ستتعلم:
+
+- فهم العمليات التي تقوم عليها تعلم الآلة على مستوى عالٍ.
+- استكشاف المفاهيم الأساسية مثل "النماذج"، "التنبؤات"، و"بيانات التدريب".
+
+## [اختبار ما قبل المحاضرة](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/7/)
+
+[](https://youtu.be/4NGM0U2ZSHU "تعلم الآلة للمبتدئين - تقنيات تعلم الآلة")
+
+> 🎥 انقر على الصورة أعلاه لمشاهدة فيديو قصير يشرح هذا الدرس.
+
+## المقدمة
+
+على مستوى عالٍ، تتكون عملية إنشاء تعلم الآلة (ML) من عدة خطوات:
+
+1. **تحديد السؤال**. تبدأ معظم عمليات تعلم الآلة بطرح سؤال لا يمكن الإجابة عليه باستخدام برنامج شرطي بسيط أو محرك يعتمد على القواعد. غالبًا ما تدور هذه الأسئلة حول التنبؤات بناءً على مجموعة من البيانات.
+2. **جمع وتحضير البيانات**. للإجابة على سؤالك، تحتاج إلى بيانات. جودة البيانات وأحيانًا كميتها ستحدد مدى قدرتك على الإجابة على سؤالك الأولي. يعد تصور البيانات جانبًا مهمًا في هذه المرحلة. تشمل هذه المرحلة أيضًا تقسيم البيانات إلى مجموعة تدريب واختبار لبناء النموذج.
+3. **اختيار طريقة التدريب**. بناءً على سؤالك وطبيعة بياناتك، تحتاج إلى اختيار الطريقة التي تريد بها تدريب النموذج لتعكس بياناتك بشكل أفضل وتقديم تنبؤات دقيقة. هذه هي الجزء من عملية تعلم الآلة الذي يتطلب خبرة محددة وغالبًا قدرًا كبيرًا من التجربة.
+4. **تدريب النموذج**. باستخدام بيانات التدريب الخاصة بك، ستستخدم خوارزميات مختلفة لتدريب نموذج للتعرف على الأنماط في البيانات. قد يعتمد النموذج على أوزان داخلية يمكن تعديلها لتفضيل أجزاء معينة من البيانات على أخرى لبناء نموذج أفضل.
+5. **تقييم النموذج**. تستخدم بيانات لم يتم رؤيتها من قبل (بيانات الاختبار) من المجموعة التي جمعتها لمعرفة كيفية أداء النموذج.
+6. **ضبط المعلمات**. بناءً على أداء النموذج، يمكنك إعادة العملية باستخدام معلمات أو متغيرات مختلفة تتحكم في سلوك الخوارزميات المستخدمة لتدريب النموذج.
+7. **التنبؤ**. استخدم مدخلات جديدة لاختبار دقة النموذج.
+
+## ما السؤال الذي يجب طرحه؟
+
+تتميز أجهزة الكمبيوتر بمهارتها في اكتشاف الأنماط المخفية في البيانات. هذه الفائدة مفيدة جدًا للباحثين الذين لديهم أسئلة حول مجال معين لا يمكن الإجابة عليها بسهولة عن طريق إنشاء محرك يعتمد على القواعد الشرطية. على سبيل المثال، في مهمة اكتوارية، قد يتمكن عالم البيانات من إنشاء قواعد يدوية حول معدل الوفيات للمدخنين مقابل غير المدخنين.
+
+عندما يتم إدخال العديد من المتغيرات الأخرى في المعادلة، قد يكون نموذج تعلم الآلة أكثر كفاءة في التنبؤ بمعدلات الوفيات المستقبلية بناءً على التاريخ الصحي السابق. مثال أكثر تفاؤلاً قد يكون التنبؤ بالطقس لشهر أبريل في موقع معين بناءً على بيانات تشمل خط العرض، خط الطول، تغير المناخ، القرب من المحيط، أنماط التيار النفاث، والمزيد.
+
+✅ يقدم هذا [عرض الشرائح](https://www2.cisl.ucar.edu/sites/default/files/2021-10/0900%20June%2024%20Haupt_0.pdf) منظورًا تاريخيًا لاستخدام تعلم الآلة في تحليل الطقس.
+
+## مهام ما قبل البناء
+
+قبل البدء في بناء النموذج الخاص بك، هناك عدة مهام تحتاج إلى إكمالها. لاختبار سؤالك وتشكيل فرضية بناءً على تنبؤات النموذج، تحتاج إلى تحديد وتكوين عدة عناصر.
+
+### البيانات
+
+للإجابة على سؤالك بأي درجة من اليقين، تحتاج إلى كمية جيدة من البيانات من النوع الصحيح. هناك شيئان تحتاج إلى القيام بهما في هذه المرحلة:
+
+- **جمع البيانات**. مع الأخذ في الاعتبار الدرس السابق حول الإنصاف في تحليل البيانات، اجمع بياناتك بعناية. كن على دراية بمصادر هذه البيانات، أي تحيزات متأصلة قد تكون لديها، ووثق أصلها.
+- **تحضير البيانات**. هناك عدة خطوات في عملية تحضير البيانات. قد تحتاج إلى تجميع البيانات وتطبيعها إذا كانت تأتي من مصادر متنوعة. يمكنك تحسين جودة وكمية البيانات من خلال طرق مختلفة مثل تحويل النصوص إلى أرقام (كما نفعل في [التجميع](../../5-Clustering/1-Visualize/README.md)). قد تقوم أيضًا بإنشاء بيانات جديدة بناءً على الأصل (كما نفعل في [التصنيف](../../4-Classification/1-Introduction/README.md)). يمكنك تنظيف وتحرير البيانات (كما سنفعل قبل درس [تطبيق الويب](../../3-Web-App/README.md)). أخيرًا، قد تحتاج أيضًا إلى عشوائية البيانات وتوزيعها، بناءً على تقنيات التدريب الخاصة بك.
+
+✅ بعد جمع ومعالجة بياناتك، خذ لحظة لترى ما إذا كان شكلها سيسمح لك بمعالجة سؤالك المقصود. قد تكون البيانات غير مناسبة لأداء مهمتك، كما نكتشف في دروس [التجميع](../../5-Clustering/1-Visualize/README.md)!
+
+### الميزات والهدف
+
+[الميزة](https://www.datasciencecentral.com/profiles/blogs/an-introduction-to-variable-and-feature-selection) هي خاصية قابلة للقياس في بياناتك. في العديد من مجموعات البيانات يتم التعبير عنها كعنوان عمود مثل "التاريخ"، "الحجم"، أو "اللون". تمثل متغيرات الميزات، التي يتم تمثيلها عادةً بـ `X` في الكود، المدخلات التي سيتم استخدامها لتدريب النموذج.
+
+الهدف هو الشيء الذي تحاول التنبؤ به. يتم تمثيل الهدف عادةً بـ `y` في الكود، ويمثل الإجابة على السؤال الذي تحاول طرحه على بياناتك: في ديسمبر، ما **لون** القرع الذي سيكون الأرخص؟ في سان فرانسيسكو، ما الأحياء التي ستتمتع بأفضل **أسعار** العقارات؟ أحيانًا يتم الإشارة إلى الهدف أيضًا كخاصية التسمية.
+
+### اختيار متغير الميزات الخاص بك
+
+🎓 **اختيار الميزات واستخراج الميزات** كيف تعرف أي متغير تختار عند بناء نموذج؟ ربما ستخوض عملية اختيار الميزات أو استخراج الميزات لاختيار المتغيرات المناسبة للنموذج الأكثر أداءً. ومع ذلك، هما ليسا نفس الشيء: "استخراج الميزات ينشئ ميزات جديدة من وظائف الميزات الأصلية، بينما اختيار الميزات يعيد مجموعة فرعية من الميزات." ([المصدر](https://wikipedia.org/wiki/Feature_selection))
+
+### تصور بياناتك
+
+جانب مهم من أدوات عالم البيانات هو القدرة على تصور البيانات باستخدام العديد من المكتبات الممتازة مثل Seaborn أو MatPlotLib. قد يسمح لك تمثيل بياناتك بصريًا بالكشف عن ارتباطات مخفية يمكنك الاستفادة منها. قد تساعدك التصورات أيضًا في الكشف عن التحيز أو البيانات غير المتوازنة (كما نكتشف في [التصنيف](../../4-Classification/2-Classifiers-1/README.md)).
+
+### تقسيم مجموعة البيانات الخاصة بك
+
+قبل التدريب، تحتاج إلى تقسيم مجموعة البيانات الخاصة بك إلى جزأين أو أكثر بأحجام غير متساوية تمثل البيانات بشكل جيد.
+
+- **التدريب**. هذا الجزء من مجموعة البيانات يتم استخدامه لتدريب النموذج. يشكل هذا الجزء غالبية مجموعة البيانات الأصلية.
+- **الاختبار**. مجموعة بيانات الاختبار هي مجموعة مستقلة من البيانات، غالبًا ما يتم جمعها من البيانات الأصلية، التي تستخدمها لتأكيد أداء النموذج المبني.
+- **التحقق**. مجموعة التحقق هي مجموعة أصغر مستقلة من الأمثلة التي تستخدمها لضبط معلمات النموذج أو هيكله لتحسين النموذج. بناءً على حجم بياناتك والسؤال الذي تطرحه، قد لا تحتاج إلى بناء هذه المجموعة الثالثة (كما نلاحظ في [التنبؤ بالسلاسل الزمنية](../../7-TimeSeries/1-Introduction/README.md)).
+
+## بناء النموذج
+
+باستخدام بيانات التدريب الخاصة بك، هدفك هو بناء نموذج، أو تمثيل إحصائي لبياناتك، باستخدام خوارزميات مختلفة لتدريبه. تدريب النموذج يعرضه للبيانات ويسمح له بعمل افتراضات حول الأنماط التي يكتشفها، يتحقق منها، ويقبلها أو يرفضها.
+
+### تحديد طريقة التدريب
+
+بناءً على سؤالك وطبيعة بياناتك، ستختار طريقة لتدريبها. من خلال استعراض [وثائق Scikit-learn](https://scikit-learn.org/stable/user_guide.html) - التي نستخدمها في هذه الدورة - يمكنك استكشاف العديد من الطرق لتدريب النموذج. بناءً على تجربتك، قد تضطر إلى تجربة عدة طرق مختلفة لبناء النموذج الأفضل. من المحتمل أن تخوض عملية يقوم فيها علماء البيانات بتقييم أداء النموذج عن طريق تغذيته ببيانات غير مرئية، والتحقق من الدقة، والتحيز، وغيرها من المشكلات التي تؤثر على الجودة، واختيار طريقة التدريب الأنسب للمهمة المطروحة.
+
+### تدريب النموذج
+
+مسلحًا ببيانات التدريب الخاصة بك، أنت جاهز لتطبيقها لإنشاء نموذج. ستلاحظ أنه في العديد من مكتبات تعلم الآلة ستجد الكود 'model.fit' - في هذا الوقت ترسل متغير الميزات الخاص بك كمصفوفة من القيم (عادةً 'X') ومتغير الهدف (عادةً 'y').
+
+### تقييم النموذج
+
+بمجرد اكتمال عملية التدريب (قد تستغرق العديد من التكرارات، أو "epochs"، لتدريب نموذج كبير)، ستتمكن من تقييم جودة النموذج باستخدام بيانات الاختبار لقياس أدائه. هذه البيانات هي مجموعة فرعية من البيانات الأصلية التي لم يقم النموذج بتحليلها مسبقًا. يمكنك طباعة جدول من المقاييس حول جودة النموذج.
+
+🎓 **تطبيق النموذج**
+
+في سياق تعلم الآلة، يشير تطبيق النموذج إلى دقة الوظيفة الأساسية للنموذج أثناء محاولته تحليل البيانات التي ليست مألوفة له.
+
+🎓 **التطبيق غير الجيد** و**التطبيق المفرط** هما مشكلتان شائعتان تؤثران على جودة النموذج، حيث يتناسب النموذج إما بشكل غير كافٍ أو بشكل مفرط. يؤدي ذلك إلى جعل النموذج يقدم تنبؤات إما متوافقة جدًا أو غير متوافقة جدًا مع بيانات التدريب الخاصة به. النموذج المفرط التناسب يتنبأ ببيانات التدريب بشكل جيد جدًا لأنه تعلم تفاصيل البيانات وضوضائها بشكل مفرط. النموذج غير الجيد التناسب ليس دقيقًا لأنه لا يمكنه تحليل بيانات التدريب الخاصة به أو البيانات التي لم يسبق له رؤيتها بدقة.
+
+
+> رسم توضيحي بواسطة [Jen Looper](https://twitter.com/jenlooper)
+
+## ضبط المعلمات
+
+بمجرد اكتمال التدريب الأولي، قم بمراقبة جودة النموذج وفكر في تحسينه عن طريق تعديل "المعلمات الفائقة". اقرأ المزيد عن العملية [في الوثائق](https://docs.microsoft.com/en-us/azure/machine-learning/how-to-tune-hyperparameters?WT.mc_id=academic-77952-leestott).
+
+## التنبؤ
+
+هذه هي اللحظة التي يمكنك فيها استخدام بيانات جديدة تمامًا لاختبار دقة النموذج الخاص بك. في إعداد تعلم الآلة "التطبيقي"، حيث تقوم ببناء أصول ويب لاستخدام النموذج في الإنتاج، قد تتضمن هذه العملية جمع مدخلات المستخدم (مثل الضغط على زر) لتعيين متغير وإرساله إلى النموذج للاستنتاج أو التقييم.
+
+في هذه الدروس، ستكتشف كيفية استخدام هذه الخطوات للتحضير، البناء، الاختبار، التقييم، والتنبؤ - جميع إيماءات عالم البيانات وأكثر، أثناء تقدمك في رحلتك لتصبح مهندس تعلم الآلة "متكامل المهارات".
+
+---
+
+## 🚀التحدي
+
+ارسم مخططًا يعكس خطوات ممارس تعلم الآلة. أين ترى نفسك الآن في العملية؟ أين تتوقع أن تجد صعوبة؟ ما الذي يبدو سهلاً بالنسبة لك؟
+
+## [اختبار ما بعد المحاضرة](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/8/)
+
+## المراجعة والدراسة الذاتية
+
+ابحث عبر الإنترنت عن مقابلات مع علماء بيانات يناقشون عملهم اليومي. إليك [واحدة](https://www.youtube.com/watch?v=Z3IjgbbCEfs).
+
+## الواجب
+
+[قم بمقابلة عالم بيانات](assignment.md)
+
+---
+
+**إخلاء المسؤولية**:
+تم ترجمة هذا المستند باستخدام خدمة الترجمة بالذكاء الاصطناعي [Co-op Translator](https://github.com/Azure/co-op-translator). بينما نسعى لتحقيق الدقة، يرجى العلم أن الترجمات الآلية قد تحتوي على أخطاء أو عدم دقة. يجب اعتبار المستند الأصلي بلغته الأصلية المصدر الرسمي. للحصول على معلومات حاسمة، يُوصى بالاستعانة بترجمة بشرية احترافية. نحن غير مسؤولين عن أي سوء فهم أو تفسيرات خاطئة تنشأ عن استخدام هذه الترجمة.
\ No newline at end of file
diff --git a/translations/ar/1-Introduction/4-techniques-of-ML/assignment.md b/translations/ar/1-Introduction/4-techniques-of-ML/assignment.md
new file mode 100644
index 000000000..fe0fcb858
--- /dev/null
+++ b/translations/ar/1-Introduction/4-techniques-of-ML/assignment.md
@@ -0,0 +1,25 @@
+
+# مقابلة مع عالم بيانات
+
+## التعليمات
+
+في شركتك، أو في مجموعة مستخدمين، أو بين أصدقائك أو زملائك الطلاب، تحدث مع شخص يعمل بشكل احترافي كعالم بيانات. اكتب مقالًا قصيرًا (500 كلمة) عن مهامهم اليومية. هل هم متخصصون، أم يعملون على نطاق واسع "Full Stack"؟
+
+## معايير التقييم
+
+| المعايير | مثالي | مقبول | يحتاج إلى تحسين |
+| -------- | ------------------------------------------------------------------------------------ | ------------------------------------------------------------------ | --------------------- |
+| | مقال بالطول المطلوب، مع مصادر منسوبة، يتم تقديمه كملف .doc | المقال ضعيف في نسب المصادر أو أقصر من الطول المطلوب | لم يتم تقديم مقال |
+
+---
+
+**إخلاء المسؤولية**:
+تمت ترجمة هذا المستند باستخدام خدمة الترجمة الآلية [Co-op Translator](https://github.com/Azure/co-op-translator). بينما نسعى لتحقيق الدقة، يرجى العلم أن الترجمات الآلية قد تحتوي على أخطاء أو معلومات غير دقيقة. يجب اعتبار المستند الأصلي بلغته الأصلية هو المصدر الموثوق. للحصول على معلومات حساسة أو هامة، يُوصى بالاستعانة بترجمة بشرية احترافية. نحن غير مسؤولين عن أي سوء فهم أو تفسيرات خاطئة تنشأ عن استخدام هذه الترجمة.
\ No newline at end of file
diff --git a/translations/ar/1-Introduction/README.md b/translations/ar/1-Introduction/README.md
new file mode 100644
index 000000000..8703b4465
--- /dev/null
+++ b/translations/ar/1-Introduction/README.md
@@ -0,0 +1,37 @@
+
+# مقدمة في تعلم الآلة
+
+في هذا القسم من المنهج الدراسي، ستتعرف على المفاهيم الأساسية التي تشكل مجال تعلم الآلة، ما هو، وتتعرف على تاريخه والتقنيات التي يستخدمها الباحثون للعمل معه. دعونا نستكشف هذا العالم الجديد من تعلم الآلة معًا!
+
+
+> صورة بواسطة Bill Oxford على Unsplash
+
+### الدروس
+
+1. [مقدمة في تعلم الآلة](1-intro-to-ML/README.md)
+1. [تاريخ تعلم الآلة والذكاء الاصطناعي](2-history-of-ML/README.md)
+1. [الإنصاف وتعلم الآلة](3-fairness/README.md)
+1. [تقنيات تعلم الآلة](4-techniques-of-ML/README.md)
+
+### الشكر والتقدير
+
+تم كتابة "مقدمة في تعلم الآلة" بحب ♥️ من قبل فريق من الأشخاص بما في ذلك [محمد ساكيب خان إنان](https://twitter.com/Sakibinan)، [أورنيلا ألتونيان](https://twitter.com/ornelladotcom) و[جين لوبر](https://twitter.com/jenlooper)
+
+تم كتابة "تاريخ تعلم الآلة" بحب ♥️ من قبل [جين لوبر](https://twitter.com/jenlooper) و[إيمي بويد](https://twitter.com/AmyKateNicho)
+
+تم كتابة "الإنصاف وتعلم الآلة" بحب ♥️ من قبل [تومومي إيمورا](https://twitter.com/girliemac)
+
+تم كتابة "تقنيات تعلم الآلة" بحب ♥️ من قبل [جين لوبر](https://twitter.com/jenlooper) و[كريس نورينغ](https://twitter.com/softchris)
+
+---
+
+**إخلاء المسؤولية**:
+تم ترجمة هذا المستند باستخدام خدمة الترجمة بالذكاء الاصطناعي [Co-op Translator](https://github.com/Azure/co-op-translator). بينما نسعى لتحقيق الدقة، يرجى العلم أن الترجمات الآلية قد تحتوي على أخطاء أو معلومات غير دقيقة. يجب اعتبار المستند الأصلي بلغته الأصلية المصدر الموثوق. للحصول على معلومات حاسمة، يُوصى بالاستعانة بترجمة بشرية احترافية. نحن غير مسؤولين عن أي سوء فهم أو تفسيرات خاطئة تنشأ عن استخدام هذه الترجمة.
\ No newline at end of file
diff --git a/translations/ar/2-Regression/1-Tools/README.md b/translations/ar/2-Regression/1-Tools/README.md
new file mode 100644
index 000000000..d7a50e28c
--- /dev/null
+++ b/translations/ar/2-Regression/1-Tools/README.md
@@ -0,0 +1,239 @@
+
+# ابدأ مع Python و Scikit-learn لنماذج الانحدار
+
+
+
+> رسم توضيحي بواسطة [Tomomi Imura](https://www.twitter.com/girlie_mac)
+
+## [اختبار ما قبل المحاضرة](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/9/)
+
+> ### [هذا الدرس متوفر بلغة R!](../../../../2-Regression/1-Tools/solution/R/lesson_1.html)
+
+## المقدمة
+
+في هذه الدروس الأربعة، ستتعلم كيفية بناء نماذج الانحدار. سنناقش قريبًا ما هي استخداماتها. ولكن قبل أن تبدأ، تأكد من أن لديك الأدوات المناسبة للبدء!
+
+في هذا الدرس، ستتعلم كيفية:
+
+- إعداد جهاز الكمبيوتر الخاص بك لمهام تعلم الآلة المحلية.
+- العمل مع دفاتر Jupyter.
+- استخدام مكتبة Scikit-learn، بما في ذلك التثبيت.
+- استكشاف الانحدار الخطي من خلال تمرين عملي.
+
+## التثبيت والإعدادات
+
+[](https://youtu.be/-DfeD2k2Kj0 "تعلم الآلة للمبتدئين - إعداد أدواتك لبناء نماذج تعلم الآلة")
+
+> 🎥 انقر على الصورة أعلاه لمشاهدة فيديو قصير حول إعداد جهاز الكمبيوتر الخاص بك لتعلم الآلة.
+
+1. **تثبيت Python**. تأكد من أن [Python](https://www.python.org/downloads/) مثبت على جهاز الكمبيوتر الخاص بك. ستستخدم Python في العديد من مهام علوم البيانات وتعلم الآلة. معظم أنظمة الكمبيوتر تحتوي بالفعل على تثبيت Python. هناك أيضًا [حزم برمجية لـ Python](https://code.visualstudio.com/learn/educators/installers?WT.mc_id=academic-77952-leestott) مفيدة لتسهيل الإعداد لبعض المستخدمين.
+
+ ومع ذلك، تتطلب بعض استخدامات Python إصدارًا معينًا من البرنامج، بينما تتطلب استخدامات أخرى إصدارًا مختلفًا. لهذا السبب، من المفيد العمل داخل [بيئة افتراضية](https://docs.python.org/3/library/venv.html).
+
+2. **تثبيت Visual Studio Code**. تأكد من تثبيت Visual Studio Code على جهاز الكمبيوتر الخاص بك. اتبع هذه التعليمات لـ [تثبيت Visual Studio Code](https://code.visualstudio.com/) للتثبيت الأساسي. ستستخدم Python في Visual Studio Code في هذه الدورة، لذا قد ترغب في مراجعة كيفية [إعداد Visual Studio Code](https://docs.microsoft.com/learn/modules/python-install-vscode?WT.mc_id=academic-77952-leestott) لتطوير Python.
+
+ > تعرّف على Python من خلال العمل على هذه المجموعة من [الوحدات التعليمية](https://docs.microsoft.com/users/jenlooper-2911/collections/mp1pagggd5qrq7?WT.mc_id=academic-77952-leestott)
+ >
+ > [](https://youtu.be/yyQM70vi7V8 "إعداد Python مع Visual Studio Code")
+ >
+ > 🎥 انقر على الصورة أعلاه لمشاهدة فيديو: استخدام Python داخل VS Code.
+
+3. **تثبيت Scikit-learn**، باتباع [هذه التعليمات](https://scikit-learn.org/stable/install.html). نظرًا لأنك تحتاج إلى التأكد من استخدام Python 3، يُوصى باستخدام بيئة افتراضية. لاحظ أنه إذا كنت تقوم بتثبيت هذه المكتبة على جهاز Mac بمعالج M1، فهناك تعليمات خاصة على الصفحة المذكورة أعلاه.
+
+4. **تثبيت Jupyter Notebook**. ستحتاج إلى [تثبيت حزمة Jupyter](https://pypi.org/project/jupyter/).
+
+## بيئة تأليف تعلم الآلة الخاصة بك
+
+ستستخدم **دفاتر الملاحظات (notebooks)** لتطوير كود Python الخاص بك وإنشاء نماذج تعلم الآلة. هذا النوع من الملفات هو أداة شائعة لعلماء البيانات، ويمكن التعرف عليه من خلال الامتداد `.ipynb`.
+
+دفاتر الملاحظات هي بيئة تفاعلية تتيح للمطور كتابة الكود وإضافة الملاحظات وكتابة التوثيق حول الكود، مما يكون مفيدًا جدًا للمشاريع التجريبية أو البحثية.
+
+[](https://youtu.be/7E-jC8FLA2E "تعلم الآلة للمبتدئين - إعداد دفاتر Jupyter لبدء بناء نماذج الانحدار")
+
+> 🎥 انقر على الصورة أعلاه لمشاهدة فيديو قصير حول هذا التمرين.
+
+### تمرين - العمل مع دفتر ملاحظات
+
+في هذا المجلد، ستجد الملف _notebook.ipynb_.
+
+1. افتح _notebook.ipynb_ في Visual Studio Code.
+
+ سيتم تشغيل خادم Jupyter مع Python 3+. ستجد مناطق في دفتر الملاحظات يمكن تشغيلها، وهي أجزاء من الكود. يمكنك تشغيل كتلة كود عن طريق تحديد الأيقونة التي تشبه زر التشغيل.
+
+2. حدد أيقونة `md` وأضف بعض النصوص باستخدام Markdown، مثل النص التالي: **# مرحبًا بك في دفتر الملاحظات الخاص بك**.
+
+ بعد ذلك، أضف بعض كود Python.
+
+3. اكتب **print('hello notebook')** في كتلة الكود.
+4. حدد السهم لتشغيل الكود.
+
+ يجب أن ترى العبارة المطبوعة:
+
+ ```output
+ hello notebook
+ ```
+
+
+
+يمكنك دمج الكود مع التعليقات لتوثيق دفتر الملاحظات بنفسك.
+
+✅ فكر للحظة في مدى اختلاف بيئة عمل مطور الويب عن بيئة عمل عالم البيانات.
+
+## البدء مع Scikit-learn
+
+الآن بعد أن تم إعداد Python في بيئتك المحلية وأصبحت مرتاحًا مع دفاتر Jupyter، دعنا نتعرف على Scikit-learn (تُنطق `ساي` كما في `ساينس`). توفر Scikit-learn [واجهة برمجية شاملة](https://scikit-learn.org/stable/modules/classes.html#api-ref) لمساعدتك في تنفيذ مهام تعلم الآلة.
+
+وفقًا لموقعهم [الرسمي](https://scikit-learn.org/stable/getting_started.html)، "Scikit-learn هي مكتبة مفتوحة المصدر لتعلم الآلة تدعم التعلم الموجه وغير الموجه. كما توفر أدوات متنوعة لتلائم النماذج، ومعالجة البيانات، واختيار النماذج وتقييمها، والعديد من الأدوات الأخرى."
+
+في هذه الدورة، ستستخدم Scikit-learn وأدوات أخرى لبناء نماذج تعلم الآلة لتنفيذ ما نسميه مهام "تعلم الآلة التقليدي". لقد تجنبنا عمدًا الشبكات العصبية والتعلم العميق، حيث يتم تغطيتها بشكل أفضل في منهجنا القادم "الذكاء الاصطناعي للمبتدئين".
+
+تجعل Scikit-learn من السهل بناء النماذج وتقييمها للاستخدام. تركز بشكل أساسي على استخدام البيانات الرقمية وتحتوي على العديد من مجموعات البيانات الجاهزة للاستخدام كأدوات تعليمية. كما تتضمن نماذج جاهزة يمكن للطلاب تجربتها. دعنا نستكشف عملية تحميل البيانات المعبأة مسبقًا واستخدام نموذج تقدير مدمج لإنشاء أول نموذج تعلم آلي باستخدام Scikit-learn مع بعض البيانات الأساسية.
+
+## تمرين - أول دفتر ملاحظات باستخدام Scikit-learn
+
+> هذا الدرس مستوحى من [مثال الانحدار الخطي](https://scikit-learn.org/stable/auto_examples/linear_model/plot_ols.html#sphx-glr-auto-examples-linear-model-plot-ols-py) على موقع Scikit-learn.
+
+[](https://youtu.be/2xkXL5EUpS0 "تعلم الآلة للمبتدئين - مشروعك الأول للانحدار الخطي في Python")
+
+> 🎥 انقر على الصورة أعلاه لمشاهدة فيديو قصير حول هذا التمرين.
+
+في الملف _notebook.ipynb_ المرتبط بهذا الدرس، قم بمسح جميع الخلايا عن طريق الضغط على أيقونة "سلة المهملات".
+
+في هذا القسم، ستعمل مع مجموعة بيانات صغيرة حول مرض السكري مدمجة في Scikit-learn لأغراض التعلم. تخيل أنك تريد اختبار علاج لمرضى السكري. قد تساعدك نماذج تعلم الآلة في تحديد المرضى الذين قد يستجيبون بشكل أفضل للعلاج، بناءً على مجموعات من المتغيرات. حتى نموذج الانحدار الأساسي جدًا، عند تصوره، قد يظهر معلومات حول المتغيرات التي يمكن أن تساعدك في تنظيم التجارب السريرية النظرية.
+
+✅ هناك العديد من أنواع طرق الانحدار، واختيارك يعتمد على الإجابة التي تبحث عنها. إذا كنت تريد التنبؤ بالطول المحتمل لشخص بناءً على عمره، ستستخدم الانحدار الخطي، حيث أنك تبحث عن **قيمة رقمية**. إذا كنت مهتمًا بمعرفة ما إذا كان نوع معين من الطعام يجب اعتباره نباتيًا أم لا، فأنت تبحث عن **تصنيف فئوي** وبالتالي ستستخدم الانحدار اللوجستي. فكر قليلاً في بعض الأسئلة التي يمكنك طرحها على البيانات، وأي من هذه الطرق ستكون أكثر ملاءمة.
+
+دعنا نبدأ هذه المهمة.
+
+### استيراد المكتبات
+
+لهذه المهمة، سنقوم باستيراد بعض المكتبات:
+
+- **matplotlib**. إنها أداة [رسم بياني](https://matplotlib.org/) مفيدة وسنستخدمها لإنشاء رسم خطي.
+- **numpy**. [numpy](https://numpy.org/doc/stable/user/whatisnumpy.html) هي مكتبة مفيدة للتعامل مع البيانات الرقمية في Python.
+- **sklearn**. هذه هي مكتبة [Scikit-learn](https://scikit-learn.org/stable/user_guide.html).
+
+قم باستيراد بعض المكتبات للمساعدة في مهامك.
+
+1. أضف الاستيرادات بكتابة الكود التالي:
+
+ ```python
+ import matplotlib.pyplot as plt
+ import numpy as np
+ from sklearn import datasets, linear_model, model_selection
+ ```
+
+ أعلاه، تقوم باستيراد `matplotlib`، و`numpy`، وتستورد `datasets`، و`linear_model`، و`model_selection` من `sklearn`. يتم استخدام `model_selection` لتقسيم البيانات إلى مجموعات تدريب واختبار.
+
+### مجموعة بيانات السكري
+
+مجموعة البيانات المدمجة [السكري](https://scikit-learn.org/stable/datasets/toy_dataset.html#diabetes-dataset) تحتوي على 442 عينة بيانات حول مرض السكري، مع 10 متغيرات مميزة، بعضها يشمل:
+
+- العمر: العمر بالسنوات
+- مؤشر كتلة الجسم (bmi): مؤشر كتلة الجسم
+- ضغط الدم (bp): متوسط ضغط الدم
+- s1 tc: خلايا T (نوع من خلايا الدم البيضاء)
+
+✅ تتضمن مجموعة البيانات هذه مفهوم "الجنس" كمتغير مميز مهم للبحث حول مرض السكري. تحتوي العديد من مجموعات البيانات الطبية على هذا النوع من التصنيفات الثنائية. فكر قليلاً في كيفية استبعاد مثل هذه التصنيفات لأجزاء معينة من السكان من العلاجات.
+
+الآن، قم بتحميل بيانات X و y.
+
+> 🎓 تذكر، هذا تعلم موجه، ونحن بحاجة إلى هدف مسمى 'y'.
+
+في خلية كود جديدة، قم بتحميل مجموعة بيانات السكري عن طريق استدعاء `load_diabetes()`. الإعداد `return_X_y=True` يشير إلى أن `X` ستكون مصفوفة بيانات، و`y` ستكون الهدف الانحداري.
+
+1. أضف بعض أوامر الطباعة لعرض شكل مصفوفة البيانات وأول عنصر فيها:
+
+ ```python
+ X, y = datasets.load_diabetes(return_X_y=True)
+ print(X.shape)
+ print(X[0])
+ ```
+
+ ما تحصل عليه كاستجابة هو مجموعة. ما تقوم به هو تعيين القيمتين الأوليين من المجموعة إلى `X` و`y` على التوالي. تعرف على المزيد [حول المجموعات](https://wikipedia.org/wiki/Tuple).
+
+ يمكنك رؤية أن هذه البيانات تحتوي على 442 عنصرًا مرتبة في مصفوفات تحتوي على 10 عناصر:
+
+ ```text
+ (442, 10)
+ [ 0.03807591 0.05068012 0.06169621 0.02187235 -0.0442235 -0.03482076
+ -0.04340085 -0.00259226 0.01990842 -0.01764613]
+ ```
+
+ ✅ فكر قليلاً في العلاقة بين البيانات والهدف الانحداري. يتنبأ الانحدار الخطي بالعلاقات بين الميزة X والمتغير الهدف y. هل يمكنك العثور على [الهدف](https://scikit-learn.org/stable/datasets/toy_dataset.html#diabetes-dataset) لمجموعة بيانات السكري في الوثائق؟ ماذا توضح هذه المجموعة من البيانات، بالنظر إلى الهدف؟
+
+2. بعد ذلك، اختر جزءًا من هذه البيانات لرسمه عن طريق اختيار العمود الثالث من مجموعة البيانات. يمكنك القيام بذلك باستخدام المشغل `:` لاختيار جميع الصفوف، ثم اختيار العمود الثالث باستخدام الفهرس (2). يمكنك أيضًا إعادة تشكيل البيانات لتكون مصفوفة ثنائية الأبعاد - كما هو مطلوب للرسم - باستخدام `reshape(n_rows, n_columns)`. إذا كانت إحدى المعلمات -1، يتم حساب البعد المقابل تلقائيًا.
+
+ ```python
+ X = X[:, 2]
+ X = X.reshape((-1,1))
+ ```
+
+ ✅ في أي وقت، قم بطباعة البيانات للتحقق من شكلها.
+
+3. الآن بعد أن أصبحت البيانات جاهزة للرسم، يمكنك معرفة ما إذا كان يمكن للآلة تحديد تقسيم منطقي بين الأرقام في مجموعة البيانات هذه. للقيام بذلك، تحتاج إلى تقسيم كل من البيانات (X) والهدف (y) إلى مجموعات اختبار وتدريب. تحتوي Scikit-learn على طريقة مباشرة للقيام بذلك؛ يمكنك تقسيم بيانات الاختبار عند نقطة معينة.
+
+ ```python
+ X_train, X_test, y_train, y_test = model_selection.train_test_split(X, y, test_size=0.33)
+ ```
+
+4. الآن أنت جاهز لتدريب النموذج الخاص بك! قم بتحميل نموذج الانحدار الخطي وقم بتدريبه باستخدام مجموعات التدريب X و y باستخدام `model.fit()`:
+
+ ```python
+ model = linear_model.LinearRegression()
+ model.fit(X_train, y_train)
+ ```
+
+ ✅ `model.fit()` هي وظيفة ستراها في العديد من مكتبات تعلم الآلة مثل TensorFlow.
+
+5. بعد ذلك، قم بإنشاء توقع باستخدام بيانات الاختبار، باستخدام وظيفة `predict()`. سيتم استخدام هذا لرسم الخط بين مجموعات البيانات.
+
+ ```python
+ y_pred = model.predict(X_test)
+ ```
+
+6. الآن حان الوقت لعرض البيانات في رسم بياني. Matplotlib هي أداة مفيدة جدًا لهذه المهمة. قم بإنشاء مخطط نقطي لجميع بيانات الاختبار X و y، واستخدم التوقع لرسم خط في المكان الأنسب، بين مجموعات البيانات الخاصة بالنموذج.
+
+ ```python
+ plt.scatter(X_test, y_test, color='black')
+ plt.plot(X_test, y_pred, color='blue', linewidth=3)
+ plt.xlabel('Scaled BMIs')
+ plt.ylabel('Disease Progression')
+ plt.title('A Graph Plot Showing Diabetes Progression Against BMI')
+ plt.show()
+ ```
+
+ 
+✅ فكر قليلاً فيما يحدث هنا. هناك خط مستقيم يمر عبر العديد من النقاط الصغيرة للبيانات، ولكن ماذا يفعل بالضبط؟ هل يمكنك أن ترى كيف يمكن استخدام هذا الخط للتنبؤ بمكان نقطة بيانات جديدة وغير مرئية بالنسبة لمحور y في الرسم البياني؟ حاول أن تصف الاستخدام العملي لهذا النموذج بالكلمات.
+
+تهانينا، لقد قمت ببناء أول نموذج انحدار خطي، وأنشأت توقعًا باستخدامه، وعرضته في رسم بياني!
+
+---
+## 🚀التحدي
+
+قم برسم متغير مختلف من هذه المجموعة البيانية. تلميح: قم بتعديل هذا السطر: `X = X[:,2]`. بالنظر إلى الهدف من هذه المجموعة البيانية، ماذا يمكنك اكتشافه عن تطور مرض السكري كمرض؟
+
+## [اختبار ما بعد المحاضرة](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/10/)
+
+## المراجعة والدراسة الذاتية
+
+في هذا الدرس، عملت مع الانحدار الخطي البسيط، بدلاً من الانحدار الأحادي أو الانحدار المتعدد. اقرأ قليلاً عن الفروقات بين هذه الطرق، أو شاهد [هذا الفيديو](https://www.coursera.org/lecture/quantifying-relationships-regression-models/linear-vs-nonlinear-categorical-variables-ai2Ef).
+
+اقرأ المزيد عن مفهوم الانحدار وفكر في نوع الأسئلة التي يمكن الإجابة عليها باستخدام هذه التقنية. خذ [هذا الدرس](https://docs.microsoft.com/learn/modules/train-evaluate-regression-models?WT.mc_id=academic-77952-leestott) لتعميق فهمك.
+
+## الواجب
+
+[مجموعة بيانات مختلفة](assignment.md)
+
+---
+
+**إخلاء المسؤولية**:
+تمت ترجمة هذا المستند باستخدام خدمة الترجمة بالذكاء الاصطناعي [Co-op Translator](https://github.com/Azure/co-op-translator). بينما نسعى لتحقيق الدقة، يرجى العلم أن الترجمات الآلية قد تحتوي على أخطاء أو معلومات غير دقيقة. يجب اعتبار المستند الأصلي بلغته الأصلية هو المصدر الموثوق. للحصول على معلومات حساسة، يُوصى بالاستعانة بترجمة بشرية احترافية. نحن غير مسؤولين عن أي سوء فهم أو تفسيرات خاطئة تنشأ عن استخدام هذه الترجمة.
\ No newline at end of file
diff --git a/translations/ar/2-Regression/1-Tools/assignment.md b/translations/ar/2-Regression/1-Tools/assignment.md
new file mode 100644
index 000000000..42db95bf4
--- /dev/null
+++ b/translations/ar/2-Regression/1-Tools/assignment.md
@@ -0,0 +1,27 @@
+
+# الانحدار باستخدام Scikit-learn
+
+## التعليمات
+
+ألقِ نظرة على [مجموعة بيانات Linnerud](https://scikit-learn.org/stable/modules/generated/sklearn.datasets.load_linnerud.html#sklearn.datasets.load_linnerud) في Scikit-learn. تحتوي هذه المجموعة على [أهداف متعددة](https://scikit-learn.org/stable/datasets/toy_dataset.html#linnerrud-dataset): "تتكون من ثلاث متغيرات للتمارين (البيانات) وثلاث متغيرات فسيولوجية (الأهداف) تم جمعها من عشرين رجلاً في منتصف العمر في نادي رياضي".
+
+بكلماتك الخاصة، صف كيفية إنشاء نموذج انحدار يقوم برسم العلاقة بين محيط الخصر وعدد مرات أداء تمرين الجلوس. قم بنفس الشيء لبقية نقاط البيانات في هذه المجموعة.
+
+## معايير التقييم
+
+| المعيار | ممتاز | مقبول | يحتاج إلى تحسين |
+| ------------------------------ | ---------------------------------- | ---------------------------- | -------------------------- |
+| تقديم فقرة وصفية | يتم تقديم فقرة مكتوبة بشكل جيد | يتم تقديم بضع جمل | لم يتم تقديم أي وصف |
+
+---
+
+**إخلاء المسؤولية**:
+تم ترجمة هذا المستند باستخدام خدمة الترجمة الآلية [Co-op Translator](https://github.com/Azure/co-op-translator). بينما نسعى لتحقيق الدقة، يرجى العلم أن الترجمات الآلية قد تحتوي على أخطاء أو معلومات غير دقيقة. يجب اعتبار المستند الأصلي بلغته الأصلية هو المصدر الموثوق. للحصول على معلومات حساسة أو هامة، يُوصى بالاستعانة بترجمة بشرية احترافية. نحن غير مسؤولين عن أي سوء فهم أو تفسيرات خاطئة ناتجة عن استخدام هذه الترجمة.
\ No newline at end of file
diff --git a/translations/ar/2-Regression/1-Tools/notebook.ipynb b/translations/ar/2-Regression/1-Tools/notebook.ipynb
new file mode 100644
index 000000000..e69de29bb
diff --git a/translations/ar/2-Regression/1-Tools/solution/Julia/README.md b/translations/ar/2-Regression/1-Tools/solution/Julia/README.md
new file mode 100644
index 000000000..a55c9a8ea
--- /dev/null
+++ b/translations/ar/2-Regression/1-Tools/solution/Julia/README.md
@@ -0,0 +1,15 @@
+
+هذا مجرد عنصر نائب مؤقت
+
+---
+
+**إخلاء المسؤولية**:
+تمت ترجمة هذا المستند باستخدام خدمة الترجمة الآلية [Co-op Translator](https://github.com/Azure/co-op-translator). بينما نسعى لتحقيق الدقة، يرجى العلم أن الترجمات الآلية قد تحتوي على أخطاء أو معلومات غير دقيقة. يجب اعتبار المستند الأصلي بلغته الأصلية هو المصدر الموثوق. للحصول على معلومات حساسة أو هامة، يُوصى بالاستعانة بترجمة بشرية احترافية. نحن غير مسؤولين عن أي سوء فهم أو تفسيرات خاطئة تنشأ عن استخدام هذه الترجمة.
\ No newline at end of file
diff --git a/translations/ar/2-Regression/1-Tools/solution/R/lesson_1-R.ipynb b/translations/ar/2-Regression/1-Tools/solution/R/lesson_1-R.ipynb
new file mode 100644
index 000000000..ddcee21e7
--- /dev/null
+++ b/translations/ar/2-Regression/1-Tools/solution/R/lesson_1-R.ipynb
@@ -0,0 +1,449 @@
+{
+ "nbformat": 4,
+ "nbformat_minor": 2,
+ "metadata": {
+ "colab": {
+ "name": "lesson_1-R.ipynb",
+ "provenance": [],
+ "collapsed_sections": [],
+ "toc_visible": true
+ },
+ "kernelspec": {
+ "name": "ir",
+ "display_name": "R"
+ },
+ "language_info": {
+ "name": "R"
+ },
+ "coopTranslator": {
+ "original_hash": "c18d3bd0bd8ae3878597e89dcd1fa5c1",
+ "translation_date": "2025-08-29T14:55:54+00:00",
+ "source_file": "2-Regression/1-Tools/solution/R/lesson_1-R.ipynb",
+ "language_code": "ar"
+ }
+ },
+ "cells": [
+ {
+ "cell_type": "markdown",
+ "source": [
+ "# قم ببناء نموذج انحدار: ابدأ باستخدام R وTidymodels لنماذج الانحدار\n"
+ ],
+ "metadata": {
+ "id": "YJUHCXqK57yz"
+ }
+ },
+ {
+ "cell_type": "markdown",
+ "source": [
+ "## مقدمة إلى الانحدار - الدرس الأول\n",
+ "\n",
+ "#### وضع الأمور في سياقها\n",
+ "\n",
+ "✅ هناك العديد من أنواع طرق الانحدار، واختيار الطريقة المناسبة يعتمد على الإجابة التي تبحث عنها. إذا كنت تريد التنبؤ بالطول المحتمل لشخص بناءً على عمره، ستستخدم `الانحدار الخطي`، لأنك تبحث عن **قيمة رقمية**. أما إذا كنت مهتمًا بمعرفة ما إذا كان نوع معين من المأكولات يجب اعتباره نباتيًا أم لا، فأنت تبحث عن **تصنيف فئة**، وبالتالي ستستخدم `الانحدار اللوجستي`. ستتعلم المزيد عن الانحدار اللوجستي لاحقًا. فكر قليلاً في بعض الأسئلة التي يمكنك طرحها على البيانات، وأي من هذه الطرق سيكون أكثر ملاءمة.\n",
+ "\n",
+ "في هذا القسم، ستعمل مع [مجموعة بيانات صغيرة عن مرض السكري](https://www4.stat.ncsu.edu/~boos/var.select/diabetes.html). تخيل أنك تريد اختبار علاج لمرضى السكري. قد تساعدك نماذج التعلم الآلي في تحديد المرضى الذين قد يستجيبون بشكل أفضل للعلاج، بناءً على مجموعات من المتغيرات. حتى نموذج انحدار بسيط جدًا، عند تصوره، قد يظهر معلومات عن المتغيرات التي يمكن أن تساعدك في تنظيم تجاربك السريرية النظرية.\n",
+ "\n",
+ "مع ذلك، دعونا نبدأ في هذه المهمة!\n",
+ "\n",
+ "
\n",
+ " \n",
+ " عمل فني بواسطة @allison_horst\n",
+ "\n",
+ "\n"
+ ],
+ "metadata": {
+ "id": "LWNNzfqd6feZ"
+ }
+ },
+ {
+ "cell_type": "markdown",
+ "source": [
+ "## 1. تحميل مجموعة الأدوات الخاصة بنا\n",
+ "\n",
+ "لهذه المهمة، سنحتاج إلى الحزم التالية:\n",
+ "\n",
+ "- `tidyverse`: [tidyverse](https://www.tidyverse.org/) هو [مجموعة من حزم R](https://www.tidyverse.org/packages) مصممة لجعل علم البيانات أسرع وأسهل وأكثر متعة!\n",
+ "\n",
+ "- `tidymodels`: إطار عمل [tidymodels](https://www.tidymodels.org/) هو [مجموعة من الحزم](https://www.tidymodels.org/packages/) للنمذجة وتعلم الآلة.\n",
+ "\n",
+ "يمكنك تثبيتها باستخدام الأمر التالي:\n",
+ "\n",
+ "`install.packages(c(\"tidyverse\", \"tidymodels\"))`\n",
+ "\n",
+ "السكربت أدناه يتحقق مما إذا كانت الحزم المطلوبة لإكمال هذا الوحدة مثبتة لديك، ويقوم بتثبيتها إذا كانت مفقودة.\n"
+ ],
+ "metadata": {
+ "id": "FIo2YhO26wI9"
+ }
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 2,
+ "source": [
+ "suppressWarnings(if(!require(\"pacman\")) install.packages(\"pacman\"))\n",
+ "pacman::p_load(tidyverse, tidymodels)"
+ ],
+ "outputs": [
+ {
+ "output_type": "stream",
+ "name": "stderr",
+ "text": [
+ "Loading required package: pacman\n",
+ "\n"
+ ]
+ }
+ ],
+ "metadata": {
+ "id": "cIA9fz9v7Dss",
+ "colab": {
+ "base_uri": "https://localhost:8080/"
+ },
+ "outputId": "2df7073b-86b2-4b32-cb86-0da605a0dc11"
+ }
+ },
+ {
+ "cell_type": "markdown",
+ "source": [
+ "الآن، دعونا نقوم بتحميل هذه الحزم الرائعة وجعلها متاحة في جلسة R الحالية لدينا. (هذا للتوضيح فقط، `pacman::p_load()` قد قام بذلك بالفعل نيابةً عنك)\n"
+ ],
+ "metadata": {
+ "id": "gpO_P_6f9WUG"
+ }
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "source": [
+ "# load the core Tidyverse packages\r\n",
+ "library(tidyverse)\r\n",
+ "\r\n",
+ "# load the core Tidymodels packages\r\n",
+ "library(tidymodels)\r\n"
+ ],
+ "outputs": [],
+ "metadata": {
+ "id": "NLMycgG-9ezO"
+ }
+ },
+ {
+ "cell_type": "markdown",
+ "source": [
+ "## 2. مجموعة بيانات مرض السكري\n",
+ "\n",
+ "في هذا التمرين، سنعرض مهاراتنا في الانحدار من خلال إجراء توقعات باستخدام مجموعة بيانات مرض السكري. تحتوي [مجموعة بيانات مرض السكري](https://www4.stat.ncsu.edu/~boos/var.select/diabetes.rwrite1.txt) على `442 عينة` من البيانات المتعلقة بمرض السكري، مع 10 متغيرات تنبؤية تشمل `العمر`، `الجنس`، `مؤشر كتلة الجسم`، `متوسط ضغط الدم`، و`ستة قياسات لمصل الدم` بالإضافة إلى متغير النتيجة `y`: وهو قياس كمي لتقدم المرض بعد سنة واحدة من نقطة البداية.\n",
+ "\n",
+ "|عدد الملاحظات|442|\n",
+ "|----------------------|:---|\n",
+ "|عدد المتغيرات التنبؤية|أول 10 أعمدة هي تنبؤية رقمية|\n",
+ "|النتيجة/الهدف|العمود 11 هو قياس كمي لتقدم المرض بعد سنة واحدة من نقطة البداية|\n",
+ "|معلومات المتغيرات التنبؤية|- العمر بالسنوات\n",
+ "||- الجنس\n",
+ "||- مؤشر كتلة الجسم (bmi)\n",
+ "||- متوسط ضغط الدم (bp)\n",
+ "||- s1 tc، إجمالي الكوليسترول في المصل\n",
+ "||- s2 ldl، البروتينات الدهنية منخفضة الكثافة\n",
+ "||- s3 hdl، البروتينات الدهنية عالية الكثافة\n",
+ "||- s4 tch، إجمالي الكوليسترول / HDL\n",
+ "||- s5 ltg، ربما لوغاريتم مستوى الدهون الثلاثية في المصل\n",
+ "||- s6 glu، مستوى السكر في الدم|\n",
+ "\n",
+ "> 🎓 تذكر، هذا تعلم تحت الإشراف، ونحتاج إلى هدف مسمى 'y'.\n",
+ "\n",
+ "قبل أن تتمكن من التعامل مع البيانات باستخدام R، تحتاج إلى استيراد البيانات إلى ذاكرة R، أو إنشاء اتصال بالبيانات يمكن لـ R استخدامه للوصول إلى البيانات عن بُعد.\n",
+ "\n",
+ "> توفر حزمة [readr](https://readr.tidyverse.org/)، وهي جزء من Tidyverse، طريقة سريعة وسهلة لقراءة البيانات المستطيلة إلى R.\n",
+ "\n",
+ "الآن، دعونا نقوم بتحميل مجموعة بيانات مرض السكري من رابط المصدر التالي: \n",
+ "\n",
+ "سنقوم أيضًا بإجراء فحص سريع على بياناتنا باستخدام `glimpse()` وعرض أول 5 صفوف باستخدام `slice()`.\n",
+ "\n",
+ "قبل المضي قدمًا، دعونا نقدم شيئًا ستواجهه كثيرًا في كود R 🥁🥁: مشغل الأنابيب `%>%`\n",
+ "\n",
+ "مشغل الأنابيب (`%>%`) يقوم بتنفيذ العمليات بتسلسل منطقي عن طريق تمرير كائن إلى وظيفة أو تعبير استدعاء. يمكنك التفكير في مشغل الأنابيب كأنه يقول \"ثم\" في الكود الخاص بك.\n"
+ ],
+ "metadata": {
+ "id": "KM6iXLH996Cl"
+ }
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "source": [
+ "# Import the data set\r\n",
+ "diabetes <- read_table2(file = \"https://www4.stat.ncsu.edu/~boos/var.select/diabetes.rwrite1.txt\")\r\n",
+ "\r\n",
+ "\r\n",
+ "# Get a glimpse and dimensions of the data\r\n",
+ "glimpse(diabetes)\r\n",
+ "\r\n",
+ "\r\n",
+ "# Select the first 5 rows of the data\r\n",
+ "diabetes %>% \r\n",
+ " slice(1:5)"
+ ],
+ "outputs": [],
+ "metadata": {
+ "id": "Z1geAMhM-bSP"
+ }
+ },
+ {
+ "cell_type": "markdown",
+ "source": [
+ "`glimpse()` يظهر لنا أن هذه البيانات تحتوي على 442 صفًا و11 عمودًا، وكل الأعمدة من نوع البيانات `double`.\n",
+ "\n",
+ " \n",
+ "\n",
+ "> glimpse() و slice() هما دالتان في [`dplyr`](https://dplyr.tidyverse.org/). Dplyr، وهو جزء من Tidyverse، يمثل قواعد لتنظيم البيانات ويوفر مجموعة متناسقة من الأفعال التي تساعدك في حل التحديات الأكثر شيوعًا في معالجة البيانات.\n",
+ "\n",
+ " \n",
+ "\n",
+ "الآن بعد أن حصلنا على البيانات، دعونا نركز على خاصية واحدة (`bmi`) كهدف لهذا التمرين. هذا يتطلب منا اختيار الأعمدة المطلوبة. كيف يمكننا القيام بذلك؟\n",
+ "\n",
+ "[`dplyr::select()`](https://dplyr.tidyverse.org/reference/select.html) تتيح لنا *اختيار* (وأحيانًا إعادة تسمية) الأعمدة في إطار البيانات.\n"
+ ],
+ "metadata": {
+ "id": "UwjVT1Hz-c3Z"
+ }
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "source": [
+ "# Select predictor feature `bmi` and outcome `y`\r\n",
+ "diabetes_select <- diabetes %>% \r\n",
+ " select(c(bmi, y))\r\n",
+ "\r\n",
+ "# Print the first 5 rows\r\n",
+ "diabetes_select %>% \r\n",
+ " slice(1:10)"
+ ],
+ "outputs": [],
+ "metadata": {
+ "id": "RDY1oAKI-m80"
+ }
+ },
+ {
+ "cell_type": "markdown",
+ "source": [
+ "## 3. بيانات التدريب والاختبار\n",
+ "\n",
+ "من الممارسات الشائعة في التعلم الموجّه *تقسيم* البيانات إلى مجموعتين؛ مجموعة (عادةً أكبر) لتدريب النموذج، ومجموعة أصغر \"محجوزة\" لمعرفة أداء النموذج.\n",
+ "\n",
+ "الآن بعد أن أصبحت البيانات جاهزة، يمكننا معرفة ما إذا كانت الآلة يمكن أن تساعد في تحديد تقسيم منطقي بين الأرقام في هذه المجموعة. يمكننا استخدام حزمة [rsample](https://tidymodels.github.io/rsample/)، وهي جزء من إطار عمل Tidymodels، لإنشاء كائن يحتوي على معلومات حول *كيفية* تقسيم البيانات، ثم استخدام وظيفتين إضافيتين من rsample لاستخراج مجموعتي التدريب والاختبار التي تم إنشاؤهما:\n"
+ ],
+ "metadata": {
+ "id": "SDk668xK-tc3"
+ }
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "source": [
+ "set.seed(2056)\r\n",
+ "# Split 67% of the data for training and the rest for tesing\r\n",
+ "diabetes_split <- diabetes_select %>% \r\n",
+ " initial_split(prop = 0.67)\r\n",
+ "\r\n",
+ "# Extract the resulting train and test sets\r\n",
+ "diabetes_train <- training(diabetes_split)\r\n",
+ "diabetes_test <- testing(diabetes_split)\r\n",
+ "\r\n",
+ "# Print the first 3 rows of the training set\r\n",
+ "diabetes_train %>% \r\n",
+ " slice(1:10)"
+ ],
+ "outputs": [],
+ "metadata": {
+ "id": "EqtHx129-1h-"
+ }
+ },
+ {
+ "cell_type": "markdown",
+ "source": [
+ "## 4. تدريب نموذج الانحدار الخطي باستخدام Tidymodels\n",
+ "\n",
+ "الآن نحن جاهزون لتدريب النموذج!\n",
+ "\n",
+ "في Tidymodels، يتم تحديد النماذج باستخدام `parsnip()` من خلال تحديد ثلاثة مفاهيم:\n",
+ "\n",
+ "- **نوع النموذج** يميز بين النماذج مثل الانحدار الخطي، الانحدار اللوجستي، نماذج الأشجار القرار، وما إلى ذلك.\n",
+ "\n",
+ "- **وضع النموذج** يشمل خيارات شائعة مثل الانحدار والتصنيف؛ بعض أنواع النماذج تدعم أيًا من هذه الخيارات بينما البعض الآخر لديه وضع واحد فقط.\n",
+ "\n",
+ "- **محرك النموذج** هو الأداة الحسابية التي سيتم استخدامها لتدريب النموذج. غالبًا ما تكون هذه الأدوات حزم R، مثل **`\"lm\"`** أو **`\"ranger\"`**\n",
+ "\n",
+ "يتم جمع هذه المعلومات الخاصة بالنمذجة في مواصفات النموذج، لذا دعونا نبني واحدة!\n"
+ ],
+ "metadata": {
+ "id": "sBOS-XhB-6v7"
+ }
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "source": [
+ "# Build a linear model specification\r\n",
+ "lm_spec <- \r\n",
+ " # Type\r\n",
+ " linear_reg() %>% \r\n",
+ " # Engine\r\n",
+ " set_engine(\"lm\") %>% \r\n",
+ " # Mode\r\n",
+ " set_mode(\"regression\")\r\n",
+ "\r\n",
+ "\r\n",
+ "# Print the model specification\r\n",
+ "lm_spec"
+ ],
+ "outputs": [],
+ "metadata": {
+ "id": "20OwEw20--t3"
+ }
+ },
+ {
+ "cell_type": "markdown",
+ "source": [
+ "بعد أن يتم *تحديد* النموذج، يمكن `تقديره` أو `تدريبه` باستخدام وظيفة [`fit()`](https://parsnip.tidymodels.org/reference/fit.html)، وعادةً ما يتم ذلك باستخدام صيغة وبيانات معينة.\n",
+ "\n",
+ "`y ~ .` تعني أننا سنقوم بتقدير `y` كالقيمة المتوقعة/الهدف، والتي يتم تفسيرها بواسطة جميع المتغيرات التوضيحية/الخصائص أي `.` (في هذه الحالة، لدينا متغير توضيحي واحد فقط: `bmi`).\n"
+ ],
+ "metadata": {
+ "id": "_oDHs89k_CJj"
+ }
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "source": [
+ "# Build a linear model specification\r\n",
+ "lm_spec <- linear_reg() %>% \r\n",
+ " set_engine(\"lm\") %>%\r\n",
+ " set_mode(\"regression\")\r\n",
+ "\r\n",
+ "\r\n",
+ "# Train a linear regression model\r\n",
+ "lm_mod <- lm_spec %>% \r\n",
+ " fit(y ~ ., data = diabetes_train)\r\n",
+ "\r\n",
+ "# Print the model\r\n",
+ "lm_mod"
+ ],
+ "outputs": [],
+ "metadata": {
+ "id": "YlsHqd-q_GJQ"
+ }
+ },
+ {
+ "cell_type": "markdown",
+ "source": [
+ "من المخرجات التي يقدمها النموذج، يمكننا رؤية المعاملات التي تم تعلمها أثناء التدريب. هذه المعاملات تمثل معاملات خط الانحدار الأفضل الذي يعطينا أقل خطأ إجمالي بين المتغير الفعلي والمتغير المتوقع.\n",
+ " \n",
+ "\n",
+ "## 5. إجراء التنبؤات على مجموعة الاختبار\n",
+ "\n",
+ "الآن بعد أن قمنا بتدريب النموذج، يمكننا استخدامه للتنبؤ بتطور المرض y لمجموعة بيانات الاختبار باستخدام [parsnip::predict()](https://parsnip.tidymodels.org/reference/predict.model_fit.html). سيتم استخدام هذا لرسم الخط الفاصل بين مجموعات البيانات.\n"
+ ],
+ "metadata": {
+ "id": "kGZ22RQj_Olu"
+ }
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "source": [
+ "# Make predictions for the test set\r\n",
+ "predictions <- lm_mod %>% \r\n",
+ " predict(new_data = diabetes_test)\r\n",
+ "\r\n",
+ "# Print out some of the predictions\r\n",
+ "predictions %>% \r\n",
+ " slice(1:5)"
+ ],
+ "outputs": [],
+ "metadata": {
+ "id": "nXHbY7M2_aao"
+ }
+ },
+ {
+ "cell_type": "markdown",
+ "source": [
+ "رائع! 💃🕺 لقد قمنا بتدريب نموذج واستخدمناه لإجراء التنبؤات!\n",
+ "\n",
+ "عند إجراء التنبؤات، تتبع tidymodels دائمًا قاعدة إنتاج tibble/إطار بيانات يحتوي على أسماء أعمدة موحدة. هذا يجعل من السهل دمج البيانات الأصلية مع التنبؤات في صيغة قابلة للاستخدام للعمليات اللاحقة مثل الرسم البياني.\n",
+ "\n",
+ "`dplyr::bind_cols()` يربط أعمدة إطارات البيانات المتعددة بكفاءة.\n"
+ ],
+ "metadata": {
+ "id": "R_JstwUY_bIs"
+ }
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "source": [
+ "# Combine the predictions and the original test set\r\n",
+ "results <- diabetes_test %>% \r\n",
+ " bind_cols(predictions)\r\n",
+ "\r\n",
+ "\r\n",
+ "results %>% \r\n",
+ " slice(1:5)"
+ ],
+ "outputs": [],
+ "metadata": {
+ "id": "RybsMJR7_iI8"
+ }
+ },
+ {
+ "cell_type": "markdown",
+ "source": [
+ "## 6. عرض نتائج النمذجة\n",
+ "\n",
+ "حان الوقت لرؤية هذا بشكل مرئي 📈. سنقوم بإنشاء مخطط مبعثر لجميع قيم `y` و `bmi` في مجموعة الاختبار، ثم نستخدم التوقعات لرسم خط في المكان الأنسب بين مجموعات بيانات النموذج.\n",
+ "\n",
+ "لدى R عدة أنظمة لإنشاء الرسوم البيانية، ولكن `ggplot2` هو واحد من أكثرها أناقة وتنوعًا. يتيح لك هذا النظام تكوين الرسوم البيانية عن طريق **دمج المكونات المستقلة**.\n"
+ ],
+ "metadata": {
+ "id": "XJbYbMZW_n_s"
+ }
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "source": [
+ "# Set a theme for the plot\r\n",
+ "theme_set(theme_light())\r\n",
+ "# Create a scatter plot\r\n",
+ "results %>% \r\n",
+ " ggplot(aes(x = bmi)) +\r\n",
+ " # Add a scatter plot\r\n",
+ " geom_point(aes(y = y), size = 1.6) +\r\n",
+ " # Add a line plot\r\n",
+ " geom_line(aes(y = .pred), color = \"blue\", size = 1.5)"
+ ],
+ "outputs": [],
+ "metadata": {
+ "id": "R9tYp3VW_sTn"
+ }
+ },
+ {
+ "cell_type": "markdown",
+ "source": [
+ "✅ فكر قليلاً فيما يحدث هنا. هناك خط مستقيم يمر عبر العديد من النقاط الصغيرة للبيانات، لكن ما الذي يفعله بالضبط؟ هل يمكنك أن ترى كيف يمكن استخدام هذا الخط للتنبؤ بمكان نقطة بيانات جديدة وغير مرئية بالنسبة لمحور y في الرسم البياني؟ حاول أن تصف بالكلمات الاستخدام العملي لهذا النموذج.\n",
+ "\n",
+ "تهانينا، لقد قمت ببناء أول نموذج انحدار خطي، وأنشأت توقعًا باستخدامه، وعرضته في رسم بياني!\n"
+ ],
+ "metadata": {
+ "id": "zrPtHIxx_tNI"
+ }
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "\n---\n\n**إخلاء المسؤولية**: \nتمت ترجمة هذا المستند باستخدام خدمة الترجمة الآلية [Co-op Translator](https://github.com/Azure/co-op-translator). بينما نسعى لتحقيق الدقة، يرجى العلم أن الترجمات الآلية قد تحتوي على أخطاء أو معلومات غير دقيقة. يجب اعتبار المستند الأصلي بلغته الأصلية هو المصدر الموثوق. للحصول على معلومات حساسة أو هامة، يُوصى بالاستعانة بترجمة بشرية احترافية. نحن غير مسؤولين عن أي سوء فهم أو تفسيرات خاطئة تنشأ عن استخدام هذه الترجمة.\n"
+ ]
+ }
+ ]
+}
\ No newline at end of file
diff --git a/translations/ar/2-Regression/1-Tools/solution/notebook.ipynb b/translations/ar/2-Regression/1-Tools/solution/notebook.ipynb
new file mode 100644
index 000000000..84c2cc83c
--- /dev/null
+++ b/translations/ar/2-Regression/1-Tools/solution/notebook.ipynb
@@ -0,0 +1,677 @@
+{
+ "cells": [
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "## الانحدار الخطي لمجموعة بيانات السكري - الدرس 1\n"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "استيراد المكتبات اللازمة\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 1,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "import matplotlib.pyplot as plt\n",
+ "import numpy as np\n",
+ "from sklearn import datasets, linear_model, model_selection\n"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "قم بتحميل مجموعة بيانات السكري، مقسمة إلى بيانات `X` وميزات `y`\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 2,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "(442, 10)\n",
+ "[ 0.03807591 0.05068012 0.06169621 0.02187239 -0.0442235 -0.03482076\n",
+ " -0.04340085 -0.00259226 0.01990749 -0.01764613]\n"
+ ]
+ }
+ ],
+ "source": [
+ "X, y = datasets.load_diabetes(return_X_y=True)\n",
+ "print(X.shape)\n",
+ "print(X[0])"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "حدد ميزة واحدة فقط لاستهدافها لهذا التمرين\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 3,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "(442,)\n"
+ ]
+ }
+ ],
+ "source": [
+ "# Selecting the 3rd feature\n",
+ "X = X[:, 2]\n",
+ "print(X.shape)\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 9,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "(442, 1)\n",
+ "[[ 0.06169621]\n",
+ " [-0.05147406]\n",
+ " [ 0.04445121]\n",
+ " [-0.01159501]\n",
+ " [-0.03638469]\n",
+ " [-0.04069594]\n",
+ " [-0.04716281]\n",
+ " [-0.00189471]\n",
+ " [ 0.06169621]\n",
+ " [ 0.03906215]\n",
+ " [-0.08380842]\n",
+ " [ 0.01750591]\n",
+ " [-0.02884001]\n",
+ " [-0.00189471]\n",
+ " [-0.02560657]\n",
+ " [-0.01806189]\n",
+ " [ 0.04229559]\n",
+ " [ 0.01211685]\n",
+ " [-0.0105172 ]\n",
+ " [-0.01806189]\n",
+ " [-0.05686312]\n",
+ " [-0.02237314]\n",
+ " [-0.00405033]\n",
+ " [ 0.06061839]\n",
+ " [ 0.03582872]\n",
+ " [-0.01267283]\n",
+ " [-0.07734155]\n",
+ " [ 0.05954058]\n",
+ " [-0.02129532]\n",
+ " [-0.00620595]\n",
+ " [ 0.04445121]\n",
+ " [-0.06548562]\n",
+ " [ 0.12528712]\n",
+ " [-0.05039625]\n",
+ " [-0.06332999]\n",
+ " [-0.03099563]\n",
+ " [ 0.02289497]\n",
+ " [ 0.01103904]\n",
+ " [ 0.07139652]\n",
+ " [ 0.01427248]\n",
+ " [-0.00836158]\n",
+ " [-0.06764124]\n",
+ " [-0.0105172 ]\n",
+ " [-0.02345095]\n",
+ " [ 0.06816308]\n",
+ " [-0.03530688]\n",
+ " [-0.01159501]\n",
+ " [-0.0730303 ]\n",
+ " [-0.04177375]\n",
+ " [ 0.01427248]\n",
+ " [-0.00728377]\n",
+ " [ 0.0164281 ]\n",
+ " [-0.00943939]\n",
+ " [-0.01590626]\n",
+ " [ 0.0250506 ]\n",
+ " [-0.04931844]\n",
+ " [ 0.04121778]\n",
+ " [-0.06332999]\n",
+ " [-0.06440781]\n",
+ " [-0.02560657]\n",
+ " [-0.00405033]\n",
+ " [ 0.00457217]\n",
+ " [-0.00728377]\n",
+ " [-0.0374625 ]\n",
+ " [-0.02560657]\n",
+ " [-0.02452876]\n",
+ " [-0.01806189]\n",
+ " [-0.01482845]\n",
+ " [-0.02991782]\n",
+ " [-0.046085 ]\n",
+ " [-0.06979687]\n",
+ " [ 0.03367309]\n",
+ " [-0.00405033]\n",
+ " [-0.02021751]\n",
+ " [ 0.00241654]\n",
+ " [-0.03099563]\n",
+ " [ 0.02828403]\n",
+ " [-0.03638469]\n",
+ " [-0.05794093]\n",
+ " [-0.0374625 ]\n",
+ " [ 0.01211685]\n",
+ " [-0.02237314]\n",
+ " [-0.03530688]\n",
+ " [ 0.00996123]\n",
+ " [-0.03961813]\n",
+ " [ 0.07139652]\n",
+ " [-0.07518593]\n",
+ " [-0.00620595]\n",
+ " [-0.04069594]\n",
+ " [-0.04824063]\n",
+ " [-0.02560657]\n",
+ " [ 0.0519959 ]\n",
+ " [ 0.00457217]\n",
+ " [-0.06440781]\n",
+ " [-0.01698407]\n",
+ " [-0.05794093]\n",
+ " [ 0.00996123]\n",
+ " [ 0.08864151]\n",
+ " [-0.00512814]\n",
+ " [-0.06440781]\n",
+ " [ 0.01750591]\n",
+ " [-0.04500719]\n",
+ " [ 0.02828403]\n",
+ " [ 0.04121778]\n",
+ " [ 0.06492964]\n",
+ " [-0.03207344]\n",
+ " [-0.07626374]\n",
+ " [ 0.04984027]\n",
+ " [ 0.04552903]\n",
+ " [-0.00943939]\n",
+ " [-0.03207344]\n",
+ " [ 0.00457217]\n",
+ " [ 0.02073935]\n",
+ " [ 0.01427248]\n",
+ " [ 0.11019775]\n",
+ " [ 0.00133873]\n",
+ " [ 0.05846277]\n",
+ " [-0.02129532]\n",
+ " [-0.0105172 ]\n",
+ " [-0.04716281]\n",
+ " [ 0.00457217]\n",
+ " [ 0.01750591]\n",
+ " [ 0.08109682]\n",
+ " [ 0.0347509 ]\n",
+ " [ 0.02397278]\n",
+ " [-0.00836158]\n",
+ " [-0.06117437]\n",
+ " [-0.00189471]\n",
+ " [-0.06225218]\n",
+ " [ 0.0164281 ]\n",
+ " [ 0.09618619]\n",
+ " [-0.06979687]\n",
+ " [-0.02129532]\n",
+ " [-0.05362969]\n",
+ " [ 0.0433734 ]\n",
+ " [ 0.05630715]\n",
+ " [-0.0816528 ]\n",
+ " [ 0.04984027]\n",
+ " [ 0.11127556]\n",
+ " [ 0.06169621]\n",
+ " [ 0.01427248]\n",
+ " [ 0.04768465]\n",
+ " [ 0.01211685]\n",
+ " [ 0.00564998]\n",
+ " [ 0.04660684]\n",
+ " [ 0.12852056]\n",
+ " [ 0.05954058]\n",
+ " [ 0.09295276]\n",
+ " [ 0.01535029]\n",
+ " [-0.00512814]\n",
+ " [ 0.0703187 ]\n",
+ " [-0.00405033]\n",
+ " [-0.00081689]\n",
+ " [-0.04392938]\n",
+ " [ 0.02073935]\n",
+ " [ 0.06061839]\n",
+ " [-0.0105172 ]\n",
+ " [-0.03315126]\n",
+ " [-0.06548562]\n",
+ " [ 0.0433734 ]\n",
+ " [-0.06225218]\n",
+ " [ 0.06385183]\n",
+ " [ 0.03043966]\n",
+ " [ 0.07247433]\n",
+ " [-0.0191397 ]\n",
+ " [-0.06656343]\n",
+ " [-0.06009656]\n",
+ " [ 0.06924089]\n",
+ " [ 0.05954058]\n",
+ " [-0.02668438]\n",
+ " [-0.02021751]\n",
+ " [-0.046085 ]\n",
+ " [ 0.07139652]\n",
+ " [-0.07949718]\n",
+ " [ 0.00996123]\n",
+ " [-0.03854032]\n",
+ " [ 0.01966154]\n",
+ " [ 0.02720622]\n",
+ " [-0.00836158]\n",
+ " [-0.01590626]\n",
+ " [ 0.00457217]\n",
+ " [-0.04285156]\n",
+ " [ 0.00564998]\n",
+ " [-0.03530688]\n",
+ " [ 0.02397278]\n",
+ " [-0.01806189]\n",
+ " [ 0.04229559]\n",
+ " [-0.0547075 ]\n",
+ " [-0.00297252]\n",
+ " [-0.06656343]\n",
+ " [-0.01267283]\n",
+ " [-0.04177375]\n",
+ " [-0.03099563]\n",
+ " [-0.00512814]\n",
+ " [-0.05901875]\n",
+ " [ 0.0250506 ]\n",
+ " [-0.046085 ]\n",
+ " [ 0.00349435]\n",
+ " [ 0.05415152]\n",
+ " [-0.04500719]\n",
+ " [-0.05794093]\n",
+ " [-0.05578531]\n",
+ " [ 0.00133873]\n",
+ " [ 0.03043966]\n",
+ " [ 0.00672779]\n",
+ " [ 0.04660684]\n",
+ " [ 0.02612841]\n",
+ " [ 0.04552903]\n",
+ " [ 0.04013997]\n",
+ " [-0.01806189]\n",
+ " [ 0.01427248]\n",
+ " [ 0.03690653]\n",
+ " [ 0.00349435]\n",
+ " [-0.07087468]\n",
+ " [-0.03315126]\n",
+ " [ 0.09403057]\n",
+ " [ 0.03582872]\n",
+ " [ 0.03151747]\n",
+ " [-0.06548562]\n",
+ " [-0.04177375]\n",
+ " [-0.03961813]\n",
+ " [-0.03854032]\n",
+ " [-0.02560657]\n",
+ " [-0.02345095]\n",
+ " [-0.06656343]\n",
+ " [ 0.03259528]\n",
+ " [-0.046085 ]\n",
+ " [-0.02991782]\n",
+ " [-0.01267283]\n",
+ " [-0.01590626]\n",
+ " [ 0.07139652]\n",
+ " [-0.03099563]\n",
+ " [ 0.00026092]\n",
+ " [ 0.03690653]\n",
+ " [ 0.03906215]\n",
+ " [-0.01482845]\n",
+ " [ 0.00672779]\n",
+ " [-0.06871905]\n",
+ " [-0.00943939]\n",
+ " [ 0.01966154]\n",
+ " [ 0.07462995]\n",
+ " [-0.00836158]\n",
+ " [-0.02345095]\n",
+ " [-0.046085 ]\n",
+ " [ 0.05415152]\n",
+ " [-0.03530688]\n",
+ " [-0.03207344]\n",
+ " [-0.0816528 ]\n",
+ " [ 0.04768465]\n",
+ " [ 0.06061839]\n",
+ " [ 0.05630715]\n",
+ " [ 0.09834182]\n",
+ " [ 0.05954058]\n",
+ " [ 0.03367309]\n",
+ " [ 0.05630715]\n",
+ " [-0.06548562]\n",
+ " [ 0.16085492]\n",
+ " [-0.05578531]\n",
+ " [-0.02452876]\n",
+ " [-0.03638469]\n",
+ " [-0.00836158]\n",
+ " [-0.04177375]\n",
+ " [ 0.12744274]\n",
+ " [-0.07734155]\n",
+ " [ 0.02828403]\n",
+ " [-0.02560657]\n",
+ " [-0.06225218]\n",
+ " [-0.00081689]\n",
+ " [ 0.08864151]\n",
+ " [-0.03207344]\n",
+ " [ 0.03043966]\n",
+ " [ 0.00888341]\n",
+ " [ 0.00672779]\n",
+ " [-0.02021751]\n",
+ " [-0.02452876]\n",
+ " [-0.01159501]\n",
+ " [ 0.02612841]\n",
+ " [-0.05901875]\n",
+ " [-0.03638469]\n",
+ " [-0.02452876]\n",
+ " [ 0.01858372]\n",
+ " [-0.0902753 ]\n",
+ " [-0.00512814]\n",
+ " [-0.05255187]\n",
+ " [-0.02237314]\n",
+ " [-0.02021751]\n",
+ " [-0.0547075 ]\n",
+ " [-0.00620595]\n",
+ " [-0.01698407]\n",
+ " [ 0.05522933]\n",
+ " [ 0.07678558]\n",
+ " [ 0.01858372]\n",
+ " [-0.02237314]\n",
+ " [ 0.09295276]\n",
+ " [-0.03099563]\n",
+ " [ 0.03906215]\n",
+ " [-0.06117437]\n",
+ " [-0.00836158]\n",
+ " [-0.0374625 ]\n",
+ " [-0.01375064]\n",
+ " [ 0.07355214]\n",
+ " [-0.02452876]\n",
+ " [ 0.03367309]\n",
+ " [ 0.0347509 ]\n",
+ " [-0.03854032]\n",
+ " [-0.03961813]\n",
+ " [-0.00189471]\n",
+ " [-0.03099563]\n",
+ " [-0.046085 ]\n",
+ " [ 0.00133873]\n",
+ " [ 0.06492964]\n",
+ " [ 0.04013997]\n",
+ " [-0.02345095]\n",
+ " [ 0.05307371]\n",
+ " [ 0.04013997]\n",
+ " [-0.02021751]\n",
+ " [ 0.01427248]\n",
+ " [-0.03422907]\n",
+ " [ 0.00672779]\n",
+ " [ 0.00457217]\n",
+ " [ 0.03043966]\n",
+ " [ 0.0519959 ]\n",
+ " [ 0.06169621]\n",
+ " [-0.00728377]\n",
+ " [ 0.00564998]\n",
+ " [ 0.05415152]\n",
+ " [-0.00836158]\n",
+ " [ 0.114509 ]\n",
+ " [ 0.06708527]\n",
+ " [-0.05578531]\n",
+ " [ 0.03043966]\n",
+ " [-0.02560657]\n",
+ " [ 0.10480869]\n",
+ " [-0.00620595]\n",
+ " [-0.04716281]\n",
+ " [-0.04824063]\n",
+ " [ 0.08540807]\n",
+ " [-0.01267283]\n",
+ " [-0.03315126]\n",
+ " [-0.00728377]\n",
+ " [-0.01375064]\n",
+ " [ 0.05954058]\n",
+ " [ 0.02181716]\n",
+ " [ 0.01858372]\n",
+ " [-0.01159501]\n",
+ " [-0.00297252]\n",
+ " [ 0.01750591]\n",
+ " [-0.02991782]\n",
+ " [-0.02021751]\n",
+ " [-0.05794093]\n",
+ " [ 0.06061839]\n",
+ " [-0.04069594]\n",
+ " [-0.07195249]\n",
+ " [-0.05578531]\n",
+ " [ 0.04552903]\n",
+ " [-0.00943939]\n",
+ " [-0.03315126]\n",
+ " [ 0.04984027]\n",
+ " [-0.08488624]\n",
+ " [ 0.00564998]\n",
+ " [ 0.02073935]\n",
+ " [-0.00728377]\n",
+ " [ 0.10480869]\n",
+ " [-0.02452876]\n",
+ " [-0.00620595]\n",
+ " [-0.03854032]\n",
+ " [ 0.13714305]\n",
+ " [ 0.17055523]\n",
+ " [ 0.00241654]\n",
+ " [ 0.03798434]\n",
+ " [-0.05794093]\n",
+ " [-0.00943939]\n",
+ " [-0.02345095]\n",
+ " [-0.0105172 ]\n",
+ " [-0.03422907]\n",
+ " [-0.00297252]\n",
+ " [ 0.06816308]\n",
+ " [ 0.00996123]\n",
+ " [ 0.00241654]\n",
+ " [-0.03854032]\n",
+ " [ 0.02612841]\n",
+ " [-0.08919748]\n",
+ " [ 0.06061839]\n",
+ " [-0.02884001]\n",
+ " [-0.02991782]\n",
+ " [-0.0191397 ]\n",
+ " [-0.04069594]\n",
+ " [ 0.01535029]\n",
+ " [-0.02452876]\n",
+ " [ 0.00133873]\n",
+ " [ 0.06924089]\n",
+ " [-0.06979687]\n",
+ " [-0.02991782]\n",
+ " [-0.046085 ]\n",
+ " [ 0.01858372]\n",
+ " [ 0.00133873]\n",
+ " [-0.03099563]\n",
+ " [-0.00405033]\n",
+ " [ 0.01535029]\n",
+ " [ 0.02289497]\n",
+ " [ 0.04552903]\n",
+ " [-0.04500719]\n",
+ " [-0.03315126]\n",
+ " [ 0.097264 ]\n",
+ " [ 0.05415152]\n",
+ " [ 0.12313149]\n",
+ " [-0.08057499]\n",
+ " [ 0.09295276]\n",
+ " [-0.05039625]\n",
+ " [-0.01159501]\n",
+ " [-0.0277622 ]\n",
+ " [ 0.05846277]\n",
+ " [ 0.08540807]\n",
+ " [-0.00081689]\n",
+ " [ 0.00672779]\n",
+ " [ 0.00888341]\n",
+ " [ 0.08001901]\n",
+ " [ 0.07139652]\n",
+ " [-0.02452876]\n",
+ " [-0.0547075 ]\n",
+ " [-0.03638469]\n",
+ " [ 0.0164281 ]\n",
+ " [ 0.07786339]\n",
+ " [-0.03961813]\n",
+ " [ 0.01103904]\n",
+ " [-0.04069594]\n",
+ " [-0.03422907]\n",
+ " [ 0.00564998]\n",
+ " [ 0.08864151]\n",
+ " [-0.03315126]\n",
+ " [-0.05686312]\n",
+ " [-0.03099563]\n",
+ " [ 0.05522933]\n",
+ " [-0.06009656]\n",
+ " [ 0.00133873]\n",
+ " [-0.02345095]\n",
+ " [-0.07410811]\n",
+ " [ 0.01966154]\n",
+ " [-0.01590626]\n",
+ " [-0.01590626]\n",
+ " [ 0.03906215]\n",
+ " [-0.0730303 ]]\n"
+ ]
+ }
+ ],
+ "source": [
+ "#Reshaping to get a 2D array\n",
+ "X = X.reshape(-1, 1)\n",
+ "print(X.shape)\n",
+ "print(X)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "قسّم بيانات التدريب والاختبار لكل من `X` و `y`\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 5,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "X_train, X_test, y_train, y_test = model_selection.train_test_split(X, y, test_size=0.33)\n"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "حدد النموذج وقم بتدريبه باستخدام بيانات التدريب\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 6,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "
LinearRegression()
In a Jupyter environment, please rerun this cell to show the HTML representation or trust the notebook. On GitHub, the HTML representation is unable to render, please try loading this page with nbviewer.org.
"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "plt.scatter(X_test, y_test, color='black')\n",
+ "plt.plot(X_test, y_pred, color='blue', linewidth=3)\n",
+ "plt.show()"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "\n---\n\n**إخلاء المسؤولية**: \nتم ترجمة هذا المستند باستخدام خدمة الترجمة الآلية [Co-op Translator](https://github.com/Azure/co-op-translator). بينما نسعى لتحقيق الدقة، يرجى العلم أن الترجمات الآلية قد تحتوي على أخطاء أو معلومات غير دقيقة. يجب اعتبار المستند الأصلي بلغته الأصلية هو المصدر الموثوق. للحصول على معلومات حساسة أو هامة، يُوصى بالاستعانة بترجمة بشرية احترافية. نحن غير مسؤولين عن أي سوء فهم أو تفسيرات خاطئة ناتجة عن استخدام هذه الترجمة.\n"
+ ]
+ }
+ ],
+ "metadata": {
+ "kernelspec": {
+ "display_name": "Python 3",
+ "language": "python",
+ "name": "python3"
+ },
+ "language_info": {
+ "codemirror_mode": {
+ "name": "ipython",
+ "version": 3
+ },
+ "file_extension": ".py",
+ "mimetype": "text/x-python",
+ "name": "python",
+ "nbconvert_exporter": "python",
+ "pygments_lexer": "ipython3",
+ "version": "3.11.1"
+ },
+ "metadata": {
+ "interpreter": {
+ "hash": "70b38d7a306a849643e446cd70466270a13445e5987dfa1344ef2b127438fa4d"
+ }
+ },
+ "orig_nbformat": 2,
+ "coopTranslator": {
+ "original_hash": "16ff1a974f6e4348e869e4a7d366b86a",
+ "translation_date": "2025-08-29T14:54:26+00:00",
+ "source_file": "2-Regression/1-Tools/solution/notebook.ipynb",
+ "language_code": "ar"
+ }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 2
+}
\ No newline at end of file
diff --git a/translations/ar/2-Regression/2-Data/README.md b/translations/ar/2-Regression/2-Data/README.md
new file mode 100644
index 000000000..98f6410e8
--- /dev/null
+++ b/translations/ar/2-Regression/2-Data/README.md
@@ -0,0 +1,226 @@
+
+# بناء نموذج انحدار باستخدام Scikit-learn: إعداد البيانات وتصويرها
+
+
+
+مخطط المعلومات من [Dasani Madipalli](https://twitter.com/dasani_decoded)
+
+## [اختبار ما قبل المحاضرة](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/11/)
+
+> ### [هذه الدرس متوفر بلغة R!](../../../../2-Regression/2-Data/solution/R/lesson_2.html)
+
+## المقدمة
+
+الآن بعد أن أصبحت مجهزًا بالأدوات اللازمة لبدء بناء نماذج تعلم الآلة باستخدام Scikit-learn، أصبحت جاهزًا لبدء طرح الأسئلة على بياناتك. أثناء العمل مع البيانات وتطبيق حلول تعلم الآلة، من المهم جدًا فهم كيفية طرح السؤال الصحيح لفتح إمكانيات مجموعة البيانات الخاصة بك بشكل صحيح.
+
+في هذا الدرس، ستتعلم:
+
+- كيفية إعداد البيانات لبناء النماذج.
+- كيفية استخدام مكتبة Matplotlib لتصور البيانات.
+
+## طرح السؤال الصحيح على بياناتك
+
+السؤال الذي تحتاج إلى الإجابة عليه سيحدد نوع خوارزميات تعلم الآلة التي ستستخدمها. كما أن جودة الإجابة التي تحصل عليها تعتمد بشكل كبير على طبيعة البيانات.
+
+ألقِ نظرة على [البيانات](https://github.com/microsoft/ML-For-Beginners/blob/main/2-Regression/data/US-pumpkins.csv) المقدمة لهذا الدرس. يمكنك فتح ملف .csv هذا في VS Code. نظرة سريعة تظهر على الفور وجود فراغات ومزيج من النصوص والبيانات الرقمية. هناك أيضًا عمود غريب يسمى "Package" حيث تكون البيانات مزيجًا بين "sacks"، "bins" وقيم أخرى. البيانات، في الواقع، تبدو فوضوية بعض الشيء.
+
+[](https://youtu.be/5qGjczWTrDQ "تعلم الآلة للمبتدئين - كيفية تحليل وتنظيف مجموعة بيانات")
+
+> 🎥 انقر على الصورة أعلاه لمشاهدة فيديو قصير حول إعداد البيانات لهذا الدرس.
+
+في الواقع، من غير الشائع أن تحصل على مجموعة بيانات جاهزة تمامًا للاستخدام لإنشاء نموذج تعلم الآلة مباشرة. في هذا الدرس، ستتعلم كيفية إعداد مجموعة بيانات خام باستخدام مكتبات Python القياسية. ستتعلم أيضًا تقنيات مختلفة لتصور البيانات.
+
+## دراسة حالة: "سوق القرع"
+
+في هذا المجلد، ستجد ملف .csv في مجلد الجذر `data` يسمى [US-pumpkins.csv](https://github.com/microsoft/ML-For-Beginners/blob/main/2-Regression/data/US-pumpkins.csv) والذي يتضمن 1757 سطرًا من البيانات حول سوق القرع، مرتبة في مجموعات حسب المدينة. هذه بيانات خام مستخرجة من [تقارير السوق القياسية للمحاصيل الخاصة](https://www.marketnews.usda.gov/mnp/fv-report-config-step1?type=termPrice) التي توزعها وزارة الزراعة الأمريكية.
+
+### إعداد البيانات
+
+هذه البيانات متاحة في المجال العام. يمكن تنزيلها في العديد من الملفات المنفصلة، لكل مدينة، من موقع وزارة الزراعة الأمريكية. لتجنب وجود العديد من الملفات المنفصلة، قمنا بدمج جميع بيانات المدن في جدول بيانات واحد، وبالتالي قمنا بالفعل _بإعداد_ البيانات قليلاً. الآن، دعونا نلقي نظرة أقرب على البيانات.
+
+### بيانات القرع - استنتاجات أولية
+
+ماذا تلاحظ حول هذه البيانات؟ لقد رأيت بالفعل أن هناك مزيجًا من النصوص، الأرقام، الفراغات والقيم الغريبة التي تحتاج إلى فهمها.
+
+ما السؤال الذي يمكنك طرحه على هذه البيانات باستخدام تقنية الانحدار؟ ماذا عن "توقع سعر القرع للبيع خلال شهر معين". بالنظر مرة أخرى إلى البيانات، هناك بعض التغييرات التي تحتاج إلى إجرائها لإنشاء هيكل البيانات اللازم لهذه المهمة.
+
+## تمرين - تحليل بيانات القرع
+
+دعونا نستخدم [Pandas](https://pandas.pydata.org/) (الاسم اختصار لـ `Python Data Analysis`) وهي أداة مفيدة جدًا لتشكيل البيانات، لتحليل وإعداد بيانات القرع.
+
+### أولاً، تحقق من التواريخ المفقودة
+
+ستحتاج أولاً إلى اتخاذ خطوات للتحقق من التواريخ المفقودة:
+
+1. تحويل التواريخ إلى صيغة شهر (هذه تواريخ أمريكية، لذا الصيغة هي `MM/DD/YYYY`).
+2. استخراج الشهر إلى عمود جديد.
+
+افتح ملف _notebook.ipynb_ في Visual Studio Code واستورد جدول البيانات إلى إطار بيانات جديد باستخدام Pandas.
+
+1. استخدم وظيفة `head()` لعرض أول خمسة صفوف.
+
+ ```python
+ import pandas as pd
+ pumpkins = pd.read_csv('../data/US-pumpkins.csv')
+ pumpkins.head()
+ ```
+
+ ✅ ما الوظيفة التي ستستخدمها لعرض آخر خمسة صفوف؟
+
+1. تحقق مما إذا كانت هناك بيانات مفقودة في إطار البيانات الحالي:
+
+ ```python
+ pumpkins.isnull().sum()
+ ```
+
+ هناك بيانات مفقودة، ولكن ربما لن تكون مهمة للمهمة المطروحة.
+
+1. لجعل إطار البيانات الخاص بك أسهل للعمل معه، اختر فقط الأعمدة التي تحتاجها، باستخدام وظيفة `loc` التي تستخرج من إطار البيانات الأصلي مجموعة من الصفوف (الممررة كمعامل أول) والأعمدة (الممررة كمعامل ثاني). التعبير `:` في الحالة أدناه يعني "جميع الصفوف".
+
+ ```python
+ columns_to_select = ['Package', 'Low Price', 'High Price', 'Date']
+ pumpkins = pumpkins.loc[:, columns_to_select]
+ ```
+
+### ثانيًا، تحديد متوسط سعر القرع
+
+فكر في كيفية تحديد متوسط سعر القرع في شهر معين. ما الأعمدة التي ستختارها لهذه المهمة؟ تلميح: ستحتاج إلى 3 أعمدة.
+
+الحل: خذ متوسط أعمدة `Low Price` و`High Price` لملء عمود السعر الجديد، وحوّل عمود التاريخ ليظهر الشهر فقط. لحسن الحظ، وفقًا للتحقق أعلاه، لا توجد بيانات مفقودة للتواريخ أو الأسعار.
+
+1. لحساب المتوسط، أضف الكود التالي:
+
+ ```python
+ price = (pumpkins['Low Price'] + pumpkins['High Price']) / 2
+
+ month = pd.DatetimeIndex(pumpkins['Date']).month
+
+ ```
+
+ ✅ لا تتردد في طباعة أي بيانات ترغب في التحقق منها باستخدام `print(month)`.
+
+2. الآن، انسخ البيانات المحولة إلى إطار بيانات جديد باستخدام Pandas:
+
+ ```python
+ new_pumpkins = pd.DataFrame({'Month': month, 'Package': pumpkins['Package'], 'Low Price': pumpkins['Low Price'],'High Price': pumpkins['High Price'], 'Price': price})
+ ```
+
+ طباعة إطار البيانات الخاص بك ستظهر لك مجموعة بيانات نظيفة ومرتبة يمكنك بناء نموذج الانحدار الجديد عليها.
+
+### لكن انتظر! هناك شيء غريب هنا
+
+إذا نظرت إلى عمود `Package`، يتم بيع القرع بتكوينات مختلفة. بعضها يُباع بمقاييس "1 1/9 bushel"، وبعضها بمقاييس "1/2 bushel"، وبعضها لكل قرع، وبعضها لكل رطل، وبعضها في صناديق كبيرة بأحجام مختلفة.
+
+> يبدو أن القرع صعب الوزن بشكل متسق
+
+بالتعمق في البيانات الأصلية، من المثير للاهتمام أن أي شيء يحتوي على `Unit of Sale` يساوي "EACH" أو "PER BIN" يحتوي أيضًا على نوع `Package` لكل بوصة، لكل صندوق، أو "each". يبدو أن القرع صعب الوزن بشكل متسق، لذا دعونا نقوم بتصفيته عن طريق اختيار فقط القرع الذي يحتوي على السلسلة "bushel" في عمود `Package`.
+
+1. أضف فلتر في أعلى الملف، تحت استيراد ملف .csv الأولي:
+
+ ```python
+ pumpkins = pumpkins[pumpkins['Package'].str.contains('bushel', case=True, regex=True)]
+ ```
+
+ إذا قمت بطباعة البيانات الآن، يمكنك رؤية أنك تحصل فقط على حوالي 415 صفًا من البيانات التي تحتوي على القرع حسب البوشل.
+
+### لكن انتظر! هناك شيء آخر يجب القيام به
+
+هل لاحظت أن كمية البوشل تختلف حسب الصف؟ تحتاج إلى تطبيع التسعير بحيث تظهر التسعير لكل بوشل، لذا قم ببعض العمليات الحسابية لتوحيدها.
+
+1. أضف هذه الأسطر بعد الكتلة التي تنشئ إطار بيانات القرع الجديد:
+
+ ```python
+ new_pumpkins.loc[new_pumpkins['Package'].str.contains('1 1/9'), 'Price'] = price/(1 + 1/9)
+
+ new_pumpkins.loc[new_pumpkins['Package'].str.contains('1/2'), 'Price'] = price/(1/2)
+ ```
+
+✅ وفقًا لـ [The Spruce Eats](https://www.thespruceeats.com/how-much-is-a-bushel-1389308)، يعتمد وزن البوشل على نوع المنتج، حيث إنه قياس حجم. "البوشل من الطماطم، على سبيل المثال، من المفترض أن يزن 56 رطلاً... الأوراق والخضروات تشغل مساحة أكبر بوزن أقل، لذا فإن البوشل من السبانخ يزن فقط 20 رطلاً." الأمر معقد جدًا! دعونا لا نزعج أنفسنا بتحويل البوشل إلى رطل، وبدلاً من ذلك نقوم بالتسعير حسب البوشل. كل هذه الدراسة للبوشل من القرع، مع ذلك، تظهر مدى أهمية فهم طبيعة بياناتك!
+
+الآن، يمكنك تحليل التسعير لكل وحدة بناءً على قياس البوشل الخاص بها. إذا قمت بطباعة البيانات مرة أخرى، يمكنك رؤية كيف تم توحيدها.
+
+✅ هل لاحظت أن القرع الذي يُباع بنصف بوشل غالي جدًا؟ هل يمكنك معرفة السبب؟ تلميح: القرع الصغير أغلى بكثير من الكبير، ربما لأن هناك الكثير منه لكل بوشل، بالنظر إلى المساحة غير المستخدمة التي يشغلها قرع كبير مجوف.
+
+## استراتيجيات التصور
+
+جزء من دور عالم البيانات هو توضيح جودة وطبيعة البيانات التي يعملون معها. للقيام بذلك، غالبًا ما يقومون بإنشاء تصورات مثيرة للاهتمام، مثل المخططات، الرسوم البيانية، والخرائط، التي تظهر جوانب مختلفة من البيانات. بهذه الطريقة، يمكنهم عرض العلاقات والفجوات بصريًا التي يصعب اكتشافها بطريقة أخرى.
+
+[](https://youtu.be/SbUkxH6IJo0 "تعلم الآلة للمبتدئين - كيفية تصور البيانات باستخدام Matplotlib")
+
+> 🎥 انقر على الصورة أعلاه لمشاهدة فيديو قصير حول تصور البيانات لهذا الدرس.
+
+يمكن أن تساعد التصورات أيضًا في تحديد تقنية تعلم الآلة الأكثر ملاءمة للبيانات. على سبيل المثال، مخطط الانتشار الذي يبدو أنه يتبع خطًا يشير إلى أن البيانات مرشحة جيدة لتمرين الانحدار الخطي.
+
+واحدة من مكتبات التصور التي تعمل بشكل جيد في دفاتر Jupyter هي [Matplotlib](https://matplotlib.org/) (التي رأيتها أيضًا في الدرس السابق).
+
+> احصل على المزيد من الخبرة مع تصور البيانات في [هذه الدروس](https://docs.microsoft.com/learn/modules/explore-analyze-data-with-python?WT.mc_id=academic-77952-leestott).
+
+## تمرين - تجربة مع Matplotlib
+
+حاول إنشاء بعض المخططات الأساسية لعرض إطار البيانات الجديد الذي أنشأته للتو. ماذا سيظهر مخطط خطي أساسي؟
+
+1. استورد Matplotlib في أعلى الملف، تحت استيراد Pandas:
+
+ ```python
+ import matplotlib.pyplot as plt
+ ```
+
+1. أعد تشغيل الدفتر بالكامل للتحديث.
+1. في أسفل الدفتر، أضف خلية لرسم البيانات كمربع:
+
+ ```python
+ price = new_pumpkins.Price
+ month = new_pumpkins.Month
+ plt.scatter(price, month)
+ plt.show()
+ ```
+
+ 
+
+ هل هذا مخطط مفيد؟ هل هناك شيء يفاجئك بشأنه؟
+
+ إنه ليس مفيدًا بشكل خاص حيث إنه يعرض فقط بياناتك كانتشار نقاط في شهر معين.
+
+### اجعله مفيدًا
+
+لجعل المخططات تعرض بيانات مفيدة، عادةً ما تحتاج إلى تجميع البيانات بطريقة ما. دعونا نحاول إنشاء مخطط حيث يظهر المحور y الأشهر وتظهر البيانات توزيع البيانات.
+
+1. أضف خلية لإنشاء مخطط شريطي مجمع:
+
+ ```python
+ new_pumpkins.groupby(['Month'])['Price'].mean().plot(kind='bar')
+ plt.ylabel("Pumpkin Price")
+ ```
+
+ 
+
+ هذا هو تصور بيانات أكثر فائدة! يبدو أنه يشير إلى أن أعلى سعر للقرع يحدث في سبتمبر وأكتوبر. هل يتوافق ذلك مع توقعاتك؟ لماذا أو لماذا لا؟
+
+---
+
+## 🚀تحدي
+
+استكشف الأنواع المختلفة من التصورات التي تقدمها Matplotlib. ما الأنواع الأكثر ملاءمة لمشاكل الانحدار؟
+
+## [اختبار ما بعد المحاضرة](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/12/)
+
+## المراجعة والدراسة الذاتية
+
+ألقِ نظرة على الطرق العديدة لتصور البيانات. قم بعمل قائمة بالمكتبات المختلفة المتاحة ودوّن أيها الأفضل لأنواع معينة من المهام، على سبيل المثال التصورات ثنائية الأبعاد مقابل التصورات ثلاثية الأبعاد. ماذا تكتشف؟
+
+## الواجب
+
+[استكشاف التصور](assignment.md)
+
+---
+
+**إخلاء المسؤولية**:
+تمت ترجمة هذا المستند باستخدام خدمة الترجمة الآلية [Co-op Translator](https://github.com/Azure/co-op-translator). بينما نسعى لتحقيق الدقة، يرجى العلم أن الترجمات الآلية قد تحتوي على أخطاء أو معلومات غير دقيقة. يجب اعتبار المستند الأصلي بلغته الأصلية هو المصدر الموثوق. للحصول على معلومات حساسة أو هامة، يُوصى بالاستعانة بترجمة بشرية احترافية. نحن غير مسؤولين عن أي سوء فهم أو تفسيرات خاطئة ناتجة عن استخدام هذه الترجمة.
\ No newline at end of file
diff --git a/translations/ar/2-Regression/2-Data/assignment.md b/translations/ar/2-Regression/2-Data/assignment.md
new file mode 100644
index 000000000..7b70d2afd
--- /dev/null
+++ b/translations/ar/2-Regression/2-Data/assignment.md
@@ -0,0 +1,23 @@
+
+# استكشاف التصورات
+
+هناك العديد من المكتبات المختلفة المتاحة لتصور البيانات. قم بإنشاء بعض التصورات باستخدام بيانات القرع في هذا الدرس باستخدام matplotlib و seaborn في دفتر ملاحظات تجريبي. أي المكتبات أسهل في الاستخدام؟
+
+## المعيار
+
+| المعايير | ممتاز | مقبول | يحتاج إلى تحسين |
+| -------- | --------- | -------- | ----------------- |
+| | يتم تقديم دفتر ملاحظات يحتوي على استكشافين/تصورين | يتم تقديم دفتر ملاحظات يحتوي على استكشاف واحد/تصور واحد | لم يتم تقديم دفتر ملاحظات |
+
+---
+
+**إخلاء المسؤولية**:
+تم ترجمة هذا المستند باستخدام خدمة الترجمة بالذكاء الاصطناعي [Co-op Translator](https://github.com/Azure/co-op-translator). بينما نسعى لتحقيق الدقة، يرجى العلم أن الترجمات الآلية قد تحتوي على أخطاء أو معلومات غير دقيقة. يجب اعتبار المستند الأصلي بلغته الأصلية المصدر الموثوق. للحصول على معلومات حاسمة، يُوصى بالاستعانة بترجمة بشرية احترافية. نحن غير مسؤولين عن أي سوء فهم أو تفسيرات خاطئة تنشأ عن استخدام هذه الترجمة.
\ No newline at end of file
diff --git a/translations/ar/2-Regression/2-Data/notebook.ipynb b/translations/ar/2-Regression/2-Data/notebook.ipynb
new file mode 100644
index 000000000..497177b9f
--- /dev/null
+++ b/translations/ar/2-Regression/2-Data/notebook.ipynb
@@ -0,0 +1,46 @@
+{
+ "metadata": {
+ "language_info": {
+ "codemirror_mode": {
+ "name": "ipython",
+ "version": 3
+ },
+ "file_extension": ".py",
+ "mimetype": "text/x-python",
+ "name": "python",
+ "nbconvert_exporter": "python",
+ "pygments_lexer": "ipython3",
+ "version": "3.8.3-final"
+ },
+ "orig_nbformat": 2,
+ "kernelspec": {
+ "name": "python3",
+ "display_name": "Python 3",
+ "language": "python"
+ },
+ "coopTranslator": {
+ "original_hash": "1b2ab303ac6c604a34c6ca7a49077fc7",
+ "translation_date": "2025-08-29T14:58:01+00:00",
+ "source_file": "2-Regression/2-Data/notebook.ipynb",
+ "language_code": "ar"
+ }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 2,
+ "cells": [
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": []
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "\n---\n\n**إخلاء المسؤولية**: \nتم ترجمة هذا المستند باستخدام خدمة الترجمة الآلية [Co-op Translator](https://github.com/Azure/co-op-translator). بينما نسعى لتحقيق الدقة، يرجى العلم أن الترجمات الآلية قد تحتوي على أخطاء أو معلومات غير دقيقة. يجب اعتبار المستند الأصلي بلغته الأصلية هو المصدر الموثوق. للحصول على معلومات حساسة أو هامة، يُوصى بالاستعانة بترجمة بشرية احترافية. نحن غير مسؤولين عن أي سوء فهم أو تفسيرات خاطئة ناتجة عن استخدام هذه الترجمة.\n"
+ ]
+ }
+ ]
+}
\ No newline at end of file
diff --git a/translations/ar/2-Regression/2-Data/solution/Julia/README.md b/translations/ar/2-Regression/2-Data/solution/Julia/README.md
new file mode 100644
index 000000000..f9565e364
--- /dev/null
+++ b/translations/ar/2-Regression/2-Data/solution/Julia/README.md
@@ -0,0 +1,15 @@
+
+هذا مجرد عنصر نائب مؤقت
+
+---
+
+**إخلاء المسؤولية**:
+تم ترجمة هذا المستند باستخدام خدمة الترجمة بالذكاء الاصطناعي [Co-op Translator](https://github.com/Azure/co-op-translator). بينما نسعى لتحقيق الدقة، يرجى العلم أن الترجمات الآلية قد تحتوي على أخطاء أو معلومات غير دقيقة. يجب اعتبار المستند الأصلي بلغته الأصلية المصدر الرسمي. للحصول على معلومات حاسمة، يُوصى بالاستعانة بترجمة بشرية احترافية. نحن غير مسؤولين عن أي سوء فهم أو تفسيرات خاطئة ناتجة عن استخدام هذه الترجمة.
\ No newline at end of file
diff --git a/translations/ar/2-Regression/2-Data/solution/R/lesson_2-R.ipynb b/translations/ar/2-Regression/2-Data/solution/R/lesson_2-R.ipynb
new file mode 100644
index 000000000..c089ef1bc
--- /dev/null
+++ b/translations/ar/2-Regression/2-Data/solution/R/lesson_2-R.ipynb
@@ -0,0 +1,667 @@
+{
+ "nbformat": 4,
+ "nbformat_minor": 2,
+ "metadata": {
+ "colab": {
+ "name": "lesson_2-R.ipynb",
+ "provenance": [],
+ "collapsed_sections": [],
+ "toc_visible": true
+ },
+ "kernelspec": {
+ "name": "ir",
+ "display_name": "R"
+ },
+ "language_info": {
+ "name": "R"
+ },
+ "coopTranslator": {
+ "original_hash": "f3c335f9940cfd76528b3ef918b9b342",
+ "translation_date": "2025-08-29T14:59:43+00:00",
+ "source_file": "2-Regression/2-Data/solution/R/lesson_2-R.ipynb",
+ "language_code": "ar"
+ }
+ },
+ "cells": [
+ {
+ "cell_type": "markdown",
+ "source": [
+ "# بناء نموذج الانحدار: إعداد البيانات وتصويرها\n",
+ "\n",
+ "## **الانحدار الخطي للقرع - الدرس الثاني**\n",
+ "#### المقدمة\n",
+ "\n",
+ "الآن بعد أن أصبحت مجهزًا بالأدوات اللازمة لبدء بناء نماذج تعلم الآلة باستخدام Tidymodels وTidyverse، أصبحت جاهزًا لبدء طرح الأسئلة على بياناتك. أثناء العمل مع البيانات وتطبيق حلول تعلم الآلة، من المهم جدًا فهم كيفية طرح السؤال الصحيح لفتح إمكانيات مجموعة البيانات الخاصة بك بشكل صحيح.\n",
+ "\n",
+ "في هذا الدرس، ستتعلم:\n",
+ "\n",
+ "- كيفية إعداد بياناتك لبناء النماذج.\n",
+ "\n",
+ "- كيفية استخدام `ggplot2` لتصور البيانات.\n",
+ "\n",
+ "السؤال الذي تحتاج إلى الإجابة عليه سيحدد نوع خوارزميات تعلم الآلة التي ستستخدمها. كما أن جودة الإجابة التي تحصل عليها تعتمد بشكل كبير على طبيعة بياناتك.\n",
+ "\n",
+ "دعونا نرى ذلك من خلال تمرين عملي.\n",
+ "\n",
+ "
\n",
+ " \n",
+ " عمل فني بواسطة @allison_horst\n"
+ ],
+ "metadata": {
+ "id": "Pg5aexcOPqAZ"
+ }
+ },
+ {
+ "cell_type": "markdown",
+ "source": [
+ "## 1. استيراد بيانات القرع واستدعاء Tidyverse\n",
+ "\n",
+ "سنحتاج إلى الحزم التالية لتقسيم وتحليل هذا الدرس:\n",
+ "\n",
+ "- `tidyverse`: [tidyverse](https://www.tidyverse.org/) هو [مجموعة من حزم R](https://www.tidyverse.org/packages) مصممة لجعل علم البيانات أسرع وأسهل وأكثر متعة!\n",
+ "\n",
+ "يمكنك تثبيتها باستخدام:\n",
+ "\n",
+ "`install.packages(c(\"tidyverse\"))`\n",
+ "\n",
+ "السكربت أدناه يتحقق مما إذا كانت لديك الحزم المطلوبة لإكمال هذا الوحدة ويقوم بتثبيتها إذا كانت بعض الحزم مفقودة.\n"
+ ],
+ "metadata": {
+ "id": "dc5WhyVdXAjR"
+ }
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "source": [
+ "suppressWarnings(if(!require(\"pacman\")) install.packages(\"pacman\"))\n",
+ "pacman::p_load(tidyverse)"
+ ],
+ "outputs": [],
+ "metadata": {
+ "id": "GqPYUZgfXOBt"
+ }
+ },
+ {
+ "cell_type": "markdown",
+ "source": [
+ "الآن، دعونا نقوم بتشغيل بعض الحزم وتحميل [البيانات](https://github.com/microsoft/ML-For-Beginners/blob/main/2-Regression/data/US-pumpkins.csv) المقدمة لهذا الدرس!\n"
+ ],
+ "metadata": {
+ "id": "kvjDTPDSXRr2"
+ }
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "source": [
+ "# Load the core Tidyverse packages\n",
+ "library(tidyverse)\n",
+ "\n",
+ "# Import the pumpkins data\n",
+ "pumpkins <- read_csv(file = \"https://raw.githubusercontent.com/microsoft/ML-For-Beginners/main/2-Regression/data/US-pumpkins.csv\")\n",
+ "\n",
+ "\n",
+ "# Get a glimpse and dimensions of the data\n",
+ "glimpse(pumpkins)\n",
+ "\n",
+ "\n",
+ "# Print the first 50 rows of the data set\n",
+ "pumpkins %>% \n",
+ " slice_head(n =50)"
+ ],
+ "outputs": [],
+ "metadata": {
+ "id": "VMri-t2zXqgD"
+ }
+ },
+ {
+ "cell_type": "markdown",
+ "source": [
+ "نظرة سريعة باستخدام `glimpse()` تكشف فورًا وجود فراغات ومزيج من النصوص (`chr`) والبيانات الرقمية (`dbl`). العمود `Date` هو من نوع النصوص، وهناك أيضًا عمود غريب يسمى `Package` يحتوي على بيانات مختلطة بين `sacks`، `bins`، وقيم أخرى. في الواقع، البيانات تبدو فوضوية بعض الشيء 😤.\n",
+ "\n",
+ "في الحقيقة، من النادر جدًا أن تحصل على مجموعة بيانات جاهزة تمامًا للاستخدام مباشرة في إنشاء نموذج تعلم آلي. لكن لا تقلق، في هذا الدرس ستتعلم كيفية تجهيز مجموعة بيانات خام باستخدام مكتبات R القياسية 🧑🔧. كما ستتعلم تقنيات متنوعة لتصور البيانات. 📈📊\n",
+ " \n",
+ "\n",
+ "> تذكير سريع: مشغل الأنابيب (`%>%`) ينفذ العمليات بتسلسل منطقي عن طريق تمرير كائن إلى الأمام داخل دالة أو تعبير استدعاء. يمكنك التفكير في مشغل الأنابيب كأنه يقول \"ثم\" في الكود الخاص بك.\n"
+ ],
+ "metadata": {
+ "id": "REWcIv9yX29v"
+ }
+ },
+ {
+ "cell_type": "markdown",
+ "source": [
+ "## 2. التحقق من البيانات المفقودة\n",
+ "\n",
+ "أحد أكثر المشاكل شيوعًا التي يواجهها علماء البيانات هي البيانات غير المكتملة أو المفقودة. يمثل R القيم المفقودة أو غير المعروفة باستخدام قيمة خاصة: `NA` (غير متوفرة).\n",
+ "\n",
+ "كيف يمكننا معرفة ما إذا كان إطار البيانات يحتوي على قيم مفقودة؟\n",
+ " \n",
+ "- إحدى الطرق المباشرة هي استخدام وظيفة R الأساسية `anyNA` التي تُرجع الكائنات المنطقية `TRUE` أو `FALSE`.\n"
+ ],
+ "metadata": {
+ "id": "Zxfb3AM5YbUe"
+ }
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "source": [
+ "pumpkins %>% \n",
+ " anyNA()"
+ ],
+ "outputs": [],
+ "metadata": {
+ "id": "G--DQutAYltj"
+ }
+ },
+ {
+ "cell_type": "markdown",
+ "source": [
+ "هناك بعض البيانات المفقودة! هذه نقطة جيدة للبدء.\n",
+ "\n",
+ "- طريقة أخرى هي استخدام الدالة `is.na()` التي تشير إلى العناصر المفقودة في الأعمدة الفردية باستخدام القيمة المنطقية `TRUE`.\n"
+ ],
+ "metadata": {
+ "id": "mU-7-SB6YokF"
+ }
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "source": [
+ "pumpkins %>% \n",
+ " is.na() %>% \n",
+ " head(n = 7)"
+ ],
+ "outputs": [],
+ "metadata": {
+ "id": "W-DxDOR4YxSW"
+ }
+ },
+ {
+ "cell_type": "markdown",
+ "source": [
+ "حسنًا، لقد أنجزت المهمة ولكن مع إطار بيانات كبير مثل هذا، سيكون من غير الفعّال ومن المستحيل عمليًا مراجعة جميع الصفوف والأعمدة بشكل فردي 😴.\n",
+ "\n",
+ "- طريقة أكثر سهولة ستكون حساب مجموع القيم المفقودة لكل عمود:\n"
+ ],
+ "metadata": {
+ "id": "xUWxipKYY0o7"
+ }
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "source": [
+ "pumpkins %>% \n",
+ " is.na() %>% \n",
+ " colSums()"
+ ],
+ "outputs": [],
+ "metadata": {
+ "id": "ZRBWV6P9ZArL"
+ }
+ },
+ {
+ "cell_type": "markdown",
+ "source": [
+ "أفضل بكثير! هناك بيانات مفقودة، ولكن ربما لن تكون مهمة لهذه المهمة. دعونا نرى ما ستكشفه المزيد من التحليلات.\n",
+ "\n",
+ "> بالإضافة إلى المجموعات الرائعة من الحزم والوظائف، يتميز R بتوثيق جيد جدًا. على سبيل المثال، استخدم `help(colSums)` أو `?colSums` لمعرفة المزيد عن الوظيفة.\n"
+ ],
+ "metadata": {
+ "id": "9gv-crB6ZD1Y"
+ }
+ },
+ {
+ "cell_type": "markdown",
+ "source": [
+ "## 3. Dplyr: قواعد معالجة البيانات\n",
+ "\n",
+ "
\n",
+ " \n",
+ " عمل فني بواسطة @allison_horst\n",
+ "\n",
+ "\n",
+ "\n"
+ ],
+ "metadata": {
+ "id": "o4jLY5-VZO2C"
+ }
+ },
+ {
+ "cell_type": "markdown",
+ "source": [
+ "[`dplyr`](https://dplyr.tidyverse.org/)، وهي حزمة ضمن Tidyverse، تمثل قواعد لتنظيم البيانات وتوفر مجموعة متناسقة من الأفعال التي تساعدك على حل التحديات الأكثر شيوعًا في معالجة البيانات. في هذا القسم، سنستكشف بعض الأفعال التي تقدمها dplyr! \n",
+ " \n"
+ ],
+ "metadata": {
+ "id": "i5o33MQBZWWw"
+ }
+ },
+ {
+ "cell_type": "markdown",
+ "source": [
+ "#### dplyr::select()\n",
+ "\n",
+ "`select()` هي دالة في حزمة `dplyr` تساعدك على اختيار الأعمدة التي تريد الاحتفاظ بها أو استبعادها.\n",
+ "\n",
+ "لجعل إطار البيانات الخاص بك أسهل في التعامل، قم بحذف بعض الأعمدة باستخدام `select()`، مع الاحتفاظ فقط بالأعمدة التي تحتاجها.\n",
+ "\n",
+ "على سبيل المثال، في هذا التمرين، تحليلنا سيتضمن الأعمدة `Package`، `Low Price`، `High Price` و `Date`. دعنا نختار هذه الأعمدة.\n"
+ ],
+ "metadata": {
+ "id": "x3VGMAGBZiUr"
+ }
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "source": [
+ "# Select desired columns\n",
+ "pumpkins <- pumpkins %>% \n",
+ " select(Package, `Low Price`, `High Price`, Date)\n",
+ "\n",
+ "\n",
+ "# Print data set\n",
+ "pumpkins %>% \n",
+ " slice_head(n = 5)"
+ ],
+ "outputs": [],
+ "metadata": {
+ "id": "F_FgxQnVZnM0"
+ }
+ },
+ {
+ "cell_type": "markdown",
+ "source": [
+ "#### dplyr::mutate()\n",
+ "\n",
+ "`mutate()` هي دالة في حزمة `dplyr` تساعدك على إنشاء أو تعديل الأعمدة، مع الاحتفاظ بالأعمدة الموجودة.\n",
+ "\n",
+ "الهيكل العام لدالة `mutate` هو:\n",
+ "\n",
+ "`data %>% mutate(new_column_name = what_it_contains)`\n",
+ "\n",
+ "لنقم بتجربة `mutate` باستخدام العمود `Date` من خلال تنفيذ العمليات التالية:\n",
+ "\n",
+ "1. تحويل التواريخ (التي هي حالياً من نوع نصي) إلى صيغة شهر (هذه تواريخ أمريكية، لذا الصيغة هي `MM/DD/YYYY`).\n",
+ "\n",
+ "2. استخراج الشهر من التواريخ إلى عمود جديد.\n",
+ "\n",
+ "في لغة R، تجعل الحزمة [lubridate](https://lubridate.tidyverse.org/) العمل مع بيانات التاريخ والوقت أسهل. لذا، دعونا نستخدم `dplyr::mutate()`، و`lubridate::mdy()`، و`lubridate::month()` لنرى كيف يمكن تحقيق الأهداف المذكورة أعلاه. يمكننا حذف عمود `Date` لأننا لن نحتاجه مرة أخرى في العمليات اللاحقة.\n"
+ ],
+ "metadata": {
+ "id": "2KKo0Ed9Z1VB"
+ }
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "source": [
+ "# Load lubridate\n",
+ "library(lubridate)\n",
+ "\n",
+ "pumpkins <- pumpkins %>% \n",
+ " # Convert the Date column to a date object\n",
+ " mutate(Date = mdy(Date)) %>% \n",
+ " # Extract month from Date\n",
+ " mutate(Month = month(Date)) %>% \n",
+ " # Drop Date column\n",
+ " select(-Date)\n",
+ "\n",
+ "# View the first few rows\n",
+ "pumpkins %>% \n",
+ " slice_head(n = 7)"
+ ],
+ "outputs": [],
+ "metadata": {
+ "id": "5joszIVSZ6xe"
+ }
+ },
+ {
+ "cell_type": "markdown",
+ "source": [
+ "واو! 🤩\n",
+ "\n",
+ "الآن، دعونا ننشئ عمودًا جديدًا باسم `Price`، والذي يمثل متوسط سعر اليقطين. بعد ذلك، سنأخذ متوسط عمودي `Low Price` و`High Price` لملء العمود الجديد `Price`.\n"
+ ],
+ "metadata": {
+ "id": "nIgLjNMCZ-6Y"
+ }
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "source": [
+ "# Create a new column Price\n",
+ "pumpkins <- pumpkins %>% \n",
+ " mutate(Price = (`Low Price` + `High Price`)/2)\n",
+ "\n",
+ "# View the first few rows of the data\n",
+ "pumpkins %>% \n",
+ " slice_head(n = 5)"
+ ],
+ "outputs": [],
+ "metadata": {
+ "id": "Zo0BsqqtaJw2"
+ }
+ },
+ {
+ "cell_type": "markdown",
+ "source": [
+ "نعم!💪\n",
+ "\n",
+ "\"لكن انتظر!\" ستقول بعد تصفح مجموعة البيانات بالكامل باستخدام `View(pumpkins)`, \"هناك شيء غريب هنا!\"🤔\n",
+ "\n",
+ "إذا نظرت إلى عمود `Package`, ستجد أن القرع يُباع بتكوينات مختلفة. بعضها يُباع بمقياس `1 1/9 bushel`, وبعضها بمقياس `1/2 bushel`, وبعضها لكل قرع، وبعضها لكل رطل، وبعضها في صناديق كبيرة بأحجام مختلفة.\n",
+ "\n",
+ "دعونا نتحقق من ذلك:\n"
+ ],
+ "metadata": {
+ "id": "p77WZr-9aQAR"
+ }
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "source": [
+ "# Verify the distinct observations in Package column\n",
+ "pumpkins %>% \n",
+ " distinct(Package)"
+ ],
+ "outputs": [],
+ "metadata": {
+ "id": "XISGfh0IaUy6"
+ }
+ },
+ {
+ "cell_type": "markdown",
+ "source": [
+ "رائع!👏\n",
+ "\n",
+ "يبدو أن قياس وزن القرع بشكل متسق أمر صعب للغاية، لذا دعونا نقوم بتصفية القرع عن طريق اختيار فقط القرع الذي يحتوي على الكلمة *bushel* في عمود `Package` ووضع ذلك في إطار بيانات جديد `new_pumpkins`. \n"
+ ],
+ "metadata": {
+ "id": "7sMjiVujaZxY"
+ }
+ },
+ {
+ "cell_type": "markdown",
+ "source": [
+ "#### dplyr::filter() و stringr::str_detect()\n",
+ "\n",
+ "[`dplyr::filter()`](https://dplyr.tidyverse.org/reference/filter.html): ينشئ مجموعة فرعية من البيانات تحتوي فقط على **الصفوف** التي تلبي شروطك، وفي هذه الحالة، القرع الذي يحتوي على النص *bushel* في عمود `Package`.\n",
+ "\n",
+ "[stringr::str_detect()](https://stringr.tidyverse.org/reference/str_detect.html): يتحقق من وجود أو غياب نمط معين في النص.\n",
+ "\n",
+ "حزمة [`stringr`](https://github.com/tidyverse/stringr) توفر وظائف بسيطة لعمليات النصوص الشائعة.\n"
+ ],
+ "metadata": {
+ "id": "L8Qfcs92ageF"
+ }
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "source": [
+ "# Retain only pumpkins with \"bushel\"\n",
+ "new_pumpkins <- pumpkins %>% \n",
+ " filter(str_detect(Package, \"bushel\"))\n",
+ "\n",
+ "# Get the dimensions of the new data\n",
+ "dim(new_pumpkins)\n",
+ "\n",
+ "# View a few rows of the new data\n",
+ "new_pumpkins %>% \n",
+ " slice_head(n = 5)"
+ ],
+ "outputs": [],
+ "metadata": {
+ "id": "hy_SGYREampd"
+ }
+ },
+ {
+ "cell_type": "markdown",
+ "source": [
+ "يمكنك أن ترى أننا قد حصرنا البيانات إلى حوالي 415 صفًا تحتوي على القرع بالجملة. 🤩 \n",
+ " \n"
+ ],
+ "metadata": {
+ "id": "VrDwF031avlR"
+ }
+ },
+ {
+ "cell_type": "markdown",
+ "source": [
+ "#### dplyr::case_when()\n",
+ "\n",
+ "**لكن انتظر! هناك شيء آخر يجب القيام به**\n",
+ "\n",
+ "هل لاحظت أن كمية السلة تختلف من صف لآخر؟ تحتاج إلى توحيد التسعير بحيث تعرض السعر لكل سلة، وليس لكل 1 1/9 أو 1/2 سلة. حان الوقت لإجراء بعض العمليات الحسابية لتوحيد ذلك.\n",
+ "\n",
+ "سنستخدم الدالة [`case_when()`](https://dplyr.tidyverse.org/reference/case_when.html) لتعديل عمود السعر بناءً على بعض الشروط. تتيح لك `case_when` كتابة عدة عبارات `if_else()` بشكل متجه.\n"
+ ],
+ "metadata": {
+ "id": "mLpw2jH4a0tx"
+ }
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "source": [
+ "# Convert the price if the Package contains fractional bushel values\n",
+ "new_pumpkins <- new_pumpkins %>% \n",
+ " mutate(Price = case_when(\n",
+ " str_detect(Package, \"1 1/9\") ~ Price/(1 + 1/9),\n",
+ " str_detect(Package, \"1/2\") ~ Price/(1/2),\n",
+ " TRUE ~ Price))\n",
+ "\n",
+ "# View the first few rows of the data\n",
+ "new_pumpkins %>% \n",
+ " slice_head(n = 30)"
+ ],
+ "outputs": [],
+ "metadata": {
+ "id": "P68kLVQmbM6I"
+ }
+ },
+ {
+ "cell_type": "markdown",
+ "source": [
+ "الآن يمكننا تحليل التسعير لكل وحدة بناءً على قياسها بالبوشل. كل هذا البحث حول بوشل القرع يظهر مدى `أهمية` أن `تفهم طبيعة بياناتك`!\n",
+ "\n",
+ "> ✅ وفقًا لموقع [The Spruce Eats](https://www.thespruceeats.com/how-much-is-a-bushel-1389308)، يعتمد وزن البوشل على نوع المنتج، لأنه قياس للحجم. \"على سبيل المثال، من المفترض أن يزن بوشل الطماطم 56 رطلاً... الأوراق والخضروات تشغل مساحة أكبر بوزن أقل، لذا فإن بوشل السبانخ يزن فقط 20 رطلاً.\" الأمر معقد للغاية! لن نشغل أنفسنا بتحويل البوشل إلى أرطال، وبدلاً من ذلك سنسعر بناءً على البوشل. كل هذا البحث حول بوشل القرع يظهر مدى أهمية أن تفهم طبيعة بياناتك!\n",
+ "\n",
+ "> ✅ هل لاحظت أن القرع الذي يُباع بنصف بوشل مكلف جدًا؟ هل يمكنك معرفة السبب؟ تلميح: القرع الصغير أغلى بكثير من الكبير، ربما لأن هناك عددًا أكبر منه في البوشل الواحد، نظرًا للمساحة غير المستخدمة التي يشغلها قرع الفطيرة الكبير المجوف.\n"
+ ],
+ "metadata": {
+ "id": "pS2GNPagbSdb"
+ }
+ },
+ {
+ "cell_type": "markdown",
+ "source": [
+ "الآن أخيرًا، ومن باب المغامرة فقط 💁♀️، دعونا أيضًا ننقل عمود الشهر إلى الموضع الأول، أي \"قبل\" عمود \"Package\".\n",
+ "\n",
+ "يتم استخدام `dplyr::relocate()` لتغيير مواقع الأعمدة.\n"
+ ],
+ "metadata": {
+ "id": "qql1SowfbdnP"
+ }
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "source": [
+ "# Create a new data frame new_pumpkins\n",
+ "new_pumpkins <- new_pumpkins %>% \n",
+ " relocate(Month, .before = Package)\n",
+ "\n",
+ "new_pumpkins %>% \n",
+ " slice_head(n = 7)"
+ ],
+ "outputs": [],
+ "metadata": {
+ "id": "JJ1x6kw8bixF"
+ }
+ },
+ {
+ "cell_type": "markdown",
+ "source": [
+ "عمل رائع! 👌 لديك الآن مجموعة بيانات نظيفة ومرتبة يمكنك استخدامها لبناء نموذج الانحدار الجديد الخاص بك! \n"
+ ],
+ "metadata": {
+ "id": "y8TJ0Za_bn5Y"
+ }
+ },
+ {
+ "cell_type": "markdown",
+ "source": [
+ "## 4. تصور البيانات باستخدام ggplot2\n",
+ "\n",
+ "
\n",
+ " \n",
+ " رسم توضيحي من إعداد داساني ماديبالي\n",
+ "\n",
+ "\n",
+ "\n",
+ "\n",
+ "هناك مقولة *حكيمة* تقول:\n",
+ "\n",
+ "> \"لقد قدم الرسم البياني البسيط معلومات أكثر لعقل محلل البيانات من أي أداة أخرى.\" --- جون توكي\n",
+ "\n",
+ "جزء من دور عالم البيانات هو توضيح جودة وطبيعة البيانات التي يعمل عليها. وللقيام بذلك، يقومون غالبًا بإنشاء تصورات مثيرة للاهتمام، مثل الرسوم البيانية والمخططات التي تعرض جوانب مختلفة من البيانات. وبهذه الطريقة، يمكنهم عرض العلاقات والفجوات بصريًا التي قد يكون من الصعب اكتشافها بطرق أخرى.\n",
+ "\n",
+ "يمكن أن تساعد التصورات أيضًا في تحديد تقنية التعلم الآلي الأنسب للبيانات. على سبيل المثال، إذا كان الرسم البياني النقطي يبدو وكأنه يتبع خطًا، فهذا يشير إلى أن البيانات مرشحة جيدة لتمرين الانحدار الخطي.\n",
+ "\n",
+ "يوفر R العديد من الأنظمة لإنشاء الرسوم البيانية، ولكن [`ggplot2`](https://ggplot2.tidyverse.org/index.html) هو واحد من أكثرها أناقة وتنوعًا. يتيح لك `ggplot2` إنشاء الرسوم البيانية عن طريق **دمج مكونات مستقلة**.\n",
+ "\n",
+ "لنبدأ بمخطط نقطي بسيط لعمودي Price وMonth.\n",
+ "\n",
+ "في هذه الحالة، سنبدأ بـ [`ggplot()`](https://ggplot2.tidyverse.org/reference/ggplot.html)، ونوفر مجموعة بيانات وتعيينًا جماليًا (باستخدام [`aes()`](https://ggplot2.tidyverse.org/reference/aes.html))، ثم نضيف طبقات (مثل [`geom_point()`](https://ggplot2.tidyverse.org/reference/geom_point.html)) لإنشاء المخططات النقطية.\n"
+ ],
+ "metadata": {
+ "id": "mYSH6-EtbvNa"
+ }
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "source": [
+ "# Set a theme for the plots\n",
+ "theme_set(theme_light())\n",
+ "\n",
+ "# Create a scatter plot\n",
+ "p <- ggplot(data = new_pumpkins, aes(x = Price, y = Month))\n",
+ "p + geom_point()"
+ ],
+ "outputs": [],
+ "metadata": {
+ "id": "g2YjnGeOcLo4"
+ }
+ },
+ {
+ "cell_type": "markdown",
+ "source": [
+ "هل هذا الرسم البياني مفيد 🤷؟ هل هناك شيء فيه يثير دهشتك؟\n",
+ "\n",
+ "ليس مفيدًا بشكل خاص لأنه يعرض بياناتك فقط كتناثر من النقاط في شهر معين. \n",
+ " \n"
+ ],
+ "metadata": {
+ "id": "Ml7SDCLQcPvE"
+ }
+ },
+ {
+ "cell_type": "markdown",
+ "source": [
+ "### **كيف نجعلها مفيدة؟**\n",
+ "\n",
+ "لجعل الرسوم البيانية تعرض بيانات مفيدة، عادةً ما تحتاج إلى تجميع البيانات بطريقة ما. على سبيل المثال، في حالتنا، العثور على متوسط سعر القرع لكل شهر سيقدم المزيد من الأفكار حول الأنماط الأساسية في بياناتنا. هذا يقودنا إلى نظرة سريعة أخرى على **dplyr**:\n",
+ "\n",
+ "#### `dplyr::group_by() %>% summarize()`\n",
+ "\n",
+ "يمكن حساب التجميع المُجمّع في R بسهولة باستخدام\n",
+ "\n",
+ "`dplyr::group_by() %>% summarize()`\n",
+ "\n",
+ "- `dplyr::group_by()` يغير وحدة التحليل من مجموعة البيانات الكاملة إلى مجموعات فردية مثل كل شهر.\n",
+ "\n",
+ "- `dplyr::summarize()` ينشئ إطار بيانات جديد يحتوي على عمود لكل متغير تجميعي وعمود لكل إحصائية تلخيصية قمت بتحديدها.\n",
+ "\n",
+ "على سبيل المثال، يمكننا استخدام `dplyr::group_by() %>% summarize()` لتجميع القرع في مجموعات بناءً على أعمدة **الشهر** ثم العثور على **متوسط السعر** لكل شهر.\n"
+ ],
+ "metadata": {
+ "id": "jMakvJZIcVkh"
+ }
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "source": [
+ "# Find the average price of pumpkins per month\r\n",
+ "new_pumpkins %>%\r\n",
+ " group_by(Month) %>% \r\n",
+ " summarise(mean_price = mean(Price))"
+ ],
+ "outputs": [],
+ "metadata": {
+ "id": "6kVSUa2Bcilf"
+ }
+ },
+ {
+ "cell_type": "markdown",
+ "source": [
+ "موجز!✨\n",
+ "\n",
+ "الميزات التصنيفية مثل الأشهر يتم تمثيلها بشكل أفضل باستخدام مخطط الأعمدة 📊. الطبقات المسؤولة عن مخططات الأعمدة هي `geom_bar()` و `geom_col()`. راجع `?geom_bar` لمعرفة المزيد.\n",
+ "\n",
+ "لنقم بإنشاء واحد!\n"
+ ],
+ "metadata": {
+ "id": "Kds48GUBcj3W"
+ }
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "source": [
+ "# Find the average price of pumpkins per month then plot a bar chart\r\n",
+ "new_pumpkins %>%\r\n",
+ " group_by(Month) %>% \r\n",
+ " summarise(mean_price = mean(Price)) %>% \r\n",
+ " ggplot(aes(x = Month, y = mean_price)) +\r\n",
+ " geom_col(fill = \"midnightblue\", alpha = 0.7) +\r\n",
+ " ylab(\"Pumpkin Price\")"
+ ],
+ "outputs": [],
+ "metadata": {
+ "id": "VNbU1S3BcrxO"
+ }
+ },
+ {
+ "cell_type": "markdown",
+ "source": [
+ "🤩🤩 هذه طريقة أكثر فائدة لتصور البيانات! يبدو أنها تشير إلى أن أعلى سعر للقرع يحدث في شهري سبتمبر وأكتوبر. هل يتوافق ذلك مع توقعاتك؟ لماذا أو لماذا لا؟\n",
+ "\n",
+ "تهانينا على إنهاء الدرس الثاني 👏! لقد قمت بتحضير بياناتك لبناء النموذج، ثم اكتشفت المزيد من الأفكار باستخدام التصورات!\n"
+ ],
+ "metadata": {
+ "id": "zDm0VOzzcuzR"
+ }
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "\n---\n\n**إخلاء المسؤولية**: \nتمت ترجمة هذا المستند باستخدام خدمة الترجمة الآلية [Co-op Translator](https://github.com/Azure/co-op-translator). بينما نسعى لتحقيق الدقة، يرجى العلم أن الترجمات الآلية قد تحتوي على أخطاء أو معلومات غير دقيقة. يجب اعتبار المستند الأصلي بلغته الأصلية هو المصدر الموثوق. للحصول على معلومات حساسة أو هامة، يُوصى بالاستعانة بترجمة بشرية احترافية. نحن غير مسؤولين عن أي سوء فهم أو تفسيرات خاطئة تنشأ عن استخدام هذه الترجمة.\n"
+ ]
+ }
+ ]
+}
\ No newline at end of file
diff --git a/translations/ar/2-Regression/2-Data/solution/notebook.ipynb b/translations/ar/2-Regression/2-Data/solution/notebook.ipynb
new file mode 100644
index 000000000..83e96f965
--- /dev/null
+++ b/translations/ar/2-Regression/2-Data/solution/notebook.ipynb
@@ -0,0 +1,439 @@
+{
+ "cells": [
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "## الانحدار الخطي للقرع - الدرس 2\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 2,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "
\n",
+ "\n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
\n",
+ "
City Name
\n",
+ "
Type
\n",
+ "
Package
\n",
+ "
Variety
\n",
+ "
Sub Variety
\n",
+ "
Grade
\n",
+ "
Date
\n",
+ "
Low Price
\n",
+ "
High Price
\n",
+ "
Mostly Low
\n",
+ "
...
\n",
+ "
Unit of Sale
\n",
+ "
Quality
\n",
+ "
Condition
\n",
+ "
Appearance
\n",
+ "
Storage
\n",
+ "
Crop
\n",
+ "
Repack
\n",
+ "
Trans Mode
\n",
+ "
Unnamed: 24
\n",
+ "
Unnamed: 25
\n",
+ "
\n",
+ " \n",
+ " \n",
+ "
\n",
+ "
70
\n",
+ "
BALTIMORE
\n",
+ "
NaN
\n",
+ "
1 1/9 bushel cartons
\n",
+ "
PIE TYPE
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
9/24/16
\n",
+ "
15.0
\n",
+ "
15.0
\n",
+ "
15.0
\n",
+ "
...
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
N
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
\n",
+ "
\n",
+ "
71
\n",
+ "
BALTIMORE
\n",
+ "
NaN
\n",
+ "
1 1/9 bushel cartons
\n",
+ "
PIE TYPE
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
9/24/16
\n",
+ "
18.0
\n",
+ "
18.0
\n",
+ "
18.0
\n",
+ "
...
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
N
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
\n",
+ "
\n",
+ "
72
\n",
+ "
BALTIMORE
\n",
+ "
NaN
\n",
+ "
1 1/9 bushel cartons
\n",
+ "
PIE TYPE
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
10/1/16
\n",
+ "
18.0
\n",
+ "
18.0
\n",
+ "
18.0
\n",
+ "
...
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
N
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
\n",
+ "
\n",
+ "
73
\n",
+ "
BALTIMORE
\n",
+ "
NaN
\n",
+ "
1 1/9 bushel cartons
\n",
+ "
PIE TYPE
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
10/1/16
\n",
+ "
17.0
\n",
+ "
17.0
\n",
+ "
17.0
\n",
+ "
...
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
N
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
\n",
+ "
\n",
+ "
74
\n",
+ "
BALTIMORE
\n",
+ "
NaN
\n",
+ "
1 1/9 bushel cartons
\n",
+ "
PIE TYPE
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
10/8/16
\n",
+ "
15.0
\n",
+ "
15.0
\n",
+ "
15.0
\n",
+ "
...
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
N
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
5 rows × 26 columns
\n",
+ "
"
+ ],
+ "text/plain": [
+ " City Name Type Package Variety Sub Variety Grade \\\n",
+ "70 BALTIMORE NaN 1 1/9 bushel cartons PIE TYPE NaN NaN \n",
+ "71 BALTIMORE NaN 1 1/9 bushel cartons PIE TYPE NaN NaN \n",
+ "72 BALTIMORE NaN 1 1/9 bushel cartons PIE TYPE NaN NaN \n",
+ "73 BALTIMORE NaN 1 1/9 bushel cartons PIE TYPE NaN NaN \n",
+ "74 BALTIMORE NaN 1 1/9 bushel cartons PIE TYPE NaN NaN \n",
+ "\n",
+ " Date Low Price High Price Mostly Low ... Unit of Sale Quality \\\n",
+ "70 9/24/16 15.0 15.0 15.0 ... NaN NaN \n",
+ "71 9/24/16 18.0 18.0 18.0 ... NaN NaN \n",
+ "72 10/1/16 18.0 18.0 18.0 ... NaN NaN \n",
+ "73 10/1/16 17.0 17.0 17.0 ... NaN NaN \n",
+ "74 10/8/16 15.0 15.0 15.0 ... NaN NaN \n",
+ "\n",
+ " Condition Appearance Storage Crop Repack Trans Mode Unnamed: 24 \\\n",
+ "70 NaN NaN NaN NaN N NaN NaN \n",
+ "71 NaN NaN NaN NaN N NaN NaN \n",
+ "72 NaN NaN NaN NaN N NaN NaN \n",
+ "73 NaN NaN NaN NaN N NaN NaN \n",
+ "74 NaN NaN NaN NaN N NaN NaN \n",
+ "\n",
+ " Unnamed: 25 \n",
+ "70 NaN \n",
+ "71 NaN \n",
+ "72 NaN \n",
+ "73 NaN \n",
+ "74 NaN \n",
+ "\n",
+ "[5 rows x 26 columns]"
+ ]
+ },
+ "execution_count": 2,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "import pandas as pd\n",
+ "import matplotlib.pyplot as plt\n",
+ "pumpkins = pd.read_csv('../../data/US-pumpkins.csv')\n",
+ "\n",
+ "pumpkins = pumpkins[pumpkins['Package'].str.contains('bushel', case=True, regex=True)]\n",
+ "\n",
+ "pumpkins.head()"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 3,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "City Name 0\n",
+ "Type 406\n",
+ "Package 0\n",
+ "Variety 0\n",
+ "Sub Variety 167\n",
+ "Grade 415\n",
+ "Date 0\n",
+ "Low Price 0\n",
+ "High Price 0\n",
+ "Mostly Low 24\n",
+ "Mostly High 24\n",
+ "Origin 0\n",
+ "Origin District 396\n",
+ "Item Size 114\n",
+ "Color 145\n",
+ "Environment 415\n",
+ "Unit of Sale 404\n",
+ "Quality 415\n",
+ "Condition 415\n",
+ "Appearance 415\n",
+ "Storage 415\n",
+ "Crop 415\n",
+ "Repack 0\n",
+ "Trans Mode 415\n",
+ "Unnamed: 24 415\n",
+ "Unnamed: 25 391\n",
+ "dtype: int64"
+ ]
+ },
+ "execution_count": 3,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "pumpkins.isnull().sum()"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 4,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ " Month Package Low Price High Price Price\n",
+ "70 9 1 1/9 bushel cartons 15.00 15.0 13.50\n",
+ "71 9 1 1/9 bushel cartons 18.00 18.0 16.20\n",
+ "72 10 1 1/9 bushel cartons 18.00 18.0 16.20\n",
+ "73 10 1 1/9 bushel cartons 17.00 17.0 15.30\n",
+ "74 10 1 1/9 bushel cartons 15.00 15.0 13.50\n",
+ "... ... ... ... ... ...\n",
+ "1738 9 1/2 bushel cartons 15.00 15.0 30.00\n",
+ "1739 9 1/2 bushel cartons 13.75 15.0 28.75\n",
+ "1740 9 1/2 bushel cartons 10.75 15.0 25.75\n",
+ "1741 9 1/2 bushel cartons 12.00 12.0 24.00\n",
+ "1742 9 1/2 bushel cartons 12.00 12.0 24.00\n",
+ "\n",
+ "[415 rows x 5 columns]\n"
+ ]
+ }
+ ],
+ "source": [
+ "\n",
+ "# A set of new columns for a new dataframe. Filter out nonmatching columns\n",
+ "columns_to_select = ['Package', 'Low Price', 'High Price', 'Date']\n",
+ "pumpkins = pumpkins.loc[:, columns_to_select]\n",
+ "\n",
+ "# Get an average between low and high price for the base pumpkin price\n",
+ "price = (pumpkins['Low Price'] + pumpkins['High Price']) / 2\n",
+ "\n",
+ "# Convert the date to its month only\n",
+ "month = pd.DatetimeIndex(pumpkins['Date']).month\n",
+ "\n",
+ "# Create a new dataframe with this basic data\n",
+ "new_pumpkins = pd.DataFrame({'Month': month, 'Package': pumpkins['Package'], 'Low Price': pumpkins['Low Price'],'High Price': pumpkins['High Price'], 'Price': price})\n",
+ "\n",
+ "# Convert the price if the Package contains fractional bushel values\n",
+ "new_pumpkins.loc[new_pumpkins['Package'].str.contains('1 1/9'), 'Price'] = price/(1 + 1/9)\n",
+ "\n",
+ "new_pumpkins.loc[new_pumpkins['Package'].str.contains('1/2'), 'Price'] = price/(1/2)\n",
+ "\n",
+ "print(new_pumpkins)\n",
+ "\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 5,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "image/png": "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",
+ "text/plain": [
+ "
"
+ ]
+ },
+ "metadata": {
+ "needs_background": "light"
+ },
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "\n",
+ "new_pumpkins.groupby(['Month'])['Price'].mean().plot(kind='bar')\n",
+ "plt.ylabel(\"Pumpkin Price\")"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": []
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "\n---\n\n**إخلاء المسؤولية**: \nتم ترجمة هذا المستند باستخدام خدمة الترجمة الآلية [Co-op Translator](https://github.com/Azure/co-op-translator). على الرغم من أننا نسعى لتحقيق الدقة، يرجى العلم أن الترجمات الآلية قد تحتوي على أخطاء أو معلومات غير دقيقة. يجب اعتبار المستند الأصلي بلغته الأصلية هو المصدر الموثوق. للحصول على معلومات حساسة أو هامة، يُوصى بالاستعانة بترجمة بشرية احترافية. نحن غير مسؤولين عن أي سوء فهم أو تفسيرات خاطئة تنشأ عن استخدام هذه الترجمة.\n"
+ ]
+ }
+ ],
+ "metadata": {
+ "interpreter": {
+ "hash": "31f2aee4e71d21fbe5cf8b01ff0e069b9275f58929596ceb00d14d90e3e16cd6"
+ },
+ "kernelspec": {
+ "display_name": "Python 3.7.0 64-bit ('3.7')",
+ "language": "python",
+ "name": "python3"
+ },
+ "language_info": {
+ "codemirror_mode": {
+ "name": "ipython",
+ "version": 3
+ },
+ "file_extension": ".py",
+ "mimetype": "text/x-python",
+ "name": "python",
+ "nbconvert_exporter": "python",
+ "pygments_lexer": "ipython3",
+ "version": "3.11.1"
+ },
+ "metadata": {
+ "interpreter": {
+ "hash": "70b38d7a306a849643e446cd70466270a13445e5987dfa1344ef2b127438fa4d"
+ }
+ },
+ "orig_nbformat": 2,
+ "coopTranslator": {
+ "original_hash": "95726f0b8283628d5356a4f8eb8b4b76",
+ "translation_date": "2025-08-29T14:58:11+00:00",
+ "source_file": "2-Regression/2-Data/solution/notebook.ipynb",
+ "language_code": "ar"
+ }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 2
+}
\ No newline at end of file
diff --git a/translations/ar/2-Regression/3-Linear/README.md b/translations/ar/2-Regression/3-Linear/README.md
new file mode 100644
index 000000000..c45bad042
--- /dev/null
+++ b/translations/ar/2-Regression/3-Linear/README.md
@@ -0,0 +1,381 @@
+
+# بناء نموذج انحدار باستخدام Scikit-learn: أربعة أنواع من الانحدار
+
+
+> مخطط معلوماتي من إعداد [Dasani Madipalli](https://twitter.com/dasani_decoded)
+## [اختبار ما قبل المحاضرة](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/13/)
+
+> ### [هذا الدرس متوفر بلغة R!](../../../../2-Regression/3-Linear/solution/R/lesson_3.html)
+### المقدمة
+
+حتى الآن، قمت باستكشاف مفهوم الانحدار باستخدام بيانات عينة مأخوذة من مجموعة بيانات تسعير القرع التي سنستخدمها طوال هذا الدرس. كما قمت بتصورها باستخدام مكتبة Matplotlib.
+
+الآن أنت مستعد للتعمق أكثر في الانحدار لتعلم الآلة. بينما يسمح التصور بفهم البيانات، فإن القوة الحقيقية لتعلم الآلة تأتي من _تدريب النماذج_. يتم تدريب النماذج على بيانات تاريخية لالتقاط العلاقات بين البيانات تلقائيًا، مما يسمح لك بالتنبؤ بالنتائج لبيانات جديدة لم يرها النموذج من قبل.
+
+في هذا الدرس، ستتعلم المزيد عن نوعين من الانحدار: _الانحدار الخطي الأساسي_ و_الانحدار متعدد الحدود_، بالإضافة إلى بعض الرياضيات التي تدعم هذه التقنيات. ستتيح لنا هذه النماذج التنبؤ بأسعار القرع بناءً على بيانات إدخال مختلفة.
+
+[](https://youtu.be/CRxFT8oTDMg "تعلم الآلة للمبتدئين - فهم الانحدار الخطي")
+
+> 🎥 انقر على الصورة أعلاه لمشاهدة فيديو قصير عن الانحدار الخطي.
+
+> خلال هذا المنهج، نفترض معرفة رياضية بسيطة، ونسعى لجعلها متاحة للطلاب القادمين من مجالات أخرى، لذا انتبه للملاحظات، 🧮 التنبيهات، الرسوم البيانية، وأدوات التعلم الأخرى التي تساعد على الفهم.
+
+### المتطلبات الأساسية
+
+يجب أن تكون الآن على دراية ببنية بيانات القرع التي نقوم بفحصها. يمكنك العثور عليها محملة مسبقًا ومنظفة مسبقًا في ملف _notebook.ipynb_ الخاص بهذا الدرس. في الملف، يتم عرض سعر القرع لكل سلة في إطار بيانات جديد. تأكد من أنك تستطيع تشغيل هذه الدفاتر في النواة الخاصة بـ Visual Studio Code.
+
+### التحضير
+
+كتذكير، تقوم بتحميل هذه البيانات لطرح أسئلة عليها.
+
+- متى يكون أفضل وقت لشراء القرع؟
+- ما السعر المتوقع لصندوق من القرع الصغير؟
+- هل يجب أن أشتريه في سلال نصف البوشل أم في صناديق 1 1/9 بوشل؟
+دعنا نستمر في استكشاف هذه البيانات.
+
+في الدرس السابق، قمت بإنشاء إطار بيانات باستخدام Pandas وملأته بجزء من مجموعة البيانات الأصلية، موحدًا التسعير حسب البوشل. ومع ذلك، من خلال القيام بذلك، تمكنت فقط من جمع حوالي 400 نقطة بيانات وللأشهر الخريفية فقط.
+
+ألقِ نظرة على البيانات المحملة مسبقًا في دفتر الملاحظات المرافق لهذا الدرس. البيانات محملة مسبقًا وتم رسم مخطط مبعثر أولي لإظهار بيانات الأشهر. ربما يمكننا الحصول على مزيد من التفاصيل حول طبيعة البيانات من خلال تنظيفها أكثر.
+
+## خط الانحدار الخطي
+
+كما تعلمت في الدرس الأول، الهدف من تمرين الانحدار الخطي هو رسم خط لـ:
+
+- **إظهار العلاقات بين المتغيرات**. إظهار العلاقة بين المتغيرات.
+- **إجراء التنبؤات**. إجراء تنبؤات دقيقة حول مكان وقوع نقطة بيانات جديدة بالنسبة لذلك الخط.
+
+من الشائع استخدام **انحدار المربعات الصغرى** لرسم هذا النوع من الخطوط. يشير مصطلح "المربعات الصغرى" إلى أن جميع نقاط البيانات المحيطة بخط الانحدار يتم تربيعها ثم جمعها. من الناحية المثالية، يكون المجموع النهائي صغيرًا قدر الإمكان، لأننا نريد عددًا منخفضًا من الأخطاء، أو `المربعات الصغرى`.
+
+نقوم بذلك لأننا نريد نمذجة خط يحتوي على أقل مسافة تراكمية من جميع نقاط البيانات لدينا. كما نقوم بتربيع المصطلحات قبل جمعها لأننا نهتم بحجمها بدلاً من اتجاهها.
+
+> **🧮 أرني الرياضيات**
+>
+> يمكن التعبير عن هذا الخط، المسمى _خط أفضل تطابق_، بواسطة [معادلة](https://en.wikipedia.org/wiki/Simple_linear_regression):
+>
+> ```
+> Y = a + bX
+> ```
+>
+> `X` هو "المتغير التوضيحي". `Y` هو "المتغير التابع". ميل الخط هو `b` و`a` هو نقطة تقاطع المحور Y، والتي تشير إلى قيمة `Y` عندما يكون `X = 0`.
+>
+>
+>
+> أولاً، احسب الميل `b`. مخطط معلوماتي من إعداد [Jen Looper](https://twitter.com/jenlooper)
+>
+> بعبارة أخرى، وبالإشارة إلى السؤال الأصلي لبيانات القرع: "توقع سعر القرع لكل بوشل حسب الشهر"، سيكون `X` يشير إلى السعر و`Y` يشير إلى شهر البيع.
+>
+>
+>
+> احسب قيمة Y. إذا كنت تدفع حوالي 4 دولارات، فلا بد أن يكون أبريل! مخطط معلوماتي من إعداد [Jen Looper](https://twitter.com/jenlooper)
+>
+> يجب أن توضح الرياضيات التي تحسب الخط ميل الخط، والذي يعتمد أيضًا على نقطة التقاطع، أو مكان وجود `Y` عندما يكون `X = 0`.
+>
+> يمكنك مشاهدة طريقة الحساب لهذه القيم على موقع [Math is Fun](https://www.mathsisfun.com/data/least-squares-regression.html). قم أيضًا بزيارة [آلة حاسبة المربعات الصغرى](https://www.mathsisfun.com/data/least-squares-calculator.html) لمشاهدة كيفية تأثير قيم الأرقام على الخط.
+
+## الارتباط
+
+مصطلح آخر يجب فهمه هو **معامل الارتباط** بين المتغيرين X وY المعطى. باستخدام مخطط مبعثر، يمكنك بسرعة تصور هذا المعامل. إذا كانت النقاط المبعثرة على المخطط تشكل خطًا مرتبًا، فإن الارتباط يكون عاليًا، ولكن إذا كانت النقاط مبعثرة في كل مكان بين X وY، فإن الارتباط يكون منخفضًا.
+
+نموذج الانحدار الخطي الجيد سيكون نموذجًا يحتوي على معامل ارتباط عالٍ (أقرب إلى 1 من 0) باستخدام طريقة انحدار المربعات الصغرى مع خط الانحدار.
+
+✅ قم بتشغيل دفتر الملاحظات المرافق لهذا الدرس وانظر إلى المخطط المبعثر بين الشهر والسعر. هل تبدو البيانات التي تربط الشهر بالسعر لمبيعات القرع ذات ارتباط عالٍ أم منخفض، وفقًا لتفسيرك البصري للمخطط المبعثر؟ هل يتغير ذلك إذا استخدمت مقياسًا أكثر دقة بدلاً من `الشهر`، مثل *يوم السنة* (أي عدد الأيام منذ بداية السنة)؟
+
+في الكود أدناه، سنفترض أننا قمنا بتنظيف البيانات، وحصلنا على إطار بيانات يسمى `new_pumpkins`، مشابه لما يلي:
+
+ID | Month | DayOfYear | Variety | City | Package | Low Price | High Price | Price
+---|-------|-----------|---------|------|---------|-----------|------------|-------
+70 | 9 | 267 | PIE TYPE | BALTIMORE | 1 1/9 bushel cartons | 15.0 | 15.0 | 13.636364
+71 | 9 | 267 | PIE TYPE | BALTIMORE | 1 1/9 bushel cartons | 18.0 | 18.0 | 16.363636
+72 | 10 | 274 | PIE TYPE | BALTIMORE | 1 1/9 bushel cartons | 18.0 | 18.0 | 16.363636
+73 | 10 | 274 | PIE TYPE | BALTIMORE | 1 1/9 bushel cartons | 17.0 | 17.0 | 15.454545
+74 | 10 | 281 | PIE TYPE | BALTIMORE | 1 1/9 bushel cartons | 15.0 | 15.0 | 13.636364
+
+> الكود لتنظيف البيانات متوفر في [`notebook.ipynb`](notebook.ipynb). قمنا بتنفيذ نفس خطوات التنظيف كما في الدرس السابق، وحسبنا عمود `DayOfYear` باستخدام التعبير التالي:
+
+```python
+day_of_year = pd.to_datetime(pumpkins['Date']).apply(lambda dt: (dt-datetime(dt.year,1,1)).days)
+```
+
+الآن بعد أن أصبحت لديك فكرة عن الرياضيات وراء الانحدار الخطي، دعنا ننشئ نموذج انحدار لنرى ما إذا كان بإمكاننا التنبؤ بأي حزمة من القرع ستحتوي على أفضل أسعار القرع. قد يرغب شخص يشتري القرع لمزرعة قرع في العطلات في الحصول على هذه المعلومات لتحسين مشترياته من حزم القرع للمزرعة.
+
+## البحث عن الارتباط
+
+[](https://youtu.be/uoRq-lW2eQo "تعلم الآلة للمبتدئين - البحث عن الارتباط: المفتاح للانحدار الخطي")
+
+> 🎥 انقر على الصورة أعلاه لمشاهدة فيديو قصير عن الارتباط.
+
+من الدرس السابق، ربما لاحظت أن متوسط السعر للأشهر المختلفة يبدو كالتالي:
+
+
+
+يشير هذا إلى أنه قد يكون هناك ارتباط، ويمكننا محاولة تدريب نموذج انحدار خطي للتنبؤ بالعلاقة بين `الشهر` و`السعر`، أو بين `يوم السنة` و`السعر`. هنا المخطط المبعثر الذي يظهر العلاقة الأخيرة:
+
+
+
+دعنا نرى ما إذا كان هناك ارتباط باستخدام دالة `corr`:
+
+```python
+print(new_pumpkins['Month'].corr(new_pumpkins['Price']))
+print(new_pumpkins['DayOfYear'].corr(new_pumpkins['Price']))
+```
+
+يبدو أن الارتباط صغير جدًا، -0.15 بالنسبة لـ `الشهر` و-0.17 بالنسبة لـ `يوم الشهر`، ولكن قد تكون هناك علاقة مهمة أخرى. يبدو أن هناك مجموعات مختلفة من الأسعار تتوافق مع أنواع مختلفة من القرع. لتأكيد هذه الفرضية، دعنا نرسم كل فئة من القرع بلون مختلف. عن طريق تمرير معامل `ax` إلى دالة الرسم المبعثر، يمكننا رسم جميع النقاط على نفس الرسم البياني:
+
+```python
+ax=None
+colors = ['red','blue','green','yellow']
+for i,var in enumerate(new_pumpkins['Variety'].unique()):
+ df = new_pumpkins[new_pumpkins['Variety']==var]
+ ax = df.plot.scatter('DayOfYear','Price',ax=ax,c=colors[i],label=var)
+```
+
+
+
+تشير تحقيقاتنا إلى أن النوع له تأثير أكبر على السعر الإجمالي من تاريخ البيع الفعلي. يمكننا رؤية ذلك باستخدام رسم بياني شريطي:
+
+```python
+new_pumpkins.groupby('Variety')['Price'].mean().plot(kind='bar')
+```
+
+
+
+دعنا نركز في الوقت الحالي فقط على نوع واحد من القرع، وهو "نوع الفطيرة"، ونرى ما هو تأثير التاريخ على السعر:
+
+```python
+pie_pumpkins = new_pumpkins[new_pumpkins['Variety']=='PIE TYPE']
+pie_pumpkins.plot.scatter('DayOfYear','Price')
+```
+
+
+إذا قمنا الآن بحساب الارتباط بين `السعر` و`يوم السنة` باستخدام دالة `corr`، سنحصل على شيء مثل `-0.27` - مما يعني أن تدريب نموذج تنبؤي يبدو منطقيًا.
+
+> قبل تدريب نموذج الانحدار الخطي، من المهم التأكد من أن بياناتنا نظيفة. لا يعمل الانحدار الخطي بشكل جيد مع القيم المفقودة، لذا من المنطقي التخلص من جميع الخلايا الفارغة:
+
+```python
+pie_pumpkins.dropna(inplace=True)
+pie_pumpkins.info()
+```
+
+نهج آخر سيكون ملء تلك القيم الفارغة بالقيم المتوسطة من العمود المقابل.
+
+## الانحدار الخطي البسيط
+
+[](https://youtu.be/e4c_UP2fSjg "تعلم الآلة للمبتدئين - الانحدار الخطي ومتعدد الحدود باستخدام Scikit-learn")
+
+> 🎥 انقر على الصورة أعلاه لمشاهدة فيديو قصير عن الانحدار الخطي ومتعدد الحدود.
+
+لتدريب نموذج الانحدار الخطي الخاص بنا، سنستخدم مكتبة **Scikit-learn**.
+
+```python
+from sklearn.linear_model import LinearRegression
+from sklearn.metrics import mean_squared_error
+from sklearn.model_selection import train_test_split
+```
+
+نبدأ بفصل قيم الإدخال (الميزات) والنتائج المتوقعة (التسمية) في مصفوفات numpy منفصلة:
+
+```python
+X = pie_pumpkins['DayOfYear'].to_numpy().reshape(-1,1)
+y = pie_pumpkins['Price']
+```
+
+> لاحظ أننا اضطررنا إلى تنفيذ `reshape` على بيانات الإدخال لكي يفهمها حزمة الانحدار الخطي بشكل صحيح. يتوقع الانحدار الخطي مصفوفة ثنائية الأبعاد كمدخل، حيث يمثل كل صف من المصفوفة متجهًا لميزات الإدخال. في حالتنا، بما أن لدينا مدخلًا واحدًا فقط - نحتاج إلى مصفوفة ذات شكل N×1، حيث N هو حجم مجموعة البيانات.
+
+ثم، نحتاج إلى تقسيم البيانات إلى مجموعات تدريب واختبار، حتى نتمكن من التحقق من صحة النموذج بعد التدريب:
+
+```python
+X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0)
+```
+
+أخيرًا، تدريب نموذج الانحدار الخطي الفعلي يستغرق سطرين فقط من الكود. نقوم بتعريف كائن `LinearRegression`، ونقوم بتدريبه على بياناتنا باستخدام دالة `fit`:
+
+```python
+lin_reg = LinearRegression()
+lin_reg.fit(X_train,y_train)
+```
+
+يحتوي كائن `LinearRegression` بعد عملية `fit` على جميع معاملات الانحدار، والتي يمكن الوصول إليها باستخدام خاصية `.coef_`. في حالتنا، هناك معامل واحد فقط، والذي يجب أن يكون حوالي `-0.017`. هذا يعني أن الأسعار تبدو وكأنها تنخفض قليلاً مع مرور الوقت، ولكن ليس كثيرًا، حوالي 2 سنت في اليوم. يمكننا أيضًا الوصول إلى نقطة التقاطع مع المحور Y باستخدام `lin_reg.intercept_` - ستكون حوالي `21` في حالتنا، مما يشير إلى السعر في بداية السنة.
+
+لرؤية مدى دقة النموذج الخاص بنا، يمكننا التنبؤ بالأسعار على مجموعة بيانات الاختبار، ثم قياس مدى قرب توقعاتنا من القيم المتوقعة. يمكن القيام بذلك باستخدام مقياس متوسط مربع الخطأ (MSE)، وهو متوسط جميع الفروقات المربعة بين القيمة المتوقعة والقيمة المتنبأ بها.
+
+```python
+pred = lin_reg.predict(X_test)
+
+mse = np.sqrt(mean_squared_error(y_test,pred))
+print(f'Mean error: {mse:3.3} ({mse/np.mean(pred)*100:3.3}%)')
+```
+يبدو أن الخطأ لدينا يتمحور حول نقطتين، أي حوالي 17%. ليس جيدًا جدًا. مؤشر آخر لجودة النموذج هو **معامل التحديد**، والذي يمكن الحصول عليه بهذه الطريقة:
+
+```python
+score = lin_reg.score(X_train,y_train)
+print('Model determination: ', score)
+```
+إذا كانت القيمة 0، فهذا يعني أن النموذج لا يأخذ بيانات الإدخال في الاعتبار، ويعمل كـ *أسوأ متنبئ خطي*، وهو ببساطة متوسط القيمة للنتيجة. أما إذا كانت القيمة 1، فهذا يعني أننا يمكننا التنبؤ بجميع النتائج المتوقعة بشكل مثالي. في حالتنا، معامل التحديد حوالي 0.06، وهو منخفض جدًا.
+
+يمكننا أيضًا رسم بيانات الاختبار مع خط الانحدار لنرى بشكل أفضل كيف يعمل الانحدار في حالتنا:
+
+```python
+plt.scatter(X_test,y_test)
+plt.plot(X_test,pred)
+```
+
+
+
+## الانحدار متعدد الحدود
+
+نوع آخر من الانحدار الخطي هو الانحدار متعدد الحدود. في بعض الأحيان تكون هناك علاقة خطية بين المتغيرات - مثل كلما زاد حجم اليقطين، زاد السعر - ولكن في أحيان أخرى لا يمكن رسم هذه العلاقات كطائرة أو خط مستقيم.
+
+✅ إليك [بعض الأمثلة](https://online.stat.psu.edu/stat501/lesson/9/9.8) على البيانات التي يمكن استخدام الانحدار متعدد الحدود معها.
+
+ألقِ نظرة أخرى على العلاقة بين التاريخ والسعر. هل يبدو هذا الرسم البياني وكأنه يجب تحليله بخط مستقيم؟ ألا يمكن أن تتقلب الأسعار؟ في هذه الحالة، يمكنك تجربة الانحدار متعدد الحدود.
+
+✅ الحدوديات هي تعبيرات رياضية قد تتكون من متغير واحد أو أكثر ومعاملات.
+
+الانحدار متعدد الحدود ينشئ خطًا منحنيًا ليتناسب بشكل أفضل مع البيانات غير الخطية. في حالتنا، إذا قمنا بإضافة متغير `DayOfYear` المربع إلى بيانات الإدخال، يجب أن نتمكن من ملاءمة بياناتنا بمنحنى شبه مكافئ، والذي سيكون له حد أدنى في نقطة معينة خلال السنة.
+
+تتضمن مكتبة Scikit-learn واجهة [API للأنابيب](https://scikit-learn.org/stable/modules/generated/sklearn.pipeline.make_pipeline.html?highlight=pipeline#sklearn.pipeline.make_pipeline) لتجميع خطوات معالجة البيانات المختلفة معًا. **الأنابيب** هي سلسلة من **المقدّرين**. في حالتنا، سننشئ أنبوبًا يضيف أولاً ميزات متعددة الحدود إلى النموذج، ثم يدرب الانحدار:
+
+```python
+from sklearn.preprocessing import PolynomialFeatures
+from sklearn.pipeline import make_pipeline
+
+pipeline = make_pipeline(PolynomialFeatures(2), LinearRegression())
+
+pipeline.fit(X_train,y_train)
+```
+
+استخدام `PolynomialFeatures(2)` يعني أننا سنضيف جميع الحدوديات من الدرجة الثانية من بيانات الإدخال. في حالتنا، هذا يعني فقط `DayOfYear`2، ولكن إذا كان لدينا متغيران مدخلان X و Y، فسيتم إضافة X2، XY و Y2. يمكننا أيضًا استخدام حدوديات من درجات أعلى إذا أردنا.
+
+يمكن استخدام الأنابيب بنفس الطريقة التي يتم بها استخدام كائن `LinearRegression` الأصلي، أي يمكننا `fit` الأنبوب، ثم استخدام `predict` للحصول على نتائج التنبؤ. إليك الرسم البياني الذي يظهر بيانات الاختبار ومنحنى التقريب:
+
+
+
+باستخدام الانحدار متعدد الحدود، يمكننا الحصول على MSE أقل قليلاً ومعامل تحديد أعلى، ولكن ليس بشكل كبير. يجب أن نأخذ في الاعتبار ميزات أخرى!
+
+> يمكنك أن ترى أن أدنى أسعار اليقطين تُلاحظ في مكان ما حول عيد الهالوين. كيف يمكنك تفسير ذلك؟
+
+🎃 تهانينا، لقد أنشأت نموذجًا يمكنه المساعدة في التنبؤ بسعر اليقطين الخاص بالفطائر. ربما يمكنك تكرار نفس الإجراء لجميع أنواع اليقطين، ولكن سيكون ذلك مرهقًا. دعنا نتعلم الآن كيفية أخذ نوع اليقطين في الاعتبار في نموذجنا!
+
+## الميزات الفئوية
+
+في العالم المثالي، نريد أن نكون قادرين على التنبؤ بالأسعار لأنواع مختلفة من اليقطين باستخدام نفس النموذج. ومع ذلك، فإن العمود `Variety` يختلف قليلاً عن الأعمدة مثل `Month`، لأنه يحتوي على قيم غير رقمية. تُعرف هذه الأعمدة باسم **الفئوية**.
+
+[](https://youtu.be/DYGliioIAE0 "تعلم الآلة للمبتدئين - التنبؤ بالميزات الفئوية باستخدام الانحدار الخطي")
+
+> 🎥 انقر على الصورة أعلاه للحصول على نظرة عامة قصيرة حول استخدام الميزات الفئوية.
+
+هنا يمكنك رؤية كيف يعتمد السعر المتوسط على النوع:
+
+
+
+لأخذ النوع في الاعتبار، نحتاج أولاً إلى تحويله إلى شكل رقمي، أو **ترميزه**. هناك عدة طرق يمكننا القيام بها:
+
+* **الترميز الرقمي البسيط** سيقوم بإنشاء جدول لأنواع مختلفة، ثم استبدال اسم النوع بمؤشر في ذلك الجدول. هذه ليست أفضل فكرة للانحدار الخطي، لأن الانحدار الخطي يأخذ القيمة الرقمية الفعلية للمؤشر، ويضيفها إلى النتيجة، مضاعفًا بمعامل معين. في حالتنا، العلاقة بين رقم المؤشر والسعر غير خطية بوضوح، حتى لو تأكدنا من أن المؤشرات مرتبة بطريقة معينة.
+* **الترميز الواحد الساخن** سيستبدل العمود `Variety` بأربعة أعمدة مختلفة، واحد لكل نوع. يحتوي كل عمود على `1` إذا كانت الصف المقابل من نوع معين، و `0` خلاف ذلك. هذا يعني أنه سيكون هناك أربعة معاملات في الانحدار الخطي، واحد لكل نوع من اليقطين، مسؤول عن "السعر الأساسي" (أو بالأحرى "السعر الإضافي") لذلك النوع المحدد.
+
+الكود أدناه يظهر كيف يمكننا ترميز النوع الواحد الساخن:
+
+```python
+pd.get_dummies(new_pumpkins['Variety'])
+```
+
+ ID | FAIRYTALE | MINIATURE | MIXED HEIRLOOM VARIETIES | PIE TYPE
+----|-----------|-----------|--------------------------|----------
+70 | 0 | 0 | 0 | 1
+71 | 0 | 0 | 0 | 1
+... | ... | ... | ... | ...
+1738 | 0 | 1 | 0 | 0
+1739 | 0 | 1 | 0 | 0
+1740 | 0 | 1 | 0 | 0
+1741 | 0 | 1 | 0 | 0
+1742 | 0 | 1 | 0 | 0
+
+لتدريب الانحدار الخطي باستخدام النوع المرمز الواحد الساخن كمدخل، نحتاج فقط إلى تهيئة بيانات `X` و `y` بشكل صحيح:
+
+```python
+X = pd.get_dummies(new_pumpkins['Variety'])
+y = new_pumpkins['Price']
+```
+
+بقية الكود هي نفسها التي استخدمناها أعلاه لتدريب الانحدار الخطي. إذا جربتها، سترى أن متوسط الخطأ التربيعي مشابه، ولكن نحصل على معامل تحديد أعلى بكثير (~77%). للحصول على تنبؤات أكثر دقة، يمكننا أخذ المزيد من الميزات الفئوية في الاعتبار، بالإضافة إلى الميزات الرقمية، مثل `Month` أو `DayOfYear`. للحصول على مصفوفة كبيرة من الميزات، يمكننا استخدام `join`:
+
+```python
+X = pd.get_dummies(new_pumpkins['Variety']) \
+ .join(new_pumpkins['Month']) \
+ .join(pd.get_dummies(new_pumpkins['City'])) \
+ .join(pd.get_dummies(new_pumpkins['Package']))
+y = new_pumpkins['Price']
+```
+
+هنا نأخذ أيضًا في الاعتبار `City` ونوع `Package`، مما يعطينا MSE 2.84 (10%)، ومعامل تحديد 0.94!
+
+## تجميع كل شيء معًا
+
+لإنشاء أفضل نموذج، يمكننا استخدام البيانات المجمعة (الميزات الفئوية المرمزة الواحد الساخن + الرقمية) من المثال أعلاه مع الانحدار متعدد الحدود. إليك الكود الكامل لراحتك:
+
+```python
+# set up training data
+X = pd.get_dummies(new_pumpkins['Variety']) \
+ .join(new_pumpkins['Month']) \
+ .join(pd.get_dummies(new_pumpkins['City'])) \
+ .join(pd.get_dummies(new_pumpkins['Package']))
+y = new_pumpkins['Price']
+
+# make train-test split
+X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0)
+
+# setup and train the pipeline
+pipeline = make_pipeline(PolynomialFeatures(2), LinearRegression())
+pipeline.fit(X_train,y_train)
+
+# predict results for test data
+pred = pipeline.predict(X_test)
+
+# calculate MSE and determination
+mse = np.sqrt(mean_squared_error(y_test,pred))
+print(f'Mean error: {mse:3.3} ({mse/np.mean(pred)*100:3.3}%)')
+
+score = pipeline.score(X_train,y_train)
+print('Model determination: ', score)
+```
+
+هذا يجب أن يعطينا أفضل معامل تحديد تقريبًا 97%، و MSE=2.23 (~8% خطأ في التنبؤ).
+
+| النموذج | MSE | معامل التحديد |
+|---------|-----|---------------|
+| `DayOfYear` خطي | 2.77 (17.2%) | 0.07 |
+| `DayOfYear` متعدد الحدود | 2.73 (17.0%) | 0.08 |
+| `Variety` خطي | 5.24 (19.7%) | 0.77 |
+| جميع الميزات خطي | 2.84 (10.5%) | 0.94 |
+| جميع الميزات متعدد الحدود | 2.23 (8.25%) | 0.97 |
+
+🏆 أحسنت! لقد أنشأت أربعة نماذج انحدار في درس واحد، وحسنت جودة النموذج إلى 97%. في القسم الأخير حول الانحدار، ستتعلم عن الانحدار اللوجستي لتحديد الفئات.
+
+---
+
+## 🚀التحدي
+
+اختبر عدة متغيرات مختلفة في هذا الدفتر لترى كيف تتوافق العلاقة مع دقة النموذج.
+
+## [اختبار ما بعد المحاضرة](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/14/)
+
+## المراجعة والدراسة الذاتية
+
+في هذا الدرس تعلمنا عن الانحدار الخطي. هناك أنواع أخرى مهمة من الانحدار. اقرأ عن تقنيات Stepwise، Ridge، Lasso و Elasticnet. دورة جيدة للدراسة لتعلم المزيد هي [دورة التعلم الإحصائي من ستانفورد](https://online.stanford.edu/courses/sohs-ystatslearning-statistical-learning)
+
+## الواجب
+
+[قم ببناء نموذج](assignment.md)
+
+---
+
+**إخلاء المسؤولية**:
+تم ترجمة هذا المستند باستخدام خدمة الترجمة الآلية [Co-op Translator](https://github.com/Azure/co-op-translator). بينما نسعى لتحقيق الدقة، يرجى العلم أن الترجمات الآلية قد تحتوي على أخطاء أو معلومات غير دقيقة. يجب اعتبار المستند الأصلي بلغته الأصلية هو المصدر الموثوق. للحصول على معلومات حساسة أو هامة، يُوصى بالاستعانة بترجمة بشرية احترافية. نحن غير مسؤولين عن أي سوء فهم أو تفسيرات خاطئة ناتجة عن استخدام هذه الترجمة.
\ No newline at end of file
diff --git a/translations/ar/2-Regression/3-Linear/assignment.md b/translations/ar/2-Regression/3-Linear/assignment.md
new file mode 100644
index 000000000..f1666ae02
--- /dev/null
+++ b/translations/ar/2-Regression/3-Linear/assignment.md
@@ -0,0 +1,25 @@
+
+# إنشاء نموذج انحدار
+
+## التعليمات
+
+في هذا الدرس، تم عرض كيفية بناء نموذج باستخدام كل من الانحدار الخطي والانحدار متعدد الحدود. باستخدام هذه المعرفة، ابحث عن مجموعة بيانات أو استخدم إحدى المجموعات المدمجة في مكتبة Scikit-learn لبناء نموذج جديد. اشرح في دفتر الملاحظات الخاص بك سبب اختيارك للتقنية التي استخدمتها، وقم بعرض دقة النموذج الخاص بك. إذا لم يكن النموذج دقيقًا، فاشرح السبب.
+
+## المعايير
+
+| المعايير | مثالي | مقبول | يحتاج إلى تحسين |
+| -------- | ------------------------------------------------------------- | ------------------------- | ------------------------------ |
+| | يقدم دفتر ملاحظات متكامل مع حل موثق بشكل جيد | الحل غير مكتمل | الحل يحتوي على أخطاء أو مشاكل |
+
+---
+
+**إخلاء المسؤولية**:
+تم ترجمة هذا المستند باستخدام خدمة الترجمة بالذكاء الاصطناعي [Co-op Translator](https://github.com/Azure/co-op-translator). بينما نسعى لتحقيق الدقة، يرجى العلم أن الترجمات الآلية قد تحتوي على أخطاء أو معلومات غير دقيقة. يجب اعتبار المستند الأصلي بلغته الأصلية المصدر الرسمي. للحصول على معلومات حاسمة، يُوصى بالاستعانة بترجمة بشرية احترافية. نحن غير مسؤولين عن أي سوء فهم أو تفسيرات خاطئة تنشأ عن استخدام هذه الترجمة.
\ No newline at end of file
diff --git a/translations/ar/2-Regression/3-Linear/notebook.ipynb b/translations/ar/2-Regression/3-Linear/notebook.ipynb
new file mode 100644
index 000000000..f85ed9d5c
--- /dev/null
+++ b/translations/ar/2-Regression/3-Linear/notebook.ipynb
@@ -0,0 +1,128 @@
+{
+ "cells": [
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "## أسعار القرع\n",
+ "\n",
+ "قم بتحميل المكتبات والبيانات المطلوبة. قم بتحويل البيانات إلى إطار بيانات يحتوي على جزء من البيانات:\n",
+ "\n",
+ "- احصل فقط على القرع الذي يتم تسعيره بالوحدة \"بوشل\"\n",
+ "- قم بتحويل التاريخ إلى شهر\n",
+ "- احسب السعر ليكون متوسط الأسعار العالية والمنخفضة\n",
+ "- قم بتحويل السعر ليعكس التسعير حسب كمية \"بوشل\"\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "import pandas as pd\n",
+ "import matplotlib.pyplot as plt\n",
+ "import numpy as np\n",
+ "from datetime import datetime\n",
+ "\n",
+ "pumpkins = pd.read_csv('../data/US-pumpkins.csv')\n",
+ "\n",
+ "pumpkins.head()\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "pumpkins = pumpkins[pumpkins['Package'].str.contains('bushel', case=True, regex=True)]\n",
+ "\n",
+ "columns_to_select = ['Package', 'Variety', 'City Name', 'Low Price', 'High Price', 'Date']\n",
+ "pumpkins = pumpkins.loc[:, columns_to_select]\n",
+ "\n",
+ "price = (pumpkins['Low Price'] + pumpkins['High Price']) / 2\n",
+ "\n",
+ "month = pd.DatetimeIndex(pumpkins['Date']).month\n",
+ "day_of_year = pd.to_datetime(pumpkins['Date']).apply(lambda dt: (dt-datetime(dt.year,1,1)).days)\n",
+ "\n",
+ "new_pumpkins = pd.DataFrame(\n",
+ " {'Month': month, \n",
+ " 'DayOfYear' : day_of_year, \n",
+ " 'Variety': pumpkins['Variety'], \n",
+ " 'City': pumpkins['City Name'], \n",
+ " 'Package': pumpkins['Package'], \n",
+ " 'Low Price': pumpkins['Low Price'],\n",
+ " 'High Price': pumpkins['High Price'], \n",
+ " 'Price': price})\n",
+ "\n",
+ "new_pumpkins.loc[new_pumpkins['Package'].str.contains('1 1/9'), 'Price'] = price/1.1\n",
+ "new_pumpkins.loc[new_pumpkins['Package'].str.contains('1/2'), 'Price'] = price*2\n",
+ "\n",
+ "new_pumpkins.head()\n"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "تذكرنا مخططات التبعثر الأساسية بأن لدينا بيانات الأشهر فقط من أغسطس حتى ديسمبر. ربما نحتاج إلى المزيد من البيانات لنتمكن من استخلاص استنتاجات بطريقة خطية.\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "import matplotlib.pyplot as plt\n",
+ "plt.scatter('Month','Price',data=new_pumpkins)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "\n",
+ "plt.scatter('DayOfYear','Price',data=new_pumpkins)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "\n---\n\n**إخلاء المسؤولية**: \nتم ترجمة هذا المستند باستخدام خدمة الترجمة الآلية [Co-op Translator](https://github.com/Azure/co-op-translator). بينما نسعى لتحقيق الدقة، يرجى العلم أن الترجمات الآلية قد تحتوي على أخطاء أو عدم دقة. يجب اعتبار المستند الأصلي بلغته الأصلية هو المصدر الموثوق. للحصول على معلومات حساسة، يُوصى بالاستعانة بترجمة بشرية احترافية. نحن غير مسؤولين عن أي سوء فهم أو تفسيرات خاطئة ناتجة عن استخدام هذه الترجمة.\n"
+ ]
+ }
+ ],
+ "metadata": {
+ "kernelspec": {
+ "display_name": "Python 3",
+ "language": "python",
+ "name": "python3"
+ },
+ "language_info": {
+ "codemirror_mode": {
+ "name": "ipython",
+ "version": 3
+ },
+ "file_extension": ".py",
+ "mimetype": "text/x-python",
+ "name": "python",
+ "nbconvert_exporter": "python",
+ "pygments_lexer": "ipython3",
+ "version": "3.8.3-final"
+ },
+ "orig_nbformat": 2,
+ "coopTranslator": {
+ "original_hash": "b032d371c75279373507f003439a577e",
+ "translation_date": "2025-08-29T14:40:05+00:00",
+ "source_file": "2-Regression/3-Linear/notebook.ipynb",
+ "language_code": "ar"
+ }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 2
+}
\ No newline at end of file
diff --git a/translations/ar/2-Regression/3-Linear/solution/Julia/README.md b/translations/ar/2-Regression/3-Linear/solution/Julia/README.md
new file mode 100644
index 000000000..4ade6c975
--- /dev/null
+++ b/translations/ar/2-Regression/3-Linear/solution/Julia/README.md
@@ -0,0 +1,15 @@
+
+هذا مكان مؤقت
+
+---
+
+**إخلاء المسؤولية**:
+تمت ترجمة هذه الوثيقة باستخدام خدمة الترجمة الآلية [Co-op Translator](https://github.com/Azure/co-op-translator). بينما نسعى لتحقيق الدقة، يرجى العلم أن الترجمات الآلية قد تحتوي على أخطاء أو معلومات غير دقيقة. يجب اعتبار الوثيقة الأصلية بلغتها الأصلية المصدر الموثوق. للحصول على معلومات حساسة أو هامة، يُوصى بالاستعانة بترجمة بشرية احترافية. نحن غير مسؤولين عن أي سوء فهم أو تفسيرات خاطئة تنشأ عن استخدام هذه الترجمة.
\ No newline at end of file
diff --git a/translations/ar/2-Regression/3-Linear/solution/R/lesson_3-R.ipynb b/translations/ar/2-Regression/3-Linear/solution/R/lesson_3-R.ipynb
new file mode 100644
index 000000000..864b0ae95
--- /dev/null
+++ b/translations/ar/2-Regression/3-Linear/solution/R/lesson_3-R.ipynb
@@ -0,0 +1,1082 @@
+{
+ "nbformat": 4,
+ "nbformat_minor": 2,
+ "metadata": {
+ "colab": {
+ "name": "lesson_3-R.ipynb",
+ "provenance": [],
+ "collapsed_sections": [],
+ "toc_visible": true
+ },
+ "kernelspec": {
+ "name": "ir",
+ "display_name": "R"
+ },
+ "language_info": {
+ "name": "R"
+ },
+ "coopTranslator": {
+ "original_hash": "5015d65d61ba75a223bfc56c273aa174",
+ "translation_date": "2025-08-29T14:44:06+00:00",
+ "source_file": "2-Regression/3-Linear/solution/R/lesson_3-R.ipynb",
+ "language_code": "ar"
+ }
+ },
+ "cells": [
+ {
+ "cell_type": "markdown",
+ "source": [
+ "# بناء نموذج انحدار: نماذج الانحدار الخطي والمتعدد\n"
+ ],
+ "metadata": {
+ "id": "EgQw8osnsUV-"
+ }
+ },
+ {
+ "cell_type": "markdown",
+ "source": [
+ "## الانحدار الخطي والانحدار متعدد الحدود لتسعير القرع - الدرس الثالث\n",
+ "
\n",
+ " \n",
+ " رسم توضيحي من تصميم داساني ماديبالي\n",
+ "\n",
+ "#### المقدمة\n",
+ "\n",
+ "حتى الآن، قمت باستكشاف مفهوم الانحدار باستخدام بيانات عينة مأخوذة من مجموعة بيانات تسعير القرع التي سنستخدمها طوال هذا الدرس. كما قمت بتصورها باستخدام `ggplot2`. 💪\n",
+ "\n",
+ "الآن أنت مستعد للتعمق أكثر في الانحدار لتعلم الآلة. في هذا الدرس، ستتعلم المزيد عن نوعين من الانحدار: *الانحدار الخطي الأساسي* و *الانحدار متعدد الحدود*، بالإضافة إلى بعض الرياضيات التي تقوم عليها هذه التقنيات.\n",
+ "\n",
+ "> خلال هذا المنهج، نفترض معرفة رياضية بسيطة، ونسعى لجعلها سهلة الفهم للطلاب القادمين من مجالات أخرى، لذا انتبه للملاحظات 🧮، والرسوم التوضيحية، وأدوات التعلم الأخرى التي تساعد على الفهم.\n",
+ "\n",
+ "#### التحضير\n",
+ "\n",
+ "كتذكير، تقوم بتحميل هذه البيانات لطرح أسئلة عليها.\n",
+ "\n",
+ "- متى يكون أفضل وقت لشراء القرع؟\n",
+ "\n",
+ "- ما السعر الذي يمكن أن أتوقعه لصندوق من القرع الصغير؟\n",
+ "\n",
+ "- هل يجب أن أشتريه في سلال نصف بوشل أم في صناديق 1 1/9 بوشل؟ دعنا نستمر في استكشاف هذه البيانات.\n",
+ "\n",
+ "في الدرس السابق، قمت بإنشاء `tibble` (إعادة تصور حديثة لإطار البيانات) وملأته بجزء من مجموعة البيانات الأصلية، مع توحيد الأسعار حسب البوشل. ومع ذلك، من خلال القيام بذلك، تمكنت فقط من جمع حوالي 400 نقطة بيانات وللأشهر الخريفية فقط. ربما يمكننا الحصول على مزيد من التفاصيل حول طبيعة البيانات من خلال تنظيفها أكثر؟ سنرى... 🕵️♀️\n",
+ "\n",
+ "لإتمام هذه المهمة، سنحتاج إلى الحزم التالية:\n",
+ "\n",
+ "- `tidyverse`: [tidyverse](https://www.tidyverse.org/) هو [مجموعة من حزم R](https://www.tidyverse.org/packages) مصممة لجعل علم البيانات أسرع وأسهل وأكثر متعة!\n",
+ "\n",
+ "- `tidymodels`: إطار عمل [tidymodels](https://www.tidymodels.org/) هو [مجموعة من الحزم](https://www.tidymodels.org/packages/) للنمذجة وتعلم الآلة.\n",
+ "\n",
+ "- `janitor`: حزمة [janitor](https://github.com/sfirke/janitor) توفر أدوات بسيطة لفحص وتنظيف البيانات غير المنظمة.\n",
+ "\n",
+ "- `corrplot`: حزمة [corrplot](https://cran.r-project.org/web/packages/corrplot/vignettes/corrplot-intro.html) تقدم أداة استكشافية بصرية لمصفوفة الارتباط تدعم إعادة ترتيب المتغيرات تلقائيًا للمساعدة في اكتشاف الأنماط المخفية بين المتغيرات.\n",
+ "\n",
+ "يمكنك تثبيتها باستخدام:\n",
+ "\n",
+ "`install.packages(c(\"tidyverse\", \"tidymodels\", \"janitor\", \"corrplot\"))`\n",
+ "\n",
+ "البرنامج النصي أدناه يتحقق مما إذا كانت الحزم المطلوبة لإكمال هذا الدرس مثبتة لديك، ويقوم بتثبيتها إذا كانت مفقودة.\n"
+ ],
+ "metadata": {
+ "id": "WqQPS1OAsg3H"
+ }
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "source": [
+ "suppressWarnings(if (!require(\"pacman\")) install.packages(\"pacman\"))\n",
+ "\n",
+ "pacman::p_load(tidyverse, tidymodels, janitor, corrplot)"
+ ],
+ "outputs": [],
+ "metadata": {
+ "id": "tA4C2WN3skCf",
+ "colab": {
+ "base_uri": "https://localhost:8080/"
+ },
+ "outputId": "c06cd805-5534-4edc-f72b-d0d1dab96ac0"
+ }
+ },
+ {
+ "cell_type": "markdown",
+ "source": [
+ "سنقوم لاحقًا بتحميل هذه الحزم الرائعة وجعلها متاحة في جلسة R الحالية لدينا. (هذا للتوضيح فقط، `pacman::p_load()` قام بذلك بالفعل نيابةً عنك)\n",
+ "\n",
+ "## 1. خط الانحدار الخطي\n",
+ "\n",
+ "كما تعلمت في الدرس الأول، الهدف من تمرين الانحدار الخطي هو القدرة على رسم *خط* *أفضل تطابق* لـ:\n",
+ "\n",
+ "- **إظهار العلاقات بين المتغيرات**. إظهار العلاقة بين المتغيرات.\n",
+ "\n",
+ "- **إجراء التنبؤات**. تقديم تنبؤات دقيقة حول مكان وقوع نقطة بيانات جديدة بالنسبة لهذا الخط.\n",
+ "\n",
+ "لرسم هذا النوع من الخطوط، نستخدم تقنية إحصائية تُسمى **الانحدار بطريقة المربعات الصغرى**. مصطلح `المربعات الصغرى` يعني أن جميع نقاط البيانات المحيطة بخط الانحدار يتم تربيعها ثم جمعها. من الناحية المثالية، يكون المجموع النهائي صغيرًا قدر الإمكان، لأننا نريد عددًا منخفضًا من الأخطاء، أو `المربعات الصغرى`. وبالتالي، فإن خط أفضل تطابق هو الخط الذي يعطينا أقل قيمة لمجموع الأخطاء المربعة - ومن هنا جاء اسم *الانحدار بطريقة المربعات الصغرى*.\n",
+ "\n",
+ "نقوم بذلك لأننا نريد نمذجة خط يكون لديه أقل مسافة تراكمية من جميع نقاط البيانات لدينا. كما نقوم بتربيع القيم قبل جمعها لأننا نهتم بحجمها وليس اتجاهها.\n",
+ "\n",
+ "> **🧮 أرني الرياضيات**\n",
+ ">\n",
+ "> يمكن التعبير عن هذا الخط، المسمى *خط أفضل تطابق* بواسطة [معادلة](https://en.wikipedia.org/wiki/Simple_linear_regression):\n",
+ ">\n",
+ "> Y = a + bX\n",
+ ">\n",
+ "> `X` هو '`المتغير التوضيحي` أو `المتنبئ`'. `Y` هو '`المتغير التابع` أو `النتيجة`'. ميل الخط هو `b` و`a` هو نقطة تقاطع المحور y، والتي تشير إلى قيمة `Y` عندما يكون `X = 0`.\n",
+ ">\n",
+ "\n",
+ "> \n",
+ " رسم توضيحي بواسطة Jen Looper\n",
+ ">\n",
+ "> أولاً، احسب الميل `b`.\n",
+ ">\n",
+ "> بمعنى آخر، وبالإشارة إلى سؤال البيانات الأصلية الخاصة بالقرع: \"توقع سعر القرع لكل بوشل حسب الشهر\"، سيكون `X` هو السعر و`Y` هو شهر البيع.\n",
+ ">\n",
+ "> \n",
+ " رسم توضيحي بواسطة Jen Looper\n",
+ "> \n",
+ "> احسب قيمة Y. إذا كنت تدفع حوالي \\$4، فلا بد أن يكون شهر أبريل!\n",
+ ">\n",
+ "> يجب أن تُظهر الرياضيات التي تحسب الخط ميل الخط، والذي يعتمد أيضًا على نقطة التقاطع، أو مكان وجود `Y` عندما يكون `X = 0`.\n",
+ ">\n",
+ "> يمكنك ملاحظة طريقة الحساب لهذه القيم على موقع [Math is Fun](https://www.mathsisfun.com/data/least-squares-regression.html). كما يمكنك زيارة [آلة حاسبة المربعات الصغرى](https://www.mathsisfun.com/data/least-squares-calculator.html) لمشاهدة كيف تؤثر قيم الأرقام على الخط.\n",
+ "\n",
+ "ليس مخيفًا جدًا، صحيح؟ 🤓\n",
+ "\n",
+ "#### الارتباط\n",
+ "\n",
+ "مصطلح آخر يجب فهمه هو **معامل الارتباط** بين المتغيرين X وY المعطى. باستخدام مخطط التبعثر، يمكنك بسرعة تصور هذا المعامل. المخطط الذي يحتوي على نقاط بيانات متناثرة في خط مرتب لديه ارتباط عالي، ولكن المخطط الذي يحتوي على نقاط بيانات متناثرة في كل مكان بين X وY لديه ارتباط منخفض.\n",
+ "\n",
+ "نموذج الانحدار الخطي الجيد سيكون النموذج الذي لديه معامل ارتباط عالي (أقرب إلى 1 من 0) باستخدام طريقة الانحدار بطريقة المربعات الصغرى مع خط الانحدار.\n"
+ ],
+ "metadata": {
+ "id": "cdX5FRpvsoP5"
+ }
+ },
+ {
+ "cell_type": "markdown",
+ "source": [
+ "## **2. رقصة مع البيانات: إنشاء إطار بيانات سيتم استخدامه للنمذجة**\n",
+ "\n",
+ "
\n",
+ " \n",
+ " عمل فني بواسطة @allison_horst\n"
+ ],
+ "metadata": {
+ "id": "WdUKXk7Bs8-V"
+ }
+ },
+ {
+ "cell_type": "markdown",
+ "source": [
+ "قم بتحميل المكتبات والبيانات المطلوبة. قم بتحويل البيانات إلى إطار بيانات يحتوي على جزء من البيانات:\n",
+ "\n",
+ "- احصل فقط على القرع الذي يتم تسعيره بالوحدة (البوشل).\n",
+ "\n",
+ "- قم بتحويل التاريخ إلى شهر.\n",
+ "\n",
+ "- احسب السعر ليكون متوسط الأسعار العالية والمنخفضة.\n",
+ "\n",
+ "- قم بتحويل السعر ليعكس التسعير حسب كمية البوشل.\n",
+ "\n",
+ "> قمنا بتغطية هذه الخطوات في [الدرس السابق](https://github.com/microsoft/ML-For-Beginners/blob/main/2-Regression/2-Data/solution/lesson_2-R.ipynb).\n"
+ ],
+ "metadata": {
+ "id": "fMCtu2G2s-p8"
+ }
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "source": [
+ "# Load the core Tidyverse packages\n",
+ "library(tidyverse)\n",
+ "library(lubridate)\n",
+ "\n",
+ "# Import the pumpkins data\n",
+ "pumpkins <- read_csv(file = \"https://raw.githubusercontent.com/microsoft/ML-For-Beginners/main/2-Regression/data/US-pumpkins.csv\")\n",
+ "\n",
+ "\n",
+ "# Get a glimpse and dimensions of the data\n",
+ "glimpse(pumpkins)\n",
+ "\n",
+ "\n",
+ "# Print the first 50 rows of the data set\n",
+ "pumpkins %>% \n",
+ " slice_head(n = 5)"
+ ],
+ "outputs": [],
+ "metadata": {
+ "id": "ryMVZEEPtERn"
+ }
+ },
+ {
+ "cell_type": "markdown",
+ "source": [
+ "في روح المغامرة الخالصة، دعونا نستكشف [`حزمة janitor`](../../../../../../2-Regression/3-Linear/solution/R/github.com/sfirke/janitor) التي توفر وظائف بسيطة لفحص وتنظيف البيانات غير النظيفة. على سبيل المثال، دعونا نلقي نظرة على أسماء الأعمدة لبياناتنا:\n"
+ ],
+ "metadata": {
+ "id": "xcNxM70EtJjb"
+ }
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "source": [
+ "# Return column names\n",
+ "pumpkins %>% \n",
+ " names()"
+ ],
+ "outputs": [],
+ "metadata": {
+ "id": "5XtpaIigtPfW"
+ }
+ },
+ {
+ "cell_type": "markdown",
+ "source": [
+ "🤔 يمكننا أن نفعل أفضل. دعونا نجعل أسماء الأعمدة هذه `friendR` عن طريق تحويلها إلى [snake_case](https://en.wikipedia.org/wiki/Snake_case) باستخدام `janitor::clean_names`. لمعرفة المزيد عن هذه الدالة: `?clean_names`\n"
+ ],
+ "metadata": {
+ "id": "IbIqrMINtSHe"
+ }
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "source": [
+ "# Clean names to the snake_case convention\n",
+ "pumpkins <- pumpkins %>% \n",
+ " clean_names(case = \"snake\")\n",
+ "\n",
+ "# Return column names\n",
+ "pumpkins %>% \n",
+ " names()"
+ ],
+ "outputs": [],
+ "metadata": {
+ "id": "a2uYvclYtWvX"
+ }
+ },
+ {
+ "cell_type": "markdown",
+ "source": [
+ "الكثير من الترتيب 🧹! الآن، رقصة مع البيانات باستخدام `dplyr` كما في الدرس السابق! 💃\n"
+ ],
+ "metadata": {
+ "id": "HfhnuzDDtaDd"
+ }
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "source": [
+ "# Select desired columns\n",
+ "pumpkins <- pumpkins %>% \n",
+ " select(variety, city_name, package, low_price, high_price, date)\n",
+ "\n",
+ "\n",
+ "\n",
+ "# Extract the month from the dates to a new column\n",
+ "pumpkins <- pumpkins %>%\n",
+ " mutate(date = mdy(date),\n",
+ " month = month(date)) %>% \n",
+ " select(-date)\n",
+ "\n",
+ "\n",
+ "\n",
+ "# Create a new column for average Price\n",
+ "pumpkins <- pumpkins %>% \n",
+ " mutate(price = (low_price + high_price)/2)\n",
+ "\n",
+ "\n",
+ "# Retain only pumpkins with the string \"bushel\"\n",
+ "new_pumpkins <- pumpkins %>% \n",
+ " filter(str_detect(string = package, pattern = \"bushel\"))\n",
+ "\n",
+ "\n",
+ "# Normalize the pricing so that you show the pricing per bushel, not per 1 1/9 or 1/2 bushel\n",
+ "new_pumpkins <- new_pumpkins %>% \n",
+ " mutate(price = case_when(\n",
+ " str_detect(package, \"1 1/9\") ~ price/(1.1),\n",
+ " str_detect(package, \"1/2\") ~ price*2,\n",
+ " TRUE ~ price))\n",
+ "\n",
+ "# Relocate column positions\n",
+ "new_pumpkins <- new_pumpkins %>% \n",
+ " relocate(month, .before = variety)\n",
+ "\n",
+ "\n",
+ "# Display the first 5 rows\n",
+ "new_pumpkins %>% \n",
+ " slice_head(n = 5)"
+ ],
+ "outputs": [],
+ "metadata": {
+ "id": "X0wU3gQvtd9f"
+ }
+ },
+ {
+ "cell_type": "markdown",
+ "source": [
+ "عمل رائع! 👌 لديك الآن مجموعة بيانات نظيفة ومرتبة يمكنك بناء نموذج الانحدار الجديد عليها!\n",
+ "\n",
+ "هل تمانع في رسم مخطط مبعثر؟\n"
+ ],
+ "metadata": {
+ "id": "UpaIwaxqth82"
+ }
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "source": [
+ "# Set theme\n",
+ "theme_set(theme_light())\n",
+ "\n",
+ "# Make a scatter plot of month and price\n",
+ "new_pumpkins %>% \n",
+ " ggplot(mapping = aes(x = month, y = price)) +\n",
+ " geom_point(size = 1.6)\n"
+ ],
+ "outputs": [],
+ "metadata": {
+ "id": "DXgU-j37tl5K"
+ }
+ },
+ {
+ "cell_type": "markdown",
+ "source": [
+ "مخطط التبعثر يذكرنا بأن البيانات المتوفرة لدينا للشهور تمتد فقط من أغسطس إلى ديسمبر. من المحتمل أننا بحاجة إلى المزيد من البيانات لنتمكن من استخلاص استنتاجات بطريقة خطية.\n",
+ "\n",
+ "دعونا نلقي نظرة مرة أخرى على بيانات النمذجة الخاصة بنا:\n"
+ ],
+ "metadata": {
+ "id": "Ve64wVbwtobI"
+ }
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "source": [
+ "# Display first 5 rows\n",
+ "new_pumpkins %>% \n",
+ " slice_head(n = 5)"
+ ],
+ "outputs": [],
+ "metadata": {
+ "id": "HFQX2ng1tuSJ"
+ }
+ },
+ {
+ "cell_type": "markdown",
+ "source": [
+ "ماذا لو أردنا التنبؤ بـ `السعر` لقرع بناءً على أعمدة `المدينة` أو `الحزمة` التي تكون من نوع نصي؟ أو بشكل أبسط، كيف يمكننا العثور على الارتباط (الذي يتطلب أن تكون مدخلاته رقمية) بين، على سبيل المثال، `الحزمة` و `السعر`؟ 🤷🤷\n",
+ "\n",
+ "نماذج التعلم الآلي تعمل بشكل أفضل مع الميزات الرقمية بدلاً من القيم النصية، لذا عادةً ما تحتاج إلى تحويل الميزات الفئوية إلى تمثيلات رقمية.\n",
+ "\n",
+ "هذا يعني أننا بحاجة إلى إيجاد طريقة لإعادة صياغة المتنبئات لدينا لجعلها أسهل للاستخدام بشكل فعال من قبل النموذج، وهي عملية تُعرف بـ `هندسة الميزات`.\n"
+ ],
+ "metadata": {
+ "id": "7hsHoxsStyjJ"
+ }
+ },
+ {
+ "cell_type": "markdown",
+ "source": [
+ "## 3. تجهيز البيانات للنمذجة باستخدام الوصفات 👩🍳👨🍳\n",
+ "\n",
+ "الأنشطة التي تعيد صياغة قيم المتنبئات لجعلها أسهل للاستخدام بشكل فعال من قبل النموذج تُعرف بـ `هندسة الميزات`.\n",
+ "\n",
+ "تتطلب النماذج المختلفة متطلبات معالجة مسبقة مختلفة. على سبيل المثال، تتطلب طريقة المربعات الصغرى `ترميز المتغيرات الفئوية` مثل الشهر، النوع، واسم المدينة. يتضمن هذا ببساطة `ترجمة` عمود يحتوي على `قيم فئوية` إلى واحد أو أكثر من `الأعمدة الرقمية` التي تحل محل الأصل.\n",
+ "\n",
+ "على سبيل المثال، لنفترض أن بياناتك تحتوي على الميزة الفئوية التالية:\n",
+ "\n",
+ "| المدينة |\n",
+ "|:----------:|\n",
+ "| دنفر |\n",
+ "| نيروبي |\n",
+ "| طوكيو |\n",
+ "\n",
+ "يمكنك تطبيق *الترميز الترتيبي* لاستبدال قيمة عددية فريدة لكل فئة، مثل هذا:\n",
+ "\n",
+ "| المدينة |\n",
+ "|:-------:|\n",
+ "| 0 |\n",
+ "| 1 |\n",
+ "| 2 |\n",
+ "\n",
+ "وهذا ما سنفعله مع بياناتنا!\n",
+ "\n",
+ "في هذا القسم، سنستكشف حزمة رائعة أخرى من Tidymodels: [recipes](https://tidymodels.github.io/recipes/) - والتي تم تصميمها لمساعدتك في تجهيز بياناتك **قبل** تدريب النموذج. في جوهرها، الوصفة هي كائن يحدد الخطوات التي يجب تطبيقها على مجموعة البيانات لجعلها جاهزة للنمذجة.\n",
+ "\n",
+ "الآن، دعونا ننشئ وصفة تُجهز بياناتنا للنمذجة عن طريق استبدال قيمة عددية فريدة لجميع الملاحظات في أعمدة المتنبئات:\n"
+ ],
+ "metadata": {
+ "id": "AD5kQbcvt3Xl"
+ }
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "source": [
+ "# Specify a recipe\n",
+ "pumpkins_recipe <- recipe(price ~ ., data = new_pumpkins) %>% \n",
+ " step_integer(all_predictors(), zero_based = TRUE)\n",
+ "\n",
+ "\n",
+ "# Print out the recipe\n",
+ "pumpkins_recipe"
+ ],
+ "outputs": [],
+ "metadata": {
+ "id": "BNaFKXfRt9TU"
+ }
+ },
+ {
+ "cell_type": "markdown",
+ "source": [
+ "رائع! 👏 لقد أنشأنا للتو أول وصفة تحدد النتيجة (السعر) والمتنبئين المقابلين لها، وتأكدنا أن جميع أعمدة المتنبئين يتم ترميزها إلى مجموعة من الأعداد الصحيحة 🙌! دعونا نوضح ذلك بسرعة:\n",
+ "\n",
+ "- استدعاء `recipe()` مع صيغة يوضح للوصفة *الأدوار* الخاصة بالمتغيرات باستخدام بيانات `new_pumpkins` كمرجع. على سبيل المثال، تم تعيين عمود `price` كـ `outcome` بينما تم تعيين باقي الأعمدة كـ `predictor`.\n",
+ "\n",
+ "- `step_integer(all_predictors(), zero_based = TRUE)` يحدد أن جميع المتنبئين يجب تحويلهم إلى مجموعة من الأعداد الصحيحة تبدأ من الرقم 0.\n",
+ "\n",
+ "نحن متأكدون أنك قد تكون لديك أفكار مثل: \"هذا رائع جدًا!! ولكن ماذا لو كنت بحاجة إلى التأكد من أن الوصفات تقوم بالضبط بما أتوقعه؟ 🤔\"\n",
+ "\n",
+ "هذه فكرة رائعة! كما ترى، بمجرد تعريف الوصفة، يمكنك تقدير المعلمات المطلوبة لمعالجة البيانات فعليًا، ثم استخراج البيانات المعالجة. عادةً لا تحتاج إلى القيام بذلك عند استخدام Tidymodels (سنرى الطريقة المعتادة بعد قليل -> `workflows`) ولكن يمكن أن يكون ذلك مفيدًا عندما تريد إجراء نوع من التحقق للتأكد من أن الوصفات تعمل كما تتوقع.\n",
+ "\n",
+ "لهذا، ستحتاج إلى فعلين إضافيين: `prep()` و `bake()` وكما هو الحال دائمًا، أصدقاؤنا الصغار في R من [Allison Horst](https://github.com/allisonhorst/stats-illustrations) يساعدونك في فهم هذا بشكل أفضل!\n",
+ "\n",
+ "
\n",
+ " \n",
+ " عمل فني بواسطة @allison_horst\n"
+ ],
+ "metadata": {
+ "id": "KEiO0v7kuC9O"
+ }
+ },
+ {
+ "cell_type": "markdown",
+ "source": [
+ "[`prep()`](https://recipes.tidymodels.org/reference/prep.html): يقوم بتقدير المعايير المطلوبة من مجموعة تدريب يمكن تطبيقها لاحقًا على مجموعات بيانات أخرى. على سبيل المثال، بالنسبة لعمود متنبئ معين، ما هي الملاحظة التي سيتم تخصيصها للعدد الصحيح 0 أو 1 أو 2 وما إلى ذلك.\n",
+ "\n",
+ "[`bake()`](https://recipes.tidymodels.org/reference/bake.html): يأخذ وصفة تم تجهيزها مسبقًا ويطبق العمليات على أي مجموعة بيانات.\n",
+ "\n",
+ "وبناءً على ذلك، دعونا نقوم بتجهيز وخبز وصفاتنا للتأكد فعلاً من أنه في الخلفية، سيتم ترميز أعمدة المتنبئ أولاً قبل أن يتم ضبط النموذج.\n"
+ ],
+ "metadata": {
+ "id": "Q1xtzebuuTCP"
+ }
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "source": [
+ "# Prep the recipe\n",
+ "pumpkins_prep <- prep(pumpkins_recipe)\n",
+ "\n",
+ "# Bake the recipe to extract a preprocessed new_pumpkins data\n",
+ "baked_pumpkins <- bake(pumpkins_prep, new_data = NULL)\n",
+ "\n",
+ "# Print out the baked data set\n",
+ "baked_pumpkins %>% \n",
+ " slice_head(n = 10)"
+ ],
+ "outputs": [],
+ "metadata": {
+ "id": "FGBbJbP_uUUn"
+ }
+ },
+ {
+ "cell_type": "markdown",
+ "source": [
+ "رائع! 🥳 البيانات المعالجة `baked_pumpkins` تحتوي على جميع المتغيرات المستقلة مشفرة، مما يؤكد أن خطوات المعالجة المسبقة التي تم تعريفها كالوصفة تعمل كما هو متوقع. قد يكون من الصعب عليك قراءة البيانات الآن، لكنها أصبحت أكثر وضوحًا بالنسبة لـ Tidymodels! خذ بعض الوقت لتكتشف أي ملاحظة تم ربطها برقم صحيح.\n",
+ "\n",
+ "من الجدير بالذكر أيضًا أن `baked_pumpkins` هو إطار بيانات يمكننا إجراء العمليات الحسابية عليه.\n",
+ "\n",
+ "على سبيل المثال، دعنا نحاول العثور على ارتباط جيد بين نقطتين من بياناتك لبناء نموذج تنبؤي جيد. سنستخدم الدالة `cor()` للقيام بذلك. اكتب `?cor()` لمعرفة المزيد عن هذه الدالة.\n"
+ ],
+ "metadata": {
+ "id": "1dvP0LBUueAW"
+ }
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "source": [
+ "# Find the correlation between the city_name and the price\n",
+ "cor(baked_pumpkins$city_name, baked_pumpkins$price)\n",
+ "\n",
+ "# Find the correlation between the package and the price\n",
+ "cor(baked_pumpkins$package, baked_pumpkins$price)\n"
+ ],
+ "outputs": [],
+ "metadata": {
+ "id": "3bQzXCjFuiSV"
+ }
+ },
+ {
+ "cell_type": "markdown",
+ "source": [
+ "كما يتضح، هناك ارتباط ضعيف بين المدينة والسعر. ومع ذلك، هناك ارتباط أفضل قليلاً بين الحزمة وسعرها. هذا منطقي، أليس كذلك؟ عادةً، كلما كانت صندوق المنتجات أكبر، كان السعر أعلى.\n",
+ "\n",
+ "وبما أننا نتحدث عن ذلك، دعونا نحاول أيضًا تصور مصفوفة الارتباط لجميع الأعمدة باستخدام حزمة `corrplot`.\n"
+ ],
+ "metadata": {
+ "id": "BToPWbgjuoZw"
+ }
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "source": [
+ "# Load the corrplot package\n",
+ "library(corrplot)\n",
+ "\n",
+ "# Obtain correlation matrix\n",
+ "corr_mat <- cor(baked_pumpkins %>% \n",
+ " # Drop columns that are not really informative\n",
+ " select(-c(low_price, high_price)))\n",
+ "\n",
+ "# Make a correlation plot between the variables\n",
+ "corrplot(corr_mat, method = \"shade\", shade.col = NA, tl.col = \"black\", tl.srt = 45, addCoef.col = \"black\", cl.pos = \"n\", order = \"original\")"
+ ],
+ "outputs": [],
+ "metadata": {
+ "id": "ZwAL3ksmutVR"
+ }
+ },
+ {
+ "cell_type": "markdown",
+ "source": [
+ "🤩🤩 أفضل بكثير.\n",
+ "\n",
+ "سؤال جيد يمكن طرحه الآن على هذه البيانات هو: '`ما السعر الذي يمكنني توقعه لحزمة معينة من القرع؟`' لنبدأ مباشرة!\n",
+ "\n",
+ "> ملاحظة: عندما تقوم **`bake()`** بوصفة التحضير **`pumpkins_prep`** مع **`new_data = NULL`**، فإنك تستخرج بيانات التدريب المعالجة (أي المشفرة). إذا كان لديك مجموعة بيانات أخرى مثل مجموعة اختبار وترغب في رؤية كيف ستقوم الوصفة بمعالجتها مسبقًا، يمكنك ببساطة خبز **`pumpkins_prep`** مع **`new_data = test_set`**\n",
+ "\n",
+ "## 4. بناء نموذج الانحدار الخطي\n",
+ "\n",
+ "
\n",
+ " \n",
+ " رسم توضيحي بواسطة داساني ماديبالي\n",
+ "\n",
+ "\n",
+ "\n"
+ ],
+ "metadata": {
+ "id": "YqXjLuWavNxW"
+ }
+ },
+ {
+ "cell_type": "markdown",
+ "source": [
+ "الآن بعد أن قمنا ببناء وصفة وتأكدنا فعليًا من أن البيانات ستتم معالجتها مسبقًا بشكل مناسب، دعونا الآن نبني نموذج انحدار للإجابة على السؤال: `ما هو السعر المتوقع لحزمة معينة من القرع؟`\n",
+ "\n",
+ "#### تدريب نموذج انحدار خطي باستخدام مجموعة التدريب\n",
+ "\n",
+ "كما قد تكون قد استنتجت بالفعل، فإن العمود *price* هو المتغير `النتيجة` بينما العمود *package* هو المتغير `المتنبئ`.\n",
+ "\n",
+ "للقيام بذلك، سنقوم أولاً بتقسيم البيانات بحيث يتم تخصيص 80% لمجموعة التدريب و20% لمجموعة الاختبار، ثم نحدد وصفة تقوم بترميز عمود المتنبئ إلى مجموعة من الأعداد الصحيحة، ثم نبني مواصفات النموذج. لن نقوم بتحضير أو خبز الوصفة لأننا نعلم بالفعل أنها ستقوم بمعالجة البيانات كما هو متوقع.\n"
+ ],
+ "metadata": {
+ "id": "Pq0bSzCevW-h"
+ }
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "source": [
+ "set.seed(2056)\n",
+ "# Split the data into training and test sets\n",
+ "pumpkins_split <- new_pumpkins %>% \n",
+ " initial_split(prop = 0.8)\n",
+ "\n",
+ "\n",
+ "# Extract training and test data\n",
+ "pumpkins_train <- training(pumpkins_split)\n",
+ "pumpkins_test <- testing(pumpkins_split)\n",
+ "\n",
+ "\n",
+ "\n",
+ "# Create a recipe for preprocessing the data\n",
+ "lm_pumpkins_recipe <- recipe(price ~ package, data = pumpkins_train) %>% \n",
+ " step_integer(all_predictors(), zero_based = TRUE)\n",
+ "\n",
+ "\n",
+ "\n",
+ "# Create a linear model specification\n",
+ "lm_spec <- linear_reg() %>% \n",
+ " set_engine(\"lm\") %>% \n",
+ " set_mode(\"regression\")"
+ ],
+ "outputs": [],
+ "metadata": {
+ "id": "CyoEh_wuvcLv"
+ }
+ },
+ {
+ "cell_type": "markdown",
+ "source": [
+ "عمل رائع! الآن بعد أن أصبح لدينا وصفة ومواصفات نموذج، نحتاج إلى إيجاد طريقة لدمجهما معًا في كائن يقوم أولاً بمعالجة البيانات مسبقًا (prep+bake خلف الكواليس)، ثم تدريب النموذج على البيانات المعالجة مسبقًا، وأيضًا يتيح إمكانية القيام بأنشطة ما بعد المعالجة. ما رأيك في ذلك لراحة بالك! 🤩\n",
+ "\n",
+ "في Tidymodels، يُطلق على هذا الكائن المريح اسم [`workflow`](https://workflows.tidymodels.org/) وهو يحتفظ بمكونات النمذجة الخاصة بك بكل سهولة! هذا ما نسميه *pipelines* في *Python*.\n",
+ "\n",
+ "لذا، دعونا نجمع كل شيء في workflow! 📦\n"
+ ],
+ "metadata": {
+ "id": "G3zF_3DqviFJ"
+ }
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "source": [
+ "# Hold modelling components in a workflow\n",
+ "lm_wf <- workflow() %>% \n",
+ " add_recipe(lm_pumpkins_recipe) %>% \n",
+ " add_model(lm_spec)\n",
+ "\n",
+ "# Print out the workflow\n",
+ "lm_wf"
+ ],
+ "outputs": [],
+ "metadata": {
+ "id": "T3olroU3v-WX"
+ }
+ },
+ {
+ "cell_type": "markdown",
+ "source": [
+ "بالمثل، يمكن إعداد/تدريب سير العمل بنفس الطريقة التي يمكن بها تدريب النموذج.\n"
+ ],
+ "metadata": {
+ "id": "zd1A5tgOwEPX"
+ }
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "source": [
+ "# Train the model\n",
+ "lm_wf_fit <- lm_wf %>% \n",
+ " fit(data = pumpkins_train)\n",
+ "\n",
+ "# Print the model coefficients learned \n",
+ "lm_wf_fit"
+ ],
+ "outputs": [],
+ "metadata": {
+ "id": "NhJagFumwFHf"
+ }
+ },
+ {
+ "cell_type": "markdown",
+ "source": [
+ "من خلال نتائج النموذج، يمكننا رؤية المعاملات التي تم تعلمها أثناء التدريب. هذه المعاملات تمثل معاملات خط التناسب الأفضل الذي يحقق أقل خطأ إجمالي بين المتغير الفعلي والمتغير المتوقع.\n",
+ "\n",
+ "#### تقييم أداء النموذج باستخدام مجموعة الاختبار\n",
+ "\n",
+ "حان الوقت لمعرفة كيف كان أداء النموذج 📏! كيف نقوم بذلك؟\n",
+ "\n",
+ "الآن بعد أن قمنا بتدريب النموذج، يمكننا استخدامه لتقديم توقعات لمجموعة الاختبار باستخدام `parsnip::predict()`. بعد ذلك، يمكننا مقارنة هذه التوقعات بالقيم الفعلية للتصنيفات لتقييم مدى جودة (أو عدم جودة!) عمل النموذج.\n",
+ "\n",
+ "لنبدأ بعمل التوقعات لمجموعة الاختبار ثم نربط الأعمدة بمجموعة الاختبار.\n"
+ ],
+ "metadata": {
+ "id": "_4QkGtBTwItF"
+ }
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "source": [
+ "# Make predictions for the test set\n",
+ "predictions <- lm_wf_fit %>% \n",
+ " predict(new_data = pumpkins_test)\n",
+ "\n",
+ "\n",
+ "# Bind predictions to the test set\n",
+ "lm_results <- pumpkins_test %>% \n",
+ " select(c(package, price)) %>% \n",
+ " bind_cols(predictions)\n",
+ "\n",
+ "\n",
+ "# Print the first ten rows of the tibble\n",
+ "lm_results %>% \n",
+ " slice_head(n = 10)"
+ ],
+ "outputs": [],
+ "metadata": {
+ "id": "UFZzTG0gwTs9"
+ }
+ },
+ {
+ "cell_type": "markdown",
+ "source": [
+ "نعم، لقد قمت بتدريب نموذج واستخدمته لإجراء التنبؤات! 🔮 هل هو جيد؟ دعنا نقيم أداء النموذج!\n",
+ "\n",
+ "في Tidymodels، نقوم بذلك باستخدام `yardstick::metrics()`! بالنسبة للانحدار الخطي، دعنا نركز على المقاييس التالية:\n",
+ "\n",
+ "- `Root Mean Square Error (RMSE)`: الجذر التربيعي لـ [MSE](https://en.wikipedia.org/wiki/Mean_squared_error). هذا يعطي مقياسًا مطلقًا بنفس وحدة التسمية (في هذه الحالة، سعر اليقطين). كلما كان القيمة أصغر، كان النموذج أفضل (بمعنى مبسط، يمثل متوسط السعر الذي تكون فيه التنبؤات خاطئة!).\n",
+ "\n",
+ "- `Coefficient of Determination (المعروف عادةً بـ R-squared أو R2)`: مقياس نسبي حيث كلما كانت القيمة أعلى، كان توافق النموذج أفضل. في جوهره، يمثل هذا المقياس مقدار التباين بين القيم المتوقعة والقيم الفعلية التي يستطيع النموذج تفسيرها.\n"
+ ],
+ "metadata": {
+ "id": "0A5MjzM7wW9M"
+ }
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "source": [
+ "# Evaluate performance of linear regression\n",
+ "metrics(data = lm_results,\n",
+ " truth = price,\n",
+ " estimate = .pred)"
+ ],
+ "outputs": [],
+ "metadata": {
+ "id": "reJ0UIhQwcEH"
+ }
+ },
+ {
+ "cell_type": "markdown",
+ "source": [
+ "هناك تدهور في أداء النموذج. دعونا نرى ما إذا كان بإمكاننا الحصول على مؤشر أفضل من خلال تصور مخطط التبعثر بين الحزمة والسعر، ثم استخدام التوقعات التي تم إنشاؤها لرسم خط الاتجاه الأفضل.\n",
+ "\n",
+ "هذا يعني أننا سنحتاج إلى تجهيز وإعداد مجموعة الاختبار من أجل ترميز عمود الحزمة، ثم ربط ذلك بالتوقعات التي أنشأها نموذجنا.\n"
+ ],
+ "metadata": {
+ "id": "fdgjzjkBwfWt"
+ }
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "source": [
+ "# Encode package column\n",
+ "package_encode <- lm_pumpkins_recipe %>% \n",
+ " prep() %>% \n",
+ " bake(new_data = pumpkins_test) %>% \n",
+ " select(package)\n",
+ "\n",
+ "\n",
+ "# Bind encoded package column to the results\n",
+ "lm_results <- lm_results %>% \n",
+ " bind_cols(package_encode %>% \n",
+ " rename(package_integer = package)) %>% \n",
+ " relocate(package_integer, .after = package)\n",
+ "\n",
+ "\n",
+ "# Print new results data frame\n",
+ "lm_results %>% \n",
+ " slice_head(n = 5)\n",
+ "\n",
+ "\n",
+ "# Make a scatter plot\n",
+ "lm_results %>% \n",
+ " ggplot(mapping = aes(x = package_integer, y = price)) +\n",
+ " geom_point(size = 1.6) +\n",
+ " # Overlay a line of best fit\n",
+ " geom_line(aes(y = .pred), color = \"orange\", size = 1.2) +\n",
+ " xlab(\"package\")\n",
+ " \n"
+ ],
+ "outputs": [],
+ "metadata": {
+ "id": "R0nw719lwkHE"
+ }
+ },
+ {
+ "cell_type": "markdown",
+ "source": [
+ "رائع! كما ترى، نموذج الانحدار الخطي لا يعمم بشكل جيد العلاقة بين العبوة وسعرها المقابل.\n",
+ "\n",
+ "🎃 تهانينا، لقد قمت للتو بإنشاء نموذج يمكنه المساعدة في التنبؤ بأسعار بعض أنواع القرع. ستكون مزرعة القرع الخاصة بك رائعة في موسم الأعياد. ولكن ربما يمكنك إنشاء نموذج أفضل!\n",
+ "\n",
+ "## 5. بناء نموذج انحدار متعدد الحدود\n",
+ "\n",
+ "
\n",
+ " \n",
+ " رسم توضيحي من إعداد داساني ماديبالي\n",
+ "\n",
+ "\n",
+ "\n"
+ ],
+ "metadata": {
+ "id": "HOCqJXLTwtWI"
+ }
+ },
+ {
+ "cell_type": "markdown",
+ "source": [
+ "أحيانًا قد لا تكون بياناتنا ذات علاقة خطية، ولكننا نرغب مع ذلك في التنبؤ بالنتائج. يمكن أن يساعدنا الانحدار متعدد الحدود (Polynomial Regression) في إجراء التنبؤات للعلاقات الأكثر تعقيدًا وغير الخطية.\n",
+ "\n",
+ "خذ على سبيل المثال العلاقة بين العبوة والسعر في مجموعة بيانات القرع الخاصة بنا. في بعض الأحيان، تكون هناك علاقة خطية بين المتغيرات - كلما زاد حجم القرع (من حيث الحجم)، زاد السعر - ولكن في أحيان أخرى، لا يمكن تمثيل هذه العلاقات كطائرة أو خط مستقيم.\n",
+ "\n",
+ "> ✅ إليك [بعض الأمثلة الأخرى](https://online.stat.psu.edu/stat501/lesson/9/9.8) على بيانات يمكن استخدام الانحدار متعدد الحدود معها.\n",
+ ">\n",
+ "> ألقِ نظرة أخرى على العلاقة بين النوع والسعر في الرسم البياني السابق. هل يبدو أن هذا الرسم النقطي يجب تحليله بالضرورة باستخدام خط مستقيم؟ ربما لا. في هذه الحالة، يمكنك تجربة الانحدار متعدد الحدود.\n",
+ ">\n",
+ "> ✅ الحدوديات (Polynomials) هي تعبيرات رياضية قد تتكون من متغير واحد أو أكثر ومعاملات.\n",
+ "\n",
+ "#### تدريب نموذج انحدار متعدد الحدود باستخدام مجموعة التدريب\n",
+ "\n",
+ "يقوم الانحدار متعدد الحدود بإنشاء *خط منحني* ليتناسب بشكل أفضل مع البيانات غير الخطية.\n",
+ "\n",
+ "دعنا نرى ما إذا كان النموذج متعدد الحدود سيؤدي بشكل أفضل في إجراء التنبؤات. سنتبع إجراءً مشابهًا لما قمنا به سابقًا:\n",
+ "\n",
+ "- إنشاء وصفة تحدد خطوات المعالجة المسبقة التي يجب تنفيذها على بياناتنا لتجهيزها للنمذجة، مثل: ترميز المتنبئات وحساب الحدوديات من الدرجة *n*.\n",
+ "\n",
+ "- بناء مواصفات النموذج.\n",
+ "\n",
+ "- دمج الوصفة ومواصفات النموذج في سير عمل.\n",
+ "\n",
+ "- إنشاء نموذج من خلال ملاءمة سير العمل.\n",
+ "\n",
+ "- تقييم أداء النموذج على بيانات الاختبار.\n",
+ "\n",
+ "لنبدأ مباشرة!\n"
+ ],
+ "metadata": {
+ "id": "VcEIpRV9wzYr"
+ }
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "source": [
+ "# Specify a recipe\r\n",
+ "poly_pumpkins_recipe <-\r\n",
+ " recipe(price ~ package, data = pumpkins_train) %>%\r\n",
+ " step_integer(all_predictors(), zero_based = TRUE) %>% \r\n",
+ " step_poly(all_predictors(), degree = 4)\r\n",
+ "\r\n",
+ "\r\n",
+ "# Create a model specification\r\n",
+ "poly_spec <- linear_reg() %>% \r\n",
+ " set_engine(\"lm\") %>% \r\n",
+ " set_mode(\"regression\")\r\n",
+ "\r\n",
+ "\r\n",
+ "# Bundle recipe and model spec into a workflow\r\n",
+ "poly_wf <- workflow() %>% \r\n",
+ " add_recipe(poly_pumpkins_recipe) %>% \r\n",
+ " add_model(poly_spec)\r\n",
+ "\r\n",
+ "\r\n",
+ "# Create a model\r\n",
+ "poly_wf_fit <- poly_wf %>% \r\n",
+ " fit(data = pumpkins_train)\r\n",
+ "\r\n",
+ "\r\n",
+ "# Print learned model coefficients\r\n",
+ "poly_wf_fit\r\n",
+ "\r\n",
+ " "
+ ],
+ "outputs": [],
+ "metadata": {
+ "id": "63n_YyRXw3CC"
+ }
+ },
+ {
+ "cell_type": "markdown",
+ "source": [
+ "#### تقييم أداء النموذج\n",
+ "\n",
+ "👏👏 لقد قمت ببناء نموذج متعدد الحدود، دعنا نقوم بعمل تنبؤات على مجموعة الاختبار!\n"
+ ],
+ "metadata": {
+ "id": "-LHZtztSxDP0"
+ }
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "source": [
+ "# Make price predictions on test data\r\n",
+ "poly_results <- poly_wf_fit %>% predict(new_data = pumpkins_test) %>% \r\n",
+ " bind_cols(pumpkins_test %>% select(c(package, price))) %>% \r\n",
+ " relocate(.pred, .after = last_col())\r\n",
+ "\r\n",
+ "\r\n",
+ "# Print the results\r\n",
+ "poly_results %>% \r\n",
+ " slice_head(n = 10)"
+ ],
+ "outputs": [],
+ "metadata": {
+ "id": "YUFpQ_dKxJGx"
+ }
+ },
+ {
+ "cell_type": "markdown",
+ "source": [
+ "ووهو، دعونا نقيم أداء النموذج على مجموعة_الاختبار باستخدام `yardstick::metrics()`.\n"
+ ],
+ "metadata": {
+ "id": "qxdyj86bxNGZ"
+ }
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "source": [
+ "metrics(data = poly_results, truth = price, estimate = .pred)"
+ ],
+ "outputs": [],
+ "metadata": {
+ "id": "8AW5ltkBxXDm"
+ }
+ },
+ {
+ "cell_type": "markdown",
+ "source": [
+ "🤩🤩 أداء أفضل بكثير.\n",
+ "\n",
+ "انخفض `rmse` من حوالي 7 إلى حوالي 3، مما يشير إلى تقليل الخطأ بين السعر الفعلي والسعر المتوقع. يمكنك *بشكل عام* تفسير هذا على أنه يعني أن التوقعات الخاطئة تكون في المتوسط خاطئة بحوالي 3 دولارات. ارتفع `rsq` من حوالي 0.4 إلى 0.8.\n",
+ "\n",
+ "تشير جميع هذه المقاييس إلى أن النموذج متعدد الحدود يقدم أداءً أفضل بكثير مقارنة بالنموذج الخطي. عمل رائع!\n",
+ "\n",
+ "دعونا نرى إذا كان بإمكاننا تصور ذلك!\n"
+ ],
+ "metadata": {
+ "id": "6gLHNZDwxYaS"
+ }
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "source": [
+ "# Bind encoded package column to the results\r\n",
+ "poly_results <- poly_results %>% \r\n",
+ " bind_cols(package_encode %>% \r\n",
+ " rename(package_integer = package)) %>% \r\n",
+ " relocate(package_integer, .after = package)\r\n",
+ "\r\n",
+ "\r\n",
+ "# Print new results data frame\r\n",
+ "poly_results %>% \r\n",
+ " slice_head(n = 5)\r\n",
+ "\r\n",
+ "\r\n",
+ "# Make a scatter plot\r\n",
+ "poly_results %>% \r\n",
+ " ggplot(mapping = aes(x = package_integer, y = price)) +\r\n",
+ " geom_point(size = 1.6) +\r\n",
+ " # Overlay a line of best fit\r\n",
+ " geom_line(aes(y = .pred), color = \"midnightblue\", size = 1.2) +\r\n",
+ " xlab(\"package\")\r\n"
+ ],
+ "outputs": [],
+ "metadata": {
+ "id": "A83U16frxdF1"
+ }
+ },
+ {
+ "cell_type": "markdown",
+ "source": [
+ "يمكنك رؤية خط منحني يتناسب بشكل أفضل مع بياناتك! 🤩\n",
+ "\n",
+ "يمكنك جعله أكثر سلاسة عن طريق تمرير صيغة متعددة الحدود إلى `geom_smooth` بهذا الشكل:\n"
+ ],
+ "metadata": {
+ "id": "4U-7aHOVxlGU"
+ }
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "source": [
+ "# Make a scatter plot\r\n",
+ "poly_results %>% \r\n",
+ " ggplot(mapping = aes(x = package_integer, y = price)) +\r\n",
+ " geom_point(size = 1.6) +\r\n",
+ " # Overlay a line of best fit\r\n",
+ " geom_smooth(method = lm, formula = y ~ poly(x, degree = 4), color = \"midnightblue\", size = 1.2, se = FALSE) +\r\n",
+ " xlab(\"package\")"
+ ],
+ "outputs": [],
+ "metadata": {
+ "id": "5vzNT0Uexm-w"
+ }
+ },
+ {
+ "cell_type": "markdown",
+ "source": [
+ "مثل منحنى سلس! 🤩\n",
+ "\n",
+ "إليك كيفية إنشاء توقع جديد:\n"
+ ],
+ "metadata": {
+ "id": "v9u-wwyLxq4G"
+ }
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "source": [
+ "# Make a hypothetical data frame\r\n",
+ "hypo_tibble <- tibble(package = \"bushel baskets\")\r\n",
+ "\r\n",
+ "# Make predictions using linear model\r\n",
+ "lm_pred <- lm_wf_fit %>% predict(new_data = hypo_tibble)\r\n",
+ "\r\n",
+ "# Make predictions using polynomial model\r\n",
+ "poly_pred <- poly_wf_fit %>% predict(new_data = hypo_tibble)\r\n",
+ "\r\n",
+ "# Return predictions in a list\r\n",
+ "list(\"linear model prediction\" = lm_pred, \r\n",
+ " \"polynomial model prediction\" = poly_pred)\r\n"
+ ],
+ "outputs": [],
+ "metadata": {
+ "id": "jRPSyfQGxuQv"
+ }
+ },
+ {
+ "cell_type": "markdown",
+ "source": [
+ "توقعات `polynomial model` تبدو منطقية، بالنظر إلى الرسوم البيانية المبعثرة لـ `price` و `package`! وإذا كان هذا النموذج أفضل من النموذج السابق، بالنظر إلى نفس البيانات، ستحتاج إلى تخصيص ميزانية لهذه القرع الأغلى ثمناً!\n",
+ "\n",
+ "🏆 أحسنت! لقد أنشأت نموذجين للتنبؤ في درس واحد. في القسم الأخير عن الانحدار، ستتعلم عن الانحدار اللوجستي لتحديد الفئات.\n",
+ "\n",
+ "## **🚀التحدي**\n",
+ "\n",
+ "اختبر عدة متغيرات مختلفة في هذا الدفتر لترى كيف تتوافق العلاقة بين الارتباط ودقة النموذج.\n",
+ "\n",
+ "## [**اختبار ما بعد المحاضرة**](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/14/)\n",
+ "\n",
+ "## **المراجعة والدراسة الذاتية**\n",
+ "\n",
+ "في هذا الدرس تعلمنا عن الانحدار الخطي. هناك أنواع أخرى مهمة من الانحدار. اقرأ عن تقنيات Stepwise، Ridge، Lasso و Elasticnet. دورة جيدة لدراسة المزيد هي [دورة التعلم الإحصائي من جامعة ستانفورد](https://online.stanford.edu/courses/sohs-ystatslearning-statistical-learning).\n",
+ "\n",
+ "إذا كنت ترغب في تعلم المزيد عن كيفية استخدام إطار العمل الرائع Tidymodels، يرجى الاطلاع على الموارد التالية:\n",
+ "\n",
+ "- موقع Tidymodels: [ابدأ مع Tidymodels](https://www.tidymodels.org/start/)\n",
+ "\n",
+ "- ماكس كون وجوليا سيلج، [*النمذجة المنظمة باستخدام R*](https://www.tmwr.org/)*.*\n",
+ "\n",
+ "###### **شكر خاص إلى:**\n",
+ "\n",
+ "[أليسون هورست](https://twitter.com/allison_horst?lang=en) على إنشاء الرسوم التوضيحية الرائعة التي تجعل R أكثر ترحيباً وجاذبية. يمكنك العثور على المزيد من الرسوم التوضيحية في [معرضها](https://www.google.com/url?q=https://github.com/allisonhorst/stats-illustrations&sa=D&source=editors&ust=1626380772530000&usg=AOvVaw3zcfyCizFQZpkSLzxiiQEM).\n"
+ ],
+ "metadata": {
+ "id": "8zOLOWqMxzk5"
+ }
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "\n---\n\n**إخلاء المسؤولية**: \nتم ترجمة هذا المستند باستخدام خدمة الترجمة الآلية [Co-op Translator](https://github.com/Azure/co-op-translator). بينما نسعى لتحقيق الدقة، يرجى العلم أن الترجمات الآلية قد تحتوي على أخطاء أو معلومات غير دقيقة. يجب اعتبار المستند الأصلي بلغته الأصلية هو المصدر الموثوق. للحصول على معلومات حساسة أو هامة، يُوصى بالاستعانة بترجمة بشرية احترافية. نحن غير مسؤولين عن أي سوء فهم أو تفسيرات خاطئة ناتجة عن استخدام هذه الترجمة.\n"
+ ]
+ }
+ ]
+}
\ No newline at end of file
diff --git a/translations/ar/2-Regression/3-Linear/solution/notebook.ipynb b/translations/ar/2-Regression/3-Linear/solution/notebook.ipynb
new file mode 100644
index 000000000..5afde9d1a
--- /dev/null
+++ b/translations/ar/2-Regression/3-Linear/solution/notebook.ipynb
@@ -0,0 +1,1115 @@
+{
+ "cells": [
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "## الانحدار الخطي والانحدار متعدد الحدود لتسعير القرع - الدرس الثالث\n",
+ "\n",
+ "قم بتحميل المكتبات والبيانات المطلوبة. قم بتحويل البيانات إلى إطار بيانات يحتوي على جزء من البيانات:\n",
+ "\n",
+ "- احصل فقط على القرع الذي تم تسعيره بوحدة البوشل\n",
+ "- قم بتحويل التاريخ إلى شهر\n",
+ "- احسب السعر ليكون متوسط الأسعار المرتفعة والمنخفضة\n",
+ "- قم بتحويل السعر ليعكس التسعير بوحدة كمية البوشل\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 167,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "
\n",
+ "\n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
\n",
+ "
City Name
\n",
+ "
Type
\n",
+ "
Package
\n",
+ "
Variety
\n",
+ "
Sub Variety
\n",
+ "
Grade
\n",
+ "
Date
\n",
+ "
Low Price
\n",
+ "
High Price
\n",
+ "
Mostly Low
\n",
+ "
...
\n",
+ "
Unit of Sale
\n",
+ "
Quality
\n",
+ "
Condition
\n",
+ "
Appearance
\n",
+ "
Storage
\n",
+ "
Crop
\n",
+ "
Repack
\n",
+ "
Trans Mode
\n",
+ "
Unnamed: 24
\n",
+ "
Unnamed: 25
\n",
+ "
\n",
+ " \n",
+ " \n",
+ "
\n",
+ "
0
\n",
+ "
BALTIMORE
\n",
+ "
NaN
\n",
+ "
24 inch bins
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
4/29/17
\n",
+ "
270.0
\n",
+ "
280.0
\n",
+ "
270.0
\n",
+ "
...
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
E
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
\n",
+ "
\n",
+ "
1
\n",
+ "
BALTIMORE
\n",
+ "
NaN
\n",
+ "
24 inch bins
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
5/6/17
\n",
+ "
270.0
\n",
+ "
280.0
\n",
+ "
270.0
\n",
+ "
...
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
E
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
\n",
+ "
\n",
+ "
2
\n",
+ "
BALTIMORE
\n",
+ "
NaN
\n",
+ "
24 inch bins
\n",
+ "
HOWDEN TYPE
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
9/24/16
\n",
+ "
160.0
\n",
+ "
160.0
\n",
+ "
160.0
\n",
+ "
...
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
N
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
\n",
+ "
\n",
+ "
3
\n",
+ "
BALTIMORE
\n",
+ "
NaN
\n",
+ "
24 inch bins
\n",
+ "
HOWDEN TYPE
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
9/24/16
\n",
+ "
160.0
\n",
+ "
160.0
\n",
+ "
160.0
\n",
+ "
...
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
N
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
\n",
+ "
\n",
+ "
4
\n",
+ "
BALTIMORE
\n",
+ "
NaN
\n",
+ "
24 inch bins
\n",
+ "
HOWDEN TYPE
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
11/5/16
\n",
+ "
90.0
\n",
+ "
100.0
\n",
+ "
90.0
\n",
+ "
...
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
N
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
5 rows × 26 columns
\n",
+ "
"
+ ],
+ "text/plain": [
+ " City Name Type Package Variety Sub Variety Grade Date \\\n",
+ "0 BALTIMORE NaN 24 inch bins NaN NaN NaN 4/29/17 \n",
+ "1 BALTIMORE NaN 24 inch bins NaN NaN NaN 5/6/17 \n",
+ "2 BALTIMORE NaN 24 inch bins HOWDEN TYPE NaN NaN 9/24/16 \n",
+ "3 BALTIMORE NaN 24 inch bins HOWDEN TYPE NaN NaN 9/24/16 \n",
+ "4 BALTIMORE NaN 24 inch bins HOWDEN TYPE NaN NaN 11/5/16 \n",
+ "\n",
+ " Low Price High Price Mostly Low ... Unit of Sale Quality Condition \\\n",
+ "0 270.0 280.0 270.0 ... NaN NaN NaN \n",
+ "1 270.0 280.0 270.0 ... NaN NaN NaN \n",
+ "2 160.0 160.0 160.0 ... NaN NaN NaN \n",
+ "3 160.0 160.0 160.0 ... NaN NaN NaN \n",
+ "4 90.0 100.0 90.0 ... NaN NaN NaN \n",
+ "\n",
+ " Appearance Storage Crop Repack Trans Mode Unnamed: 24 Unnamed: 25 \n",
+ "0 NaN NaN NaN E NaN NaN NaN \n",
+ "1 NaN NaN NaN E NaN NaN NaN \n",
+ "2 NaN NaN NaN N NaN NaN NaN \n",
+ "3 NaN NaN NaN N NaN NaN NaN \n",
+ "4 NaN NaN NaN N NaN NaN NaN \n",
+ "\n",
+ "[5 rows x 26 columns]"
+ ]
+ },
+ "execution_count": 167,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "import pandas as pd\n",
+ "import matplotlib.pyplot as plt\n",
+ "import numpy as np\n",
+ "from datetime import datetime\n",
+ "\n",
+ "pumpkins = pd.read_csv('../../data/US-pumpkins.csv')\n",
+ "pumpkins.head()"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 168,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "
"
+ ]
+ },
+ "metadata": {
+ "needs_background": "light"
+ },
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "plt.scatter(X_test,y_test)\n",
+ "plt.plot(X_test,pred)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "يمكن تحديد ميل الخط من معاملات الانحدار الخطي:\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 178,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "(array([-0.01751876]), 21.133734359909326)"
+ ]
+ },
+ "execution_count": 178,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "lin_reg.coef_, lin_reg.intercept_"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "يمكننا استخدام النموذج المدرب لتوقع السعر:\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 179,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "array([16.64893156])"
+ ]
+ },
+ "execution_count": 179,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "# Pumpkin price on programmer's day\n",
+ "\n",
+ "lin_reg.predict([[256]])"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "### الانحدار متعدد الحدود\n",
+ "\n",
+ "في بعض الأحيان تكون العلاقة بين الميزات والنتائج غير خطية بطبيعتها. على سبيل المثال، قد تكون أسعار القرع مرتفعة في الشتاء (الشهور=1،2)، ثم تنخفض خلال الصيف (الشهور=5-7)، ثم ترتفع مرة أخرى. الانحدار الخطي غير قادر على تحديد هذه العلاقة بدقة.\n",
+ "\n",
+ "في هذه الحالة، يمكننا التفكير في إضافة ميزات إضافية. الطريقة البسيطة هي استخدام الحدوديات من الميزات المدخلة، مما يؤدي إلى **الانحدار متعدد الحدود**. في مكتبة Scikit Learn، يمكننا حساب الميزات متعددة الحدود تلقائيًا باستخدام الأنابيب:\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 180,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "Mean error: 2.73 (17.0%)\n",
+ "Model determination: 0.07639977655280217\n"
+ ]
+ },
+ {
+ "data": {
+ "text/plain": [
+ "[]"
+ ]
+ },
+ "execution_count": 180,
+ "metadata": {},
+ "output_type": "execute_result"
+ },
+ {
+ "data": {
+ "image/png": "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",
+ "text/plain": [
+ "
"
+ ]
+ },
+ "metadata": {
+ "needs_background": "light"
+ },
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "from sklearn.preprocessing import PolynomialFeatures\n",
+ "from sklearn.pipeline import make_pipeline\n",
+ "\n",
+ "pipeline = make_pipeline(PolynomialFeatures(2), LinearRegression())\n",
+ "\n",
+ "pipeline.fit(X_train,y_train)\n",
+ "\n",
+ "pred = pipeline.predict(X_test)\n",
+ "\n",
+ "mse = np.sqrt(mean_squared_error(y_test,pred))\n",
+ "print(f'Mean error: {mse:3.3} ({mse/np.mean(pred)*100:3.3}%)')\n",
+ "\n",
+ "score = pipeline.score(X_train,y_train)\n",
+ "print('Model determination: ', score)\n",
+ "\n",
+ "plt.scatter(X_test,y_test)\n",
+ "plt.plot(sorted(X_test),pipeline.predict(sorted(X_test)))"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "### أنواع الترميز\n",
+ "\n",
+ "في العالم المثالي، نريد أن نتمكن من التنبؤ بأسعار أنواع مختلفة من القرع باستخدام نفس النموذج. لأخذ النوع في الاعتبار، نحتاج أولاً إلى تحويله إلى شكل رقمي، أو **ترميزه**. هناك عدة طرق يمكننا القيام بذلك:\n",
+ "\n",
+ "* ترميز رقمي بسيط يقوم بإنشاء جدول لأنواع مختلفة، ثم يستبدل اسم النوع بمؤشر في ذلك الجدول. هذه ليست أفضل فكرة بالنسبة للانحدار الخطي، لأن الانحدار الخطي يأخذ القيمة الرقمية للمؤشر في الاعتبار، والقيمة الرقمية من المحتمل ألا تكون مرتبطة عدديًا بالسعر.\n",
+ "* الترميز الأحادي (One-hot encoding)، الذي سيستبدل عمود `Variety` بأربعة أعمدة مختلفة، واحد لكل نوع، يحتوي على 1 إذا كانت الصفوف المقابلة من النوع المعطى، و0 خلاف ذلك.\n",
+ "\n",
+ "الكود أدناه يوضح كيف يمكننا ترميز النوع باستخدام الترميز الأحادي:\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 181,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "
\n",
+ "\n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
\n",
+ "
FAIRYTALE
\n",
+ "
MINIATURE
\n",
+ "
MIXED HEIRLOOM VARIETIES
\n",
+ "
PIE TYPE
\n",
+ "
\n",
+ " \n",
+ " \n",
+ "
\n",
+ "
70
\n",
+ "
0
\n",
+ "
0
\n",
+ "
0
\n",
+ "
1
\n",
+ "
\n",
+ "
\n",
+ "
71
\n",
+ "
0
\n",
+ "
0
\n",
+ "
0
\n",
+ "
1
\n",
+ "
\n",
+ "
\n",
+ "
72
\n",
+ "
0
\n",
+ "
0
\n",
+ "
0
\n",
+ "
1
\n",
+ "
\n",
+ "
\n",
+ "
73
\n",
+ "
0
\n",
+ "
0
\n",
+ "
0
\n",
+ "
1
\n",
+ "
\n",
+ "
\n",
+ "
74
\n",
+ "
0
\n",
+ "
0
\n",
+ "
0
\n",
+ "
1
\n",
+ "
\n",
+ "
\n",
+ "
...
\n",
+ "
...
\n",
+ "
...
\n",
+ "
...
\n",
+ "
...
\n",
+ "
\n",
+ "
\n",
+ "
1738
\n",
+ "
0
\n",
+ "
1
\n",
+ "
0
\n",
+ "
0
\n",
+ "
\n",
+ "
\n",
+ "
1739
\n",
+ "
0
\n",
+ "
1
\n",
+ "
0
\n",
+ "
0
\n",
+ "
\n",
+ "
\n",
+ "
1740
\n",
+ "
0
\n",
+ "
1
\n",
+ "
0
\n",
+ "
0
\n",
+ "
\n",
+ "
\n",
+ "
1741
\n",
+ "
0
\n",
+ "
1
\n",
+ "
0
\n",
+ "
0
\n",
+ "
\n",
+ "
\n",
+ "
1742
\n",
+ "
0
\n",
+ "
1
\n",
+ "
0
\n",
+ "
0
\n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
415 rows × 4 columns
\n",
+ "
"
+ ],
+ "text/plain": [
+ " FAIRYTALE MINIATURE MIXED HEIRLOOM VARIETIES PIE TYPE\n",
+ "70 0 0 0 1\n",
+ "71 0 0 0 1\n",
+ "72 0 0 0 1\n",
+ "73 0 0 0 1\n",
+ "74 0 0 0 1\n",
+ "... ... ... ... ...\n",
+ "1738 0 1 0 0\n",
+ "1739 0 1 0 0\n",
+ "1740 0 1 0 0\n",
+ "1741 0 1 0 0\n",
+ "1742 0 1 0 0\n",
+ "\n",
+ "[415 rows x 4 columns]"
+ ]
+ },
+ "execution_count": 181,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "pd.get_dummies(new_pumpkins['Variety'])"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "### الانحدار الخطي على التنوع\n",
+ "\n",
+ "سنستخدم الآن نفس الكود المذكور أعلاه، ولكن بدلاً من `DayOfYear` سنستخدم التنوع المشفر بطريقة الـ one-hot كمدخل:\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 182,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "X = pd.get_dummies(new_pumpkins['Variety'])\n",
+ "y = new_pumpkins['Price']"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 183,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "Mean error: 5.24 (19.7%)\n",
+ "Model determination: 0.774085281105197\n"
+ ]
+ }
+ ],
+ "source": [
+ "def run_linear_regression(X,y):\n",
+ " X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0)\n",
+ " lin_reg = LinearRegression()\n",
+ " lin_reg.fit(X_train,y_train)\n",
+ "\n",
+ " pred = lin_reg.predict(X_test)\n",
+ "\n",
+ " mse = np.sqrt(mean_squared_error(y_test,pred))\n",
+ " print(f'Mean error: {mse:3.3} ({mse/np.mean(pred)*100:3.3}%)')\n",
+ "\n",
+ " score = lin_reg.score(X_train,y_train)\n",
+ " print('Model determination: ', score)\n",
+ "\n",
+ "run_linear_regression(X,y)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "يمكننا أيضًا تجربة استخدام ميزات أخرى بنفس الطريقة، ودمجها مع الميزات العددية، مثل `Month` أو `DayOfYear`:\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 184,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "Mean error: 2.84 (10.5%)\n",
+ "Model determination: 0.9401096672643048\n"
+ ]
+ }
+ ],
+ "source": [
+ "X = pd.get_dummies(new_pumpkins['Variety']) \\\n",
+ " .join(new_pumpkins['Month']) \\\n",
+ " .join(pd.get_dummies(new_pumpkins['City'])) \\\n",
+ " .join(pd.get_dummies(new_pumpkins['Package']))\n",
+ "y = new_pumpkins['Price']\n",
+ "\n",
+ "run_linear_regression(X,y)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "### الانحدار متعدد الحدود\n",
+ "\n",
+ "يمكن استخدام الانحدار متعدد الحدود أيضًا مع الميزات الفئوية التي تم ترميزها بطريقة التشفير الواحد-الساخن. سيكون الكود المستخدم لتدريب الانحدار متعدد الحدود مشابهًا بشكل أساسي لما رأيناه أعلاه.\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 185,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "Mean error: 2.23 (8.25%)\n",
+ "Model determination: 0.9652870784724543\n"
+ ]
+ }
+ ],
+ "source": [
+ "from sklearn.preprocessing import PolynomialFeatures\n",
+ "from sklearn.pipeline import make_pipeline\n",
+ "\n",
+ "pipeline = make_pipeline(PolynomialFeatures(2), LinearRegression())\n",
+ "\n",
+ "X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0)\n",
+ "\n",
+ "pipeline.fit(X_train,y_train)\n",
+ "\n",
+ "pred = pipeline.predict(X_test)\n",
+ "\n",
+ "mse = np.sqrt(mean_squared_error(y_test,pred))\n",
+ "print(f'Mean error: {mse:3.3} ({mse/np.mean(pred)*100:3.3}%)')\n",
+ "\n",
+ "score = pipeline.score(X_train,y_train)\n",
+ "print('Model determination: ', score)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": []
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "\n---\n\n**إخلاء المسؤولية**: \nتم ترجمة هذا المستند باستخدام خدمة الترجمة بالذكاء الاصطناعي [Co-op Translator](https://github.com/Azure/co-op-translator). بينما نسعى لتحقيق الدقة، يرجى العلم أن الترجمات الآلية قد تحتوي على أخطاء أو معلومات غير دقيقة. يجب اعتبار المستند الأصلي بلغته الأصلية هو المصدر الموثوق. للحصول على معلومات حساسة أو هامة، يُوصى بالاستعانة بترجمة بشرية احترافية. نحن غير مسؤولين عن أي سوء فهم أو تفسيرات خاطئة ناتجة عن استخدام هذه الترجمة.\n"
+ ]
+ }
+ ],
+ "metadata": {
+ "interpreter": {
+ "hash": "86193a1ab0ba47eac1c69c1756090baa3b420b3eea7d4aafab8b85f8b312f0c5"
+ },
+ "kernelspec": {
+ "display_name": "Python 3.7.0 64-bit ('3.7')",
+ "language": "python",
+ "name": "python3"
+ },
+ "language_info": {
+ "codemirror_mode": {
+ "name": "ipython",
+ "version": 3
+ },
+ "file_extension": ".py",
+ "mimetype": "text/x-python",
+ "name": "python",
+ "nbconvert_exporter": "python",
+ "pygments_lexer": "ipython3",
+ "version": "3.9.5"
+ },
+ "metadata": {
+ "interpreter": {
+ "hash": "70b38d7a306a849643e446cd70466270a13445e5987dfa1344ef2b127438fa4d"
+ }
+ },
+ "orig_nbformat": 2,
+ "coopTranslator": {
+ "original_hash": "d77bd89ae7e79780c68c58bab91f13f8",
+ "translation_date": "2025-08-29T14:40:56+00:00",
+ "source_file": "2-Regression/3-Linear/solution/notebook.ipynb",
+ "language_code": "ar"
+ }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 2
+}
\ No newline at end of file
diff --git a/translations/ar/2-Regression/4-Logistic/README.md b/translations/ar/2-Regression/4-Logistic/README.md
new file mode 100644
index 000000000..039926d38
--- /dev/null
+++ b/translations/ar/2-Regression/4-Logistic/README.md
@@ -0,0 +1,414 @@
+
+# الانحدار اللوجستي لتوقع الفئات
+
+
+
+## [اختبار ما قبل المحاضرة](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/15/)
+
+> ### [هذه الدرس متاح بلغة R!](../../../../2-Regression/4-Logistic/solution/R/lesson_4.html)
+
+## المقدمة
+
+في هذا الدرس الأخير حول الانحدار، وهو أحد تقنيات التعلم الآلي الكلاسيكية الأساسية، سنلقي نظرة على الانحدار اللوجستي. يمكنك استخدام هذه التقنية لاكتشاف الأنماط لتوقع الفئات الثنائية. هل هذه الحلوى شوكولاتة أم لا؟ هل هذا المرض معدٍ أم لا؟ هل سيختار هذا العميل هذا المنتج أم لا؟
+
+في هذا الدرس، ستتعلم:
+
+- مكتبة جديدة لتصور البيانات
+- تقنيات الانحدار اللوجستي
+
+✅ عمّق فهمك للعمل مع هذا النوع من الانحدار في هذا [الوحدة التعليمية](https://docs.microsoft.com/learn/modules/train-evaluate-classification-models?WT.mc_id=academic-77952-leestott)
+
+## المتطلبات الأساسية
+
+بعد العمل مع بيانات القرع، أصبحنا على دراية كافية بها لندرك أن هناك فئة ثنائية يمكننا العمل معها: `اللون`.
+
+لنقم ببناء نموذج انحدار لوجستي لتوقع ذلك، بناءً على بعض المتغيرات، _ما اللون الذي من المرجح أن يكون عليه القرع_ (برتقالي 🎃 أو أبيض 👻).
+
+> لماذا نتحدث عن التصنيف الثنائي في درس متعلق بالانحدار؟ فقط للراحة اللغوية، حيث أن الانحدار اللوجستي هو [في الواقع طريقة تصنيف](https://scikit-learn.org/stable/modules/linear_model.html#logistic-regression)، وإن كانت تعتمد على الخطية. تعرف على طرق أخرى لتصنيف البيانات في مجموعة الدروس التالية.
+
+## تحديد السؤال
+
+لأغراضنا، سنعبر عن هذا كفئة ثنائية: "أبيض" أو "ليس أبيض". هناك أيضًا فئة "مخطط" في مجموعة البيانات الخاصة بنا ولكن هناك عدد قليل من الحالات لها، لذا لن نستخدمها. تختفي بمجرد إزالة القيم الفارغة من مجموعة البيانات على أي حال.
+
+> 🎃 معلومة ممتعة، أحيانًا نسمي القرع الأبيض "قرع الأشباح". ليس من السهل نحته، لذا فهو ليس شائعًا مثل البرتقالي ولكنه يبدو رائعًا! لذلك يمكننا أيضًا إعادة صياغة سؤالنا كالتالي: "شبح" أو "ليس شبحًا". 👻
+
+## عن الانحدار اللوجستي
+
+يختلف الانحدار اللوجستي عن الانحدار الخطي، الذي تعلمت عنه سابقًا، في بعض الطرق المهمة.
+
+[](https://youtu.be/KpeCT6nEpBY "تعلم الآلة للمبتدئين - فهم الانحدار اللوجستي لتصنيف البيانات")
+
+> 🎥 انقر على الصورة أعلاه للحصول على نظرة عامة قصيرة عن الانحدار اللوجستي.
+
+### التصنيف الثنائي
+
+لا يقدم الانحدار اللوجستي نفس الميزات التي يقدمها الانحدار الخطي. الأول يقدم توقعًا حول فئة ثنائية ("أبيض أو ليس أبيض") بينما الثاني قادر على توقع قيم مستمرة، على سبيل المثال بناءً على أصل القرع ووقت الحصاد، _كم سيرتفع سعره_.
+
+
+> مخطط معلوماتي بواسطة [Dasani Madipalli](https://twitter.com/dasani_decoded)
+
+### تصنيفات أخرى
+
+هناك أنواع أخرى من الانحدار اللوجستي، بما في ذلك متعدد الفئات والترتيبي:
+
+- **متعدد الفئات**، والذي يتضمن وجود أكثر من فئة واحدة - "برتقالي، أبيض، ومخطط".
+- **ترتيبي**، والذي يتضمن فئات مرتبة، مفيد إذا أردنا ترتيب النتائج منطقيًا، مثل القرع الذي يتم ترتيبه حسب عدد محدود من الأحجام (صغير جدًا، صغير، متوسط، كبير، كبير جدًا، ضخم).
+
+
+
+### المتغيرات لا تحتاج إلى أن تكون مترابطة
+
+تذكر كيف كان الانحدار الخطي يعمل بشكل أفضل مع المتغيرات الأكثر ترابطًا؟ الانحدار اللوجستي هو العكس - المتغيرات لا تحتاج إلى أن تكون متوافقة. هذا يعمل مع هذه البيانات التي لديها ترابطات ضعيفة إلى حد ما.
+
+### تحتاج إلى الكثير من البيانات النظيفة
+
+سيعطي الانحدار اللوجستي نتائج أكثر دقة إذا استخدمت المزيد من البيانات؛ مجموعة البيانات الصغيرة لدينا ليست مثالية لهذه المهمة، لذا ضع ذلك في اعتبارك.
+
+[](https://youtu.be/B2X4H9vcXTs "تعلم الآلة للمبتدئين - تحليل البيانات وتحضيرها للانحدار اللوجستي")
+
+> 🎥 انقر على الصورة أعلاه للحصول على نظرة عامة قصيرة عن تحضير البيانات للانحدار الخطي.
+
+✅ فكر في أنواع البيانات التي تناسب الانحدار اللوجستي بشكل جيد.
+
+## التمرين - تنظيف البيانات
+
+أولاً، قم بتنظيف البيانات قليلاً، بإزالة القيم الفارغة واختيار بعض الأعمدة فقط:
+
+1. أضف الكود التالي:
+
+ ```python
+
+ columns_to_select = ['City Name','Package','Variety', 'Origin','Item Size', 'Color']
+ pumpkins = full_pumpkins.loc[:, columns_to_select]
+
+ pumpkins.dropna(inplace=True)
+ ```
+
+ يمكنك دائمًا إلقاء نظرة على إطار البيانات الجديد الخاص بك:
+
+ ```python
+ pumpkins.info
+ ```
+
+### التصور - مخطط الفئات
+
+بحلول الآن، قمت بتحميل [دفتر الملاحظات المبدئي](./notebook.ipynb) مع بيانات القرع مرة أخرى وقمت بتنظيفه للحفاظ على مجموعة بيانات تحتوي على بعض المتغيرات، بما في ذلك `اللون`. لنقم بتصور إطار البيانات في دفتر الملاحظات باستخدام مكتبة مختلفة: [Seaborn](https://seaborn.pydata.org/index.html)، التي تعتمد على Matplotlib التي استخدمناها سابقًا.
+
+Seaborn يقدم طرقًا رائعة لتصور بياناتك. على سبيل المثال، يمكنك مقارنة توزيعات البيانات لكل `Variety` و `Color` في مخطط الفئات.
+
+1. قم بإنشاء مثل هذا المخطط باستخدام وظيفة `catplot`، باستخدام بيانات القرع `pumpkins`، وتحديد تعيين اللون لكل فئة قرع (برتقالي أو أبيض):
+
+ ```python
+ import seaborn as sns
+
+ palette = {
+ 'ORANGE': 'orange',
+ 'WHITE': 'wheat',
+ }
+
+ sns.catplot(
+ data=pumpkins, y="Variety", hue="Color", kind="count",
+ palette=palette,
+ )
+ ```
+
+ 
+
+ من خلال ملاحظة البيانات، يمكنك رؤية كيف ترتبط بيانات اللون بالتنوع.
+
+ ✅ بالنظر إلى هذا المخطط الفئوي، ما هي بعض الاستكشافات المثيرة التي يمكنك تصورها؟
+
+### معالجة البيانات: ترميز الميزات والتسميات
+
+تحتوي مجموعة بيانات القرع الخاصة بنا على قيم نصية لجميع أعمدتها. العمل مع البيانات الفئوية يكون بديهيًا للبشر ولكنه ليس كذلك للآلات. تعمل خوارزميات التعلم الآلي بشكل جيد مع الأرقام. لهذا السبب، يعد الترميز خطوة مهمة جدًا في مرحلة معالجة البيانات، حيث يتيح لنا تحويل البيانات الفئوية إلى بيانات رقمية، دون فقدان أي معلومات. الترميز الجيد يؤدي إلى بناء نموذج جيد.
+
+بالنسبة لترميز الميزات، هناك نوعان رئيسيان من المرمزين:
+
+1. المرمز الترتيبي: يناسب المتغيرات الترتيبية، وهي المتغيرات الفئوية التي تتبع بياناتها ترتيبًا منطقيًا، مثل عمود `Item Size` في مجموعة البيانات الخاصة بنا. يقوم بإنشاء تعيين بحيث يتم تمثيل كل فئة برقم، وهو ترتيب الفئة في العمود.
+
+ ```python
+ from sklearn.preprocessing import OrdinalEncoder
+
+ item_size_categories = [['sml', 'med', 'med-lge', 'lge', 'xlge', 'jbo', 'exjbo']]
+ ordinal_features = ['Item Size']
+ ordinal_encoder = OrdinalEncoder(categories=item_size_categories)
+ ```
+
+2. المرمز الفئوي: يناسب المتغيرات الاسمية، وهي المتغيرات الفئوية التي لا تتبع بياناتها ترتيبًا منطقيًا، مثل جميع الميزات المختلفة عن `Item Size` في مجموعة البيانات الخاصة بنا. إنه ترميز ثنائي، مما يعني أن كل فئة يتم تمثيلها بعمود ثنائي: تكون القيمة المشفرة مساوية لـ 1 إذا كان القرع ينتمي إلى هذا التنوع و 0 خلاف ذلك.
+
+ ```python
+ from sklearn.preprocessing import OneHotEncoder
+
+ categorical_features = ['City Name', 'Package', 'Variety', 'Origin']
+ categorical_encoder = OneHotEncoder(sparse_output=False)
+ ```
+
+ثم يتم استخدام `ColumnTransformer` لدمج عدة مرمزين في خطوة واحدة وتطبيقهم على الأعمدة المناسبة.
+
+```python
+ from sklearn.compose import ColumnTransformer
+
+ ct = ColumnTransformer(transformers=[
+ ('ord', ordinal_encoder, ordinal_features),
+ ('cat', categorical_encoder, categorical_features)
+ ])
+
+ ct.set_output(transform='pandas')
+ encoded_features = ct.fit_transform(pumpkins)
+```
+
+من ناحية أخرى، لترميز التسمية، نستخدم فئة `LabelEncoder` من scikit-learn، وهي فئة مساعدة لتطبيع التسميات بحيث تحتوي فقط على قيم بين 0 و n_classes-1 (هنا، 0 و 1).
+
+```python
+ from sklearn.preprocessing import LabelEncoder
+
+ label_encoder = LabelEncoder()
+ encoded_label = label_encoder.fit_transform(pumpkins['Color'])
+```
+
+بمجرد أن نقوم بترميز الميزات والتسمية، يمكننا دمجها في إطار بيانات جديد `encoded_pumpkins`.
+
+```python
+ encoded_pumpkins = encoded_features.assign(Color=encoded_label)
+```
+
+✅ ما هي مزايا استخدام المرمز الترتيبي لعمود `Item Size`؟
+
+### تحليل العلاقات بين المتغيرات
+
+الآن بعد أن قمنا بمعالجة البيانات، يمكننا تحليل العلاقات بين الميزات والتسمية لفهم مدى قدرة النموذج على توقع التسمية بناءً على الميزات.
+
+أفضل طريقة لإجراء هذا النوع من التحليل هي رسم البيانات. سنستخدم مرة أخرى وظيفة `catplot` من Seaborn، لتصور العلاقات بين `Item Size` و `Variety` و `Color` في مخطط الفئات. لتحسين رسم البيانات، سنستخدم العمود المشفر `Item Size` والعمود غير المشفر `Variety`.
+
+```python
+ palette = {
+ 'ORANGE': 'orange',
+ 'WHITE': 'wheat',
+ }
+ pumpkins['Item Size'] = encoded_pumpkins['ord__Item Size']
+
+ g = sns.catplot(
+ data=pumpkins,
+ x="Item Size", y="Color", row='Variety',
+ kind="box", orient="h",
+ sharex=False, margin_titles=True,
+ height=1.8, aspect=4, palette=palette,
+ )
+ g.set(xlabel="Item Size", ylabel="").set(xlim=(0,6))
+ g.set_titles(row_template="{row_name}")
+```
+
+
+
+### استخدام مخطط السرب
+
+نظرًا لأن `Color` هو فئة ثنائية (أبيض أو ليس أبيض)، فإنه يحتاج إلى "[نهج متخصص](https://seaborn.pydata.org/tutorial/categorical.html?highlight=bar) للتصور". هناك طرق أخرى لتصور العلاقة بين هذه الفئة والمتغيرات الأخرى.
+
+يمكنك تصور المتغيرات جنبًا إلى جنب باستخدام مخططات Seaborn.
+
+1. جرب مخطط "السرب" لإظهار توزيع القيم:
+
+ ```python
+ palette = {
+ 0: 'orange',
+ 1: 'wheat'
+ }
+ sns.swarmplot(x="Color", y="ord__Item Size", data=encoded_pumpkins, palette=palette)
+ ```
+
+ 
+
+**انتبه**: قد يولد الكود أعلاه تحذيرًا، حيث يفشل Seaborn في تمثيل هذا العدد الكبير من نقاط البيانات في مخطط السرب. الحل الممكن هو تقليل حجم العلامة باستخدام معلمة "size". ومع ذلك، كن على علم بأن هذا يؤثر على قابلية قراءة المخطط.
+
+> **🧮 أرني الرياضيات**
+>
+> يعتمد الانحدار اللوجستي على مفهوم "الاحتمالية القصوى" باستخدام [دوال السجمويد](https://wikipedia.org/wiki/Sigmoid_function). تبدو "دالة السجمويد" على الرسم البياني كمنحنى على شكل "S". تأخذ قيمة وتقوم بتعيينها إلى مكان ما بين 0 و 1. يُطلق على منحناها أيضًا "المنحنى اللوجستي". تبدو صيغتها كالتالي:
+>
+> 
+>
+> حيث يكون منتصف السجمويد عند النقطة 0 لـ x، وL هو القيمة القصوى للمنحنى، وk هو انحدار المنحنى. إذا كانت نتيجة الدالة أكثر من 0.5، سيتم إعطاء التسمية المعنية الفئة "1" من الخيار الثنائي. إذا لم يكن كذلك، سيتم تصنيفها كـ "0".
+
+## بناء النموذج الخاص بك
+
+بناء نموذج لتحديد هذه الفئات الثنائية أمر بسيط بشكل مدهش في Scikit-learn.
+
+[](https://youtu.be/MmZS2otPrQ8 "تعلم الآلة للمبتدئين - الانحدار اللوجستي لتصنيف البيانات")
+
+> 🎥 انقر على الصورة أعلاه للحصول على نظرة عامة قصيرة عن بناء نموذج الانحدار الخطي.
+
+1. اختر المتغيرات التي تريد استخدامها في نموذج التصنيف الخاص بك وقسم مجموعات التدريب والاختبار باستخدام `train_test_split()`:
+
+ ```python
+ from sklearn.model_selection import train_test_split
+
+ X = encoded_pumpkins[encoded_pumpkins.columns.difference(['Color'])]
+ y = encoded_pumpkins['Color']
+
+ X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0)
+
+ ```
+
+2. الآن يمكنك تدريب النموذج الخاص بك، عن طريق استدعاء `fit()` باستخدام بيانات التدريب الخاصة بك، واطبع النتيجة:
+
+ ```python
+ from sklearn.metrics import f1_score, classification_report
+ from sklearn.linear_model import LogisticRegression
+
+ model = LogisticRegression()
+ model.fit(X_train, y_train)
+ predictions = model.predict(X_test)
+
+ print(classification_report(y_test, predictions))
+ print('Predicted labels: ', predictions)
+ print('F1-score: ', f1_score(y_test, predictions))
+ ```
+
+ ألقِ نظرة على لوحة نتائج النموذج الخاص بك. ليس سيئًا، بالنظر إلى أن لديك حوالي 1000 صف فقط من البيانات:
+
+ ```output
+ precision recall f1-score support
+
+ 0 0.94 0.98 0.96 166
+ 1 0.85 0.67 0.75 33
+
+ accuracy 0.92 199
+ macro avg 0.89 0.82 0.85 199
+ weighted avg 0.92 0.92 0.92 199
+
+ Predicted labels: [0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 1 0 0 0 0 0 0 0 0 1 0 0 0 0
+ 0 0 0 0 0 1 0 1 0 0 1 0 0 0 0 0 1 0 1 0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+ 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 1 0 1 0 0 0 0 0 0 0 1 0
+ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 1 0 0 0 1 1 0
+ 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1
+ 0 0 0 1 0 0 0 0 0 0 0 0 1 1]
+ F1-score: 0.7457627118644068
+ ```
+
+## فهم أفضل عبر مصفوفة الالتباس
+
+بينما يمكنك الحصول على تقرير لوحة النتائج [المصطلحات](https://scikit-learn.org/stable/modules/generated/sklearn.metrics.classification_report.html?highlight=classification_report#sklearn.metrics.classification_report) عن طريق طباعة العناصر أعلاه، قد تتمكن من فهم النموذج الخاص بك بسهولة أكبر باستخدام [مصفوفة الالتباس](https://scikit-learn.org/stable/modules/model_evaluation.html#confusion-matrix) لمساعدتنا على فهم كيفية أداء النموذج.
+
+> 🎓 "[مصفوفة الالتباس](https://wikipedia.org/wiki/Confusion_matrix)" (أو "مصفوفة الخطأ") هي جدول يعبر عن الإيجابيات والسلبيات الحقيقية والخاطئة لنموذجك، وبالتالي يقيس دقة التوقعات.
+
+1. لاستخدام مصفوفة الالتباس، استدعِ `confusion_matrix()`:
+
+ ```python
+ from sklearn.metrics import confusion_matrix
+ confusion_matrix(y_test, predictions)
+ ```
+
+ ألقِ نظرة على مصفوفة الالتباس الخاصة بالنموذج الخاص بك:
+
+ ```output
+ array([[162, 4],
+ [ 11, 22]])
+ ```
+
+في Scikit-learn، تمثل الصفوف (المحور 0) التسميات الفعلية وتمثل الأعمدة (المحور 1) التسميات المتوقعة.
+
+| | 0 | 1 |
+| :---: | :---: | :---: |
+| 0 | TN | FP |
+| 1 | FN | TP |
+
+ما الذي يحدث هنا؟ لنفترض أن النموذج الخاص بنا طُلب منه تصنيف القرع بين فئتين ثنائيتين، الفئة "أبيض" والفئة "ليس أبيض".
+
+- إذا توقع النموذج أن القرع ليس أبيض وكان ينتمي بالفعل إلى الفئة "ليس أبيض"، نسميه سلبية حقيقية، يظهر في الرقم العلوي الأيسر.
+- إذا توقع النموذج أن القرع أبيض وكان ينتمي بالفعل إلى الفئة "ليس أبيض"، نسميه سلبية خاطئة، يظهر في الرقم السفلي الأيسر.
+- إذا توقع النموذج أن القرع ليس أبيض وكان ينتمي بالفعل إلى الفئة "أبيض"، نسميه إيجابية خاطئة، يظهر في الرقم العلوي الأيمن.
+- إذا توقع النموذج أن القرع أبيض وكان ينتمي بالفعل إلى الفئة "أبيض"، نسميه إيجابية حقيقية، يظهر في الرقم السفلي الأيمن.
+
+كما قد تكون خمنت، من الأفضل أن يكون لديك عدد أكبر من الإيجابيات الحقيقية والسلبيات الحقيقية وعدد أقل من الإيجابيات الخاطئة والسلبيات الخاطئة، مما يعني أن النموذج يعمل بشكل أفضل.
+كيف ترتبط مصفوفة الالتباس بالدقة والاسترجاع؟ تذكر أن تقرير التصنيف الذي طُبع أعلاه أظهر دقة (0.85) واسترجاع (0.67).
+
+الدقة = tp / (tp + fp) = 22 / (22 + 4) = 0.8461538461538461
+
+الاسترجاع = tp / (tp + fn) = 22 / (22 + 11) = 0.6666666666666666
+
+✅ س: وفقًا لمصفوفة الالتباس، كيف كان أداء النموذج؟ ج: ليس سيئًا؛ هناك عدد جيد من القيم السلبية الحقيقية ولكن أيضًا بعض القيم السلبية الخاطئة.
+
+دعونا نعيد النظر في المصطلحات التي رأيناها سابقًا بمساعدة خريطة TP/TN وFP/FN في مصفوفة الالتباس:
+
+🎓 الدقة: TP/(TP + FP) النسبة المئوية للحالات ذات الصلة بين الحالات المسترجعة (على سبيل المثال، أي التصنيفات كانت مصنفة بشكل جيد).
+
+🎓 الاسترجاع: TP/(TP + FN) النسبة المئوية للحالات ذات الصلة التي تم استرجاعها، سواء كانت مصنفة بشكل جيد أم لا.
+
+🎓 درجة F1: (2 * الدقة * الاسترجاع)/(الدقة + الاسترجاع) متوسط مرجح للدقة والاسترجاع، حيث الأفضل هو 1 والأسوأ هو 0.
+
+🎓 الدعم: عدد مرات ظهور كل تصنيف مسترجع.
+
+🎓 الدقة الإجمالية: (TP + TN)/(TP + TN + FP + FN) النسبة المئوية للتصنيفات التي تم التنبؤ بها بدقة لعينة.
+
+🎓 المتوسط الكلي: حساب المتوسط غير الموزون للمقاييس لكل تصنيف، دون أخذ عدم التوازن في التصنيفات بعين الاعتبار.
+
+🎓 المتوسط الموزون: حساب المتوسط للمقاييس لكل تصنيف، مع أخذ عدم التوازن في التصنيفات بعين الاعتبار من خلال وزنها بدعمها (عدد الحالات الحقيقية لكل تصنيف).
+
+✅ هل يمكنك التفكير في أي مقياس يجب مراقبته إذا كنت تريد تقليل عدد القيم السلبية الخاطئة في النموذج؟
+
+## تصور منحنى ROC لهذا النموذج
+
+[](https://youtu.be/GApO575jTA0 "تعلم الآلة للمبتدئين - تحليل أداء الانحدار اللوجستي باستخدام منحنيات ROC")
+
+> 🎥 انقر على الصورة أعلاه لمشاهدة فيديو قصير عن منحنيات ROC
+
+دعونا نقوم بتصور آخر لرؤية ما يسمى بـ "منحنى ROC":
+
+```python
+from sklearn.metrics import roc_curve, roc_auc_score
+import matplotlib
+import matplotlib.pyplot as plt
+%matplotlib inline
+
+y_scores = model.predict_proba(X_test)
+fpr, tpr, thresholds = roc_curve(y_test, y_scores[:,1])
+
+fig = plt.figure(figsize=(6, 6))
+plt.plot([0, 1], [0, 1], 'k--')
+plt.plot(fpr, tpr)
+plt.xlabel('False Positive Rate')
+plt.ylabel('True Positive Rate')
+plt.title('ROC Curve')
+plt.show()
+```
+
+باستخدام مكتبة Matplotlib، قم برسم [منحنى تشغيل المستقبل](https://scikit-learn.org/stable/auto_examples/model_selection/plot_roc.html?highlight=roc) أو ROC للنموذج. تُستخدم منحنيات ROC غالبًا للحصول على رؤية لمخرجات المصنف من حيث القيم الإيجابية الحقيقية مقابل القيم الإيجابية الخاطئة. "تتميز منحنيات ROC عادةً بمعدل القيم الإيجابية الحقيقية على المحور Y، ومعدل القيم الإيجابية الخاطئة على المحور X." وبالتالي، فإن انحدار المنحنى والمساحة بين خط المنتصف والمنحنى مهمان: تريد منحنى يتجه بسرعة إلى الأعلى ويتجاوز الخط. في حالتنا، هناك قيم إيجابية خاطئة في البداية، ثم يتجه الخط إلى الأعلى ويتجاوز بشكل صحيح:
+
+
+
+أخيرًا، استخدم واجهة برمجة التطبيقات [`roc_auc_score`](https://scikit-learn.org/stable/modules/generated/sklearn.metrics.roc_auc_score.html?highlight=roc_auc#sklearn.metrics.roc_auc_score) الخاصة بـ Scikit-learn لحساب "المساحة تحت المنحنى" (AUC):
+
+```python
+auc = roc_auc_score(y_test,y_scores[:,1])
+print(auc)
+```
+النتيجة هي `0.9749908725812341`. نظرًا لأن AUC يتراوح بين 0 و1، فإنك تريد درجة كبيرة، حيث أن النموذج الذي يكون دقيقًا بنسبة 100% في توقعاته سيحصل على AUC بقيمة 1؛ في هذه الحالة، النموذج _جيد جدًا_.
+
+في دروس التصنيفات المستقبلية، ستتعلم كيفية التكرار لتحسين درجات النموذج. ولكن الآن، تهانينا! لقد أكملت دروس الانحدار هذه!
+
+---
+## 🚀تحدي
+
+هناك الكثير لاستكشافه بخصوص الانحدار اللوجستي! ولكن أفضل طريقة للتعلم هي التجربة. ابحث عن مجموعة بيانات تناسب هذا النوع من التحليل وقم ببناء نموذج باستخدامها. ماذا تتعلم؟ نصيحة: جرب [Kaggle](https://www.kaggle.com/search?q=logistic+regression+datasets) للحصول على مجموعات بيانات مثيرة للاهتمام.
+
+## [اختبار ما بعد المحاضرة](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/16/)
+
+## المراجعة والدراسة الذاتية
+
+اقرأ الصفحات الأولى من [هذا البحث من جامعة ستانفورد](https://web.stanford.edu/~jurafsky/slp3/5.pdf) حول بعض الاستخدامات العملية للانحدار اللوجستي. فكر في المهام التي تناسب نوعًا واحدًا أو آخر من مهام الانحدار التي درسناها حتى الآن. ما الذي سيكون الأفضل؟
+
+## الواجب
+
+[إعادة محاولة هذا الانحدار](assignment.md)
+
+---
+
+**إخلاء المسؤولية**:
+تم ترجمة هذا المستند باستخدام خدمة الترجمة الآلية [Co-op Translator](https://github.com/Azure/co-op-translator). بينما نسعى لتحقيق الدقة، يرجى العلم أن الترجمات الآلية قد تحتوي على أخطاء أو معلومات غير دقيقة. يجب اعتبار المستند الأصلي بلغته الأصلية هو المصدر الموثوق. للحصول على معلومات حساسة أو هامة، يُوصى بالاستعانة بترجمة بشرية احترافية. نحن غير مسؤولين عن أي سوء فهم أو تفسيرات خاطئة ناتجة عن استخدام هذه الترجمة.
\ No newline at end of file
diff --git a/translations/ar/2-Regression/4-Logistic/assignment.md b/translations/ar/2-Regression/4-Logistic/assignment.md
new file mode 100644
index 000000000..239febb5d
--- /dev/null
+++ b/translations/ar/2-Regression/4-Logistic/assignment.md
@@ -0,0 +1,25 @@
+
+# إعادة المحاولة مع بعض الانحدار
+
+## التعليمات
+
+في الدرس، استخدمت مجموعة فرعية من بيانات القرع. الآن، عد إلى البيانات الأصلية وحاول استخدام جميع البيانات، بعد تنظيفها وتوحيدها، لبناء نموذج الانحدار اللوجستي.
+
+## المعايير
+
+| المعايير | ممتازة | مقبولة | تحتاج إلى تحسين |
+| -------- | ----------------------------------------------------------------------- | ---------------------------------------------------------- | --------------------------------------------------------- |
+| | يتم تقديم دفتر ملاحظات مع نموذج مشروح جيدًا ويعمل بشكل جيد | يتم تقديم دفتر ملاحظات مع نموذج يعمل بشكل مقبول | يتم تقديم دفتر ملاحظات مع نموذج ضعيف الأداء أو غير موجود |
+
+---
+
+**إخلاء المسؤولية**:
+تمت ترجمة هذا المستند باستخدام خدمة الترجمة الآلية [Co-op Translator](https://github.com/Azure/co-op-translator). بينما نسعى لتحقيق الدقة، يرجى العلم أن الترجمات الآلية قد تحتوي على أخطاء أو معلومات غير دقيقة. يجب اعتبار المستند الأصلي بلغته الأصلية هو المصدر الموثوق. للحصول على معلومات حساسة أو هامة، يُوصى بالاستعانة بترجمة بشرية احترافية. نحن غير مسؤولين عن أي سوء فهم أو تفسيرات خاطئة تنشأ عن استخدام هذه الترجمة.
\ No newline at end of file
diff --git a/translations/ar/2-Regression/4-Logistic/notebook.ipynb b/translations/ar/2-Regression/4-Logistic/notebook.ipynb
new file mode 100644
index 000000000..8b5f1c3b2
--- /dev/null
+++ b/translations/ar/2-Regression/4-Logistic/notebook.ipynb
@@ -0,0 +1,269 @@
+{
+ "cells": [
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "## أنواع القرع واللون\n",
+ "\n",
+ "قم بتحميل المكتبات والبيانات المطلوبة. قم بتحويل البيانات إلى إطار بيانات يحتوي على جزء من البيانات:\n",
+ "\n",
+ "لنلقي نظرة على العلاقة بين اللون والنوع\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 1,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "
\n",
+ "\n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
\n",
+ "
City Name
\n",
+ "
Type
\n",
+ "
Package
\n",
+ "
Variety
\n",
+ "
Sub Variety
\n",
+ "
Grade
\n",
+ "
Date
\n",
+ "
Low Price
\n",
+ "
High Price
\n",
+ "
Mostly Low
\n",
+ "
...
\n",
+ "
Unit of Sale
\n",
+ "
Quality
\n",
+ "
Condition
\n",
+ "
Appearance
\n",
+ "
Storage
\n",
+ "
Crop
\n",
+ "
Repack
\n",
+ "
Trans Mode
\n",
+ "
Unnamed: 24
\n",
+ "
Unnamed: 25
\n",
+ "
\n",
+ " \n",
+ " \n",
+ "
\n",
+ "
0
\n",
+ "
BALTIMORE
\n",
+ "
NaN
\n",
+ "
24 inch bins
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
4/29/17
\n",
+ "
270.0
\n",
+ "
280.0
\n",
+ "
270.0
\n",
+ "
...
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
E
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
\n",
+ "
\n",
+ "
1
\n",
+ "
BALTIMORE
\n",
+ "
NaN
\n",
+ "
24 inch bins
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
5/6/17
\n",
+ "
270.0
\n",
+ "
280.0
\n",
+ "
270.0
\n",
+ "
...
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
E
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
\n",
+ "
\n",
+ "
2
\n",
+ "
BALTIMORE
\n",
+ "
NaN
\n",
+ "
24 inch bins
\n",
+ "
HOWDEN TYPE
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
9/24/16
\n",
+ "
160.0
\n",
+ "
160.0
\n",
+ "
160.0
\n",
+ "
...
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
N
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
\n",
+ "
\n",
+ "
3
\n",
+ "
BALTIMORE
\n",
+ "
NaN
\n",
+ "
24 inch bins
\n",
+ "
HOWDEN TYPE
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
9/24/16
\n",
+ "
160.0
\n",
+ "
160.0
\n",
+ "
160.0
\n",
+ "
...
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
N
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
\n",
+ "
\n",
+ "
4
\n",
+ "
BALTIMORE
\n",
+ "
NaN
\n",
+ "
24 inch bins
\n",
+ "
HOWDEN TYPE
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
11/5/16
\n",
+ "
90.0
\n",
+ "
100.0
\n",
+ "
90.0
\n",
+ "
...
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
N
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
5 rows × 26 columns
\n",
+ "
"
+ ],
+ "text/plain": [
+ " City Name Type Package Variety Sub Variety Grade Date \\\n",
+ "0 BALTIMORE NaN 24 inch bins NaN NaN NaN 4/29/17 \n",
+ "1 BALTIMORE NaN 24 inch bins NaN NaN NaN 5/6/17 \n",
+ "2 BALTIMORE NaN 24 inch bins HOWDEN TYPE NaN NaN 9/24/16 \n",
+ "3 BALTIMORE NaN 24 inch bins HOWDEN TYPE NaN NaN 9/24/16 \n",
+ "4 BALTIMORE NaN 24 inch bins HOWDEN TYPE NaN NaN 11/5/16 \n",
+ "\n",
+ " Low Price High Price Mostly Low ... Unit of Sale Quality Condition \\\n",
+ "0 270.0 280.0 270.0 ... NaN NaN NaN \n",
+ "1 270.0 280.0 270.0 ... NaN NaN NaN \n",
+ "2 160.0 160.0 160.0 ... NaN NaN NaN \n",
+ "3 160.0 160.0 160.0 ... NaN NaN NaN \n",
+ "4 90.0 100.0 90.0 ... NaN NaN NaN \n",
+ "\n",
+ " Appearance Storage Crop Repack Trans Mode Unnamed: 24 Unnamed: 25 \n",
+ "0 NaN NaN NaN E NaN NaN NaN \n",
+ "1 NaN NaN NaN E NaN NaN NaN \n",
+ "2 NaN NaN NaN N NaN NaN NaN \n",
+ "3 NaN NaN NaN N NaN NaN NaN \n",
+ "4 NaN NaN NaN N NaN NaN NaN \n",
+ "\n",
+ "[5 rows x 26 columns]"
+ ]
+ },
+ "execution_count": 1,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "import pandas as pd\n",
+ "import numpy as np\n",
+ "\n",
+ "full_pumpkins = pd.read_csv('../data/US-pumpkins.csv')\n",
+ "\n",
+ "full_pumpkins.head()\n"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "\n---\n\n**إخلاء المسؤولية**: \nتمت ترجمة هذا المستند باستخدام خدمة الترجمة الآلية [Co-op Translator](https://github.com/Azure/co-op-translator). بينما نسعى لتحقيق الدقة، يرجى العلم أن الترجمات الآلية قد تحتوي على أخطاء أو معلومات غير دقيقة. يجب اعتبار المستند الأصلي بلغته الأصلية هو المصدر الموثوق. للحصول على معلومات حساسة أو هامة، يُوصى بالاستعانة بترجمة بشرية احترافية. نحن غير مسؤولين عن أي سوء فهم أو تفسيرات خاطئة تنشأ عن استخدام هذه الترجمة.\n"
+ ]
+ }
+ ],
+ "metadata": {
+ "kernelspec": {
+ "display_name": "Python 3",
+ "language": "python",
+ "name": "python3"
+ },
+ "language_info": {
+ "codemirror_mode": {
+ "name": "ipython",
+ "version": 3
+ },
+ "file_extension": ".py",
+ "mimetype": "text/x-python",
+ "name": "python",
+ "nbconvert_exporter": "python",
+ "pygments_lexer": "ipython3",
+ "version": "3.11.1"
+ },
+ "metadata": {
+ "interpreter": {
+ "hash": "70b38d7a306a849643e446cd70466270a13445e5987dfa1344ef2b127438fa4d"
+ }
+ },
+ "orig_nbformat": 2,
+ "coopTranslator": {
+ "original_hash": "dee08c2b49057b0de8b6752c4dbca368",
+ "translation_date": "2025-08-29T14:48:31+00:00",
+ "source_file": "2-Regression/4-Logistic/notebook.ipynb",
+ "language_code": "ar"
+ }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 2
+}
\ No newline at end of file
diff --git a/translations/ar/2-Regression/4-Logistic/solution/Julia/README.md b/translations/ar/2-Regression/4-Logistic/solution/Julia/README.md
new file mode 100644
index 000000000..8e4b0e20d
--- /dev/null
+++ b/translations/ar/2-Regression/4-Logistic/solution/Julia/README.md
@@ -0,0 +1,15 @@
+
+هذا عنصر نائب مؤقت
+
+---
+
+**إخلاء المسؤولية**:
+تمت ترجمة هذا المستند باستخدام خدمة الترجمة الآلية [Co-op Translator](https://github.com/Azure/co-op-translator). بينما نسعى لتحقيق الدقة، يرجى العلم أن الترجمات الآلية قد تحتوي على أخطاء أو معلومات غير دقيقة. يجب اعتبار المستند الأصلي بلغته الأصلية هو المصدر الموثوق. للحصول على معلومات حساسة أو هامة، يُوصى بالاستعانة بترجمة بشرية احترافية. نحن غير مسؤولين عن أي سوء فهم أو تفسيرات خاطئة تنشأ عن استخدام هذه الترجمة.
\ No newline at end of file
diff --git a/translations/ar/2-Regression/4-Logistic/solution/R/lesson_4-R.ipynb b/translations/ar/2-Regression/4-Logistic/solution/R/lesson_4-R.ipynb
new file mode 100644
index 000000000..47cbd34ac
--- /dev/null
+++ b/translations/ar/2-Regression/4-Logistic/solution/R/lesson_4-R.ipynb
@@ -0,0 +1,685 @@
+{
+ "cells": [
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "## بناء نموذج الانحدار اللوجستي - الدرس الرابع\n",
+ "\n",
+ "\n",
+ "\n",
+ "#### **[اختبار ما قبل المحاضرة](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/15/)**\n",
+ "\n",
+ "#### المقدمة\n",
+ "\n",
+ "في هذا الدرس الأخير حول الانحدار، وهو أحد تقنيات التعلم الآلي *الكلاسيكية* الأساسية، سنلقي نظرة على الانحدار اللوجستي. يمكنك استخدام هذه التقنية لاكتشاف الأنماط للتنبؤ بالفئات الثنائية. هل هذه الحلوى تحتوي على شوكولاتة أم لا؟ هل هذا المرض معدٍ أم لا؟ هل سيختار هذا العميل هذا المنتج أم لا؟\n",
+ "\n",
+ "في هذا الدرس، ستتعلم:\n",
+ "\n",
+ "- تقنيات الانحدار اللوجستي\n",
+ "\n",
+ "✅ عمّق فهمك للعمل مع هذا النوع من الانحدار في هذا [الوحدة التعليمية](https://learn.microsoft.com/training/modules/introduction-classification-models/?WT.mc_id=academic-77952-leestott)\n",
+ "\n",
+ "## المتطلبات الأساسية\n",
+ "\n",
+ "بعد العمل مع بيانات القرع، أصبحنا على دراية كافية بها لندرك أن هناك فئة ثنائية يمكننا العمل معها: `Color`.\n",
+ "\n",
+ "لنقم ببناء نموذج انحدار لوجستي للتنبؤ بذلك، بناءً على بعض المتغيرات، *ما اللون الذي من المرجح أن يكون عليه القرع المعطى* (برتقالي 🎃 أو أبيض 👻).\n",
+ "\n",
+ "> لماذا نتحدث عن التصنيف الثنائي في درس متعلق بالانحدار؟ فقط لسهولة التعبير اللغوي، حيث أن الانحدار اللوجستي هو [في الواقع طريقة تصنيف](https://scikit-learn.org/stable/modules/linear_model.html#logistic-regression)، وإن كانت تعتمد على الخطية. تعرف على طرق أخرى لتصنيف البيانات في مجموعة الدروس التالية.\n",
+ "\n",
+ "بالنسبة لهذا الدرس، سنحتاج إلى الحزم التالية:\n",
+ "\n",
+ "- `tidyverse`: [tidyverse](https://www.tidyverse.org/) هو [مجموعة من حزم R](https://www.tidyverse.org/packages) مصممة لجعل علم البيانات أسرع وأسهل وأكثر متعة!\n",
+ "\n",
+ "- `tidymodels`: إطار عمل [tidymodels](https://www.tidymodels.org/) هو [مجموعة من الحزم](https://www.tidymodels.org/packages/) للنمذجة والتعلم الآلي.\n",
+ "\n",
+ "- `janitor`: حزمة [janitor](https://github.com/sfirke/janitor) توفر أدوات بسيطة لفحص وتنظيف البيانات غير النظيفة.\n",
+ "\n",
+ "- `ggbeeswarm`: حزمة [ggbeeswarm](https://github.com/eclarke/ggbeeswarm) توفر طرقًا لإنشاء مخططات بأسلوب \"beeswarm\" باستخدام ggplot2.\n",
+ "\n",
+ "يمكنك تثبيتها باستخدام:\n",
+ "\n",
+ "`install.packages(c(\"tidyverse\", \"tidymodels\", \"janitor\", \"ggbeeswarm\"))`\n",
+ "\n",
+ "بدلاً من ذلك، يقوم البرنامج النصي أدناه بالتحقق مما إذا كانت الحزم المطلوبة لإكمال هذه الوحدة موجودة ويقوم بتثبيتها إذا كانت مفقودة.\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "vscode": {
+ "languageId": "r"
+ }
+ },
+ "outputs": [],
+ "source": [
+ "suppressWarnings(if (!require(\"pacman\"))install.packages(\"pacman\"))\n",
+ "\n",
+ "pacman::p_load(tidyverse, tidymodels, janitor, ggbeeswarm)\n"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "## **تعريف السؤال**\n",
+ "\n",
+ "لأغراضنا، سنعبر عن هذا كتصنيف ثنائي: \"أبيض\" أو \"ليس أبيض\". هناك أيضًا فئة \"مخطط\" في بياناتنا، ولكن عدد الحالات فيها قليل جدًا، لذلك لن نستخدمها. على أي حال، تختفي هذه الفئة بمجرد إزالة القيم الفارغة من البيانات.\n",
+ "\n",
+ "> 🎃 معلومة ممتعة، أحيانًا نطلق على القرع الأبيض اسم \"قرع الأشباح\". ليس من السهل نحته، لذلك فهو ليس شائعًا مثل القرع البرتقالي، ولكنه يبدو رائعًا! لذا يمكننا أيضًا إعادة صياغة سؤالنا ليكون: \"شبح\" أو \"ليس شبح\". 👻\n",
+ "\n",
+ "## **حول الانحدار اللوجستي**\n",
+ "\n",
+ "يختلف الانحدار اللوجستي عن الانحدار الخطي، الذي تعلمت عنه سابقًا، في عدة جوانب مهمة.\n",
+ "\n",
+ "#### **تصنيف ثنائي**\n",
+ "\n",
+ "الانحدار اللوجستي لا يقدم نفس الميزات التي يقدمها الانحدار الخطي. الأول يقدم توقعًا حول `فئة ثنائية` (\"برتقالي أو ليس برتقالي\")، بينما الثاني قادر على توقع `قيم مستمرة`، على سبيل المثال، بناءً على مصدر القرع ووقت الحصاد، *كم ستزداد قيمته*.\n",
+ "\n",
+ "\n",
+ "\n",
+ "### تصنيفات أخرى\n",
+ "\n",
+ "هناك أنواع أخرى من الانحدار اللوجستي، بما في ذلك متعدد الفئات والرتبي:\n",
+ "\n",
+ "- **متعدد الفئات**، والذي يتضمن وجود أكثر من فئة واحدة - \"برتقالي، أبيض، ومخطط\".\n",
+ "\n",
+ "- **رتبي**، والذي يتضمن فئات مرتبة، وهو مفيد إذا أردنا ترتيب النتائج بشكل منطقي، مثل القرع الذي يتم ترتيبه حسب عدد محدود من الأحجام (صغير جدًا، صغير، متوسط، كبير، كبير جدًا، كبير جدًا جدًا).\n",
+ "\n",
+ "\n",
+ "\n",
+ "#### **المتغيرات لا يجب أن تكون مترابطة**\n",
+ "\n",
+ "هل تتذكر كيف كان الانحدار الخطي يعمل بشكل أفضل مع المتغيرات الأكثر ترابطًا؟ الانحدار اللوجستي عكس ذلك - المتغيرات لا تحتاج إلى أن تكون متوافقة. وهذا يناسب هذه البيانات التي تحتوي على ترابطات ضعيفة إلى حد ما.\n",
+ "\n",
+ "#### **تحتاج إلى الكثير من البيانات النظيفة**\n",
+ "\n",
+ "سيعطي الانحدار اللوجستي نتائج أكثر دقة إذا استخدمت المزيد من البيانات؛ مجموعتنا الصغيرة من البيانات ليست مثالية لهذه المهمة، لذا ضع ذلك في اعتبارك.\n",
+ "\n",
+ "✅ فكر في أنواع البيانات التي يمكن أن تكون مناسبة للانحدار اللوجستي\n",
+ "\n",
+ "## تمرين - ترتيب البيانات\n",
+ "\n",
+ "أولاً، قم بتنظيف البيانات قليلاً، بإزالة القيم الفارغة واختيار بعض الأعمدة فقط:\n",
+ "\n",
+ "1. أضف الكود التالي:\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "vscode": {
+ "languageId": "r"
+ }
+ },
+ "outputs": [],
+ "source": [
+ "# Load the core tidyverse packages\n",
+ "library(tidyverse)\n",
+ "\n",
+ "# Import the data and clean column names\n",
+ "pumpkins <- read_csv(file = \"https://raw.githubusercontent.com/microsoft/ML-For-Beginners/main/2-Regression/data/US-pumpkins.csv\") %>% \n",
+ " clean_names()\n",
+ "\n",
+ "# Select desired columns\n",
+ "pumpkins_select <- pumpkins %>% \n",
+ " select(c(city_name, package, variety, origin, item_size, color)) \n",
+ "\n",
+ "# Drop rows containing missing values and encode color as factor (category)\n",
+ "pumpkins_select <- pumpkins_select %>% \n",
+ " drop_na() %>% \n",
+ " mutate(color = factor(color))\n",
+ "\n",
+ "# View the first few rows\n",
+ "pumpkins_select %>% \n",
+ " slice_head(n = 5)\n"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "يمكنك دائمًا إلقاء نظرة سريعة على إطار البيانات الجديد الخاص بك باستخدام وظيفة [*glimpse()*](https://pillar.r-lib.org/reference/glimpse.html) كما هو موضح أدناه:\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "vscode": {
+ "languageId": "r"
+ }
+ },
+ "outputs": [],
+ "source": [
+ "pumpkins_select %>% \n",
+ " glimpse()\n"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "دعونا نتأكد من أننا سنقوم فعلاً بحل مشكلة تصنيف ثنائي:\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "vscode": {
+ "languageId": "r"
+ }
+ },
+ "outputs": [],
+ "source": [
+ "# Subset distinct observations in outcome column\n",
+ "pumpkins_select %>% \n",
+ " distinct(color)\n"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "### التصور - مخطط الفئات\n",
+ "بحلول هذه المرحلة، قمت بتحميل بيانات القرع مرة أخرى وتنظيفها للحفاظ على مجموعة بيانات تحتوي على بعض المتغيرات، بما في ذلك اللون. دعنا نتصور إطار البيانات في الدفتر باستخدام مكتبة ggplot.\n",
+ "\n",
+ "تقدم مكتبة ggplot طرقًا رائعة لتصور بياناتك. على سبيل المثال، يمكنك مقارنة توزيعات البيانات لكل نوع ولون في مخطط الفئات.\n",
+ "\n",
+ "1. قم بإنشاء مثل هذا المخطط باستخدام وظيفة geombar، مع استخدام بيانات القرع الخاصة بنا، وتحديد تعيين اللون لكل فئة من فئات القرع (البرتقالي أو الأبيض):\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "vscode": {
+ "languageId": "python"
+ }
+ },
+ "outputs": [],
+ "source": [
+ "# Specify colors for each value of the hue variable\n",
+ "palette <- c(ORANGE = \"orange\", WHITE = \"wheat\")\n",
+ "\n",
+ "# Create the bar plot\n",
+ "ggplot(pumpkins_select, aes(y = variety, fill = color)) +\n",
+ " geom_bar(position = \"dodge\") +\n",
+ " scale_fill_manual(values = palette) +\n",
+ " labs(y = \"Variety\", fill = \"Color\") +\n",
+ " theme_minimal()"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "من خلال ملاحظة البيانات، يمكنك أن ترى كيف ترتبط بيانات اللون بالتنوع.\n",
+ "\n",
+ "✅ بالنظر إلى هذا المخطط التصنيفي، ما هي بعض الاستكشافات المثيرة للاهتمام التي يمكنك تصورها؟\n"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "### معالجة البيانات: ترميز الميزات\n",
+ "\n",
+ "تحتوي مجموعة بيانات القرع الخاصة بنا على قيم نصية في جميع أعمدتها. التعامل مع البيانات الفئوية أمر بديهي للبشر ولكنه ليس كذلك للآلات. تعمل خوارزميات التعلم الآلي بشكل أفضل مع الأرقام. لهذا السبب، يُعد الترميز خطوة مهمة جدًا في مرحلة معالجة البيانات، حيث يتيح لنا تحويل البيانات الفئوية إلى بيانات رقمية دون فقدان أي معلومات. الترميز الجيد يؤدي إلى بناء نموذج جيد.\n",
+ "\n",
+ "هناك نوعان رئيسيان من أدوات الترميز لترميز الميزات:\n",
+ "\n",
+ "1. **الترميز الترتيبي (Ordinal encoder):** يناسب المتغيرات الترتيبية، وهي المتغيرات الفئوية التي تتبع بياناتها ترتيبًا منطقيًا، مثل عمود `item_size` في مجموعة بياناتنا. يقوم بإنشاء خريطة بحيث يتم تمثيل كل فئة برقم يمثل ترتيب الفئة في العمود.\n",
+ "\n",
+ "2. **الترميز الفئوي (Categorical encoder):** يناسب المتغيرات الاسمية، وهي المتغيرات الفئوية التي لا تتبع بياناتها ترتيبًا منطقيًا، مثل جميع الميزات الأخرى غير `item_size` في مجموعة بياناتنا. يتمثل في الترميز الثنائي (one-hot encoding)، مما يعني أن كل فئة يتم تمثيلها بعمود ثنائي: تكون القيمة المشفرة مساوية لـ 1 إذا كان القرع ينتمي إلى تلك الفئة و0 خلاف ذلك.\n",
+ "\n",
+ "يوفر Tidymodels حزمة أخرى رائعة: [recipes](https://recipes.tidymodels.org/) - وهي حزمة لمعالجة البيانات. سنقوم بتعريف `recipe` يحدد أن جميع أعمدة المتنبئات يجب أن يتم ترميزها إلى مجموعة من الأعداد الصحيحة، ثم نقوم بـ `prep` لتقدير الكميات والإحصائيات المطلوبة لأي عمليات، وأخيرًا `bake` لتطبيق العمليات على بيانات جديدة.\n",
+ "\n",
+ "> عادةً، يتم استخدام recipes كمعالج مسبق للنمذجة، حيث يحدد الخطوات التي يجب تطبيقها على مجموعة بيانات لجعلها جاهزة للنمذجة. في هذه الحالة، **ننصح بشدة** باستخدام `workflow()` بدلاً من تقدير الوصفة يدويًا باستخدام prep وbake. سنرى كل هذا بعد قليل.\n",
+ ">\n",
+ "> ولكن في الوقت الحالي، نحن نستخدم recipes + prep + bake لتحديد الخطوات التي يجب تطبيقها على مجموعة بيانات لجعلها جاهزة لتحليل البيانات، ثم استخراج البيانات المعالجة مسبقًا مع الخطوات المطبقة.\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "vscode": {
+ "languageId": "r"
+ }
+ },
+ "outputs": [],
+ "source": [
+ "# Preprocess and extract data to allow some data analysis\n",
+ "baked_pumpkins <- recipe(color ~ ., data = pumpkins_select) %>%\n",
+ " # Define ordering for item_size column\n",
+ " step_mutate(item_size = ordered(item_size, levels = c('sml', 'med', 'med-lge', 'lge', 'xlge', 'jbo', 'exjbo'))) %>%\n",
+ " # Convert factors to numbers using the order defined above (Ordinal encoding)\n",
+ " step_integer(item_size, zero_based = F) %>%\n",
+ " # Encode all other predictors using one hot encoding\n",
+ " step_dummy(all_nominal(), -all_outcomes(), one_hot = TRUE) %>%\n",
+ " prep(data = pumpkin_select) %>%\n",
+ " bake(new_data = NULL)\n",
+ "\n",
+ "# Display the first few rows of preprocessed data\n",
+ "baked_pumpkins %>% \n",
+ " slice_head(n = 5)\n"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "✅ ما هي فوائد استخدام الترميز الترتيبي لعمود حجم العنصر؟\n",
+ "\n",
+ "### تحليل العلاقات بين المتغيرات\n",
+ "\n",
+ "الآن بعد أن قمنا بمعالجة البيانات مسبقًا، يمكننا تحليل العلاقات بين الميزات والتسمية لفهم مدى قدرة النموذج على التنبؤ بالتسمية بناءً على الميزات. أفضل طريقة لإجراء هذا النوع من التحليل هي رسم البيانات. \n",
+ "سنستخدم مرة أخرى وظيفة ggplot geom_boxplot_، لتصور العلاقات بين حجم العنصر، النوع، واللون في مخطط تصنيفي. لتحسين رسم البيانات، سنستخدم عمود حجم العنصر المشفر وعمود النوع غير المشفر.\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "vscode": {
+ "languageId": "r"
+ }
+ },
+ "outputs": [],
+ "source": [
+ "# Define the color palette\n",
+ "palette <- c(ORANGE = \"orange\", WHITE = \"wheat\")\n",
+ "\n",
+ "# We need the encoded Item Size column to use it as the x-axis values in the plot\n",
+ "pumpkins_select_plot<-pumpkins_select\n",
+ "pumpkins_select_plot$item_size <- baked_pumpkins$item_size\n",
+ "\n",
+ "# Create the grouped box plot\n",
+ "ggplot(pumpkins_select_plot, aes(x = `item_size`, y = color, fill = color)) +\n",
+ " geom_boxplot() +\n",
+ " facet_grid(variety ~ ., scales = \"free_x\") +\n",
+ " scale_fill_manual(values = palette) +\n",
+ " labs(x = \"Item Size\", y = \"\") +\n",
+ " theme_minimal() +\n",
+ " theme(strip.text = element_text(size = 12)) +\n",
+ " theme(axis.text.x = element_text(size = 10)) +\n",
+ " theme(axis.title.x = element_text(size = 12)) +\n",
+ " theme(axis.title.y = element_blank()) +\n",
+ " theme(legend.position = \"bottom\") +\n",
+ " guides(fill = guide_legend(title = \"Color\")) +\n",
+ " theme(panel.spacing = unit(0.5, \"lines\"))+\n",
+ " theme(strip.text.y = element_text(size = 4, hjust = 0)) \n"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "#### استخدام مخطط السرب\n",
+ "\n",
+ "بما أن اللون هو فئة ثنائية (أبيض أو غير ذلك)، فإنه يحتاج إلى \"[نهج متخصص](https://github.com/rstudio/cheatsheets/blob/main/data-visualization.pdf)\" للتصور.\n",
+ "\n",
+ "جرّب `مخطط السرب` لعرض توزيع اللون بالنسبة لحجم العنصر.\n",
+ "\n",
+ "سنستخدم [حزمة ggbeeswarm](https://github.com/eclarke/ggbeeswarm) التي توفر طرقًا لإنشاء مخططات بأسلوب السرب باستخدام ggplot2. تُعد مخططات السرب وسيلة لعرض النقاط التي قد تتداخل عادةً بحيث تقع بجانب بعضها البعض بدلاً من ذلك.\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "vscode": {
+ "languageId": "r"
+ }
+ },
+ "outputs": [],
+ "source": [
+ "# Create beeswarm plots of color and item_size\n",
+ "baked_pumpkins %>% \n",
+ " mutate(color = factor(color)) %>% \n",
+ " ggplot(mapping = aes(x = color, y = item_size, color = color)) +\n",
+ " geom_quasirandom() +\n",
+ " scale_color_brewer(palette = \"Dark2\", direction = -1) +\n",
+ " theme(legend.position = \"none\")\n"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "الآن بعد أن أصبح لدينا فكرة عن العلاقة بين الفئات الثنائية للألوان والمجموعة الأكبر من الأحجام، دعونا نستكشف الانحدار اللوجستي لتحديد اللون المحتمل لليقطينة.\n",
+ "\n",
+ "## بناء النموذج الخاص بك\n",
+ "\n",
+ "حدد المتغيرات التي تريد استخدامها في نموذج التصنيف الخاص بك وقم بتقسيم البيانات إلى مجموعات تدريب واختبار. [rsample](https://rsample.tidymodels.org/)، وهي حزمة في Tidymodels، توفر بنية تحتية لتقسيم البيانات وإعادة أخذ العينات بكفاءة:\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "vscode": {
+ "languageId": "r"
+ }
+ },
+ "outputs": [],
+ "source": [
+ "# Split data into 80% for training and 20% for testing\n",
+ "set.seed(2056)\n",
+ "pumpkins_split <- pumpkins_select %>% \n",
+ " initial_split(prop = 0.8)\n",
+ "\n",
+ "# Extract the data in each split\n",
+ "pumpkins_train <- training(pumpkins_split)\n",
+ "pumpkins_test <- testing(pumpkins_split)\n",
+ "\n",
+ "# Print out the first 5 rows of the training set\n",
+ "pumpkins_train %>% \n",
+ " slice_head(n = 5)\n"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "🙌 نحن الآن جاهزون لتدريب نموذج من خلال ملاءمة ميزات التدريب مع تسمية التدريب (اللون).\n",
+ "\n",
+ "سنبدأ بإنشاء وصفة تحدد خطوات المعالجة المسبقة التي يجب تنفيذها على بياناتنا لتجهيزها للنمذجة، مثل: ترميز المتغيرات الفئوية إلى مجموعة من الأعداد الصحيحة. تمامًا مثل `baked_pumpkins`، نقوم بإنشاء `pumpkins_recipe` ولكن لا نقوم بـ `prep` و `bake` لأن ذلك سيتم تضمينه في سير العمل، والذي ستراه في بضع خطوات من الآن.\n",
+ "\n",
+ "هناك العديد من الطرق لتحديد نموذج الانحدار اللوجستي في Tidymodels. انظر `?logistic_reg()` في الوقت الحالي، سنحدد نموذج الانحدار اللوجستي عبر محرك `stats::glm()` الافتراضي.\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "vscode": {
+ "languageId": "r"
+ }
+ },
+ "outputs": [],
+ "source": [
+ "# Create a recipe that specifies preprocessing steps for modelling\n",
+ "pumpkins_recipe <- recipe(color ~ ., data = pumpkins_train) %>% \n",
+ " step_mutate(item_size = ordered(item_size, levels = c('sml', 'med', 'med-lge', 'lge', 'xlge', 'jbo', 'exjbo'))) %>%\n",
+ " step_integer(item_size, zero_based = F) %>% \n",
+ " step_dummy(all_nominal(), -all_outcomes(), one_hot = TRUE)\n",
+ "\n",
+ "# Create a logistic model specification\n",
+ "log_reg <- logistic_reg() %>% \n",
+ " set_engine(\"glm\") %>% \n",
+ " set_mode(\"classification\")\n"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "الآن بعد أن أصبح لدينا وصفة ومواصفات نموذج، نحتاج إلى إيجاد طريقة لدمجهما معًا في كائن يقوم أولاً بمعالجة البيانات مسبقًا (التحضير + الخبز خلف الكواليس)، ثم تدريب النموذج على البيانات المعالجة مسبقًا، وأيضًا يتيح إمكانية القيام بأنشطة معالجة لاحقة.\n",
+ "\n",
+ "في Tidymodels، يُطلق على هذا الكائن المريح اسم [`workflow`](https://workflows.tidymodels.org/) وهو يحتفظ بشكل ملائم بمكونات النمذجة الخاصة بك.\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "vscode": {
+ "languageId": "r"
+ }
+ },
+ "outputs": [],
+ "source": [
+ "# Bundle modelling components in a workflow\n",
+ "log_reg_wf <- workflow() %>% \n",
+ " add_recipe(pumpkins_recipe) %>% \n",
+ " add_model(log_reg)\n",
+ "\n",
+ "# Print out the workflow\n",
+ "log_reg_wf\n"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "بعد تحديد سير العمل، يمكن تدريب النموذج باستخدام وظيفة [`fit()`](https://tidymodels.github.io/parsnip/reference/fit.html). سيقوم سير العمل بتقدير الوصفة ومعالجة البيانات مسبقًا قبل التدريب، لذلك لن نحتاج إلى القيام بذلك يدويًا باستخدام prep و bake.\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "vscode": {
+ "languageId": "r"
+ }
+ },
+ "outputs": [],
+ "source": [
+ "# Train the model\n",
+ "wf_fit <- log_reg_wf %>% \n",
+ " fit(data = pumpkins_train)\n",
+ "\n",
+ "# Print the trained workflow\n",
+ "wf_fit\n"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "يعرض النموذج القيم التي تم تعلمها أثناء التدريب.\n",
+ "\n",
+ "الآن بعد أن قمنا بتدريب النموذج باستخدام بيانات التدريب، يمكننا إجراء التنبؤات على بيانات الاختبار باستخدام [parsnip::predict()](https://parsnip.tidymodels.org/reference/predict.model_fit.html). لنبدأ باستخدام النموذج لتوقع التصنيفات لمجموعة الاختبار واحتمالات كل تصنيف. عندما تكون الاحتمالية أكبر من 0.5، يكون التصنيف المتوقع هو `WHITE`، وإلا يكون `ORANGE`.\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "vscode": {
+ "languageId": "r"
+ }
+ },
+ "outputs": [],
+ "source": [
+ "# Make predictions for color and corresponding probabilities\n",
+ "results <- pumpkins_test %>% select(color) %>% \n",
+ " bind_cols(wf_fit %>% \n",
+ " predict(new_data = pumpkins_test)) %>%\n",
+ " bind_cols(wf_fit %>%\n",
+ " predict(new_data = pumpkins_test, type = \"prob\"))\n",
+ "\n",
+ "# Compare predictions\n",
+ "results %>% \n",
+ " slice_head(n = 10)\n"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "جميل جدًا! هذا يوفر بعض الأفكار الإضافية حول كيفية عمل الانحدار اللوجستي.\n",
+ "\n",
+ "### فهم أفضل من خلال مصفوفة الالتباس\n",
+ "\n",
+ "مقارنة كل توقع بالقيمة \"الحقيقية\" المقابلة له ليست طريقة فعالة جدًا لتحديد مدى دقة توقعات النموذج. لحسن الحظ، توفر مكتبة Tidymodels بعض الأدوات الإضافية: [`yardstick`](https://yardstick.tidymodels.org/) - وهي حزمة تُستخدم لقياس فعالية النماذج باستخدام مقاييس الأداء.\n",
+ "\n",
+ "أحد مقاييس الأداء المرتبطة بمشاكل التصنيف هو [`مصفوفة الالتباس`](https://wikipedia.org/wiki/Confusion_matrix). تصف مصفوفة الالتباس مدى كفاءة أداء نموذج التصنيف. تقوم مصفوفة الالتباس بتبويب عدد الأمثلة في كل فئة التي تم تصنيفها بشكل صحيح بواسطة النموذج. في حالتنا، ستوضح لك عدد القرعات البرتقالية التي تم تصنيفها كبرتقالية وعدد القرعات البيضاء التي تم تصنيفها كبيضاء؛ كما تُظهر مصفوفة الالتباس أيضًا عدد الحالات التي تم تصنيفها في الفئات **الخاطئة**.\n",
+ "\n",
+ "وظيفة [**`conf_mat()`**](https://tidymodels.github.io/yardstick/reference/conf_mat.html) من حزمة yardstick تحسب هذا الجدول المتقاطع للفئات الملاحظة والمتوقعة.\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "vscode": {
+ "languageId": "r"
+ }
+ },
+ "outputs": [],
+ "source": [
+ "# Confusion matrix for prediction results\n",
+ "conf_mat(data = results, truth = color, estimate = .pred_class)\n"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "دعونا نفسر مصفوفة الالتباس. يُطلب من نموذجنا تصنيف القرع بين فئتين ثنائيتين، الفئة `أبيض` والفئة `غير أبيض`.\n",
+ "\n",
+ "- إذا توقع نموذجك أن القرع أبيض وكان ينتمي بالفعل إلى الفئة \"أبيض\"، فإننا نسميه `إيجابي حقيقي`، ويظهر في الرقم العلوي الأيسر.\n",
+ "\n",
+ "- إذا توقع نموذجك أن القرع غير أبيض وكان ينتمي بالفعل إلى الفئة \"أبيض\"، فإننا نسميه `سلبي خاطئ`، ويظهر في الرقم السفلي الأيسر.\n",
+ "\n",
+ "- إذا توقع نموذجك أن القرع أبيض وكان ينتمي بالفعل إلى الفئة \"غير أبيض\"، فإننا نسميه `إيجابي خاطئ`، ويظهر في الرقم العلوي الأيمن.\n",
+ "\n",
+ "- إذا توقع نموذجك أن القرع غير أبيض وكان ينتمي بالفعل إلى الفئة \"غير أبيض\"، فإننا نسميه `سلبي حقيقي`، ويظهر في الرقم السفلي الأيمن.\n",
+ "\n",
+ "| الحقيقة |\n",
+ "|:-----:|\n",
+ "\n",
+ "| | | |\n",
+ "|---------------|--------|-------|\n",
+ "| **التوقع** | أبيض | برتقالي |\n",
+ "| أبيض | TP | FP |\n",
+ "| برتقالي | FN | TN |\n",
+ "\n",
+ "كما قد تكون خمنت، من الأفضل أن يكون لدينا عدد أكبر من الإيجابيات الحقيقية والسلبيات الحقيقية وعدد أقل من الإيجابيات الخاطئة والسلبيات الخاطئة، مما يعني أن النموذج يعمل بشكل أفضل.\n",
+ "\n",
+ "مصفوفة الالتباس مفيدة لأنها تؤدي إلى مقاييس أخرى يمكن أن تساعدنا في تقييم أداء نموذج التصنيف بشكل أفضل. دعونا نستعرض بعضها:\n",
+ "\n",
+ "🎓 الدقة: `TP/(TP + FP)` تُعرف بأنها نسبة الإيجابيات المتوقعة التي هي بالفعل إيجابية. تُسمى أيضًا [القيمة التنبؤية الإيجابية](https://en.wikipedia.org/wiki/Positive_predictive_value \"Positive predictive value\").\n",
+ "\n",
+ "🎓 الاستدعاء: `TP/(TP + FN)` يُعرف بأنه نسبة النتائج الإيجابية من إجمالي العينات التي كانت بالفعل إيجابية. يُعرف أيضًا بـ `الحساسية`.\n",
+ "\n",
+ "🎓 الخصوصية: `TN/(TN + FP)` تُعرف بأنها نسبة النتائج السلبية من إجمالي العينات التي كانت بالفعل سلبية.\n",
+ "\n",
+ "🎓 الدقة العامة: `TP + TN/(TP + TN + FP + FN)` النسبة المئوية للتصنيفات التي تم توقعها بشكل صحيح لعينة.\n",
+ "\n",
+ "🎓 مقياس F: متوسط مرجح للدقة والاستدعاء، حيث الأفضل هو 1 والأسوأ هو 0.\n",
+ "\n",
+ "دعونا نحسب هذه المقاييس!\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "vscode": {
+ "languageId": "r"
+ }
+ },
+ "outputs": [],
+ "source": [
+ "# Combine metric functions and calculate them all at once\n",
+ "eval_metrics <- metric_set(ppv, recall, spec, f_meas, accuracy)\n",
+ "eval_metrics(data = results, truth = color, estimate = .pred_class)\n"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "## تصور منحنى ROC لهذا النموذج\n",
+ "\n",
+ "دعونا نقوم بتصور إضافي لرؤية ما يُعرف بـ [`منحنى ROC`](https://en.wikipedia.org/wiki/Receiver_operating_characteristic):\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "vscode": {
+ "languageId": "r"
+ }
+ },
+ "outputs": [],
+ "source": [
+ "# Make a roc_curve\n",
+ "results %>% \n",
+ " roc_curve(color, .pred_ORANGE) %>% \n",
+ " autoplot()\n"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "منحنيات ROC تُستخدم غالبًا للحصول على نظرة على مخرجات المصنف من حيث الإيجابيات الحقيقية مقابل الإيجابيات الكاذبة. عادةً ما تعرض منحنيات ROC معدل الإيجابيات الحقيقية/الحساسية على المحور الرأسي، ومعدل الإيجابيات الكاذبة/1-النوعية على المحور الأفقي. وبالتالي، فإن انحدار المنحنى والمسافة بين خط المنتصف والمنحنى لهما أهمية: الهدف هو الحصول على منحنى يتجه بسرعة إلى الأعلى ويتجاوز الخط. في حالتنا، هناك إيجابيات كاذبة في البداية، ثم يتجه الخط إلى الأعلى ويتجاوز بشكل صحيح.\n",
+ "\n",
+ "أخيرًا، دعونا نستخدم `yardstick::roc_auc()` لحساب المساحة الفعلية تحت المنحنى. إحدى طرق تفسير AUC هي أنها تمثل احتمال أن يصنف النموذج مثالًا إيجابيًا عشوائيًا بدرجة أعلى من مثال سلبي عشوائي.\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "vscode": {
+ "languageId": "r"
+ }
+ },
+ "outputs": [],
+ "source": [
+ "# Calculate area under curve\n",
+ "results %>% \n",
+ " roc_auc(color, .pred_ORANGE)\n"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "النتيجة حوالي `0.975`. نظرًا لأن قيمة AUC تتراوح بين 0 و1، فإنك تريد الحصول على درجة عالية، لأن النموذج الذي يكون دقيقًا بنسبة 100% في توقعاته سيحصل على AUC بقيمة 1؛ في هذه الحالة، النموذج *جيد جدًا*.\n",
+ "\n",
+ "في الدروس المستقبلية حول التصنيفات، ستتعلم كيفية تحسين درجات النموذج (مثل التعامل مع البيانات غير المتوازنة في هذه الحالة).\n",
+ "\n",
+ "## 🚀تحدي\n",
+ "\n",
+ "هناك الكثير لاستكشافه فيما يتعلق بالانحدار اللوجستي! ولكن أفضل طريقة للتعلم هي التجربة. ابحث عن مجموعة بيانات تناسب هذا النوع من التحليل وقم ببناء نموذج باستخدامها. ماذا تتعلم؟ نصيحة: جرّب [Kaggle](https://www.kaggle.com/search?q=logistic+regression+datasets) للحصول على مجموعات بيانات مثيرة للاهتمام.\n",
+ "\n",
+ "## المراجعة والدراسة الذاتية\n",
+ "\n",
+ "اقرأ الصفحات الأولى من [هذه الورقة البحثية من جامعة ستانفورد](https://web.stanford.edu/~jurafsky/slp3/5.pdf) حول بعض الاستخدامات العملية للانحدار اللوجستي. فكّر في المهام التي تناسب نوعًا معينًا من مهام الانحدار التي درسناها حتى الآن. ما الذي سيكون الأنسب؟\n"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "\n---\n\n**إخلاء المسؤولية**: \nتم ترجمة هذا المستند باستخدام خدمة الترجمة بالذكاء الاصطناعي [Co-op Translator](https://github.com/Azure/co-op-translator). بينما نسعى لتحقيق الدقة، يرجى العلم أن الترجمات الآلية قد تحتوي على أخطاء أو معلومات غير دقيقة. يجب اعتبار المستند الأصلي بلغته الأصلية المصدر الرسمي. للحصول على معلومات حاسمة، يُوصى بالاستعانة بترجمة بشرية احترافية. نحن غير مسؤولين عن أي سوء فهم أو تفسيرات خاطئة ناتجة عن استخدام هذه الترجمة.\n"
+ ]
+ }
+ ],
+ "metadata": {
+ "anaconda-cloud": "",
+ "kernelspec": {
+ "display_name": "R",
+ "langauge": "R",
+ "name": "ir"
+ },
+ "language_info": {
+ "codemirror_mode": "r",
+ "file_extension": ".r",
+ "mimetype": "text/x-r-source",
+ "name": "R",
+ "pygments_lexer": "r",
+ "version": "3.4.1"
+ },
+ "coopTranslator": {
+ "original_hash": "feaf125f481a89c468fa115bf2aed580",
+ "translation_date": "2025-08-29T14:51:01+00:00",
+ "source_file": "2-Regression/4-Logistic/solution/R/lesson_4-R.ipynb",
+ "language_code": "ar"
+ }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 1
+}
\ No newline at end of file
diff --git a/translations/ar/2-Regression/4-Logistic/solution/notebook.ipynb b/translations/ar/2-Regression/4-Logistic/solution/notebook.ipynb
new file mode 100644
index 000000000..30245a03b
--- /dev/null
+++ b/translations/ar/2-Regression/4-Logistic/solution/notebook.ipynb
@@ -0,0 +1,1259 @@
+{
+ "cells": [
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "## الانحدار اللوجستي - الدرس الرابع\n",
+ "\n",
+ "قم بتحميل المكتبات المطلوبة ومجموعة البيانات. قم بتحويل البيانات إلى إطار بيانات يحتوي على جزء من البيانات:\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 63,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "
\n",
+ "\n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
\n",
+ "
City Name
\n",
+ "
Type
\n",
+ "
Package
\n",
+ "
Variety
\n",
+ "
Sub Variety
\n",
+ "
Grade
\n",
+ "
Date
\n",
+ "
Low Price
\n",
+ "
High Price
\n",
+ "
Mostly Low
\n",
+ "
...
\n",
+ "
Unit of Sale
\n",
+ "
Quality
\n",
+ "
Condition
\n",
+ "
Appearance
\n",
+ "
Storage
\n",
+ "
Crop
\n",
+ "
Repack
\n",
+ "
Trans Mode
\n",
+ "
Unnamed: 24
\n",
+ "
Unnamed: 25
\n",
+ "
\n",
+ " \n",
+ " \n",
+ "
\n",
+ "
0
\n",
+ "
BALTIMORE
\n",
+ "
NaN
\n",
+ "
24 inch bins
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
4/29/17
\n",
+ "
270.0
\n",
+ "
280.0
\n",
+ "
270.0
\n",
+ "
...
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
E
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
\n",
+ "
\n",
+ "
1
\n",
+ "
BALTIMORE
\n",
+ "
NaN
\n",
+ "
24 inch bins
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
5/6/17
\n",
+ "
270.0
\n",
+ "
280.0
\n",
+ "
270.0
\n",
+ "
...
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
E
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
\n",
+ "
\n",
+ "
2
\n",
+ "
BALTIMORE
\n",
+ "
NaN
\n",
+ "
24 inch bins
\n",
+ "
HOWDEN TYPE
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
9/24/16
\n",
+ "
160.0
\n",
+ "
160.0
\n",
+ "
160.0
\n",
+ "
...
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
N
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
\n",
+ "
\n",
+ "
3
\n",
+ "
BALTIMORE
\n",
+ "
NaN
\n",
+ "
24 inch bins
\n",
+ "
HOWDEN TYPE
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
9/24/16
\n",
+ "
160.0
\n",
+ "
160.0
\n",
+ "
160.0
\n",
+ "
...
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
N
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
\n",
+ "
\n",
+ "
4
\n",
+ "
BALTIMORE
\n",
+ "
NaN
\n",
+ "
24 inch bins
\n",
+ "
HOWDEN TYPE
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
11/5/16
\n",
+ "
90.0
\n",
+ "
100.0
\n",
+ "
90.0
\n",
+ "
...
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
N
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
5 rows × 26 columns
\n",
+ "
"
+ ],
+ "text/plain": [
+ " City Name Type Package Variety Sub Variety Grade Date \n",
+ "0 BALTIMORE NaN 24 inch bins NaN NaN NaN 4/29/17 \\\n",
+ "1 BALTIMORE NaN 24 inch bins NaN NaN NaN 5/6/17 \n",
+ "2 BALTIMORE NaN 24 inch bins HOWDEN TYPE NaN NaN 9/24/16 \n",
+ "3 BALTIMORE NaN 24 inch bins HOWDEN TYPE NaN NaN 9/24/16 \n",
+ "4 BALTIMORE NaN 24 inch bins HOWDEN TYPE NaN NaN 11/5/16 \n",
+ "\n",
+ " Low Price High Price Mostly Low ... Unit of Sale Quality Condition \n",
+ "0 270.0 280.0 270.0 ... NaN NaN NaN \\\n",
+ "1 270.0 280.0 270.0 ... NaN NaN NaN \n",
+ "2 160.0 160.0 160.0 ... NaN NaN NaN \n",
+ "3 160.0 160.0 160.0 ... NaN NaN NaN \n",
+ "4 90.0 100.0 90.0 ... NaN NaN NaN \n",
+ "\n",
+ " Appearance Storage Crop Repack Trans Mode Unnamed: 24 Unnamed: 25 \n",
+ "0 NaN NaN NaN E NaN NaN NaN \n",
+ "1 NaN NaN NaN E NaN NaN NaN \n",
+ "2 NaN NaN NaN N NaN NaN NaN \n",
+ "3 NaN NaN NaN N NaN NaN NaN \n",
+ "4 NaN NaN NaN N NaN NaN NaN \n",
+ "\n",
+ "[5 rows x 26 columns]"
+ ]
+ },
+ "execution_count": 63,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "import pandas as pd\n",
+ "import numpy as np\n",
+ "\n",
+ "full_pumpkins = pd.read_csv('../../data/US-pumpkins.csv')\n",
+ "\n",
+ "full_pumpkins.head()\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 64,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "
\n",
+ "\n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
\n",
+ "
City Name
\n",
+ "
Package
\n",
+ "
Variety
\n",
+ "
Origin
\n",
+ "
Item Size
\n",
+ "
Color
\n",
+ "
\n",
+ " \n",
+ " \n",
+ "
\n",
+ "
2
\n",
+ "
BALTIMORE
\n",
+ "
24 inch bins
\n",
+ "
HOWDEN TYPE
\n",
+ "
DELAWARE
\n",
+ "
med
\n",
+ "
ORANGE
\n",
+ "
\n",
+ "
\n",
+ "
3
\n",
+ "
BALTIMORE
\n",
+ "
24 inch bins
\n",
+ "
HOWDEN TYPE
\n",
+ "
VIRGINIA
\n",
+ "
med
\n",
+ "
ORANGE
\n",
+ "
\n",
+ "
\n",
+ "
4
\n",
+ "
BALTIMORE
\n",
+ "
24 inch bins
\n",
+ "
HOWDEN TYPE
\n",
+ "
MARYLAND
\n",
+ "
lge
\n",
+ "
ORANGE
\n",
+ "
\n",
+ "
\n",
+ "
5
\n",
+ "
BALTIMORE
\n",
+ "
24 inch bins
\n",
+ "
HOWDEN TYPE
\n",
+ "
MARYLAND
\n",
+ "
lge
\n",
+ "
ORANGE
\n",
+ "
\n",
+ "
\n",
+ "
6
\n",
+ "
BALTIMORE
\n",
+ "
36 inch bins
\n",
+ "
HOWDEN TYPE
\n",
+ "
MARYLAND
\n",
+ "
med
\n",
+ "
ORANGE
\n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ " City Name Package Variety Origin Item Size Color\n",
+ "2 BALTIMORE 24 inch bins HOWDEN TYPE DELAWARE med ORANGE\n",
+ "3 BALTIMORE 24 inch bins HOWDEN TYPE VIRGINIA med ORANGE\n",
+ "4 BALTIMORE 24 inch bins HOWDEN TYPE MARYLAND lge ORANGE\n",
+ "5 BALTIMORE 24 inch bins HOWDEN TYPE MARYLAND lge ORANGE\n",
+ "6 BALTIMORE 36 inch bins HOWDEN TYPE MARYLAND med ORANGE"
+ ]
+ },
+ "execution_count": 64,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "# Select the columns we want to use\n",
+ "columns_to_select = ['City Name','Package','Variety', 'Origin','Item Size', 'Color']\n",
+ "pumpkins = full_pumpkins.loc[:, columns_to_select]\n",
+ "\n",
+ "# Drop rows with missing values\n",
+ "pumpkins.dropna(inplace=True)\n",
+ "\n",
+ "pumpkins.head()"
+ ]
+ },
+ {
+ "attachments": {},
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "# لنلقِ نظرة على بياناتنا!\n",
+ "\n",
+ "من خلال تصورها باستخدام Seaborn\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 65,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ ""
+ ]
+ },
+ "execution_count": 65,
+ "metadata": {},
+ "output_type": "execute_result"
+ },
+ {
+ "data": {
+ "image/png": "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S0tLab1CCxcuxAcffIBXXnkFbm5uGDZsGF555RW89dZbBtd1cnLCjBkzMGjQIFy6dAleXl4AYHDuomRnZyM7O1t6nJ6eXqJxRERU/THQEMzMzHD79u2nuuaQIUOwefNmDB06FL1798bp06dx5syZYseYmZkBAHJycsq0Znh4OD755BO9dssOi2BlaQ7bBv5lmpeIiKoe76F5jomiiN27d+PXX39F586di+1br149affFwsICPj4+5V5/+fLlOH36NMaOHYvly5fDwcGhyL4pKSn44osvULduXWl3BgCmTJkiq8vCwgIHDhwwOEdoaCjS0tKk4/r16+W+BiIiqh64Q/Mc2rFjBywsLJCbm4uCggK8+eabmDVrVrFjDhw4ILs3pUaNGuWuw9HREe+99x62bNmCnj17GuxTr149iKKI//77D82aNcPGjRthYmIinZ80aRKCg4NlY+rWrWtwLrVaDbVaXe66iYio+mGgeQ5ptVpERkbCxMQEderUgUr15B8Dd3f3Et1DU1oqlarY9Q8cOAArKys4OjoavNnX3t4eHh4eFV4XEREpCwPNc8jc3FwxIaCyghQRET1bGGioRG7duoWsrCxZm52dXYW89FQeGRkZep+HU7NmTb23mBMR0bONNwVTiXh5ecHJyUl2/PHHH1VdFmbMmKFX1+TJk6u6LCIiesoEURTFqi6CqCqkp6fD2toaV05u4du2iYgUjjs0REREpHgMNERERKR4DDRERESkeAw0REREpHgMNERERKR4DDRERESkeAw0REREpHgMNERERKR4DDRERESkeAw0REREpHgMNERERKR4/LZteu7Z1tfy27mJiBSOOzRERESkeAw0REREpHgMNERERKR4DDRERESkeAw0REREpHgMNERERKR4DDRERESkeAw0REREpHgMNERERKR4/KRgeu5dXdUElmYlz/Zuw65UYjVERFQW3KEhIiIixWOgISIiIsVjoCEiIiLFY6AhIiIixWOgISIiIsVjoCEiIiLFY6AhIiIixWOgISIiIsVjoCEiIiLFY6AhIiIixWOgISIiIsVjoCEiIiLFY6AhIiIixWOgISIiIsVjoCml4OBgCIIgHXZ2dggMDMSpU6dk/QRBwJYtW2RtcXFxeO211+Dg4ABTU1M0aNAAAwYMwP79+4td083NDYIgYO3atXrnfHx8IAgCVq5cqXcu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",
+ "text/plain": [
+ "
"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "from sklearn.metrics import roc_curve, roc_auc_score\n",
+ "import matplotlib\n",
+ "import matplotlib.pyplot as plt\n",
+ "%matplotlib inline\n",
+ "\n",
+ "y_scores = model.predict_proba(X_test)\n",
+ "# calculate ROC curve\n",
+ "fpr, tpr, thresholds = roc_curve(y_test, y_scores[:,1])\n",
+ "\n",
+ "# plot ROC curve\n",
+ "fig = plt.figure(figsize=(6, 6))\n",
+ "# Plot the diagonal 50% line\n",
+ "plt.plot([0, 1], [0, 1], 'k--')\n",
+ "# Plot the FPR and TPR achieved by our model\n",
+ "plt.plot(fpr, tpr)\n",
+ "plt.xlabel('False Positive Rate')\n",
+ "plt.ylabel('True Positive Rate')\n",
+ "plt.title('ROC Curve')\n",
+ "plt.show()"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 78,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "0.9749908725812341\n"
+ ]
+ }
+ ],
+ "source": [
+ "# Calculate AUC score\n",
+ "auc = roc_auc_score(y_test,y_scores[:,1])\n",
+ "print(auc)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "\n---\n\n**إخلاء المسؤولية**: \nتمت ترجمة هذا المستند باستخدام خدمة الترجمة الآلية [Co-op Translator](https://github.com/Azure/co-op-translator). بينما نسعى لتحقيق الدقة، يرجى العلم أن الترجمات الآلية قد تحتوي على أخطاء أو معلومات غير دقيقة. يجب اعتبار المستند الأصلي بلغته الأصلية هو المصدر الموثوق. للحصول على معلومات حساسة أو هامة، يُوصى بالاستعانة بترجمة بشرية احترافية. نحن غير مسؤولين عن أي سوء فهم أو تفسيرات خاطئة تنشأ عن استخدام هذه الترجمة.\n"
+ ]
+ }
+ ],
+ "metadata": {
+ "kernelspec": {
+ "display_name": "Python 3",
+ "language": "python",
+ "name": "python3"
+ },
+ "language_info": {
+ "codemirror_mode": {
+ "name": "ipython",
+ "version": 3
+ },
+ "file_extension": ".py",
+ "mimetype": "text/x-python",
+ "name": "python",
+ "nbconvert_exporter": "python",
+ "pygments_lexer": "ipython3",
+ "version": "3.8.16"
+ },
+ "metadata": {
+ "interpreter": {
+ "hash": "70b38d7a306a849643e446cd70466270a13445e5987dfa1344ef2b127438fa4d"
+ }
+ },
+ "orig_nbformat": 2,
+ "vscode": {
+ "interpreter": {
+ "hash": "949777d72b0d2535278d3dc13498b2535136f6dfe0678499012e853ee9abcab1"
+ }
+ },
+ "coopTranslator": {
+ "original_hash": "ef50cc584e0b79412610cc7da15e1f86",
+ "translation_date": "2025-08-29T14:48:57+00:00",
+ "source_file": "2-Regression/4-Logistic/solution/notebook.ipynb",
+ "language_code": "ar"
+ }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 2
+}
\ No newline at end of file
diff --git a/translations/ar/2-Regression/README.md b/translations/ar/2-Regression/README.md
new file mode 100644
index 000000000..1927acbc3
--- /dev/null
+++ b/translations/ar/2-Regression/README.md
@@ -0,0 +1,54 @@
+
+# نماذج الانحدار لتعلم الآلة
+## موضوع إقليمي: نماذج الانحدار لأسعار القرع في أمريكا الشمالية 🎃
+
+في أمريكا الشمالية، غالبًا ما يتم نحت القرع إلى وجوه مخيفة للاحتفال بعيد الهالوين. دعونا نكتشف المزيد عن هذه الخضروات المثيرة!
+
+
+> صورة بواسطة Beth Teutschmann على Unsplash
+
+## ما ستتعلمه
+
+[](https://youtu.be/5QnJtDad4iQ "فيديو مقدمة عن الانحدار - اضغط للمشاهدة!")
+> 🎥 اضغط على الصورة أعلاه لمشاهدة فيديو سريع يقدم هذا الدرس
+
+تغطي الدروس في هذا القسم أنواع الانحدار في سياق تعلم الآلة. يمكن لنماذج الانحدار أن تساعد في تحديد _العلاقة_ بين المتغيرات. هذا النوع من النماذج يمكنه التنبؤ بقيم مثل الطول، أو درجة الحرارة، أو العمر، وبالتالي كشف العلاقات بين المتغيرات أثناء تحليل نقاط البيانات.
+
+في سلسلة الدروس هذه، ستكتشف الفروقات بين الانحدار الخطي والانحدار اللوجستي، ومتى يجب تفضيل أحدهما على الآخر.
+
+[](https://youtu.be/XA3OaoW86R8 "تعلم الآلة للمبتدئين - مقدمة إلى نماذج الانحدار لتعلم الآلة")
+
+> 🎥 اضغط على الصورة أعلاه لمشاهدة فيديو قصير يقدم نماذج الانحدار.
+
+في هذه المجموعة من الدروس، ستتعرف على كيفية البدء في مهام تعلم الآلة، بما في ذلك إعداد Visual Studio Code لإدارة الدفاتر، وهو البيئة الشائعة لعلماء البيانات. ستكتشف مكتبة Scikit-learn لتعلم الآلة، وستقوم ببناء نماذجك الأولى، مع التركيز على نماذج الانحدار في هذا الفصل.
+
+> هناك أدوات منخفضة الكود يمكن أن تساعدك في تعلم العمل مع نماذج الانحدار. جرب [Azure ML لهذه المهمة](https://docs.microsoft.com/learn/modules/create-regression-model-azure-machine-learning-designer/?WT.mc_id=academic-77952-leestott)
+
+### الدروس
+
+1. [أدوات العمل](1-Tools/README.md)
+2. [إدارة البيانات](2-Data/README.md)
+3. [الانحدار الخطي والمتعدد الحدود](3-Linear/README.md)
+4. [الانحدار اللوجستي](4-Logistic/README.md)
+
+---
+### الشكر
+
+"تعلم الآلة مع الانحدار" كتب بحب ♥️ بواسطة [Jen Looper](https://twitter.com/jenlooper)
+
+♥️ مساهمو الاختبارات يشملون: [Muhammad Sakib Khan Inan](https://twitter.com/Sakibinan) و [Ornella Altunyan](https://twitter.com/ornelladotcom)
+
+مجموعة بيانات القرع مقترحة من [هذا المشروع على Kaggle](https://www.kaggle.com/usda/a-year-of-pumpkin-prices) ومصدر بياناتها من [تقارير الأسواق القياسية للمحاصيل الخاصة](https://www.marketnews.usda.gov/mnp/fv-report-config-step1?type=termPrice) التي تصدرها وزارة الزراعة الأمريكية. لقد أضفنا بعض النقاط حول اللون بناءً على النوع لتطبيع التوزيع. هذه البيانات متاحة في المجال العام.
+
+---
+
+**إخلاء المسؤولية**:
+تمت ترجمة هذا المستند باستخدام خدمة الترجمة الآلية [Co-op Translator](https://github.com/Azure/co-op-translator). بينما نسعى لتحقيق الدقة، يرجى العلم أن الترجمات الآلية قد تحتوي على أخطاء أو معلومات غير دقيقة. يجب اعتبار المستند الأصلي بلغته الأصلية هو المصدر الموثوق. للحصول على معلومات حساسة أو هامة، يُوصى بالاستعانة بترجمة بشرية احترافية. نحن غير مسؤولين عن أي سوء فهم أو تفسيرات خاطئة تنشأ عن استخدام هذه الترجمة.
\ No newline at end of file
diff --git a/translations/ar/3-Web-App/1-Web-App/README.md b/translations/ar/3-Web-App/1-Web-App/README.md
new file mode 100644
index 000000000..a16f718e1
--- /dev/null
+++ b/translations/ar/3-Web-App/1-Web-App/README.md
@@ -0,0 +1,359 @@
+
+# بناء تطبيق ويب لاستخدام نموذج تعلم الآلة
+
+في هذا الدرس، ستقوم بتدريب نموذج تعلم آلي على مجموعة بيانات غير تقليدية: _مشاهدات الأجسام الطائرة المجهولة (UFO) خلال القرن الماضي_، والمأخوذة من قاعدة بيانات NUFORC.
+
+ستتعلم:
+
+- كيفية "تخزين" نموذج مدرب باستخدام Pickle
+- كيفية استخدام هذا النموذج في تطبيق Flask
+
+سنواصل استخدام دفاتر Jupyter لتنظيف البيانات وتدريب النموذج، ولكن يمكنك أن تأخذ العملية خطوة إضافية من خلال استكشاف استخدام النموذج "في العالم الحقيقي"، أي في تطبيق ويب.
+
+للقيام بذلك، تحتاج إلى بناء تطبيق ويب باستخدام Flask.
+
+## [اختبار ما قبل المحاضرة](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/17/)
+
+## بناء التطبيق
+
+هناك عدة طرق لبناء تطبيقات ويب لاستهلاك نماذج تعلم الآلة. قد تؤثر بنية الويب الخاصة بك على الطريقة التي يتم بها تدريب النموذج. تخيل أنك تعمل في شركة حيث قامت مجموعة علوم البيانات بتدريب نموذج يريدون منك استخدامه في تطبيق.
+
+### اعتبارات
+
+هناك العديد من الأسئلة التي تحتاج إلى طرحها:
+
+- **هل هو تطبيق ويب أم تطبيق جوال؟** إذا كنت تبني تطبيقًا جوالًا أو تحتاج إلى استخدام النموذج في سياق إنترنت الأشياء (IoT)، يمكنك استخدام [TensorFlow Lite](https://www.tensorflow.org/lite/) واستخدام النموذج في تطبيق Android أو iOS.
+- **أين سيقيم النموذج؟** في السحابة أم محليًا؟
+- **الدعم دون اتصال.** هل يجب أن يعمل التطبيق دون اتصال؟
+- **ما هي التقنية المستخدمة لتدريب النموذج؟** قد تؤثر التقنية المختارة على الأدوات التي تحتاج إلى استخدامها.
+ - **استخدام TensorFlow.** إذا كنت تدرب نموذجًا باستخدام TensorFlow، على سبيل المثال، فإن هذا النظام يوفر إمكانية تحويل نموذج TensorFlow لاستخدامه في تطبيق ويب باستخدام [TensorFlow.js](https://www.tensorflow.org/js/).
+ - **استخدام PyTorch.** إذا كنت تبني نموذجًا باستخدام مكتبة مثل [PyTorch](https://pytorch.org/)، لديك خيار تصديره بتنسيق [ONNX](https://onnx.ai/) (Open Neural Network Exchange) لاستخدامه في تطبيقات ويب JavaScript التي يمكنها استخدام [Onnx Runtime](https://www.onnxruntime.ai/). سيتم استكشاف هذا الخيار في درس مستقبلي لنموذج مدرب باستخدام Scikit-learn.
+ - **استخدام Lobe.ai أو Azure Custom Vision.** إذا كنت تستخدم نظام تعلم آلي كخدمة (ML SaaS) مثل [Lobe.ai](https://lobe.ai/) أو [Azure Custom Vision](https://azure.microsoft.com/services/cognitive-services/custom-vision-service/?WT.mc_id=academic-77952-leestott) لتدريب نموذج، فإن هذا النوع من البرمجيات يوفر طرقًا لتصدير النموذج للعديد من المنصات، بما في ذلك بناء واجهة برمجية مخصصة يمكن استدعاؤها في السحابة بواسطة تطبيقك عبر الإنترنت.
+
+لديك أيضًا فرصة لبناء تطبيق ويب كامل باستخدام Flask يمكنه تدريب النموذج نفسه في متصفح الويب. يمكن القيام بذلك أيضًا باستخدام TensorFlow.js في سياق JavaScript.
+
+بالنسبة لأغراضنا، بما أننا عملنا مع دفاتر Jupyter المستندة إلى Python، دعنا نستكشف الخطوات التي تحتاج إلى اتخاذها لتصدير نموذج مدرب من دفتر ملاحظات إلى تنسيق يمكن قراءته بواسطة تطبيق ويب مبني باستخدام Python.
+
+## الأدوات
+
+لهذه المهمة، تحتاج إلى أداتين: Flask وPickle، وكلاهما يعملان على Python.
+
+✅ ما هو [Flask](https://palletsprojects.com/p/flask/)؟ يُعرف بأنه "إطار عمل صغير" من قبل مطوريه، يوفر Flask الميزات الأساسية لإطارات عمل الويب باستخدام Python ومحرك قوالب لبناء صفحات الويب. ألقِ نظرة على [هذا الدرس](https://docs.microsoft.com/learn/modules/python-flask-build-ai-web-app?WT.mc_id=academic-77952-leestott) لتتعلم كيفية بناء تطبيقات باستخدام Flask.
+
+✅ ما هو [Pickle](https://docs.python.org/3/library/pickle.html)؟ Pickle 🥒 هو وحدة Python تقوم بتسلسل وفك تسلسل هيكل كائن Python. عندما تقوم "بتخزين" نموذج، فإنك تقوم بتسلسل أو تسطيح هيكله لاستخدامه على الويب. كن حذرًا: Pickle ليس آمنًا بطبيعته، لذا كن حذرًا إذا طُلب منك "فك تخزين" ملف. الملف المخزن يحتوي على الامتداد `.pkl`.
+
+## تمرين - تنظيف البيانات
+
+في هذا الدرس، ستستخدم بيانات من 80,000 مشاهدة للأجسام الطائرة المجهولة، التي جمعها [NUFORC](https://nuforc.org) (المركز الوطني لتقارير الأجسام الطائرة المجهولة). تحتوي هذه البيانات على أوصاف مثيرة للاهتمام لمشاهدات الأجسام الطائرة المجهولة، على سبيل المثال:
+
+- **وصف طويل كمثال.** "رجل يظهر من شعاع ضوء يضيء على حقل عشبي في الليل ويركض نحو موقف سيارات Texas Instruments".
+- **وصف قصير كمثال.** "الأضواء طاردتنا".
+
+تتضمن ورقة البيانات [ufos.csv](../../../../3-Web-App/1-Web-App/data/ufos.csv) أعمدة حول `المدينة`، `الولاية` و`الدولة` التي حدثت فيها المشاهدة، شكل الجسم الطائر (`shape`) وخطوط الطول والعرض (`latitude` و`longitude`).
+
+في [دفتر الملاحظات](notebook.ipynb) الفارغ المرفق في هذا الدرس:
+
+1. قم باستيراد `pandas`، `matplotlib`، و`numpy` كما فعلت في الدروس السابقة واستورد ورقة بيانات الأجسام الطائرة المجهولة. يمكنك إلقاء نظرة على عينة من مجموعة البيانات:
+
+ ```python
+ import pandas as pd
+ import numpy as np
+
+ ufos = pd.read_csv('./data/ufos.csv')
+ ufos.head()
+ ```
+
+1. قم بتحويل بيانات الأجسام الطائرة إلى إطار بيانات صغير مع عناوين جديدة. تحقق من القيم الفريدة في حقل `Country`.
+
+ ```python
+ ufos = pd.DataFrame({'Seconds': ufos['duration (seconds)'], 'Country': ufos['country'],'Latitude': ufos['latitude'],'Longitude': ufos['longitude']})
+
+ ufos.Country.unique()
+ ```
+
+1. الآن، يمكنك تقليل كمية البيانات التي نحتاج إلى التعامل معها عن طريق حذف أي قيم فارغة واستيراد المشاهدات التي تتراوح مدتها بين 1-60 ثانية فقط:
+
+ ```python
+ ufos.dropna(inplace=True)
+
+ ufos = ufos[(ufos['Seconds'] >= 1) & (ufos['Seconds'] <= 60)]
+
+ ufos.info()
+ ```
+
+1. استورد مكتبة `LabelEncoder` من Scikit-learn لتحويل القيم النصية للدول إلى أرقام:
+
+ ✅ يقوم LabelEncoder بترميز البيانات أبجديًا
+
+ ```python
+ from sklearn.preprocessing import LabelEncoder
+
+ ufos['Country'] = LabelEncoder().fit_transform(ufos['Country'])
+
+ ufos.head()
+ ```
+
+ يجب أن تبدو بياناتك كما يلي:
+
+ ```output
+ Seconds Country Latitude Longitude
+ 2 20.0 3 53.200000 -2.916667
+ 3 20.0 4 28.978333 -96.645833
+ 14 30.0 4 35.823889 -80.253611
+ 23 60.0 4 45.582778 -122.352222
+ 24 3.0 3 51.783333 -0.783333
+ ```
+
+## تمرين - بناء النموذج
+
+الآن يمكنك الاستعداد لتدريب نموذج عن طريق تقسيم البيانات إلى مجموعة تدريب واختبار.
+
+1. اختر ثلاث ميزات تريد التدريب عليها كمتجه X، وسيكون المتجه y هو `Country`. تريد أن تكون قادرًا على إدخال `Seconds`، `Latitude` و`Longitude` والحصول على معرف الدولة كإخراج.
+
+ ```python
+ from sklearn.model_selection import train_test_split
+
+ Selected_features = ['Seconds','Latitude','Longitude']
+
+ X = ufos[Selected_features]
+ y = ufos['Country']
+
+ X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0)
+ ```
+
+1. قم بتدريب النموذج باستخدام الانحدار اللوجستي:
+
+ ```python
+ from sklearn.metrics import accuracy_score, classification_report
+ from sklearn.linear_model import LogisticRegression
+ model = LogisticRegression()
+ model.fit(X_train, y_train)
+ predictions = model.predict(X_test)
+
+ print(classification_report(y_test, predictions))
+ print('Predicted labels: ', predictions)
+ print('Accuracy: ', accuracy_score(y_test, predictions))
+ ```
+
+الدقة ليست سيئة **(حوالي 95%)**، وهذا ليس مفاجئًا، حيث أن `Country` و`Latitude/Longitude` مترابطان.
+
+النموذج الذي أنشأته ليس ثوريًا جدًا حيث يجب أن تكون قادرًا على استنتاج `Country` من `Latitude` و`Longitude`، ولكنه تمرين جيد لمحاولة التدريب على بيانات خام قمت بتنظيفها وتصديرها، ثم استخدام هذا النموذج في تطبيق ويب.
+
+## تمرين - "تخزين" النموذج
+
+الآن، حان الوقت لتخزين النموذج! يمكنك القيام بذلك في بضع أسطر من التعليمات البرمجية. بمجرد تخزينه، قم بتحميل النموذج المخزن واختبره مقابل مصفوفة بيانات عينة تحتوي على قيم للثواني، خط العرض وخط الطول:
+
+```python
+import pickle
+model_filename = 'ufo-model.pkl'
+pickle.dump(model, open(model_filename,'wb'))
+
+model = pickle.load(open('ufo-model.pkl','rb'))
+print(model.predict([[50,44,-12]]))
+```
+
+يُرجع النموذج **'3'**، وهو رمز الدولة للمملكة المتحدة. مذهل! 👽
+
+## تمرين - بناء تطبيق Flask
+
+الآن يمكنك بناء تطبيق Flask لاستدعاء النموذج وإرجاع نتائج مشابهة، ولكن بطريقة أكثر جاذبية بصريًا.
+
+1. ابدأ بإنشاء مجلد يسمى **web-app** بجانب ملف _notebook.ipynb_ حيث يوجد ملف _ufo-model.pkl_.
+
+1. في هذا المجلد، قم بإنشاء ثلاثة مجلدات أخرى: **static**، مع مجلد **css** بداخله، و**templates**. يجب أن يكون لديك الآن الملفات والمجلدات التالية:
+
+ ```output
+ web-app/
+ static/
+ css/
+ templates/
+ notebook.ipynb
+ ufo-model.pkl
+ ```
+
+ ✅ ارجع إلى مجلد الحل لرؤية التطبيق النهائي
+
+1. أول ملف تقوم بإنشائه في مجلد _web-app_ هو ملف **requirements.txt**. مثل _package.json_ في تطبيق JavaScript، يسرد هذا الملف التبعيات المطلوبة للتطبيق. في **requirements.txt** أضف الأسطر:
+
+ ```text
+ scikit-learn
+ pandas
+ numpy
+ flask
+ ```
+
+1. الآن، قم بتشغيل هذا الملف عن طريق الانتقال إلى _web-app_:
+
+ ```bash
+ cd web-app
+ ```
+
+1. في الطرفية الخاصة بك، اكتب `pip install` لتثبيت المكتبات المدرجة في _requirements.txt_:
+
+ ```bash
+ pip install -r requirements.txt
+ ```
+
+1. الآن، أنت جاهز لإنشاء ثلاثة ملفات أخرى لإنهاء التطبيق:
+
+ 1. أنشئ ملف **app.py** في الجذر.
+ 2. أنشئ ملف **index.html** في مجلد _templates_.
+ 3. أنشئ ملف **styles.css** في مجلد _static/css_.
+
+1. قم ببناء ملف _styles.css_ ببعض الأنماط:
+
+ ```css
+ body {
+ width: 100%;
+ height: 100%;
+ font-family: 'Helvetica';
+ background: black;
+ color: #fff;
+ text-align: center;
+ letter-spacing: 1.4px;
+ font-size: 30px;
+ }
+
+ input {
+ min-width: 150px;
+ }
+
+ .grid {
+ width: 300px;
+ border: 1px solid #2d2d2d;
+ display: grid;
+ justify-content: center;
+ margin: 20px auto;
+ }
+
+ .box {
+ color: #fff;
+ background: #2d2d2d;
+ padding: 12px;
+ display: inline-block;
+ }
+ ```
+
+1. بعد ذلك، قم ببناء ملف _index.html_:
+
+ ```html
+
+
+
+
+ 🛸 UFO Appearance Prediction! 👽
+
+
+
+
+
+
+
+
+
According to the number of seconds, latitude and longitude, which country is likely to have reported seeing a UFO?
+
+
+
+
{{ prediction_text }}
+
+
+
+
+
+
+
+ ```
+
+ ألقِ نظرة على القوالب في هذا الملف. لاحظ صياغة "mustache" حول المتغيرات التي سيتم توفيرها بواسطة التطبيق، مثل نص التنبؤ: `{{}}`. هناك أيضًا نموذج يقوم بإرسال تنبؤ إلى مسار `/predict`.
+
+ أخيرًا، أنت جاهز لبناء ملف Python الذي يدير استهلاك النموذج وعرض التنبؤات:
+
+1. في `app.py` أضف:
+
+ ```python
+ import numpy as np
+ from flask import Flask, request, render_template
+ import pickle
+
+ app = Flask(__name__)
+
+ model = pickle.load(open("./ufo-model.pkl", "rb"))
+
+
+ @app.route("/")
+ def home():
+ return render_template("index.html")
+
+
+ @app.route("/predict", methods=["POST"])
+ def predict():
+
+ int_features = [int(x) for x in request.form.values()]
+ final_features = [np.array(int_features)]
+ prediction = model.predict(final_features)
+
+ output = prediction[0]
+
+ countries = ["Australia", "Canada", "Germany", "UK", "US"]
+
+ return render_template(
+ "index.html", prediction_text="Likely country: {}".format(countries[output])
+ )
+
+
+ if __name__ == "__main__":
+ app.run(debug=True)
+ ```
+
+ > 💡 نصيحة: عند إضافة [`debug=True`](https://www.askpython.com/python-modules/flask/flask-debug-mode) أثناء تشغيل تطبيق الويب باستخدام Flask، سيتم عكس أي تغييرات تجريها على التطبيق فورًا دون الحاجة إلى إعادة تشغيل الخادم. احذر! لا تقم بتمكين هذا الوضع في تطبيق الإنتاج.
+
+إذا قمت بتشغيل `python app.py` أو `python3 app.py` - يبدأ خادم الويب الخاص بك محليًا، ويمكنك ملء نموذج قصير للحصول على إجابة لسؤالك الملح حول أماكن مشاهدة الأجسام الطائرة المجهولة!
+
+قبل القيام بذلك، ألقِ نظرة على أجزاء `app.py`:
+
+1. أولاً، يتم تحميل التبعيات وبدء التطبيق.
+1. ثم يتم استيراد النموذج.
+1. ثم يتم عرض index.html على المسار الرئيسي.
+
+على مسار `/predict`، تحدث عدة أشياء عند إرسال النموذج:
+
+1. يتم جمع متغيرات النموذج وتحويلها إلى مصفوفة numpy. ثم يتم إرسالها إلى النموذج ويتم إرجاع تنبؤ.
+2. يتم إعادة عرض الدول التي نريد عرضها كنصوص قابلة للقراءة من رمز الدولة المتوقع، ويتم إرسال تلك القيمة مرة أخرى إلى index.html ليتم عرضها في القالب.
+
+استخدام النموذج بهذه الطريقة، مع Flask ونموذج مخزن، هو أمر بسيط نسبيًا. أصعب شيء هو فهم شكل البيانات التي يجب إرسالها إلى النموذج للحصول على تنبؤ. يعتمد ذلك كله على كيفية تدريب النموذج. يحتوي هذا النموذج على ثلاث نقاط بيانات يجب إدخالها للحصول على تنبؤ.
+
+في بيئة احترافية، يمكنك أن ترى كيف أن التواصل الجيد ضروري بين الأشخاص الذين يدربون النموذج وأولئك الذين يستهلكونه في تطبيق ويب أو جوال. في حالتنا، الشخص الوحيد هو أنت!
+
+---
+
+## 🚀 تحدي
+
+بدلاً من العمل في دفتر ملاحظات واستيراد النموذج إلى تطبيق Flask، يمكنك تدريب النموذج مباشرة داخل تطبيق Flask! حاول تحويل كود Python الخاص بك في دفتر الملاحظات، ربما بعد تنظيف البيانات، لتدريب النموذج من داخل التطبيق على مسار يسمى `train`. ما هي إيجابيات وسلبيات متابعة هذه الطريقة؟
+
+## [اختبار ما بعد المحاضرة](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/18/)
+
+## المراجعة والدراسة الذاتية
+
+هناك العديد من الطرق لبناء تطبيق ويب لاستهلاك نماذج تعلم الآلة. قم بعمل قائمة بالطرق التي يمكنك بها استخدام JavaScript أو Python لبناء تطبيق ويب للاستفادة من تعلم الآلة. فكر في البنية: هل يجب أن يبقى النموذج في التطبيق أم يعيش في السحابة؟ إذا كان الخيار الأخير، كيف ستصل إليه؟ ارسم نموذجًا معماريًا لحل تعلم الآلة المطبق على الويب.
+
+## الواجب
+
+[جرب نموذجًا مختلفًا](assignment.md)
+
+---
+
+**إخلاء المسؤولية**:
+تم ترجمة هذا المستند باستخدام خدمة الترجمة بالذكاء الاصطناعي [Co-op Translator](https://github.com/Azure/co-op-translator). بينما نسعى لتحقيق الدقة، يرجى العلم أن الترجمات الآلية قد تحتوي على أخطاء أو معلومات غير دقيقة. يجب اعتبار المستند الأصلي بلغته الأصلية المصدر الرسمي. للحصول على معلومات حاسمة، يُوصى بالاستعانة بترجمة بشرية احترافية. نحن غير مسؤولين عن أي سوء فهم أو تفسيرات خاطئة ناتجة عن استخدام هذه الترجمة.
\ No newline at end of file
diff --git a/translations/ar/3-Web-App/1-Web-App/assignment.md b/translations/ar/3-Web-App/1-Web-App/assignment.md
new file mode 100644
index 000000000..68dfaee59
--- /dev/null
+++ b/translations/ar/3-Web-App/1-Web-App/assignment.md
@@ -0,0 +1,25 @@
+
+# جرب نموذجًا مختلفًا
+
+## التعليمات
+
+الآن بعد أن قمت ببناء تطبيق ويب باستخدام نموذج الانحدار المدرب، استخدم أحد النماذج من درس الانحدار السابق لإعادة إنشاء هذا التطبيق. يمكنك الاحتفاظ بالأسلوب أو تصميمه بشكل مختلف ليعكس بيانات القرع. احرص على تغيير المدخلات لتتناسب مع طريقة تدريب النموذج الخاص بك.
+
+## معايير التقييم
+
+| المعايير | ممتاز | مقبول | يحتاج إلى تحسين |
+| -------------------------- | ------------------------------------------------------ | ------------------------------------------------------ | ------------------------------------ |
+| | يعمل تطبيق الويب كما هو متوقع وتم نشره على السحابة | يحتوي تطبيق الويب على عيوب أو يظهر نتائج غير متوقعة | تطبيق الويب لا يعمل بشكل صحيح |
+
+---
+
+**إخلاء المسؤولية**:
+تمت ترجمة هذا المستند باستخدام خدمة الترجمة الآلية [Co-op Translator](https://github.com/Azure/co-op-translator). بينما نسعى لتحقيق الدقة، يرجى العلم أن الترجمات الآلية قد تحتوي على أخطاء أو معلومات غير دقيقة. يجب اعتبار المستند الأصلي بلغته الأصلية هو المصدر الموثوق. للحصول على معلومات حساسة أو هامة، يُوصى بالاستعانة بترجمة بشرية احترافية. نحن غير مسؤولين عن أي سوء فهم أو تفسيرات خاطئة تنشأ عن استخدام هذه الترجمة.
\ No newline at end of file
diff --git a/translations/ar/3-Web-App/1-Web-App/notebook.ipynb b/translations/ar/3-Web-App/1-Web-App/notebook.ipynb
new file mode 100644
index 000000000..e69de29bb
diff --git a/translations/ar/3-Web-App/1-Web-App/solution/notebook.ipynb b/translations/ar/3-Web-App/1-Web-App/solution/notebook.ipynb
new file mode 100644
index 000000000..e87b369f6
--- /dev/null
+++ b/translations/ar/3-Web-App/1-Web-App/solution/notebook.ipynb
@@ -0,0 +1,269 @@
+{
+ "metadata": {
+ "language_info": {
+ "codemirror_mode": {
+ "name": "ipython",
+ "version": 3
+ },
+ "file_extension": ".py",
+ "mimetype": "text/x-python",
+ "name": "python",
+ "nbconvert_exporter": "python",
+ "pygments_lexer": "ipython3",
+ "version": "3.7.0"
+ },
+ "orig_nbformat": 2,
+ "kernelspec": {
+ "name": "python37364bit8d3b438fb5fc4430a93ac2cb74d693a7",
+ "display_name": "Python 3.7.0 64-bit ('3.7')"
+ },
+ "metadata": {
+ "interpreter": {
+ "hash": "70b38d7a306a849643e446cd70466270a13445e5987dfa1344ef2b127438fa4d"
+ }
+ },
+ "coopTranslator": {
+ "original_hash": "5fa2e8f4584c78250ca9729b46562ceb",
+ "translation_date": "2025-08-29T15:21:07+00:00",
+ "source_file": "3-Web-App/1-Web-App/solution/notebook.ipynb",
+ "language_code": "ar"
+ }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 2,
+ "cells": [
+ {
+ "source": [
+ "## قم ببناء تطبيق ويب باستخدام نموذج الانحدار للتعرف على مشاهدات الأجسام الطائرة المجهولة\n"
+ ],
+ "cell_type": "markdown",
+ "metadata": {}
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 23,
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "execute_result",
+ "data": {
+ "text/plain": [
+ " datetime city state country shape \\\n",
+ "0 10/10/1949 20:30 san marcos tx us cylinder \n",
+ "1 10/10/1949 21:00 lackland afb tx NaN light \n",
+ "2 10/10/1955 17:00 chester (uk/england) NaN gb circle \n",
+ "3 10/10/1956 21:00 edna tx us circle \n",
+ "4 10/10/1960 20:00 kaneohe hi us light \n",
+ "\n",
+ " duration (seconds) duration (hours/min) \\\n",
+ "0 2700.0 45 minutes \n",
+ "1 7200.0 1-2 hrs \n",
+ "2 20.0 20 seconds \n",
+ "3 20.0 1/2 hour \n",
+ "4 900.0 15 minutes \n",
+ "\n",
+ " comments date posted latitude \\\n",
+ "0 This event took place in early fall around 194... 4/27/2004 29.883056 \n",
+ "1 1949 Lackland AFB, TX. Lights racing acros... 12/16/2005 29.384210 \n",
+ "2 Green/Orange circular disc over Chester, En... 1/21/2008 53.200000 \n",
+ "3 My older brother and twin sister were leaving ... 1/17/2004 28.978333 \n",
+ "4 AS a Marine 1st Lt. flying an FJ4B fighter/att... 1/22/2004 21.418056 \n",
+ "\n",
+ " longitude \n",
+ "0 -97.941111 \n",
+ "1 -98.581082 \n",
+ "2 -2.916667 \n",
+ "3 -96.645833 \n",
+ "4 -157.803611 "
+ ],
+ "text/html": "
"
+ },
+ "metadata": {},
+ "execution_count": 26
+ }
+ ],
+ "source": [
+ "from sklearn.preprocessing import LabelEncoder\n",
+ "\n",
+ "ufos['Country'] = LabelEncoder().fit_transform(ufos['Country'])\n",
+ "\n",
+ "ufos.head()"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 27,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "from sklearn.model_selection import train_test_split\n",
+ "\n",
+ "Selected_features = ['Seconds','Latitude','Longitude']\n",
+ "\n",
+ "X = ufos[Selected_features]\n",
+ "y = ufos['Country']\n",
+ "\n",
+ "\n",
+ "X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0)\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 28,
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "name": "stderr",
+ "text": [
+ "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/sklearn/linear_model/logistic.py:432: FutureWarning: Default solver will be changed to 'lbfgs' in 0.22. Specify a solver to silence this warning.\n",
+ " FutureWarning)\n",
+ "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/sklearn/linear_model/logistic.py:469: FutureWarning: Default multi_class will be changed to 'auto' in 0.22. Specify the multi_class option to silence this warning.\n",
+ " \"this warning.\", FutureWarning)\n",
+ " precision recall f1-score support\n",
+ "\n",
+ " 0 1.00 1.00 1.00 41\n",
+ " 1 1.00 0.02 0.05 250\n",
+ " 2 0.00 0.00 0.00 8\n",
+ " 3 0.94 1.00 0.97 131\n",
+ " 4 0.95 1.00 0.97 4743\n",
+ "\n",
+ " accuracy 0.95 5173\n",
+ " macro avg 0.78 0.60 0.60 5173\n",
+ "weighted avg 0.95 0.95 0.93 5173\n",
+ "\n",
+ "Predicted labels: [4 4 4 ... 3 4 4]\n",
+ "Accuracy: 0.9512855209742895\n",
+ "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/sklearn/metrics/classification.py:1437: UndefinedMetricWarning: Precision and F-score are ill-defined and being set to 0.0 in labels with no predicted samples.\n",
+ " 'precision', 'predicted', average, warn_for)\n"
+ ]
+ }
+ ],
+ "source": [
+ "from sklearn.model_selection import train_test_split\n",
+ "from sklearn.metrics import accuracy_score, classification_report \n",
+ "from sklearn.linear_model import LogisticRegression\n",
+ "model = LogisticRegression()\n",
+ "model.fit(X_train, y_train)\n",
+ "predictions = model.predict(X_test)\n",
+ "\n",
+ "print(classification_report(y_test, predictions))\n",
+ "print('Predicted labels: ', predictions)\n",
+ "print('Accuracy: ', accuracy_score(y_test, predictions))\n",
+ "\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 29,
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "name": "stdout",
+ "text": [
+ "[3]\n"
+ ]
+ }
+ ],
+ "source": [
+ "import pickle\n",
+ "model_filename = 'ufo-model.pkl'\n",
+ "pickle.dump(model, open(model_filename,'wb'))\n",
+ "\n",
+ "model = pickle.load(open('ufo-model.pkl','rb'))\n",
+ "print(model.predict([[50,44,-12]]))\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": []
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "\n---\n\n**إخلاء المسؤولية**: \nتمت ترجمة هذا المستند باستخدام خدمة الترجمة الآلية [Co-op Translator](https://github.com/Azure/co-op-translator). بينما نسعى لتحقيق الدقة، يرجى العلم أن الترجمات الآلية قد تحتوي على أخطاء أو معلومات غير دقيقة. يجب اعتبار المستند الأصلي بلغته الأصلية هو المصدر الموثوق. للحصول على معلومات حساسة أو هامة، يُوصى بالاستعانة بترجمة بشرية احترافية. نحن غير مسؤولين عن أي سوء فهم أو تفسيرات خاطئة ناتجة عن استخدام هذه الترجمة.\n"
+ ]
+ }
+ ]
+}
\ No newline at end of file
diff --git a/translations/ar/3-Web-App/README.md b/translations/ar/3-Web-App/README.md
new file mode 100644
index 000000000..3822263b1
--- /dev/null
+++ b/translations/ar/3-Web-App/README.md
@@ -0,0 +1,35 @@
+
+# بناء تطبيق ويب لاستخدام نموذج التعلم الآلي الخاص بك
+
+في هذا القسم من المنهج، ستتعرف على موضوع عملي في التعلم الآلي: كيفية حفظ نموذج Scikit-learn كملف يمكن استخدامه لإجراء التنبؤات داخل تطبيق ويب. بمجرد حفظ النموذج، ستتعلم كيفية استخدامه في تطبيق ويب مبني باستخدام Flask. ستقوم أولاً بإنشاء نموذج باستخدام بعض البيانات المتعلقة بمشاهدات الأجسام الطائرة المجهولة (UFO)! بعد ذلك، ستبني تطبيق ويب يسمح لك بإدخال عدد من الثواني مع قيمة خط العرض وخط الطول للتنبؤ بالدولة التي أبلغت عن رؤية جسم طائر مجهول.
+
+
+
+صورة بواسطة Michael Herren على Unsplash
+
+## الدروس
+
+1. [بناء تطبيق ويب](1-Web-App/README.md)
+
+## الشكر
+
+تم كتابة "بناء تطبيق ويب" بحب ♥️ بواسطة [Jen Looper](https://twitter.com/jenlooper).
+
+♥️ تم كتابة الاختبارات بواسطة روهان راج.
+
+تم الحصول على مجموعة البيانات من [Kaggle](https://www.kaggle.com/NUFORC/ufo-sightings).
+
+تم اقتراح بنية تطبيق الويب جزئيًا من خلال [هذا المقال](https://towardsdatascience.com/how-to-easily-deploy-machine-learning-models-using-flask-b95af8fe34d4) و[هذا المستودع](https://github.com/abhinavsagar/machine-learning-deployment) بواسطة Abhinav Sagar.
+
+---
+
+**إخلاء المسؤولية**:
+تمت ترجمة هذا المستند باستخدام خدمة الترجمة الآلية [Co-op Translator](https://github.com/Azure/co-op-translator). بينما نسعى لتحقيق الدقة، يرجى العلم أن الترجمات الآلية قد تحتوي على أخطاء أو معلومات غير دقيقة. يجب اعتبار المستند الأصلي بلغته الأصلية هو المصدر الموثوق. للحصول على معلومات حساسة أو هامة، يُوصى بالاستعانة بترجمة بشرية احترافية. نحن غير مسؤولين عن أي سوء فهم أو تفسيرات خاطئة تنشأ عن استخدام هذه الترجمة.
\ No newline at end of file
diff --git a/translations/ar/4-Classification/1-Introduction/README.md b/translations/ar/4-Classification/1-Introduction/README.md
new file mode 100644
index 000000000..6346ee1eb
--- /dev/null
+++ b/translations/ar/4-Classification/1-Introduction/README.md
@@ -0,0 +1,313 @@
+
+# مقدمة إلى التصنيف
+
+في هذه الدروس الأربعة، ستستكشف أحد المحاور الأساسية لتعلم الآلة الكلاسيكي - _التصنيف_. سنقوم باستعراض استخدام خوارزميات تصنيف مختلفة مع مجموعة بيانات عن جميع المأكولات الرائعة في آسيا والهند. نأمل أن تكون جائعًا!
+
+
+
+> احتفل بالمأكولات الآسيوية في هذه الدروس! الصورة من [Jen Looper](https://twitter.com/jenlooper)
+
+التصنيف هو شكل من أشكال [التعلم الموجه](https://wikipedia.org/wiki/Supervised_learning) الذي يشترك كثيرًا مع تقنيات الانحدار. إذا كان تعلم الآلة يدور حول التنبؤ بالقيم أو الأسماء باستخدام مجموعات البيانات، فإن التصنيف ينقسم عمومًا إلى مجموعتين: _التصنيف الثنائي_ و_التصنيف متعدد الفئات_.
+
+[](https://youtu.be/eg8DJYwdMyg "مقدمة إلى التصنيف")
+
+> 🎥 انقر على الصورة أعلاه لمشاهدة فيديو: يقدم جون غوتاغ من MIT مقدمة عن التصنيف
+
+تذكر:
+
+- **الانحدار الخطي** ساعدك في التنبؤ بالعلاقات بين المتغيرات وإجراء تنبؤات دقيقة حول مكان وقوع نقطة بيانات جديدة بالنسبة لذلك الخط. على سبيل المثال، يمكنك التنبؤ _بسعر اليقطين في سبتمبر مقابل ديسمبر_.
+- **الانحدار اللوجستي** ساعدك في اكتشاف "الفئات الثنائية": عند هذا السعر، _هل هذا اليقطين برتقالي أم غير برتقالي_؟
+
+يستخدم التصنيف خوارزميات مختلفة لتحديد طرق أخرى لتحديد تسمية أو فئة نقطة البيانات. دعنا نعمل مع بيانات المأكولات هذه لنرى ما إذا كان بإمكاننا، من خلال ملاحظة مجموعة من المكونات، تحديد أصل المأكولات.
+
+## [اختبار قبل المحاضرة](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/19/)
+
+> ### [هذا الدرس متوفر بلغة R!](../../../../4-Classification/1-Introduction/solution/R/lesson_10.html)
+
+### مقدمة
+
+التصنيف هو أحد الأنشطة الأساسية للباحث في تعلم الآلة وعالم البيانات. من التصنيف الأساسي لقيمة ثنائية ("هل هذا البريد الإلكتروني مزعج أم لا؟")، إلى التصنيف المعقد للصور وتقسيمها باستخدام رؤية الحاسوب، من المفيد دائمًا أن تكون قادرًا على تصنيف البيانات إلى فئات وطرح الأسئلة عليها.
+
+لصياغة العملية بطريقة أكثر علمية، فإن طريقة التصنيف الخاصة بك تنشئ نموذجًا تنبؤيًا يمكّنك من رسم العلاقة بين المتغيرات المدخلة والمتغيرات الناتجة.
+
+
+
+> مشاكل التصنيف الثنائي مقابل متعدد الفئات التي تتعامل معها الخوارزميات. الرسم التوضيحي من [Jen Looper](https://twitter.com/jenlooper)
+
+قبل البدء في عملية تنظيف بياناتنا، تصورها، وتجهيزها لمهام تعلم الآلة، دعونا نتعلم قليلاً عن الطرق المختلفة التي يمكن من خلالها استخدام تعلم الآلة لتصنيف البيانات.
+
+مستمدة من [الإحصائيات](https://wikipedia.org/wiki/Statistical_classification)، يستخدم التصنيف في تعلم الآلة الكلاسيكي ميزات مثل `smoker`، `weight`، و`age` لتحديد _احتمالية الإصابة بمرض معين_. كطريقة تعلم موجهة مشابهة لتمارين الانحدار التي قمت بها سابقًا، يتم تصنيف بياناتك وتستخدم الخوارزميات هذه التصنيفات لتصنيف وتوقع الفئات (أو "الميزات") لمجموعة البيانات وتعيينها إلى مجموعة أو نتيجة.
+
+✅ خذ لحظة لتخيل مجموعة بيانات عن المأكولات. ما الذي يمكن لنموذج متعدد الفئات الإجابة عليه؟ وما الذي يمكن لنموذج ثنائي الإجابة عليه؟ ماذا لو أردت تحديد ما إذا كانت مأكولات معينة تستخدم الحلبة؟ ماذا لو أردت معرفة ما إذا كان بإمكانك، بالنظر إلى كيس بقالة مليء باليانسون النجمي، والخرشوف، والقرنبيط، والفجل، إعداد طبق هندي نموذجي؟
+
+[](https://youtu.be/GuTeDbaNoEU "سلال غامضة مجنونة")
+
+> 🎥 انقر على الصورة أعلاه لمشاهدة فيديو. الفكرة الأساسية لبرنامج 'Chopped' هي "السلة الغامضة" حيث يتعين على الطهاة إعداد طبق من اختيار عشوائي من المكونات. بالتأكيد كان نموذج تعلم الآلة سيساعد!
+
+## مرحبًا بـ 'المصنف'
+
+السؤال الذي نريد طرحه على مجموعة بيانات المأكولات هو في الواقع سؤال **متعدد الفئات**، حيث لدينا العديد من المأكولات الوطنية المحتملة للعمل معها. بالنظر إلى مجموعة من المكونات، إلى أي من هذه الفئات العديدة ستنتمي البيانات؟
+
+يوفر 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()` سيتم قراءة محتوى ملف 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
+
+ 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. أنشئ دالة `create_ingredient()` في Python لإنشاء إطار بيانات للمكونات. ستبدأ هذه الدالة بإزالة عمود غير مفيد وفرز المكونات حسب عددها:
+
+ ```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) - "تقنية الإفراط في أخذ العينات للأقليات الاصطناعية" - لتحقيق التوازن.
+
+1. استدعِ `fit_resample()`، حيث تولد هذه الاستراتيجية عينات جديدة عن طريق الاستيفاء.
+
+ ```python
+ oversample = SMOTE()
+ transformed_feature_df, transformed_label_df = oversample.fit_resample(feature_df, labels_df)
+ ```
+
+ من خلال تحقيق التوازن في بياناتك، ستحصل على نتائج أفضل عند تصنيفها. فكر في التصنيف الثنائي. إذا كانت معظم بياناتك تنتمي إلى فئة واحدة، فإن نموذج تعلم الآلة سيتنبأ بتلك الفئة بشكل متكرر، فقط لأن هناك المزيد من البيانات لها. تحقيق التوازن في البيانات يزيل هذا التحيز.
+
+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()`. احفظ نسخة من هذه البيانات لاستخدامها في الدروس المستقبلية:
+
+ ```python
+ transformed_df.head()
+ transformed_df.info()
+ transformed_df.to_csv("../data/cleaned_cuisines.csv")
+ ```
+
+ يمكن الآن العثور على ملف CSV الجديد في مجلد البيانات الرئيسي.
+
+---
+
+## 🚀تحدي
+
+تحتوي هذه المناهج على العديد من مجموعات البيانات المثيرة للاهتمام. استعرض مجلدات `data` لترى ما إذا كان أي منها يحتوي على مجموعات بيانات مناسبة للتصنيف الثنائي أو متعدد الفئات؟ ما الأسئلة التي ستطرحها على هذه المجموعة من البيانات؟
+
+## [اختبار بعد المحاضرة](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/20/)
+
+## المراجعة والدراسة الذاتية
+
+استكشف واجهة برمجة تطبيقات SMOTE. ما هي حالات الاستخدام التي تناسبها؟ ما المشاكل التي تحلها؟
+
+## الواجب
+
+[استكشاف طرق التصنيف](assignment.md)
+
+---
+
+**إخلاء المسؤولية**:
+تمت ترجمة هذا المستند باستخدام خدمة الترجمة الآلية [Co-op Translator](https://github.com/Azure/co-op-translator). بينما نسعى لتحقيق الدقة، يرجى العلم أن الترجمات الآلية قد تحتوي على أخطاء أو معلومات غير دقيقة. يجب اعتبار المستند الأصلي بلغته الأصلية هو المصدر الموثوق. للحصول على معلومات حساسة أو هامة، يُوصى بالاستعانة بترجمة بشرية احترافية. نحن غير مسؤولين عن أي سوء فهم أو تفسيرات خاطئة تنشأ عن استخدام هذه الترجمة.
\ No newline at end of file
diff --git a/translations/ar/4-Classification/1-Introduction/assignment.md b/translations/ar/4-Classification/1-Introduction/assignment.md
new file mode 100644
index 000000000..a9378d6f3
--- /dev/null
+++ b/translations/ar/4-Classification/1-Introduction/assignment.md
@@ -0,0 +1,25 @@
+
+# استكشاف طرق التصنيف
+
+## التعليمات
+
+في [وثائق Scikit-learn](https://scikit-learn.org/stable/supervised_learning.html) ستجد قائمة كبيرة من الطرق لتصنيف البيانات. قم بعملية بحث صغيرة في هذه الوثائق: هدفك هو البحث عن طرق التصنيف وربطها بمجموعة بيانات موجودة في هذا المنهاج، سؤال يمكن طرحه عليها، وتقنية التصنيف المناسبة. قم بإنشاء جدول بيانات أو جدول في ملف .doc واشرح كيف ستعمل مجموعة البيانات مع خوارزمية التصنيف.
+
+## المعيار
+
+| المعايير | مثالي | كافٍ | يحتاج إلى تحسين |
+| -------- | ----------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| | يتم تقديم مستند يشرح 5 خوارزميات مع تقنية تصنيف. الشرح مفصل وواضح. | يتم تقديم مستند يشرح 3 خوارزميات مع تقنية تصنيف. الشرح مفصل وواضح. | يتم تقديم مستند يشرح أقل من ثلاث خوارزميات مع تقنية تصنيف، والشرح غير مفصل وغير واضح. |
+
+---
+
+**إخلاء المسؤولية**:
+تمت ترجمة هذا المستند باستخدام خدمة الترجمة الآلية [Co-op Translator](https://github.com/Azure/co-op-translator). بينما نسعى لتحقيق الدقة، يرجى العلم أن الترجمات الآلية قد تحتوي على أخطاء أو معلومات غير دقيقة. يجب اعتبار المستند الأصلي بلغته الأصلية هو المصدر الموثوق. للحصول على معلومات حساسة أو هامة، يُوصى بالاستعانة بترجمة بشرية احترافية. نحن غير مسؤولين عن أي سوء فهم أو تفسيرات خاطئة تنشأ عن استخدام هذه الترجمة.
\ No newline at end of file
diff --git a/translations/ar/4-Classification/1-Introduction/notebook.ipynb b/translations/ar/4-Classification/1-Introduction/notebook.ipynb
new file mode 100644
index 000000000..43163102b
--- /dev/null
+++ b/translations/ar/4-Classification/1-Introduction/notebook.ipynb
@@ -0,0 +1,39 @@
+{
+ "metadata": {
+ "language_info": {
+ "codemirror_mode": {
+ "name": "ipython",
+ "version": 3
+ },
+ "file_extension": ".py",
+ "mimetype": "text/x-python",
+ "name": "python",
+ "nbconvert_exporter": "python",
+ "pygments_lexer": "ipython3",
+ "version": 3
+ },
+ "orig_nbformat": 2,
+ "coopTranslator": {
+ "original_hash": "d544ef384b7ba73757d830a72372a7f2",
+ "translation_date": "2025-08-29T15:29:41+00:00",
+ "source_file": "4-Classification/1-Introduction/notebook.ipynb",
+ "language_code": "ar"
+ }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 2,
+ "cells": [
+ {
+ "source": [],
+ "cell_type": "markdown",
+ "metadata": {}
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "\n---\n\n**إخلاء المسؤولية**: \nتمت ترجمة هذا المستند باستخدام خدمة الترجمة الآلية [Co-op Translator](https://github.com/Azure/co-op-translator). بينما نسعى لتحقيق الدقة، يرجى العلم أن الترجمات الآلية قد تحتوي على أخطاء أو معلومات غير دقيقة. يجب اعتبار المستند الأصلي بلغته الأصلية هو المصدر الموثوق. للحصول على معلومات حساسة أو هامة، يُوصى بالاستعانة بترجمة بشرية احترافية. نحن غير مسؤولين عن أي سوء فهم أو تفسيرات خاطئة تنشأ عن استخدام هذه الترجمة.\n"
+ ]
+ }
+ ]
+}
\ No newline at end of file
diff --git a/translations/ar/4-Classification/1-Introduction/solution/Julia/README.md b/translations/ar/4-Classification/1-Introduction/solution/Julia/README.md
new file mode 100644
index 000000000..c43febe2a
--- /dev/null
+++ b/translations/ar/4-Classification/1-Introduction/solution/Julia/README.md
@@ -0,0 +1,15 @@
+
+هذا عنصر نائب مؤقت
+
+---
+
+**إخلاء المسؤولية**:
+تم ترجمة هذا المستند باستخدام خدمة الترجمة الآلية [Co-op Translator](https://github.com/Azure/co-op-translator). بينما نسعى لتحقيق الدقة، يرجى العلم أن الترجمات الآلية قد تحتوي على أخطاء أو معلومات غير دقيقة. يجب اعتبار المستند الأصلي بلغته الأصلية هو المصدر الموثوق. للحصول على معلومات حساسة أو هامة، يُوصى بالاستعانة بترجمة بشرية احترافية. نحن غير مسؤولين عن أي سوء فهم أو تفسيرات خاطئة ناتجة عن استخدام هذه الترجمة.
\ No newline at end of file
diff --git a/translations/ar/4-Classification/1-Introduction/solution/R/lesson_10-R.ipynb b/translations/ar/4-Classification/1-Introduction/solution/R/lesson_10-R.ipynb
new file mode 100644
index 000000000..d54679697
--- /dev/null
+++ b/translations/ar/4-Classification/1-Introduction/solution/R/lesson_10-R.ipynb
@@ -0,0 +1,724 @@
+{
+ "nbformat": 4,
+ "nbformat_minor": 2,
+ "metadata": {
+ "colab": {
+ "name": "lesson_10-R.ipynb",
+ "provenance": [],
+ "collapsed_sections": []
+ },
+ "kernelspec": {
+ "name": "ir",
+ "display_name": "R"
+ },
+ "language_info": {
+ "name": "R"
+ },
+ "coopTranslator": {
+ "original_hash": "2621e24705e8100893c9bf84e0fc8aef",
+ "translation_date": "2025-08-29T15:32:11+00:00",
+ "source_file": "4-Classification/1-Introduction/solution/R/lesson_10-R.ipynb",
+ "language_code": "ar"
+ }
+ },
+ "cells": [
+ {
+ "cell_type": "markdown",
+ "source": [
+ "# بناء نموذج تصنيف: المأكولات الآسيوية والهندية اللذيذة\n"
+ ],
+ "metadata": {
+ "id": "ItETB4tSFprR"
+ }
+ },
+ {
+ "cell_type": "markdown",
+ "source": [
+ "## مقدمة إلى التصنيف: تنظيف البيانات، تجهيزها، وتصويرها\n",
+ "\n",
+ "في هذه الدروس الأربعة، ستستكشف أحد الجوانب الأساسية لتعلم الآلة الكلاسيكي - *التصنيف*. سنقوم باستعراض استخدام خوارزميات التصنيف المختلفة مع مجموعة بيانات حول جميع المأكولات الرائعة في آسيا والهند. نأمل أن تكون جائعًا!\n",
+ "\n",
+ "
\n",
+ " \n",
+ " احتفل بالمأكولات الآسيوية في هذه الدروس! الصورة بواسطة Jen Looper\n",
+ "\n",
+ "التصنيف هو شكل من أشكال [التعلم الموجّه](https://wikipedia.org/wiki/Supervised_learning) الذي يشترك كثيرًا مع تقنيات الانحدار. في التصنيف، تقوم بتدريب نموذج للتنبؤ بالفئة التي ينتمي إليها عنصر معين. إذا كان تعلم الآلة يدور حول التنبؤ بالقيم أو الأسماء باستخدام مجموعات البيانات، فإن التصنيف ينقسم عمومًا إلى مجموعتين: *التصنيف الثنائي* و *التصنيف متعدد الفئات*.\n",
+ "\n",
+ "تذكر:\n",
+ "\n",
+ "- **الانحدار الخطي** ساعدك في التنبؤ بالعلاقات بين المتغيرات وإجراء توقعات دقيقة حول مكان وقوع نقطة بيانات جديدة بالنسبة لذلك الخط. على سبيل المثال، يمكنك التنبؤ بقيم رقمية مثل *ما هو سعر اليقطين في سبتمبر مقابل ديسمبر*.\n",
+ "\n",
+ "- **الانحدار اللوجستي** ساعدك في اكتشاف \"الفئات الثنائية\": عند هذا السعر، *هل هذا اليقطين برتقالي أم غير برتقالي*؟\n",
+ "\n",
+ "التصنيف يستخدم خوارزميات مختلفة لتحديد طرق أخرى لتحديد تسمية أو فئة نقطة البيانات. دعونا نعمل مع بيانات المأكولات لنرى ما إذا كان يمكننا، من خلال مراقبة مجموعة من المكونات، تحديد أصل المأكولات.\n",
+ "\n",
+ "### [**اختبار ما قبل المحاضرة**](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/19/)\n",
+ "\n",
+ "### **مقدمة**\n",
+ "\n",
+ "التصنيف هو أحد الأنشطة الأساسية للباحث في تعلم الآلة وعالم البيانات. من التصنيف الأساسي لقيمة ثنائية (\"هل هذا البريد الإلكتروني مزعج أم لا؟\")، إلى التصنيف المعقد للصور وتقسيمها باستخدام رؤية الكمبيوتر، من المفيد دائمًا أن تكون قادرًا على تصنيف البيانات إلى فئات وطرح الأسئلة عليها.\n",
+ "\n",
+ "لصياغة العملية بطريقة أكثر علمية، فإن طريقة التصنيف الخاصة بك تنشئ نموذجًا تنبؤيًا يمكّنك من رسم العلاقة بين المتغيرات المدخلة والمتغيرات الناتجة.\n",
+ "\n",
+ "
\n",
+ " \n",
+ " مشاكل التصنيف الثنائي مقابل متعدد الفئات التي تتعامل معها خوارزميات التصنيف. الرسم البياني بواسطة Jen Looper\n",
+ "\n",
+ "قبل البدء في عملية تنظيف بياناتنا، تصويرها، وتجهيزها لمهام تعلم الآلة، دعونا نتعلم قليلاً عن الطرق المختلفة التي يمكن من خلالها استخدام تعلم الآلة لتصنيف البيانات.\n",
+ "\n",
+ "مستمدة من [الإحصائيات](https://wikipedia.org/wiki/Statistical_classification)، يستخدم التصنيف في تعلم الآلة الكلاسيكي ميزات مثل `smoker`، `weight`، و `age` لتحديد *احتمالية الإصابة بمرض معين*. كطريقة تعلم موجّهة مشابهة لتمارين الانحدار التي قمت بها سابقًا، تكون بياناتك مُعلمة وتستخدم خوارزميات تعلم الآلة هذه العلامات لتصنيف وتوقع الفئات (أو \"الميزات\") لمجموعة البيانات وتعيينها إلى مجموعة أو نتيجة.\n",
+ "\n",
+ "✅ خذ لحظة لتخيل مجموعة بيانات عن المأكولات. ما الذي يمكن لنموذج متعدد الفئات الإجابة عليه؟ وما الذي يمكن لنموذج ثنائي الإجابة عليه؟ ماذا لو أردت تحديد ما إذا كانت مأكولات معينة من المحتمل أن تستخدم الحلبة؟ ماذا لو أردت معرفة ما إذا كان بإمكانك، بالنظر إلى حقيبة بقالة مليئة باليانسون النجمي، الخرشوف، القرنبيط، والفجل، إعداد طبق هندي نموذجي؟\n",
+ "\n",
+ "### **مرحبًا بـ 'المصنف'**\n",
+ "\n",
+ "السؤال الذي نريد طرحه على مجموعة بيانات المأكولات هو في الواقع سؤال **متعدد الفئات**، حيث لدينا العديد من المأكولات الوطنية المحتملة للعمل معها. بالنظر إلى مجموعة من المكونات، إلى أي من هذه الفئات العديدة ستنتمي البيانات؟\n",
+ "\n",
+ "يوفر Tidymodels العديد من الخوارزميات المختلفة لاستخدامها في تصنيف البيانات، اعتمادًا على نوع المشكلة التي تريد حلها. في الدروس التالية، ستتعلم عن العديد من هذه الخوارزميات.\n",
+ "\n",
+ "#### **المتطلبات الأساسية**\n",
+ "\n",
+ "لهذا الدرس، سنحتاج إلى الحزم التالية لتنظيف البيانات، تجهيزها، وتصويرها:\n",
+ "\n",
+ "- `tidyverse`: [tidyverse](https://www.tidyverse.org/) هو [مجموعة من حزم R](https://www.tidyverse.org/packages) مصممة لجعل علم البيانات أسرع وأسهل وأكثر متعة!\n",
+ "\n",
+ "- `tidymodels`: إطار عمل [tidymodels](https://www.tidymodels.org/) هو [مجموعة من الحزم](https://www.tidymodels.org/packages/) للنمذجة وتعلم الآلة.\n",
+ "\n",
+ "- `DataExplorer`: حزمة [DataExplorer](https://cran.r-project.org/web/packages/DataExplorer/vignettes/dataexplorer-intro.html) تهدف إلى تبسيط وأتمتة عملية تحليل البيانات وإنشاء التقارير.\n",
+ "\n",
+ "- `themis`: حزمة [themis](https://themis.tidymodels.org/) توفر خطوات إضافية للتعامل مع البيانات غير المتوازنة.\n",
+ "\n",
+ "يمكنك تثبيتها باستخدام:\n",
+ "\n",
+ "`install.packages(c(\"tidyverse\", \"tidymodels\", \"DataExplorer\", \"here\"))`\n",
+ "\n",
+ "بدلاً من ذلك، يقوم البرنامج النصي أدناه بالتحقق مما إذا كانت الحزم المطلوبة لإكمال هذا الدرس مثبتة ويقوم بتثبيتها إذا كانت مفقودة.\n"
+ ],
+ "metadata": {
+ "id": "ri5bQxZ-Fz_0"
+ }
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "source": [
+ "suppressWarnings(if (!require(\"pacman\"))install.packages(\"pacman\"))\r\n",
+ "\r\n",
+ "pacman::p_load(tidyverse, tidymodels, DataExplorer, themis, here)"
+ ],
+ "outputs": [],
+ "metadata": {
+ "id": "KIPxa4elGAPI"
+ }
+ },
+ {
+ "cell_type": "markdown",
+ "source": [
+ "سنقوم لاحقًا بتحميل هذه الحزم الرائعة وجعلها متاحة في جلسة R الحالية لدينا. (هذا للتوضيح فقط، `pacman::p_load()` قد قام بذلك بالفعل نيابةً عنك)\n"
+ ],
+ "metadata": {
+ "id": "YkKAxOJvGD4C"
+ }
+ },
+ {
+ "cell_type": "markdown",
+ "source": [
+ "## تمرين - تنظيف وتوازن بياناتك\n",
+ "\n",
+ "المهمة الأولى التي يجب القيام بها، قبل البدء في هذا المشروع، هي تنظيف وتوازن بياناتك للحصول على نتائج أفضل.\n",
+ "\n",
+ "هيا نتعرف على البيانات! 🕵️\n"
+ ],
+ "metadata": {
+ "id": "PFkQDlk0GN5O"
+ }
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "source": [
+ "# Import data\r\n",
+ "df <- read_csv(file = \"https://raw.githubusercontent.com/microsoft/ML-For-Beginners/main/4-Classification/data/cuisines.csv\")\r\n",
+ "\r\n",
+ "# View the first 5 rows\r\n",
+ "df %>% \r\n",
+ " slice_head(n = 5)\r\n"
+ ],
+ "outputs": [],
+ "metadata": {
+ "id": "Qccw7okxGT0S"
+ }
+ },
+ {
+ "cell_type": "markdown",
+ "source": [
+ "!مثير للاهتمام من الواضح أن العمود الأول هو نوع من عمود `id`. دعنا نحصل على المزيد من المعلومات حول البيانات.\n"
+ ],
+ "metadata": {
+ "id": "XrWnlgSrGVmR"
+ }
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "source": [
+ "# Basic information about the data\r\n",
+ "df %>%\r\n",
+ " introduce()\r\n",
+ "\r\n",
+ "# Visualize basic information above\r\n",
+ "df %>% \r\n",
+ " plot_intro(ggtheme = theme_light())"
+ ],
+ "outputs": [],
+ "metadata": {
+ "id": "4UcGmxRxGieA"
+ }
+ },
+ {
+ "cell_type": "markdown",
+ "source": [
+ "من النتائج، يمكننا أن نرى مباشرة أن لدينا `2448` صفًا و`385` عمودًا و`0` قيم مفقودة. لدينا أيضًا عمود واحد منفصل، *cuisine*.\n",
+ "\n",
+ "## تمرين - التعرف على أنواع المطابخ\n",
+ "\n",
+ "الآن يبدأ العمل في أن يصبح أكثر إثارة. دعونا نكتشف توزيع البيانات حسب نوع المطبخ.\n"
+ ],
+ "metadata": {
+ "id": "AaPubl__GmH5"
+ }
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "source": [
+ "# Count observations per cuisine\r\n",
+ "df %>% \r\n",
+ " count(cuisine) %>% \r\n",
+ " arrange(n)\r\n",
+ "\r\n",
+ "# Plot the distribution\r\n",
+ "theme_set(theme_light())\r\n",
+ "df %>% \r\n",
+ " count(cuisine) %>% \r\n",
+ " ggplot(mapping = aes(x = n, y = reorder(cuisine, -n))) +\r\n",
+ " geom_col(fill = \"midnightblue\", alpha = 0.7) +\r\n",
+ " ylab(\"cuisine\")"
+ ],
+ "outputs": [],
+ "metadata": {
+ "id": "FRsBVy5eGrrv"
+ }
+ },
+ {
+ "cell_type": "markdown",
+ "source": [
+ "هناك عدد محدود من المطابخ، ولكن توزيع البيانات غير متساوٍ. يمكنك إصلاح ذلك! ولكن قبل القيام بذلك، استكشف قليلاً المزيد.\n",
+ "\n",
+ "بعد ذلك، دعنا نخصص كل مطبخ إلى جدول بيانات منفصل (tibble) ونتحقق من كمية البيانات المتوفرة (عدد الصفوف والأعمدة) لكل مطبخ.\n",
+ "\n",
+ "> [tibble](https://tibble.tidyverse.org/) هو إطار بيانات حديث.\n",
+ "\n",
+ "
\n",
+ " \n",
+ " عمل فني بواسطة @allison_horst\n"
+ ],
+ "metadata": {
+ "id": "vVvyDb1kG2in"
+ }
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "source": [
+ "# Create individual tibble for the cuisines\r\n",
+ "thai_df <- df %>% \r\n",
+ " filter(cuisine == \"thai\")\r\n",
+ "japanese_df <- df %>% \r\n",
+ " filter(cuisine == \"japanese\")\r\n",
+ "chinese_df <- df %>% \r\n",
+ " filter(cuisine == \"chinese\")\r\n",
+ "indian_df <- df %>% \r\n",
+ " filter(cuisine == \"indian\")\r\n",
+ "korean_df <- df %>% \r\n",
+ " filter(cuisine == \"korean\")\r\n",
+ "\r\n",
+ "\r\n",
+ "# Find out how much data is available per cuisine\r\n",
+ "cat(\" thai df:\", dim(thai_df), \"\\n\",\r\n",
+ " \"japanese df:\", dim(japanese_df), \"\\n\",\r\n",
+ " \"chinese_df:\", dim(chinese_df), \"\\n\",\r\n",
+ " \"indian_df:\", dim(indian_df), \"\\n\",\r\n",
+ " \"korean_df:\", dim(korean_df))"
+ ],
+ "outputs": [],
+ "metadata": {
+ "id": "0TvXUxD3G8Bk"
+ }
+ },
+ {
+ "cell_type": "markdown",
+ "source": [
+ "## **تمرين - اكتشاف المكونات الرئيسية حسب المطبخ باستخدام dplyr**\n",
+ "\n",
+ "الآن يمكنك التعمق في البيانات ومعرفة ما هي المكونات النموذجية لكل مطبخ. يجب عليك تنظيف البيانات المتكررة التي تسبب ارتباكًا بين المطابخ، لذا دعنا نتعلم عن هذه المشكلة.\n",
+ "\n",
+ "قم بإنشاء دالة `create_ingredient()` بلغة R التي تُرجع إطار بيانات للمكونات. ستبدأ هذه الدالة بإزالة عمود غير مفيد وفرز المكونات حسب عددها.\n",
+ "\n",
+ "الهيكل الأساسي لدالة في R هو:\n",
+ "\n",
+ "`myFunction <- function(arglist){`\n",
+ "\n",
+ "**`...`**\n",
+ "\n",
+ "**`return`**`(value)`\n",
+ "\n",
+ "`}`\n",
+ "\n",
+ "يمكنك العثور على مقدمة منظمة لدوال R [هنا](https://skirmer.github.io/presentations/functions_with_r.html#1).\n",
+ "\n",
+ "لنبدأ مباشرة! سنستخدم [أفعال dplyr](https://dplyr.tidyverse.org/) التي تعلمناها في الدروس السابقة. كملخص:\n",
+ "\n",
+ "- `dplyr::select()`: يساعدك في اختيار **الأعمدة** التي تريد الاحتفاظ بها أو استبعادها.\n",
+ "\n",
+ "- `dplyr::pivot_longer()`: يساعدك على \"إطالة\" البيانات، مما يزيد عدد الصفوف ويقلل عدد الأعمدة.\n",
+ "\n",
+ "- `dplyr::group_by()` و `dplyr::summarise()`: يساعدانك في العثور على إحصائيات ملخصة لمجموعات مختلفة، ووضعها في جدول منظم.\n",
+ "\n",
+ "- `dplyr::filter()`: ينشئ مجموعة فرعية من البيانات تحتوي فقط على الصفوف التي تلبي شروطك.\n",
+ "\n",
+ "- `dplyr::mutate()`: يساعدك في إنشاء أو تعديل الأعمدة.\n",
+ "\n",
+ "اطلع على هذا [*الدرس الفني*](https://allisonhorst.shinyapps.io/dplyr-learnr/#section-welcome) بواسطة أليسون هورست، الذي يقدم بعض وظائف معالجة البيانات المفيدة في dplyr *(جزء من Tidyverse)*.\n"
+ ],
+ "metadata": {
+ "id": "K3RF5bSCHC76"
+ }
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "source": [
+ "# Creates a functions that returns the top ingredients by class\r\n",
+ "\r\n",
+ "create_ingredient <- function(df){\r\n",
+ " \r\n",
+ " # Drop the id column which is the first colum\r\n",
+ " ingredient_df = df %>% select(-1) %>% \r\n",
+ " # Transpose data to a long format\r\n",
+ " pivot_longer(!cuisine, names_to = \"ingredients\", values_to = \"count\") %>% \r\n",
+ " # Find the top most ingredients for a particular cuisine\r\n",
+ " group_by(ingredients) %>% \r\n",
+ " summarise(n_instances = sum(count)) %>% \r\n",
+ " filter(n_instances != 0) %>% \r\n",
+ " # Arrange by descending order\r\n",
+ " arrange(desc(n_instances)) %>% \r\n",
+ " mutate(ingredients = factor(ingredients) %>% fct_inorder())\r\n",
+ " \r\n",
+ " \r\n",
+ " return(ingredient_df)\r\n",
+ "} # End of function"
+ ],
+ "outputs": [],
+ "metadata": {
+ "id": "uB_0JR82HTPa"
+ }
+ },
+ {
+ "cell_type": "markdown",
+ "source": [
+ "الآن يمكننا استخدام الوظيفة للحصول على فكرة عن أكثر عشرة مكونات شعبية حسب المطبخ. دعنا نجربها مع `thai_df`\n"
+ ],
+ "metadata": {
+ "id": "h9794WF8HWmc"
+ }
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "source": [
+ "# Call create_ingredient and display popular ingredients\r\n",
+ "thai_ingredient_df <- create_ingredient(df = thai_df)\r\n",
+ "\r\n",
+ "thai_ingredient_df %>% \r\n",
+ " slice_head(n = 10)"
+ ],
+ "outputs": [],
+ "metadata": {
+ "id": "agQ-1HrcHaEA"
+ }
+ },
+ {
+ "cell_type": "markdown",
+ "source": [
+ "في القسم السابق، استخدمنا `geom_col()`، دعنا نرى كيف يمكنك استخدام `geom_bar` أيضًا، لإنشاء مخططات الأعمدة. استخدم `?geom_bar` لمزيد من القراءة.\n"
+ ],
+ "metadata": {
+ "id": "kHu9ffGjHdcX"
+ }
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "source": [
+ "# Make a bar chart for popular thai cuisines\r\n",
+ "thai_ingredient_df %>% \r\n",
+ " slice_head(n = 10) %>% \r\n",
+ " ggplot(aes(x = n_instances, y = ingredients)) +\r\n",
+ " geom_bar(stat = \"identity\", width = 0.5, fill = \"steelblue\") +\r\n",
+ " xlab(\"\") + ylab(\"\")"
+ ],
+ "outputs": [],
+ "metadata": {
+ "id": "fb3Bx_3DHj6e"
+ }
+ },
+ {
+ "cell_type": "markdown",
+ "source": [
+ "لنقم بنفس الشيء بالنسبة للبيانات اليابانية\n"
+ ],
+ "metadata": {
+ "id": "RHP_xgdkHnvM"
+ }
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "source": [
+ "# Get popular ingredients for Japanese cuisines and make bar chart\r\n",
+ "create_ingredient(df = japanese_df) %>% \r\n",
+ " slice_head(n = 10) %>%\r\n",
+ " ggplot(aes(x = n_instances, y = ingredients)) +\r\n",
+ " geom_bar(stat = \"identity\", width = 0.5, fill = \"darkorange\", alpha = 0.8) +\r\n",
+ " xlab(\"\") + ylab(\"\")\r\n"
+ ],
+ "outputs": [],
+ "metadata": {
+ "id": "019v8F0XHrRU"
+ }
+ },
+ {
+ "cell_type": "markdown",
+ "source": [
+ "ماذا عن المأكولات الصينية؟\n"
+ ],
+ "metadata": {
+ "id": "iIGM7vO8Hu3v"
+ }
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "source": [
+ "# Get popular ingredients for Chinese cuisines and make bar chart\r\n",
+ "create_ingredient(df = chinese_df) %>% \r\n",
+ " slice_head(n = 10) %>%\r\n",
+ " ggplot(aes(x = n_instances, y = ingredients)) +\r\n",
+ " geom_bar(stat = \"identity\", width = 0.5, fill = \"cyan4\", alpha = 0.8) +\r\n",
+ " xlab(\"\") + ylab(\"\")"
+ ],
+ "outputs": [],
+ "metadata": {
+ "id": "lHd9_gd2HyzU"
+ }
+ },
+ {
+ "cell_type": "markdown",
+ "source": [
+ "دعونا نلقي نظرة على المأكولات الهندية 🌶️.\n"
+ ],
+ "metadata": {
+ "id": "ir8qyQbNH1c7"
+ }
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "source": [
+ "# Get popular ingredients for Indian cuisines and make bar chart\r\n",
+ "create_ingredient(df = indian_df) %>% \r\n",
+ " slice_head(n = 10) %>%\r\n",
+ " ggplot(aes(x = n_instances, y = ingredients)) +\r\n",
+ " geom_bar(stat = \"identity\", width = 0.5, fill = \"#041E42FF\", alpha = 0.8) +\r\n",
+ " xlab(\"\") + ylab(\"\")"
+ ],
+ "outputs": [],
+ "metadata": {
+ "id": "ApukQtKjH5FO"
+ }
+ },
+ {
+ "cell_type": "markdown",
+ "source": [
+ "أخيرًا، ارسم المكونات الكورية.\n"
+ ],
+ "metadata": {
+ "id": "qv30cwY1H-FM"
+ }
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "source": [
+ "# Get popular ingredients for Korean cuisines and make bar chart\r\n",
+ "create_ingredient(df = korean_df) %>% \r\n",
+ " slice_head(n = 10) %>%\r\n",
+ " ggplot(aes(x = n_instances, y = ingredients)) +\r\n",
+ " geom_bar(stat = \"identity\", width = 0.5, fill = \"#852419FF\", alpha = 0.8) +\r\n",
+ " xlab(\"\") + ylab(\"\")"
+ ],
+ "outputs": [],
+ "metadata": {
+ "id": "lumgk9cHIBie"
+ }
+ },
+ {
+ "cell_type": "markdown",
+ "source": [
+ "من خلال تصورات البيانات، يمكننا الآن حذف المكونات الأكثر شيوعًا التي تسبب الالتباس بين المطابخ المختلفة باستخدام `dplyr::select()`.\n",
+ "\n",
+ "الجميع يحب الأرز، الثوم، والزنجبيل!\n"
+ ],
+ "metadata": {
+ "id": "iO4veMXuIEta"
+ }
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "source": [
+ "# Drop id column, rice, garlic and ginger from our original data set\r\n",
+ "df_select <- df %>% \r\n",
+ " select(-c(1, rice, garlic, ginger))\r\n",
+ "\r\n",
+ "# Display new data set\r\n",
+ "df_select %>% \r\n",
+ " slice_head(n = 5)"
+ ],
+ "outputs": [],
+ "metadata": {
+ "id": "iHJPiG6rIUcK"
+ }
+ },
+ {
+ "cell_type": "markdown",
+ "source": [
+ "## معالجة البيانات باستخدام الوصفات 👩🍳👨🍳 - التعامل مع البيانات غير المتوازنة ⚖️\n",
+ "\n",
+ "
\n",
+ " \n",
+ " عمل فني من @allison_horst\n",
+ "\n",
+ "نظرًا لأن هذا الدرس يتعلق بالمأكولات، علينا وضع `الوصفات` في السياق.\n",
+ "\n",
+ "يوفر Tidymodels حزمة رائعة أخرى: `recipes` - وهي حزمة لمعالجة البيانات مسبقًا.\n"
+ ],
+ "metadata": {
+ "id": "kkFd-JxdIaL6"
+ }
+ },
+ {
+ "cell_type": "markdown",
+ "source": [
+ "دعونا نلقي نظرة مرة أخرى على توزيع المأكولات لدينا.\n"
+ ],
+ "metadata": {
+ "id": "6l2ubtTPJAhY"
+ }
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "source": [
+ "# Distribution of cuisines\r\n",
+ "old_label_count <- df_select %>% \r\n",
+ " count(cuisine) %>% \r\n",
+ " arrange(desc(n))\r\n",
+ "\r\n",
+ "old_label_count"
+ ],
+ "outputs": [],
+ "metadata": {
+ "id": "1e-E9cb7JDVi"
+ }
+ },
+ {
+ "cell_type": "markdown",
+ "source": [
+ "كما ترى، هناك توزيع غير متساوٍ إلى حد كبير في عدد المأكولات. المأكولات الكورية تقريبًا ثلاثة أضعاف المأكولات التايلاندية. غالبًا ما يكون للبيانات غير المتوازنة تأثيرات سلبية على أداء النموذج. فكر في تصنيف ثنائي. إذا كانت معظم بياناتك تنتمي إلى فئة واحدة، فإن نموذج التعلم الآلي سيتنبأ بهذه الفئة بشكل أكثر تكرارًا، فقط لأن هناك المزيد من البيانات لها. تحقيق التوازن في البيانات يأخذ أي انحراف في البيانات ويساعد على إزالة هذا التفاوت. العديد من النماذج تعمل بشكل أفضل عندما يكون عدد الملاحظات متساويًا، وبالتالي تميل إلى مواجهة صعوبة مع البيانات غير المتوازنة.\n",
+ "\n",
+ "هناك طريقتان رئيسيتان للتعامل مع مجموعات البيانات غير المتوازنة:\n",
+ "\n",
+ "- إضافة ملاحظات إلى الفئة الأقل: `الإفراط في أخذ العينات` مثل استخدام خوارزمية SMOTE\n",
+ "\n",
+ "- إزالة ملاحظات من الفئة الأكثر: `التقليل من أخذ العينات`\n",
+ "\n",
+ "دعونا الآن نوضح كيفية التعامل مع مجموعات البيانات غير المتوازنة باستخدام `وصفة`. يمكن اعتبار الوصفة بمثابة مخطط يصف الخطوات التي يجب تطبيقها على مجموعة بيانات لجعلها جاهزة لتحليل البيانات.\n"
+ ],
+ "metadata": {
+ "id": "soAw6826JKx9"
+ }
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "source": [
+ "# Load themis package for dealing with imbalanced data\r\n",
+ "library(themis)\r\n",
+ "\r\n",
+ "# Create a recipe for preprocessing data\r\n",
+ "cuisines_recipe <- recipe(cuisine ~ ., data = df_select) %>% \r\n",
+ " step_smote(cuisine)\r\n",
+ "\r\n",
+ "cuisines_recipe"
+ ],
+ "outputs": [],
+ "metadata": {
+ "id": "HS41brUIJVJy"
+ }
+ },
+ {
+ "cell_type": "markdown",
+ "source": [
+ "دعونا نوضح خطوات المعالجة المسبقة.\n",
+ "\n",
+ "- استدعاء `recipe()` مع صيغة معينة يُخبر الوصفة بأدوار المتغيرات باستخدام بيانات `df_select` كمرجع. على سبيل المثال، تم تعيين عمود `cuisine` كـ `outcome` بينما تم تعيين بقية الأعمدة كـ `predictor`.\n",
+ "\n",
+ "- [`step_smote(cuisine)`](https://themis.tidymodels.org/reference/step_smote.html) ينشئ *تحديدًا* لخطوة في الوصفة تقوم بتوليد أمثلة جديدة اصطناعية للفئة الأقل باستخدام أقرب الجيران لهذه الحالات.\n",
+ "\n",
+ "الآن، إذا أردنا رؤية البيانات بعد المعالجة المسبقة، فعلينا استخدام [**`prep()`**](https://recipes.tidymodels.org/reference/prep.html) و[**`bake()`**](https://recipes.tidymodels.org/reference/bake.html) على وصفتنا.\n",
+ "\n",
+ "`prep()`: يقوم بتقدير المعاملات المطلوبة من مجموعة تدريب يمكن تطبيقها لاحقًا على مجموعات بيانات أخرى.\n",
+ "\n",
+ "`bake()`: يأخذ وصفة مُحضّرة ويطبق العمليات على أي مجموعة بيانات.\n"
+ ],
+ "metadata": {
+ "id": "Yb-7t7XcJaC8"
+ }
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "source": [
+ "# Prep and bake the recipe\r\n",
+ "preprocessed_df <- cuisines_recipe %>% \r\n",
+ " prep() %>% \r\n",
+ " bake(new_data = NULL) %>% \r\n",
+ " relocate(cuisine)\r\n",
+ "\r\n",
+ "# Display data\r\n",
+ "preprocessed_df %>% \r\n",
+ " slice_head(n = 5)\r\n",
+ "\r\n",
+ "# Quick summary stats\r\n",
+ "preprocessed_df %>% \r\n",
+ " introduce()"
+ ],
+ "outputs": [],
+ "metadata": {
+ "id": "9QhSgdpxJl44"
+ }
+ },
+ {
+ "cell_type": "markdown",
+ "source": [
+ "لنقم الآن بفحص توزيع المأكولات لدينا ومقارنتها مع البيانات غير المتوازنة.\n"
+ ],
+ "metadata": {
+ "id": "dmidELh_LdV7"
+ }
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "source": [
+ "# Distribution of cuisines\r\n",
+ "new_label_count <- preprocessed_df %>% \r\n",
+ " count(cuisine) %>% \r\n",
+ " arrange(desc(n))\r\n",
+ "\r\n",
+ "list(new_label_count = new_label_count,\r\n",
+ " old_label_count = old_label_count)"
+ ],
+ "outputs": [],
+ "metadata": {
+ "id": "aSh23klBLwDz"
+ }
+ },
+ {
+ "cell_type": "markdown",
+ "source": [
+ "يم! البيانات نظيفة ومتوازنة ولذيذة جدًا 😋!\n",
+ "\n",
+ "> عادةً ما يتم استخدام الوصفة كمعالج مسبق للنمذجة حيث تحدد الخطوات التي يجب تطبيقها على مجموعة البيانات لجعلها جاهزة للنمذجة. في هذه الحالة، يتم استخدام `workflow()` عادةً (كما رأينا بالفعل في دروسنا السابقة) بدلاً من تقدير الوصفة يدويًا.\n",
+ ">\n",
+ "> لذلك، لا تحتاج عادةً إلى استخدام **`prep()`** و **`bake()`** للوصفات عند استخدام tidymodels، ولكنها وظائف مفيدة لتأكيد أن الوصفات تعمل كما تتوقع، كما هو الحال في مثالنا.\n",
+ ">\n",
+ "> عندما تقوم بـ **`bake()`** لوصفة تم تجهيزها باستخدام **`new_data = NULL`**، تحصل على البيانات التي قدمتها عند تعريف الوصفة، ولكن بعد أن مرت بخطوات المعالجة المسبقة.\n",
+ "\n",
+ "لنقم الآن بحفظ نسخة من هذه البيانات لاستخدامها في الدروس المستقبلية:\n"
+ ],
+ "metadata": {
+ "id": "HEu80HZ8L7ae"
+ }
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "source": [
+ "# Save preprocessed data\r\n",
+ "write_csv(preprocessed_df, \"../../../data/cleaned_cuisines_R.csv\")"
+ ],
+ "outputs": [],
+ "metadata": {
+ "id": "cBmCbIgrMOI6"
+ }
+ },
+ {
+ "cell_type": "markdown",
+ "source": [
+ "يمكن الآن العثور على ملف CSV الجديد في مجلد البيانات الرئيسي.\n",
+ "\n",
+ "**🚀التحدي**\n",
+ "\n",
+ "يحتوي هذا المنهج على العديد من مجموعات البيانات المثيرة للاهتمام. استعرض مجلدات `data` وابحث عما إذا كانت تحتوي على مجموعات بيانات مناسبة للتصنيف الثنائي أو متعدد الفئات؟ ما الأسئلة التي يمكن أن تطرحها على هذه المجموعة من البيانات؟\n",
+ "\n",
+ "## [**اختبار ما بعد المحاضرة**](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/20/)\n",
+ "\n",
+ "## **المراجعة والدراسة الذاتية**\n",
+ "\n",
+ "- تحقق من [حزمة themis](https://github.com/tidymodels/themis). ما هي التقنيات الأخرى التي يمكننا استخدامها للتعامل مع البيانات غير المتوازنة؟\n",
+ "\n",
+ "- موقع مرجعي لنماذج Tidy [الموقع المرجعي](https://www.tidymodels.org/start/).\n",
+ "\n",
+ "- H. Wickham و G. Grolemund، [*R for Data Science: Visualize, Model, Transform, Tidy, and Import Data*](https://r4ds.had.co.nz/).\n",
+ "\n",
+ "#### شكر خاص إلى:\n",
+ "\n",
+ "[`Allison Horst`](https://twitter.com/allison_horst/) على إنشاء الرسوم التوضيحية الرائعة التي تجعل R أكثر ترحيبًا وجاذبية. يمكن العثور على المزيد من الرسوم التوضيحية في [معرضها](https://www.google.com/url?q=https://github.com/allisonhorst/stats-illustrations&sa=D&source=editors&ust=1626380772530000&usg=AOvVaw3zcfyCizFQZpkSLzxiiQEM).\n",
+ "\n",
+ "[Cassie Breviu](https://www.twitter.com/cassieview) و [Jen Looper](https://www.twitter.com/jenlooper) على إنشاء النسخة الأصلية من هذا الوحدة بلغة Python ♥️\n",
+ "\n",
+ "
\n",
+ " \n",
+ " عمل فني بواسطة @allison_horst\n"
+ ],
+ "metadata": {
+ "id": "WQs5621pMGwf"
+ }
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "\n---\n\n**إخلاء المسؤولية**: \nتمت ترجمة هذه الوثيقة باستخدام خدمة الترجمة الآلية [Co-op Translator](https://github.com/Azure/co-op-translator). بينما نسعى لتحقيق الدقة، يرجى العلم أن الترجمات الآلية قد تحتوي على أخطاء أو معلومات غير دقيقة. يجب اعتبار الوثيقة الأصلية بلغتها الأصلية المصدر الموثوق. للحصول على معلومات حساسة أو هامة، يُوصى بالاستعانة بترجمة بشرية احترافية. نحن غير مسؤولين عن أي سوء فهم أو تفسيرات خاطئة ناتجة عن استخدام هذه الترجمة.\n"
+ ]
+ }
+ ]
+}
\ No newline at end of file
diff --git a/translations/ar/4-Classification/1-Introduction/solution/notebook.ipynb b/translations/ar/4-Classification/1-Introduction/solution/notebook.ipynb
new file mode 100644
index 000000000..67b42324c
--- /dev/null
+++ b/translations/ar/4-Classification/1-Introduction/solution/notebook.ipynb
@@ -0,0 +1,708 @@
+{
+ "cells": [
+ {
+ "source": [
+ "# أطباق آسيوية وهندية لذيذة\n",
+ "\n",
+ "## مقدمة\n",
+ "الطعام الآسيوي والهندي معروف بنكهاته الغنية وتنوعه. سواء كنت تبحث عن وجبة سريعة أو طبق فاخر، فإن هذه المطابخ تقدم شيئًا للجميع.\n",
+ "\n",
+ "## وصفات شهيرة\n",
+ "### 1. نودلز آسيوية\n",
+ "النودلز الآسيوية هي خيار شائع وسريع التحضير. يمكن إعدادها مع الخضروات، الدجاج، أو حتى المأكولات البحرية. جرب إضافة صلصة الصويا للحصول على نكهة مميزة.\n",
+ "\n",
+ "### 2. دجاج بالكاري الهندي\n",
+ "الدجاج بالكاري هو طبق كلاسيكي مليء بالتوابل. يمكن تقديمه مع الأرز أو الخبز الهندي مثل النان. لا تنسَ استخدام الكزبرة الطازجة للتزيين.\n",
+ "\n",
+ "### 3. لفائف الربيع\n",
+ "لفائف الربيع هي وجبة خفيفة مثالية. يمكن حشوها بالخضروات الطازجة أو اللحم المفروم، وتُقدم مع صلصة غمس لذيذة.\n",
+ "\n",
+ "## نصائح الطبخ\n",
+ "- [!TIP] استخدم مكونات طازجة للحصول على أفضل نكهة.\n",
+ "- [!NOTE] بعض التوابل قد تكون قوية جدًا، لذا استخدمها بحذر.\n",
+ "- [!WARNING] تأكد من طهي اللحوم جيدًا لتجنب أي مشاكل صحية.\n",
+ "\n",
+ "## أدوات مطبخ مفيدة\n",
+ "### 1. مقلاة ووك\n",
+ "المقلاة ووك مثالية للطهي السريع على حرارة عالية. إنها أداة أساسية لتحضير الأطباق الآسيوية.\n",
+ "\n",
+ "### 2. مطحنة التوابل\n",
+ "مطحنة التوابل تساعدك على طحن التوابل الطازجة للحصول على نكهة أقوى.\n",
+ "\n",
+ "### 3. قدر الضغط\n",
+ "قدر الضغط يوفر الوقت عند طهي الأطباق الهندية التي تحتاج إلى وقت طويل مثل الكاري أو اليخنات.\n",
+ "\n",
+ "## خاتمة\n",
+ "سواء كنت مبتدئًا أو طاهيًا محترفًا، فإن تجربة الأطباق الآسيوية والهندية ستضيف لمسة مميزة إلى مهاراتك في الطبخ. استمتع بالنكهات واستكشف المزيد من الوصفات!\n"
+ ],
+ "cell_type": "markdown",
+ "metadata": {}
+ },
+ {
+ "source": [
+ "قم بتثبيت Imblearn الذي سيمكن SMOTE. هذه حزمة Scikit-learn تساعد في التعامل مع البيانات غير المتوازنة عند إجراء التصنيف. (https://imbalanced-learn.org/stable/)\n"
+ ],
+ "cell_type": "markdown",
+ "metadata": {}
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 1,
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "name": "stdout",
+ "text": [
+ "Requirement already satisfied: imblearn in /Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages (0.0)\n",
+ "Requirement already satisfied: imbalanced-learn in /Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages (from imblearn) (0.8.0)\n",
+ "Requirement already satisfied: numpy>=1.13.3 in /Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages (from imbalanced-learn->imblearn) (1.19.2)\n",
+ "Requirement already satisfied: scipy>=0.19.1 in /Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages (from imbalanced-learn->imblearn) (1.4.1)\n",
+ "Requirement already satisfied: scikit-learn>=0.24 in /Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages (from imbalanced-learn->imblearn) (0.24.2)\n",
+ "Requirement already satisfied: joblib>=0.11 in /Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages (from imbalanced-learn->imblearn) (0.16.0)\n",
+ "Requirement already satisfied: threadpoolctl>=2.0.0 in /Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages (from scikit-learn>=0.24->imbalanced-learn->imblearn) (2.1.0)\n",
+ "\u001b[33mWARNING: You are using pip version 20.2.3; however, version 21.1.2 is available.\n",
+ "You should consider upgrading via the '/Library/Frameworks/Python.framework/Versions/3.7/bin/python3.7 -m pip install --upgrade pip' command.\u001b[0m\n",
+ "Note: you may need to restart the kernel to use updated packages.\n"
+ ]
+ }
+ ],
+ "source": [
+ "pip install imblearn"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 2,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "import pandas as pd\n",
+ "import matplotlib.pyplot as plt\n",
+ "import matplotlib as mpl\n",
+ "import numpy as np\n",
+ "from imblearn.over_sampling import SMOTE"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 3,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "df = pd.read_csv('../../data/cuisines.csv')"
+ ]
+ },
+ {
+ "source": [
+ "يتضمن هذا الملف البيانات 385 عمودًا يشير إلى جميع أنواع المكونات في مختلف المطابخ من مجموعة معينة من المطابخ.\n"
+ ],
+ "cell_type": "markdown",
+ "metadata": {}
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 4,
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "execute_result",
+ "data": {
+ "text/plain": [
+ " Unnamed: 0 cuisine almond angelica anise anise_seed apple \\\n",
+ "0 65 indian 0 0 0 0 0 \n",
+ "1 66 indian 1 0 0 0 0 \n",
+ "2 67 indian 0 0 0 0 0 \n",
+ "3 68 indian 0 0 0 0 0 \n",
+ "4 69 indian 0 0 0 0 0 \n",
+ "\n",
+ " apple_brandy apricot armagnac ... whiskey white_bread white_wine \\\n",
+ "0 0 0 0 ... 0 0 0 \n",
+ "1 0 0 0 ... 0 0 0 \n",
+ "2 0 0 0 ... 0 0 0 \n",
+ "3 0 0 0 ... 0 0 0 \n",
+ "4 0 0 0 ... 0 0 0 \n",
+ "\n",
+ " whole_grain_wheat_flour wine wood yam yeast yogurt zucchini \n",
+ "0 0 0 0 0 0 0 0 \n",
+ "1 0 0 0 0 0 0 0 \n",
+ "2 0 0 0 0 0 0 0 \n",
+ "3 0 0 0 0 0 0 0 \n",
+ "4 0 0 0 0 0 1 0 \n",
+ "\n",
+ "[5 rows x 385 columns]"
+ ],
+ "text/html": "
\n"
+ ]
+ },
+ "metadata": {}
+ }
+ ],
+ "metadata": {
+ "colab": {
+ "base_uri": "https://localhost:8080/",
+ "height": 535
+ },
+ "id": "w5FWIkEiIjdN",
+ "outputId": "2e195fd9-1a8f-4b91-9573-cce5582242df"
+ }
+ },
+ {
+ "cell_type": "markdown",
+ "source": [
+ "## 2. التعامل مع البيانات غير المتوازنة\n",
+ "\n",
+ "كما قد تكون لاحظت في مجموعة البيانات الأصلية وكذلك في مجموعة التدريب الخاصة بنا، هناك توزيع غير متساوٍ إلى حد كبير في عدد أنواع المأكولات. المأكولات الكورية *تقريبًا* ثلاثة أضعاف المأكولات التايلاندية. البيانات غير المتوازنة غالبًا ما تؤثر سلبًا على أداء النموذج. العديد من النماذج تعمل بشكل أفضل عندما يكون عدد الملاحظات متساويًا، وبالتالي تواجه صعوبة مع البيانات غير المتوازنة.\n",
+ "\n",
+ "هناك طريقتان رئيسيتان للتعامل مع مجموعات البيانات غير المتوازنة:\n",
+ "\n",
+ "- إضافة ملاحظات إلى الفئة الأقل: `الإفراط في أخذ العينات` مثل استخدام خوارزمية SMOTE التي تقوم بتوليد أمثلة جديدة للفئة الأقل بشكل اصطناعي باستخدام أقرب الجيران لهذه الحالات.\n",
+ "\n",
+ "- إزالة ملاحظات من الفئة الأكثر: `التقليل من أخذ العينات`\n",
+ "\n",
+ "في درسنا السابق، قمنا بتوضيح كيفية التعامل مع مجموعات البيانات غير المتوازنة باستخدام `وصفة`. يمكن اعتبار الوصفة بمثابة مخطط يصف الخطوات التي يجب تطبيقها على مجموعة البيانات لجعلها جاهزة لتحليل البيانات. في حالتنا، نريد أن يكون لدينا توزيع متساوٍ في عدد المأكولات في `مجموعة التدريب` الخاصة بنا. لنبدأ مباشرة.\n"
+ ],
+ "metadata": {
+ "id": "daBi9qJNIwqW"
+ }
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 5,
+ "source": [
+ "# Load themis package for dealing with imbalanced data\r\n",
+ "library(themis)\r\n",
+ "\r\n",
+ "# Create a recipe for preprocessing training data\r\n",
+ "cuisines_recipe <- recipe(cuisine ~ ., data = cuisines_train) %>% \r\n",
+ " step_smote(cuisine)\r\n",
+ "\r\n",
+ "# Print recipe\r\n",
+ "cuisines_recipe"
+ ],
+ "outputs": [
+ {
+ "output_type": "display_data",
+ "data": {
+ "text/plain": [
+ "Data Recipe\n",
+ "\n",
+ "Inputs:\n",
+ "\n",
+ " role #variables\n",
+ " outcome 1\n",
+ " predictor 380\n",
+ "\n",
+ "Operations:\n",
+ "\n",
+ "SMOTE based on cuisine"
+ ]
+ },
+ "metadata": {}
+ }
+ ],
+ "metadata": {
+ "colab": {
+ "base_uri": "https://localhost:8080/",
+ "height": 200
+ },
+ "id": "Az6LFBGxI1X0",
+ "outputId": "29d71d85-64b0-4e62-871e-bcd5398573b6"
+ }
+ },
+ {
+ "cell_type": "markdown",
+ "source": [
+ "يمكنك بالطبع التأكد (باستخدام التحضير + الخبز) من أن الوصفة ستعمل كما تتوقع - حيث تحتوي جميع تسميات المأكولات على `559` ملاحظة.\n",
+ "\n",
+ "بما أننا سنستخدم هذه الوصفة كمعالج مسبق للنمذجة، فإن `workflow()` سيقوم بكل عمليات التحضير والخبز نيابةً عنا، لذا لن نحتاج إلى تقدير الوصفة يدويًا.\n",
+ "\n",
+ "الآن نحن جاهزون لتدريب نموذج 👩💻👨💻!\n",
+ "\n",
+ "## 3. اختيار المصنف الخاص بك\n",
+ "\n",
+ "
\n",
+ " \n",
+ " عمل فني بواسطة @allison_horst\n"
+ ],
+ "metadata": {
+ "id": "NBL3PqIWJBBB"
+ }
+ },
+ {
+ "cell_type": "markdown",
+ "source": [
+ "الآن علينا أن نقرر أي خوارزمية نستخدم لهذه المهمة 🤔.\n",
+ "\n",
+ "في Tidymodels، يوفر [`حزمة parsnip`](https://parsnip.tidymodels.org/index.html) واجهة متسقة للعمل مع النماذج عبر محركات مختلفة (الحزم). يرجى الاطلاع على وثائق parsnip لاستكشاف [أنواع النماذج والمحركات](https://www.tidymodels.org/find/parsnip/#models) و[معاملات النماذج](https://www.tidymodels.org/find/parsnip/#model-args) الخاصة بها. التنوع يبدو مذهلاً للوهلة الأولى. على سبيل المثال، تشمل الطرق التالية تقنيات التصنيف:\n",
+ "\n",
+ "- نماذج التصنيف القائمة على القواعد C5.0 \n",
+ "- نماذج التمييز المرنة \n",
+ "- نماذج التمييز الخطية \n",
+ "- نماذج التمييز المنتظمة \n",
+ "- نماذج الانحدار اللوجستي \n",
+ "- نماذج الانحدار متعدد الحدود \n",
+ "- نماذج نايف بايز \n",
+ "- آلات الدعم المتجهية \n",
+ "- أقرب الجيران \n",
+ "- أشجار القرار \n",
+ "- طرق التجميع \n",
+ "- الشبكات العصبية \n",
+ "\n",
+ "والقائمة تستمر!\n",
+ "\n",
+ "### **أي مصنف يجب اختياره؟**\n",
+ "\n",
+ "إذن، أي مصنف يجب أن تختار؟ غالبًا ما يكون تشغيل عدة نماذج والبحث عن نتيجة جيدة طريقة للاختبار.\n",
+ "\n",
+ "> AutoML يحل هذه المشكلة بشكل رائع من خلال إجراء هذه المقارنات في السحابة، مما يتيح لك اختيار أفضل خوارزمية لبياناتك. جربه [هنا](https://docs.microsoft.com/learn/modules/automate-model-selection-with-azure-automl/?WT.mc_id=academic-77952-leestott)\n",
+ "\n",
+ "كما أن اختيار المصنف يعتمد على مشكلتنا. على سبيل المثال، عندما يمكن تصنيف النتيجة إلى `أكثر من فئتين`، كما هو الحال في حالتنا، يجب استخدام `خوارزمية تصنيف متعددة الفئات` بدلاً من `تصنيف ثنائي.`\n",
+ "\n",
+ "### **نهج أفضل**\n",
+ "\n",
+ "نهج أفضل من التخمين العشوائي، مع ذلك، هو اتباع الأفكار الموجودة في [ورقة الغش الخاصة بـ ML](https://docs.microsoft.com/azure/machine-learning/algorithm-cheat-sheet?WT.mc_id=academic-77952-leestott) القابلة للتنزيل. هنا، نكتشف أنه بالنسبة لمشكلتنا متعددة الفئات، لدينا بعض الخيارات:\n",
+ "\n",
+ "
\n",
+ " \n",
+ " جزء من ورقة الغش الخاصة بخوارزميات مايكروسوفت، يوضح خيارات التصنيف متعددة الفئات\n"
+ ],
+ "metadata": {
+ "id": "a6DLAZ3vJZ14"
+ }
+ },
+ {
+ "cell_type": "markdown",
+ "source": [
+ "### **التفكير**\n",
+ "\n",
+ "لنحاول التفكير في طرق مختلفة بالنظر إلى القيود التي لدينا:\n",
+ "\n",
+ "- **الشبكات العصبية العميقة ثقيلة جدًا**. بالنظر إلى مجموعة البيانات النظيفة ولكن الصغيرة، وحقيقة أننا نقوم بتدريب النموذج محليًا عبر دفاتر الملاحظات، فإن الشبكات العصبية العميقة ليست مناسبة لهذه المهمة.\n",
+ "\n",
+ "- **لا يوجد مصنف ثنائي الفئة**. نحن لا نستخدم مصنفًا ثنائي الفئة، مما يستبعد خيار \"واحد مقابل الكل\".\n",
+ "\n",
+ "- **شجرة القرار أو الانحدار اللوجستي قد يكونان مناسبين**. شجرة القرار قد تكون مناسبة، أو الانحدار متعدد الحدود/الانحدار اللوجستي متعدد الفئات للبيانات متعددة الفئات.\n",
+ "\n",
+ "- **أشجار القرار المعززة متعددة الفئات تحل مشكلة مختلفة**. أشجار القرار المعززة متعددة الفئات مناسبة أكثر للمهام غير المعلمية، مثل المهام المصممة لبناء التصنيفات، لذا فهي ليست مفيدة لنا.\n",
+ "\n",
+ "أيضًا، عادةً قبل البدء في نماذج تعلم الآلة الأكثر تعقيدًا مثل طرق التجميع، من الجيد بناء النموذج الأبسط الممكن للحصول على فكرة عما يحدث. لذلك في هذا الدرس، سنبدأ بنموذج `الانحدار متعدد الحدود`.\n",
+ "\n",
+ "> الانحدار اللوجستي هو تقنية تُستخدم عندما يكون متغير النتيجة تصنيفيًا (أو اسميًا). بالنسبة للانحدار اللوجستي الثنائي، يكون عدد متغيرات النتيجة اثنين، بينما يكون عدد متغيرات النتيجة للانحدار اللوجستي متعدد الحدود أكثر من اثنين. انظر [طرق الانحدار المتقدمة](https://bookdown.org/chua/ber642_advanced_regression/multinomial-logistic-regression.html) لمزيد من القراءة.\n",
+ "\n",
+ "## 4. تدريب وتقييم نموذج الانحدار اللوجستي متعدد الحدود.\n",
+ "\n",
+ "في Tidymodels، يتم تعريف النموذج باستخدام `parsnip::multinom_reg()`، وهو نموذج يستخدم المتنبئات الخطية للتنبؤ بالبيانات متعددة الفئات باستخدام التوزيع متعدد الحدود. انظر `?multinom_reg()` لمعرفة الطرق/المحركات المختلفة التي يمكنك استخدامها لتدريب هذا النموذج.\n",
+ "\n",
+ "في هذا المثال، سنقوم بتدريب نموذج الانحدار اللوجستي متعدد الحدود باستخدام محرك [nnet](https://cran.r-project.org/web/packages/nnet/nnet.pdf) الافتراضي.\n",
+ "\n",
+ "> اخترت قيمة لـ `penalty` بشكل عشوائي. هناك طرق أفضل لاختيار هذه القيمة، مثل استخدام `إعادة التعيين` و`ضبط` النموذج، والتي سنناقشها لاحقًا.\n",
+ ">\n",
+ "> انظر [Tidymodels: البداية](https://www.tidymodels.org/start/tuning/) إذا كنت ترغب في معرفة المزيد حول كيفية ضبط معلمات النموذج.\n"
+ ],
+ "metadata": {
+ "id": "gWMsVcbBJemu"
+ }
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 6,
+ "source": [
+ "# Create a multinomial regression model specification\r\n",
+ "mr_spec <- multinom_reg(penalty = 1) %>% \r\n",
+ " set_engine(\"nnet\", MaxNWts = 2086) %>% \r\n",
+ " set_mode(\"classification\")\r\n",
+ "\r\n",
+ "# Print model specification\r\n",
+ "mr_spec"
+ ],
+ "outputs": [
+ {
+ "output_type": "display_data",
+ "data": {
+ "text/plain": [
+ "Multinomial Regression Model Specification (classification)\n",
+ "\n",
+ "Main Arguments:\n",
+ " penalty = 1\n",
+ "\n",
+ "Engine-Specific Arguments:\n",
+ " MaxNWts = 2086\n",
+ "\n",
+ "Computational engine: nnet \n"
+ ]
+ },
+ "metadata": {}
+ }
+ ],
+ "metadata": {
+ "colab": {
+ "base_uri": "https://localhost:8080/",
+ "height": 166
+ },
+ "id": "Wq_fcyQiJvfG",
+ "outputId": "c30449c7-3864-4be7-f810-72a003743e2d"
+ }
+ },
+ {
+ "cell_type": "markdown",
+ "source": [
+ "عمل رائع 🥳! الآن بعد أن أصبح لدينا وصفة ومواصفات نموذج، نحتاج إلى إيجاد طريقة لدمجهما معًا في كائن يقوم أولاً بمعالجة البيانات مسبقًا، ثم يلائم النموذج على البيانات المعالجة مسبقًا، وأيضًا يتيح إمكانية القيام بأنشطة ما بعد المعالجة. في Tidymodels، يُطلق على هذا الكائن المريح اسم [`workflow`](https://workflows.tidymodels.org/) وهو يحتفظ بمكونات النمذجة الخاصة بك بكل سهولة! هذا ما نسميه *pipelines* في *Python*.\n",
+ "\n",
+ "لذا، دعونا نجمع كل شيء في workflow!📦\n"
+ ],
+ "metadata": {
+ "id": "NlSbzDfgJ0zh"
+ }
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 7,
+ "source": [
+ "# Bundle recipe and model specification\r\n",
+ "mr_wf <- workflow() %>% \r\n",
+ " add_recipe(cuisines_recipe) %>% \r\n",
+ " add_model(mr_spec)\r\n",
+ "\r\n",
+ "# Print out workflow\r\n",
+ "mr_wf"
+ ],
+ "outputs": [
+ {
+ "output_type": "display_data",
+ "data": {
+ "text/plain": [
+ "══ Workflow ════════════════════════════════════════════════════════════════════\n",
+ "\u001b[3mPreprocessor:\u001b[23m Recipe\n",
+ "\u001b[3mModel:\u001b[23m multinom_reg()\n",
+ "\n",
+ "── Preprocessor ────────────────────────────────────────────────────────────────\n",
+ "1 Recipe Step\n",
+ "\n",
+ "• step_smote()\n",
+ "\n",
+ "── Model ───────────────────────────────────────────────────────────────────────\n",
+ "Multinomial Regression Model Specification (classification)\n",
+ "\n",
+ "Main Arguments:\n",
+ " penalty = 1\n",
+ "\n",
+ "Engine-Specific Arguments:\n",
+ " MaxNWts = 2086\n",
+ "\n",
+ "Computational engine: nnet \n"
+ ]
+ },
+ "metadata": {}
+ }
+ ],
+ "metadata": {
+ "colab": {
+ "base_uri": "https://localhost:8080/",
+ "height": 333
+ },
+ "id": "Sc1TfPA4Ke3_",
+ "outputId": "82c70013-e431-4e7e-cef6-9fcf8aad4a6c"
+ }
+ },
+ {
+ "cell_type": "markdown",
+ "source": [
+ "تدفقات العمل 👌👌! يمكن ضبط **`workflow()`** بنفس الطريقة التي يمكن بها ضبط النموذج. إذاً، حان وقت تدريب نموذج!\n"
+ ],
+ "metadata": {
+ "id": "TNQ8i85aKf9L"
+ }
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 8,
+ "source": [
+ "# Train a multinomial regression model\n",
+ "mr_fit <- fit(object = mr_wf, data = cuisines_train)\n",
+ "\n",
+ "mr_fit"
+ ],
+ "outputs": [
+ {
+ "output_type": "display_data",
+ "data": {
+ "text/plain": [
+ "══ Workflow [trained] ══════════════════════════════════════════════════════════\n",
+ "\u001b[3mPreprocessor:\u001b[23m Recipe\n",
+ "\u001b[3mModel:\u001b[23m multinom_reg()\n",
+ "\n",
+ "── Preprocessor ────────────────────────────────────────────────────────────────\n",
+ "1 Recipe Step\n",
+ "\n",
+ "• step_smote()\n",
+ "\n",
+ "── Model ───────────────────────────────────────────────────────────────────────\n",
+ "Call:\n",
+ "nnet::multinom(formula = ..y ~ ., data = data, decay = ~1, MaxNWts = ~2086, \n",
+ " trace = FALSE)\n",
+ "\n",
+ "Coefficients:\n",
+ " (Intercept) almond angelica anise anise_seed apple\n",
+ "indian 0.19723325 0.2409661 0 -5.004955e-05 -0.1657635 -0.05769734\n",
+ "japanese 0.13961959 -0.6262400 0 -1.169155e-04 -0.4893596 -0.08585717\n",
+ "korean 0.22377347 -0.1833485 0 -5.560395e-05 -0.2489401 -0.15657804\n",
+ "thai -0.04336577 -0.6106258 0 4.903828e-04 -0.5782866 0.63451105\n",
+ " apple_brandy apricot armagnac artemisia artichoke asparagus\n",
+ "indian 0 0.37042636 0 -0.09122797 0 -0.27181970\n",
+ "japanese 0 0.28895643 0 -0.12651100 0 0.14054037\n",
+ "korean 0 -0.07981259 0 0.55756709 0 -0.66979948\n",
+ "thai 0 -0.33160904 0 -0.10725182 0 -0.02602152\n",
+ " avocado bacon baked_potato balm banana barley\n",
+ "indian -0.46624197 0.16008055 0 0 -0.2838796 0.2230625\n",
+ "japanese 0.90341344 0.02932727 0 0 -0.4142787 2.0953906\n",
+ "korean -0.06925382 -0.35804134 0 0 -0.2686963 -0.7233404\n",
+ "thai -0.21473955 -0.75594439 0 0 0.6784880 -0.4363320\n",
+ " bartlett_pear basil bay bean beech\n",
+ "indian 0 -0.7128756 0.1011587 -0.8777275 -0.0004380795\n",
+ "japanese 0 0.1288697 0.9425626 -0.2380748 0.3373437611\n",
+ "korean 0 -0.2445193 -0.4744318 -0.8957870 -0.0048784496\n",
+ "thai 0 1.5365848 0.1333256 0.2196970 -0.0113078024\n",
+ " beef beef_broth beef_liver beer beet\n",
+ "indian -0.7985278 0.2430186 -0.035598065 -0.002173738 0.01005813\n",
+ "japanese 0.2241875 -0.3653020 -0.139551027 0.128905553 0.04923911\n",
+ "korean 0.5366515 -0.6153237 0.213455197 -0.010828645 0.27325423\n",
+ "thai 0.1570012 -0.9364154 -0.008032213 -0.035063746 -0.28279823\n",
+ " bell_pepper bergamot berry bitter_orange black_bean\n",
+ "indian 0.49074330 0 0.58947607 0.191256164 -0.1945233\n",
+ "japanese 0.09074167 0 -0.25917977 -0.118915977 -0.3442400\n",
+ "korean -0.57876763 0 -0.07874180 -0.007729435 -0.5220672\n",
+ "thai 0.92554006 0 -0.07210196 -0.002983296 -0.4614426\n",
+ " black_currant black_mustard_seed_oil black_pepper black_raspberry\n",
+ "indian 0 0.38935801 -0.4453495 0\n",
+ "japanese 0 -0.05452887 -0.5440869 0\n",
+ "korean 0 -0.03929970 0.8025454 0\n",
+ "thai 0 -0.21498372 -0.9854806 0\n",
+ " black_sesame_seed black_tea blackberry blackberry_brandy\n",
+ "indian -0.2759246 0.3079977 0.191256164 0\n",
+ "japanese -0.6101687 -0.1671913 -0.118915977 0\n",
+ "korean 1.5197674 -0.3036261 -0.007729435 0\n",
+ "thai -0.1755656 -0.1487033 -0.002983296 0\n",
+ " blue_cheese blueberry bone_oil bourbon_whiskey brandy\n",
+ "indian 0 0.216164294 -0.2276744 0 0.22427587\n",
+ "japanese 0 -0.119186087 0.3913019 0 -0.15595599\n",
+ "korean 0 -0.007821986 0.2854487 0 -0.02562342\n",
+ "thai 0 -0.004947048 -0.0253658 0 -0.05715244\n",
+ "\n",
+ "...\n",
+ "and 308 more lines."
+ ]
+ },
+ "metadata": {}
+ }
+ ],
+ "metadata": {
+ "colab": {
+ "base_uri": "https://localhost:8080/",
+ "height": 1000
+ },
+ "id": "GMbdfVmTKkJI",
+ "outputId": "adf9ebdf-d69d-4a64-e9fd-e06e5322292e"
+ }
+ },
+ {
+ "cell_type": "markdown",
+ "source": [
+ "يُظهر الناتج المعاملات التي تعلمها النموذج أثناء التدريب.\n",
+ "\n",
+ "### تقييم النموذج المدرب\n",
+ "\n",
+ "حان الوقت لمعرفة أداء النموذج 📏 من خلال تقييمه على مجموعة الاختبار! لنبدأ بعمل توقعات على مجموعة الاختبار.\n"
+ ],
+ "metadata": {
+ "id": "tt2BfOxrKmcJ"
+ }
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 9,
+ "source": [
+ "# Make predictions on the test set\n",
+ "results <- cuisines_test %>% select(cuisine) %>% \n",
+ " bind_cols(mr_fit %>% predict(new_data = cuisines_test))\n",
+ "\n",
+ "# Print out results\n",
+ "results %>% \n",
+ " slice_head(n = 5)"
+ ],
+ "outputs": [
+ {
+ "output_type": "display_data",
+ "data": {
+ "text/plain": [
+ " cuisine .pred_class\n",
+ "1 indian thai \n",
+ "2 indian indian \n",
+ "3 indian indian \n",
+ "4 indian indian \n",
+ "5 indian indian "
+ ],
+ "text/markdown": [
+ "\n",
+ "A tibble: 5 × 2\n",
+ "\n",
+ "| cuisine <fct> | .pred_class <fct> |\n",
+ "|---|---|\n",
+ "| indian | thai |\n",
+ "| indian | indian |\n",
+ "| indian | indian |\n",
+ "| indian | indian |\n",
+ "| indian | indian |\n",
+ "\n"
+ ],
+ "text/latex": [
+ "A tibble: 5 × 2\n",
+ "\\begin{tabular}{ll}\n",
+ " cuisine & .pred\\_class\\\\\n",
+ " & \\\\\n",
+ "\\hline\n",
+ "\t indian & thai \\\\\n",
+ "\t indian & indian\\\\\n",
+ "\t indian & indian\\\\\n",
+ "\t indian & indian\\\\\n",
+ "\t indian & indian\\\\\n",
+ "\\end{tabular}\n"
+ ],
+ "text/html": [
+ "
"
+ },
+ "metadata": {},
+ "execution_count": 8
+ }
+ ],
+ "source": [
+ "#rehsape to 2d array and transpose\n",
+ "test= X_test.iloc[50].values.reshape(-1, 1).T\n",
+ "# predict with score\n",
+ "proba = model.predict_proba(test)\n",
+ "classes = model.classes_\n",
+ "# create df with classes and scores\n",
+ "resultdf = pd.DataFrame(data=proba, columns=classes)\n",
+ "\n",
+ "# create df to show results\n",
+ "topPrediction = resultdf.T.sort_values(by=[0], ascending = [False])\n",
+ "topPrediction.head()"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 9,
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "name": "stdout",
+ "text": [
+ " precision recall f1-score support\n\n chinese 0.75 0.73 0.74 223\n indian 0.93 0.88 0.90 255\n japanese 0.78 0.78 0.78 253\n korean 0.87 0.86 0.86 236\n thai 0.76 0.84 0.80 232\n\n accuracy 0.82 1199\n macro avg 0.82 0.82 0.82 1199\nweighted avg 0.82 0.82 0.82 1199\n\n"
+ ]
+ }
+ ],
+ "source": [
+ "y_pred = model.predict(X_test)\r\n",
+ "print(classification_report(y_test,y_pred))"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "\n---\n\n**إخلاء المسؤولية**: \nتمت ترجمة هذا المستند باستخدام خدمة الترجمة الآلية [Co-op Translator](https://github.com/Azure/co-op-translator). بينما نسعى لتحقيق الدقة، يرجى العلم أن الترجمات الآلية قد تحتوي على أخطاء أو معلومات غير دقيقة. يجب اعتبار المستند الأصلي بلغته الأصلية هو المصدر الموثوق. للحصول على معلومات حساسة أو هامة، يُوصى بالاستعانة بترجمة بشرية احترافية. نحن غير مسؤولين عن أي سوء فهم أو تفسيرات خاطئة تنشأ عن استخدام هذه الترجمة.\n"
+ ]
+ }
+ ],
+ "metadata": {
+ "interpreter": {
+ "hash": "70b38d7a306a849643e446cd70466270a13445e5987dfa1344ef2b127438fa4d"
+ },
+ "kernelspec": {
+ "name": "python3",
+ "display_name": "Python 3.7.0 64-bit ('3.7')"
+ },
+ "language_info": {
+ "codemirror_mode": {
+ "name": "ipython",
+ "version": 3
+ },
+ "file_extension": ".py",
+ "mimetype": "text/x-python",
+ "name": "python",
+ "nbconvert_exporter": "python",
+ "pygments_lexer": "ipython3",
+ "version": "3.7.0"
+ },
+ "metadata": {
+ "interpreter": {
+ "hash": "70b38d7a306a849643e446cd70466270a13445e5987dfa1344ef2b127438fa4d"
+ }
+ },
+ "coopTranslator": {
+ "original_hash": "9408506dd864f2b6e334c62f80c0cfcc",
+ "translation_date": "2025-08-29T15:21:37+00:00",
+ "source_file": "4-Classification/2-Classifiers-1/solution/notebook.ipynb",
+ "language_code": "ar"
+ }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 4
+}
\ No newline at end of file
diff --git a/translations/ar/4-Classification/3-Classifiers-2/README.md b/translations/ar/4-Classification/3-Classifiers-2/README.md
new file mode 100644
index 000000000..0af7a1846
--- /dev/null
+++ b/translations/ar/4-Classification/3-Classifiers-2/README.md
@@ -0,0 +1,249 @@
+
+# مصنفات المأكولات 2
+
+في درس التصنيف الثاني هذا، ستستكشف المزيد من الطرق لتصنيف البيانات الرقمية. ستتعلم أيضًا العواقب المترتبة على اختيار مصنف معين بدلاً من الآخر.
+
+## [اختبار ما قبل المحاضرة](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/23/)
+
+### المتطلبات الأساسية
+
+نفترض أنك قد أكملت الدروس السابقة ولديك مجموعة بيانات نظيفة في مجلد `data` باسم _cleaned_cuisines.csv_ في جذر هذا المجلد المكون من 4 دروس.
+
+### التحضير
+
+قمنا بتحميل ملف _notebook.ipynb_ الخاص بك مع مجموعة البيانات النظيفة وقمنا بتقسيمها إلى إطاري بيانات X و y، جاهزة لعملية بناء النموذج.
+
+## خريطة التصنيف
+
+في السابق، تعلمت عن الخيارات المختلفة المتاحة لتصنيف البيانات باستخدام ورقة الغش الخاصة بـ Microsoft. تقدم مكتبة Scikit-learn ورقة غش مشابهة ولكن أكثر تفصيلًا يمكن أن تساعدك بشكل أكبر في تضييق نطاق المصنفات (مصطلح آخر للمصنفات):
+
+
+> نصيحة: [قم بزيارة هذه الخريطة عبر الإنترنت](https://scikit-learn.org/stable/tutorial/machine_learning_map/) وانقر على المسار لقراءة الوثائق.
+
+### الخطة
+
+هذه الخريطة مفيدة جدًا بمجرد أن تكون لديك فهم واضح لبياناتك، حيث يمكنك "السير" على طول مساراتها لاتخاذ قرار:
+
+- لدينا >50 عينة
+- نريد التنبؤ بفئة
+- لدينا بيانات معنونة
+- لدينا أقل من 100 ألف عينة
+- ✨ يمكننا اختيار Linear SVC
+- إذا لم ينجح ذلك، نظرًا لأن لدينا بيانات رقمية
+ - يمكننا تجربة ✨ KNeighbors Classifier
+ - إذا لم ينجح ذلك، جرب ✨ SVC و ✨ Ensemble Classifiers
+
+هذا مسار مفيد جدًا للمتابعة.
+
+## تمرين - تقسيم البيانات
+
+وفقًا لهذا المسار، يجب أن نبدأ باستيراد بعض المكتبات اللازمة.
+
+1. قم باستيراد المكتبات المطلوبة:
+
+ ```python
+ from sklearn.neighbors import KNeighborsClassifier
+ from sklearn.linear_model import LogisticRegression
+ from sklearn.svm import SVC
+ from sklearn.ensemble import RandomForestClassifier, AdaBoostClassifier
+ from sklearn.model_selection import train_test_split, cross_val_score
+ from sklearn.metrics import accuracy_score,precision_score,confusion_matrix,classification_report, precision_recall_curve
+ import numpy as np
+ ```
+
+1. قم بتقسيم بيانات التدريب والاختبار:
+
+ ```python
+ X_train, X_test, y_train, y_test = train_test_split(cuisines_feature_df, cuisines_label_df, test_size=0.3)
+ ```
+
+## مصنف Linear SVC
+
+التجميع باستخدام Support-Vector (SVC) هو جزء من عائلة تقنيات تعلم الآلة Support-Vector Machines (تعرف على المزيد عنها أدناه). في هذه الطريقة، يمكنك اختيار "kernel" لتحديد كيفية تجميع العلامات. يشير المعامل 'C' إلى "التنظيم" الذي ينظم تأثير المعاملات. يمكن أن يكون kernel واحدًا من [عدة خيارات](https://scikit-learn.org/stable/modules/generated/sklearn.svm.SVC.html#sklearn.svm.SVC)؛ هنا نضبطه على 'linear' لضمان استخدام Linear SVC. يتم ضبط الاحتمالية افتراضيًا على 'false'؛ هنا نضبطها على 'true' للحصول على تقديرات الاحتمالية. نضبط الحالة العشوائية على '0' لخلط البيانات للحصول على الاحتمالات.
+
+### تمرين - تطبيق Linear SVC
+
+ابدأ بإنشاء مصفوفة من المصنفات. ستضيف تدريجيًا إلى هذه المصفوفة أثناء الاختبار.
+
+1. ابدأ بـ Linear SVC:
+
+ ```python
+ C = 10
+ # Create different classifiers.
+ classifiers = {
+ 'Linear SVC': SVC(kernel='linear', C=C, probability=True,random_state=0)
+ }
+ ```
+
+2. قم بتدريب النموذج باستخدام Linear SVC واطبع التقرير:
+
+ ```python
+ n_classifiers = len(classifiers)
+
+ for index, (name, classifier) in enumerate(classifiers.items()):
+ classifier.fit(X_train, np.ravel(y_train))
+
+ y_pred = classifier.predict(X_test)
+ accuracy = accuracy_score(y_test, y_pred)
+ print("Accuracy (train) for %s: %0.1f%% " % (name, accuracy * 100))
+ print(classification_report(y_test,y_pred))
+ ```
+
+ النتيجة جيدة جدًا:
+
+ ```output
+ Accuracy (train) for Linear SVC: 78.6%
+ precision recall f1-score support
+
+ chinese 0.71 0.67 0.69 242
+ indian 0.88 0.86 0.87 234
+ japanese 0.79 0.74 0.76 254
+ korean 0.85 0.81 0.83 242
+ thai 0.71 0.86 0.78 227
+
+ accuracy 0.79 1199
+ macro avg 0.79 0.79 0.79 1199
+ weighted avg 0.79 0.79 0.79 1199
+ ```
+
+## مصنف K-Neighbors
+
+K-Neighbors هو جزء من عائلة طرق تعلم الآلة "الجيران"، والتي يمكن استخدامها للتعلم الموجه وغير الموجه. في هذه الطريقة، يتم إنشاء عدد محدد مسبقًا من النقاط ويتم جمع البيانات حول هذه النقاط بحيث يمكن التنبؤ بالعلامات العامة للبيانات.
+
+### تمرين - تطبيق مصنف K-Neighbors
+
+كان المصنف السابق جيدًا وعمل بشكل جيد مع البيانات، ولكن ربما يمكننا الحصول على دقة أفضل. جرب مصنف K-Neighbors.
+
+1. أضف سطرًا إلى مصفوفة المصنفات (أضف فاصلة بعد عنصر Linear SVC):
+
+ ```python
+ 'KNN classifier': KNeighborsClassifier(C),
+ ```
+
+ النتيجة أسوأ قليلاً:
+
+ ```output
+ Accuracy (train) for KNN classifier: 73.8%
+ precision recall f1-score support
+
+ chinese 0.64 0.67 0.66 242
+ indian 0.86 0.78 0.82 234
+ japanese 0.66 0.83 0.74 254
+ korean 0.94 0.58 0.72 242
+ thai 0.71 0.82 0.76 227
+
+ accuracy 0.74 1199
+ macro avg 0.76 0.74 0.74 1199
+ weighted avg 0.76 0.74 0.74 1199
+ ```
+
+ ✅ تعرف على [K-Neighbors](https://scikit-learn.org/stable/modules/neighbors.html#neighbors)
+
+## مصنف Support Vector
+
+مصنفات Support-Vector هي جزء من عائلة [Support-Vector Machine](https://wikipedia.org/wiki/Support-vector_machine) من طرق تعلم الآلة التي تُستخدم لمهام التصنيف والانحدار. تقوم SVMs "برسم أمثلة التدريب كنقاط في الفضاء" لزيادة المسافة بين فئتين. يتم رسم البيانات اللاحقة في هذا الفضاء بحيث يمكن التنبؤ بفئتها.
+
+### تمرين - تطبيق مصنف Support Vector
+
+دعنا نحاول الحصول على دقة أفضل قليلاً باستخدام مصنف Support Vector.
+
+1. أضف فاصلة بعد عنصر K-Neighbors، ثم أضف هذا السطر:
+
+ ```python
+ 'SVC': SVC(),
+ ```
+
+ النتيجة جيدة جدًا!
+
+ ```output
+ Accuracy (train) for SVC: 83.2%
+ precision recall f1-score support
+
+ chinese 0.79 0.74 0.76 242
+ indian 0.88 0.90 0.89 234
+ japanese 0.87 0.81 0.84 254
+ korean 0.91 0.82 0.86 242
+ thai 0.74 0.90 0.81 227
+
+ accuracy 0.83 1199
+ macro avg 0.84 0.83 0.83 1199
+ weighted avg 0.84 0.83 0.83 1199
+ ```
+
+ ✅ تعرف على [Support-Vectors](https://scikit-learn.org/stable/modules/svm.html#svm)
+
+## المصنفات التجميعية
+
+دعنا نتبع المسار حتى النهاية، على الرغم من أن الاختبار السابق كان جيدًا جدًا. دعنا نجرب بعض المصنفات التجميعية، تحديدًا Random Forest و AdaBoost:
+
+```python
+ 'RFST': RandomForestClassifier(n_estimators=100),
+ 'ADA': AdaBoostClassifier(n_estimators=100)
+```
+
+النتيجة جيدة جدًا، خاصة لـ Random Forest:
+
+```output
+Accuracy (train) for RFST: 84.5%
+ precision recall f1-score support
+
+ chinese 0.80 0.77 0.78 242
+ indian 0.89 0.92 0.90 234
+ japanese 0.86 0.84 0.85 254
+ korean 0.88 0.83 0.85 242
+ thai 0.80 0.87 0.83 227
+
+ accuracy 0.84 1199
+ macro avg 0.85 0.85 0.84 1199
+weighted avg 0.85 0.84 0.84 1199
+
+Accuracy (train) for ADA: 72.4%
+ precision recall f1-score support
+
+ chinese 0.64 0.49 0.56 242
+ indian 0.91 0.83 0.87 234
+ japanese 0.68 0.69 0.69 254
+ korean 0.73 0.79 0.76 242
+ thai 0.67 0.83 0.74 227
+
+ accuracy 0.72 1199
+ macro avg 0.73 0.73 0.72 1199
+weighted avg 0.73 0.72 0.72 1199
+```
+
+✅ تعرف على [المصنفات التجميعية](https://scikit-learn.org/stable/modules/ensemble.html)
+
+هذه الطريقة في تعلم الآلة "تجمع توقعات عدة مصنفات أساسية" لتحسين جودة النموذج. في مثالنا، استخدمنا Random Trees و AdaBoost.
+
+- [Random Forest](https://scikit-learn.org/stable/modules/ensemble.html#forest)، وهي طريقة تعتمد على المتوسط، تبني "غابة" من "أشجار القرار" مع إضافة عشوائية لتجنب الإفراط في التخصيص. يتم ضبط معامل n_estimators على عدد الأشجار.
+
+- [AdaBoost](https://scikit-learn.org/stable/modules/generated/sklearn.ensemble.AdaBoostClassifier.html) يقوم بتطبيق مصنف على مجموعة البيانات ثم تطبيق نسخ من هذا المصنف على نفس مجموعة البيانات. يركز على أوزان العناصر التي تم تصنيفها بشكل غير صحيح ويعدل التخصيص للمصنف التالي لتصحيحها.
+
+---
+
+## 🚀التحدي
+
+كل واحدة من هذه التقنيات لديها عدد كبير من المعاملات التي يمكنك تعديلها. قم بالبحث عن المعاملات الافتراضية لكل تقنية وفكر في ما يعنيه تعديل هذه المعاملات لجودة النموذج.
+
+## [اختبار ما بعد المحاضرة](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/24/)
+
+## المراجعة والدراسة الذاتية
+
+هناك الكثير من المصطلحات في هذه الدروس، لذا خذ دقيقة لمراجعة [هذه القائمة](https://docs.microsoft.com/dotnet/machine-learning/resources/glossary?WT.mc_id=academic-77952-leestott) من المصطلحات المفيدة!
+
+## الواجب
+
+[لعب المعاملات](assignment.md)
+
+---
+
+**إخلاء المسؤولية**:
+تم ترجمة هذا المستند باستخدام خدمة الترجمة بالذكاء الاصطناعي [Co-op Translator](https://github.com/Azure/co-op-translator). بينما نسعى لتحقيق الدقة، يرجى العلم أن الترجمات الآلية قد تحتوي على أخطاء أو معلومات غير دقيقة. يجب اعتبار المستند الأصلي بلغته الأصلية المصدر الموثوق. للحصول على معلومات حاسمة، يُوصى بالاستعانة بترجمة بشرية احترافية. نحن غير مسؤولين عن أي سوء فهم أو تفسيرات خاطئة تنشأ عن استخدام هذه الترجمة.
\ No newline at end of file
diff --git a/translations/ar/4-Classification/3-Classifiers-2/assignment.md b/translations/ar/4-Classification/3-Classifiers-2/assignment.md
new file mode 100644
index 000000000..bcb05f1c1
--- /dev/null
+++ b/translations/ar/4-Classification/3-Classifiers-2/assignment.md
@@ -0,0 +1,25 @@
+
+# اللعب بالمعاملات
+
+## التعليمات
+
+هناك العديد من المعاملات التي يتم ضبطها افتراضيًا عند العمل مع هذه المصنفات. يمكن أن يساعدك Intellisense في VS Code على استكشافها. اعتمد على إحدى تقنيات التصنيف في تعلم الآلة التي تمت مناقشتها في هذا الدرس وأعد تدريب النماذج مع تعديل قيم المعاملات المختلفة. قم بإنشاء دفتر ملاحظات يشرح لماذا تساعد بعض التغييرات في تحسين جودة النموذج بينما تؤدي تغييرات أخرى إلى تدهورها. كن دقيقًا في إجابتك.
+
+## المعايير
+
+| المعايير | مثالي | مقبول | يحتاج إلى تحسين |
+| -------- | ----------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------- | ---------------------------- |
+| | يتم تقديم دفتر ملاحظات يحتوي على مصنف مكتمل مع تعديل المعاملات وشرح التغييرات في مربعات النصوص | يتم تقديم دفتر ملاحظات جزئي أو بشرح ضعيف | يحتوي دفتر الملاحظات على أخطاء أو عيوب |
+
+---
+
+**إخلاء المسؤولية**:
+تمت ترجمة هذا المستند باستخدام خدمة الترجمة الآلية [Co-op Translator](https://github.com/Azure/co-op-translator). بينما نسعى لتحقيق الدقة، يرجى العلم أن الترجمات الآلية قد تحتوي على أخطاء أو معلومات غير دقيقة. يجب اعتبار المستند الأصلي بلغته الأصلية هو المصدر الموثوق. للحصول على معلومات حساسة أو هامة، يُوصى بالاستعانة بترجمة بشرية احترافية. نحن غير مسؤولين عن أي سوء فهم أو تفسيرات خاطئة تنشأ عن استخدام هذه الترجمة.
\ No newline at end of file
diff --git a/translations/ar/4-Classification/3-Classifiers-2/notebook.ipynb b/translations/ar/4-Classification/3-Classifiers-2/notebook.ipynb
new file mode 100644
index 000000000..4d6cb9afe
--- /dev/null
+++ b/translations/ar/4-Classification/3-Classifiers-2/notebook.ipynb
@@ -0,0 +1,165 @@
+{
+ "cells": [
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "# بناء نموذج التصنيف\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 9,
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "execute_result",
+ "data": {
+ "text/plain": [
+ " Unnamed: 0 cuisine almond angelica anise anise_seed apple \\\n",
+ "0 0 indian 0 0 0 0 0 \n",
+ "1 1 indian 1 0 0 0 0 \n",
+ "2 2 indian 0 0 0 0 0 \n",
+ "3 3 indian 0 0 0 0 0 \n",
+ "4 4 indian 0 0 0 0 0 \n",
+ "\n",
+ " apple_brandy apricot armagnac ... whiskey white_bread white_wine \\\n",
+ "0 0 0 0 ... 0 0 0 \n",
+ "1 0 0 0 ... 0 0 0 \n",
+ "2 0 0 0 ... 0 0 0 \n",
+ "3 0 0 0 ... 0 0 0 \n",
+ "4 0 0 0 ... 0 0 0 \n",
+ "\n",
+ " whole_grain_wheat_flour wine wood yam yeast yogurt zucchini \n",
+ "0 0 0 0 0 0 0 0 \n",
+ "1 0 0 0 0 0 0 0 \n",
+ "2 0 0 0 0 0 0 0 \n",
+ "3 0 0 0 0 0 0 0 \n",
+ "4 0 0 0 0 0 1 0 \n",
+ "\n",
+ "[5 rows x 382 columns]"
+ ],
+ "text/html": "
"
+ },
+ "metadata": {},
+ "execution_count": 11
+ }
+ ],
+ "source": [
+ "cuisines_feature_df = cuisines_df.drop(['Unnamed: 0', 'cuisine'], axis=1)\n",
+ "cuisines_feature_df.head()"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "\n---\n\n**إخلاء المسؤولية**: \nتمت ترجمة هذه الوثيقة باستخدام خدمة الترجمة الآلية [Co-op Translator](https://github.com/Azure/co-op-translator). بينما نسعى لتحقيق الدقة، يرجى العلم أن الترجمات الآلية قد تحتوي على أخطاء أو معلومات غير دقيقة. يجب اعتبار الوثيقة الأصلية بلغتها الأصلية المصدر الموثوق. للحصول على معلومات حساسة أو هامة، يُوصى بالاستعانة بترجمة بشرية احترافية. نحن غير مسؤولين عن أي سوء فهم أو تفسيرات خاطئة ناتجة عن استخدام هذه الترجمة.\n"
+ ]
+ }
+ ],
+ "metadata": {
+ "interpreter": {
+ "hash": "70b38d7a306a849643e446cd70466270a13445e5987dfa1344ef2b127438fa4d"
+ },
+ "kernelspec": {
+ "name": "python3",
+ "display_name": "Python 3.7.0 64-bit ('3.7')"
+ },
+ "language_info": {
+ "codemirror_mode": {
+ "name": "ipython",
+ "version": 3
+ },
+ "file_extension": ".py",
+ "mimetype": "text/x-python",
+ "name": "python",
+ "nbconvert_exporter": "python",
+ "pygments_lexer": "ipython3",
+ "version": "3.7.0"
+ },
+ "metadata": {
+ "interpreter": {
+ "hash": "70b38d7a306a849643e446cd70466270a13445e5987dfa1344ef2b127438fa4d"
+ }
+ },
+ "coopTranslator": {
+ "original_hash": "15a83277036572e0773229b5f21c1e12",
+ "translation_date": "2025-08-29T15:25:46+00:00",
+ "source_file": "4-Classification/3-Classifiers-2/notebook.ipynb",
+ "language_code": "ar"
+ }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 4
+}
\ No newline at end of file
diff --git a/translations/ar/4-Classification/3-Classifiers-2/solution/Julia/README.md b/translations/ar/4-Classification/3-Classifiers-2/solution/Julia/README.md
new file mode 100644
index 000000000..e5f5bc075
--- /dev/null
+++ b/translations/ar/4-Classification/3-Classifiers-2/solution/Julia/README.md
@@ -0,0 +1,15 @@
+
+هذا عنصر نائب مؤقت
+
+---
+
+**إخلاء المسؤولية**:
+تمت ترجمة هذا المستند باستخدام خدمة الترجمة الآلية [Co-op Translator](https://github.com/Azure/co-op-translator). بينما نسعى لتحقيق الدقة، يرجى العلم أن الترجمات الآلية قد تحتوي على أخطاء أو عدم دقة. يجب اعتبار المستند الأصلي بلغته الأصلية هو المصدر الموثوق. للحصول على معلومات حساسة أو هامة، يُوصى بالاستعانة بترجمة بشرية احترافية. نحن غير مسؤولين عن أي سوء فهم أو تفسيرات خاطئة تنشأ عن استخدام هذه الترجمة.
\ No newline at end of file
diff --git a/translations/ar/4-Classification/3-Classifiers-2/solution/R/lesson_12-R.ipynb b/translations/ar/4-Classification/3-Classifiers-2/solution/R/lesson_12-R.ipynb
new file mode 100644
index 000000000..adeb084f6
--- /dev/null
+++ b/translations/ar/4-Classification/3-Classifiers-2/solution/R/lesson_12-R.ipynb
@@ -0,0 +1,650 @@
+{
+ "nbformat": 4,
+ "nbformat_minor": 0,
+ "metadata": {
+ "colab": {
+ "name": "lesson_12-R.ipynb",
+ "provenance": [],
+ "collapsed_sections": []
+ },
+ "kernelspec": {
+ "name": "ir",
+ "display_name": "R"
+ },
+ "language_info": {
+ "name": "R"
+ },
+ "coopTranslator": {
+ "original_hash": "fab50046ca413a38939d579f8432274f",
+ "translation_date": "2025-08-29T15:27:11+00:00",
+ "source_file": "4-Classification/3-Classifiers-2/solution/R/lesson_12-R.ipynb",
+ "language_code": "ar"
+ }
+ },
+ "cells": [
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "jsFutf_ygqSx"
+ },
+ "source": [
+ "# بناء نموذج تصنيف: المأكولات الآسيوية والهندية اللذيذة\n"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "HD54bEefgtNO"
+ },
+ "source": [
+ "## مصنفات المأكولات 2\n",
+ "\n",
+ "في درس التصنيف الثاني هذا، سنستكشف `طرق إضافية` لتصنيف البيانات الفئوية. كما سنتعلم عن العواقب الناتجة عن اختيار مصنف معين بدلاً من الآخر.\n",
+ "\n",
+ "### [**اختبار ما قبل المحاضرة**](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/23/)\n",
+ "\n",
+ "### **المتطلبات الأساسية**\n",
+ "\n",
+ "نفترض أنك قد أكملت الدروس السابقة لأننا سنواصل بعض المفاهيم التي تعلمناها سابقًا.\n",
+ "\n",
+ "بالنسبة لهذا الدرس، سنحتاج إلى الحزم التالية:\n",
+ "\n",
+ "- `tidyverse`: [tidyverse](https://www.tidyverse.org/) هو [مجموعة من حزم R](https://www.tidyverse.org/packages) مصممة لجعل علم البيانات أسرع وأسهل وأكثر متعة!\n",
+ "\n",
+ "- `tidymodels`: إطار عمل [tidymodels](https://www.tidymodels.org/) هو [مجموعة من الحزم](https://www.tidymodels.org/packages/) للنمذجة وتعلم الآلة.\n",
+ "\n",
+ "- `themis`: حزمة [themis](https://themis.tidymodels.org/) توفر خطوات إضافية للوصفات للتعامل مع البيانات غير المتوازنة.\n",
+ "\n",
+ "يمكنك تثبيتها باستخدام:\n",
+ "\n",
+ "`install.packages(c(\"tidyverse\", \"tidymodels\", \"kernlab\", \"themis\", \"ranger\", \"xgboost\", \"kknn\"))`\n",
+ "\n",
+ "بدلاً من ذلك، يقوم السكربت أدناه بالتحقق مما إذا كانت الحزم المطلوبة لإكمال هذا الوحدة موجودة ويقوم بتثبيتها إذا كانت مفقودة.\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "metadata": {
+ "id": "vZ57IuUxgyQt"
+ },
+ "source": [
+ "suppressWarnings(if (!require(\"pacman\"))install.packages(\"pacman\"))\n",
+ "\n",
+ "pacman::p_load(tidyverse, tidymodels, themis, kernlab, ranger, xgboost, kknn)"
+ ],
+ "execution_count": null,
+ "outputs": []
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "z22M-pj4g07x"
+ },
+ "source": [
+ "## **1. خريطة التصنيف**\n",
+ "\n",
+ "في [الدرس السابق](https://github.com/microsoft/ML-For-Beginners/tree/main/4-Classification/2-Classifiers-1)، حاولنا الإجابة على السؤال: كيف نختار بين نماذج متعددة؟ إلى حد كبير، يعتمد ذلك على خصائص البيانات ونوع المشكلة التي نريد حلها (على سبيل المثال التصنيف أو الانحدار؟)\n",
+ "\n",
+ "سابقًا، تعلمنا عن الخيارات المختلفة المتاحة لتصنيف البيانات باستخدام ورقة الغش الخاصة بمايكروسوفت. إطار عمل التعلم الآلي في Python، Scikit-learn، يقدم ورقة غش مشابهة ولكن أكثر تفصيلًا يمكن أن تساعدك بشكل أكبر في تضييق نطاق اختيارك للمقدّرين (مصطلح آخر للمصنفات):\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "u1i3xRIVg7vG"
+ },
+ "source": [
+ "> نصيحة: [قم بزيارة هذه الخريطة عبر الإنترنت](https://scikit-learn.org/stable/tutorial/machine_learning_map/) وانقر على المسار لقراءة الوثائق.\n",
+ ">\n",
+ "> يوفر [موقع مرجع Tidymodels](https://www.tidymodels.org/find/parsnip/#models) أيضًا وثائق ممتازة حول الأنواع المختلفة من النماذج.\n",
+ "\n",
+ "### **الخطة** 🗺️\n",
+ "\n",
+ "هذه الخريطة مفيدة جدًا بمجرد أن تكون لديك فهم واضح لبياناتك، حيث يمكنك \"السير\" على طول مساراتها لاتخاذ قرار:\n",
+ "\n",
+ "- لدينا أكثر من 50 عينة\n",
+ "\n",
+ "- نريد التنبؤ بفئة معينة\n",
+ "\n",
+ "- لدينا بيانات معنونة\n",
+ "\n",
+ "- لدينا أقل من 100 ألف عينة\n",
+ "\n",
+ "- ✨ يمكننا اختيار Linear SVC\n",
+ "\n",
+ "- إذا لم ينجح ذلك، وبما أن لدينا بيانات رقمية\n",
+ "\n",
+ " - يمكننا تجربة ✨ KNeighbors Classifier\n",
+ "\n",
+ " - إذا لم ينجح ذلك، جرب ✨ SVC و ✨ Ensemble Classifiers\n",
+ "\n",
+ "هذا مسار مفيد جدًا للاتباع. الآن، دعونا نبدأ باستخدام إطار عمل النمذجة [tidymodels](https://www.tidymodels.org/): مجموعة متناسقة ومرنة من حزم R تم تطويرها لتشجيع الممارسات الإحصائية الجيدة 😊.\n",
+ "\n",
+ "## 2. تقسيم البيانات والتعامل مع مجموعة بيانات غير متوازنة.\n",
+ "\n",
+ "من دروسنا السابقة، تعلمنا أن هناك مجموعة من المكونات المشتركة عبر مطابخنا. أيضًا، كان هناك توزيع غير متساوٍ إلى حد كبير في عدد المطابخ.\n",
+ "\n",
+ "سنتعامل مع هذه الأمور من خلال:\n",
+ "\n",
+ "- حذف المكونات الأكثر شيوعًا التي تسبب ارتباكًا بين المطابخ المختلفة، باستخدام `dplyr::select()`.\n",
+ "\n",
+ "- استخدام `recipe` لمعالجة البيانات وتجهيزها للنمذجة من خلال تطبيق خوارزمية `over-sampling`.\n",
+ "\n",
+ "لقد تناولنا ما سبق في الدرس السابق، لذا يجب أن يكون هذا سهلًا جدًا 🥳!\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "metadata": {
+ "id": "6tj_rN00hClA"
+ },
+ "source": [
+ "# Load the core Tidyverse and Tidymodels packages\n",
+ "library(tidyverse)\n",
+ "library(tidymodels)\n",
+ "\n",
+ "# Load the original cuisines data\n",
+ "df <- read_csv(file = \"https://raw.githubusercontent.com/microsoft/ML-For-Beginners/main/4-Classification/data/cuisines.csv\")\n",
+ "\n",
+ "# Drop id column, rice, garlic and ginger from our original data set\n",
+ "df_select <- df %>% \n",
+ " select(-c(1, rice, garlic, ginger)) %>%\n",
+ " # Encode cuisine column as categorical\n",
+ " mutate(cuisine = factor(cuisine))\n",
+ "\n",
+ "\n",
+ "# Create data split specification\n",
+ "set.seed(2056)\n",
+ "cuisines_split <- initial_split(data = df_select,\n",
+ " strata = cuisine,\n",
+ " prop = 0.7)\n",
+ "\n",
+ "# Extract the data in each split\n",
+ "cuisines_train <- training(cuisines_split)\n",
+ "cuisines_test <- testing(cuisines_split)\n",
+ "\n",
+ "# Display distribution of cuisines in the training set\n",
+ "cuisines_train %>% \n",
+ " count(cuisine) %>% \n",
+ " arrange(desc(n))"
+ ],
+ "execution_count": null,
+ "outputs": []
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "zFin5yw3hHb1"
+ },
+ "source": [
+ "### التعامل مع البيانات غير المتوازنة\n",
+ "\n",
+ "البيانات غير المتوازنة غالبًا ما تؤثر سلبًا على أداء النموذج. العديد من النماذج تعمل بشكل أفضل عندما يكون عدد الملاحظات متساويًا، وبالتالي تواجه صعوبة مع البيانات غير المتوازنة.\n",
+ "\n",
+ "هناك طريقتان رئيسيتان للتعامل مع مجموعات البيانات غير المتوازنة:\n",
+ "\n",
+ "- إضافة ملاحظات إلى الفئة الأقل: `الإفراط في أخذ العينات` مثل استخدام خوارزمية SMOTE التي تقوم بتوليد أمثلة جديدة للفئة الأقل بشكل اصطناعي باستخدام أقرب الجيران لهذه الحالات.\n",
+ "\n",
+ "- إزالة ملاحظات من الفئة الأكثر: `التقليل من أخذ العينات`\n",
+ "\n",
+ "في درسنا السابق، قمنا بتوضيح كيفية التعامل مع مجموعات البيانات غير المتوازنة باستخدام `وصفة`. يمكن اعتبار الوصفة بمثابة مخطط يصف الخطوات التي يجب تطبيقها على مجموعة البيانات لجعلها جاهزة لتحليل البيانات. في حالتنا، نريد أن يكون لدينا توزيع متساوٍ في عدد أنواع المأكولات في مجموعة `التدريب`. لنبدأ مباشرة.\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "metadata": {
+ "id": "cRzTnHolhLWd"
+ },
+ "source": [
+ "# Load themis package for dealing with imbalanced data\n",
+ "library(themis)\n",
+ "\n",
+ "# Create a recipe for preprocessing training data\n",
+ "cuisines_recipe <- recipe(cuisine ~ ., data = cuisines_train) %>%\n",
+ " step_smote(cuisine) \n",
+ "\n",
+ "# Print recipe\n",
+ "cuisines_recipe"
+ ],
+ "execution_count": null,
+ "outputs": []
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "KxOQ2ORhhO81"
+ },
+ "source": [
+ "الآن نحن جاهزون لتدريب النماذج 👩💻👨💻!\n",
+ "\n",
+ "## 3. ما بعد نماذج الانحدار متعدد الحدود\n",
+ "\n",
+ "في درسنا السابق، تناولنا نماذج الانحدار متعدد الحدود. دعونا نستكشف بعض النماذج الأكثر مرونة للتصنيف.\n",
+ "\n",
+ "### آلات الدعم المتجهة\n",
+ "\n",
+ "في سياق التصنيف، تعد `آلات الدعم المتجهة` تقنية تعلم آلي تهدف إلى إيجاد *مستوى فائق* يفصل بين الفئات \"بأفضل\" طريقة ممكنة. دعونا نلقي نظرة على مثال بسيط:\n",
+ "\n",
+ "
\n",
+ " \n",
+ " https://commons.wikimedia.org/w/index.php?curid=22877598\n"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "C4Wsd0vZhXYu"
+ },
+ "source": [
+ "H1~ لا تفصل بين الفئات. H2~ تفصل بينها ولكن بهامش صغير فقط. H3~ تفصل بينها بأكبر هامش ممكن.\n",
+ "\n",
+ "#### المصنف الخطي لدعم المتجهات\n",
+ "\n",
+ "التجميع باستخدام دعم المتجهات (SVC) هو أحد أفراد عائلة تقنيات تعلم الآلة الخاصة بدعم المتجهات. في SVC، يتم اختيار المستوى الفاصل بحيث يفصل بشكل صحيح بين `معظم` ملاحظات التدريب، ولكنه `قد يخطئ` في تصنيف بعض الملاحظات. من خلال السماح لبعض النقاط بأن تكون على الجانب الخطأ، يصبح SVM أكثر قوة في مواجهة القيم الشاذة وبالتالي يقدم تعميمًا أفضل للبيانات الجديدة. يُطلق على المعامل الذي ينظم هذا الانتهاك اسم `التكلفة`، والذي تكون قيمته الافتراضية 1 (راجع `help(\"svm_poly\")`).\n",
+ "\n",
+ "لنقم بإنشاء SVC خطي عن طريق ضبط `degree = 1` في نموذج SVM متعدد الحدود.\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "metadata": {
+ "id": "vJpp6nuChlBz"
+ },
+ "source": [
+ "# Make a linear SVC specification\n",
+ "svc_linear_spec <- svm_poly(degree = 1) %>% \n",
+ " set_engine(\"kernlab\") %>% \n",
+ " set_mode(\"classification\")\n",
+ "\n",
+ "# Bundle specification and recipe into a worklow\n",
+ "svc_linear_wf <- workflow() %>% \n",
+ " add_recipe(cuisines_recipe) %>% \n",
+ " add_model(svc_linear_spec)\n",
+ "\n",
+ "# Print out workflow\n",
+ "svc_linear_wf"
+ ],
+ "execution_count": null,
+ "outputs": []
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "rDs8cWNkhoqu"
+ },
+ "source": [
+ "الآن بعد أن قمنا بتجميع خطوات المعالجة المسبقة وتحديد النموذج في *سير العمل*، يمكننا المضي قدمًا وتدريب SVC الخطي وتقييم النتائج أثناء ذلك. بالنسبة لمقاييس الأداء، دعونا ننشئ مجموعة مقاييس لتقييم: `accuracy`، `sensitivity`، `Positive Predicted Value` و `F Measure`.\n",
+ "\n",
+ "> `augment()` سيضيف عمودًا (أعمدة) للتنبؤات إلى البيانات المقدمة.\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "metadata": {
+ "id": "81wiqcwuhrnq"
+ },
+ "source": [
+ "# Train a linear SVC model\n",
+ "svc_linear_fit <- svc_linear_wf %>% \n",
+ " fit(data = cuisines_train)\n",
+ "\n",
+ "# Create a metric set\n",
+ "eval_metrics <- metric_set(ppv, sens, accuracy, f_meas)\n",
+ "\n",
+ "\n",
+ "# Make predictions and Evaluate model performance\n",
+ "svc_linear_fit %>% \n",
+ " augment(new_data = cuisines_test) %>% \n",
+ " eval_metrics(truth = cuisine, estimate = .pred_class)"
+ ],
+ "execution_count": null,
+ "outputs": []
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "0UFQvHf-huo3"
+ },
+ "source": [
+ "#### آلة المتجهات الداعمة\n",
+ "\n",
+ "آلة المتجهات الداعمة (SVM) هي امتداد لمصنف المتجهات الداعمة لتتمكن من التعامل مع الحدود غير الخطية بين الفئات. في جوهرها، تستخدم SVMs *حيلة النواة* لتوسيع مساحة الميزات لتتكيف مع العلاقات غير الخطية بين الفئات. إحدى وظائف النواة الشهيرة والمرنة للغاية التي تستخدمها SVMs هي *وظيفة الأساس الشعاعي.* دعونا نرى كيف ستؤدي على بياناتنا.\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "metadata": {
+ "id": "-KX4S8mzhzmp"
+ },
+ "source": [
+ "set.seed(2056)\n",
+ "\n",
+ "# Make an RBF SVM specification\n",
+ "svm_rbf_spec <- svm_rbf() %>% \n",
+ " set_engine(\"kernlab\") %>% \n",
+ " set_mode(\"classification\")\n",
+ "\n",
+ "# Bundle specification and recipe into a worklow\n",
+ "svm_rbf_wf <- workflow() %>% \n",
+ " add_recipe(cuisines_recipe) %>% \n",
+ " add_model(svm_rbf_spec)\n",
+ "\n",
+ "\n",
+ "# Train an RBF model\n",
+ "svm_rbf_fit <- svm_rbf_wf %>% \n",
+ " fit(data = cuisines_train)\n",
+ "\n",
+ "\n",
+ "# Make predictions and Evaluate model performance\n",
+ "svm_rbf_fit %>% \n",
+ " augment(new_data = cuisines_test) %>% \n",
+ " eval_metrics(truth = cuisine, estimate = .pred_class)"
+ ],
+ "execution_count": null,
+ "outputs": []
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "QBFSa7WSh4HQ"
+ },
+ "source": [
+ "أفضل بكثير 🤩!\n",
+ "\n",
+ "> ✅ يرجى الاطلاع على:\n",
+ ">\n",
+ "> - [*Support Vector Machines*](https://bradleyboehmke.github.io/HOML/svm.html)، التعلم الآلي العملي باستخدام R\n",
+ ">\n",
+ "> - [*Support Vector Machines*](https://www.statlearning.com/)، مقدمة في التعلم الإحصائي مع تطبيقات باستخدام R\n",
+ ">\n",
+ "> لمزيد من القراءة.\n",
+ "\n",
+ "### مصنفات أقرب الجيران\n",
+ "\n",
+ "*K*-أقرب الجيران (KNN) هو خوارزمية يتم فيها التنبؤ بكل ملاحظة بناءً على *تشابهها* مع الملاحظات الأخرى.\n",
+ "\n",
+ "دعونا نقوم بتطبيقها على بياناتنا.\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "metadata": {
+ "id": "k4BxxBcdh9Ka"
+ },
+ "source": [
+ "# Make a KNN specification\n",
+ "knn_spec <- nearest_neighbor() %>% \n",
+ " set_engine(\"kknn\") %>% \n",
+ " set_mode(\"classification\")\n",
+ "\n",
+ "# Bundle recipe and model specification into a workflow\n",
+ "knn_wf <- workflow() %>% \n",
+ " add_recipe(cuisines_recipe) %>% \n",
+ " add_model(knn_spec)\n",
+ "\n",
+ "# Train a boosted tree model\n",
+ "knn_wf_fit <- knn_wf %>% \n",
+ " fit(data = cuisines_train)\n",
+ "\n",
+ "\n",
+ "# Make predictions and Evaluate model performance\n",
+ "knn_wf_fit %>% \n",
+ " augment(new_data = cuisines_test) %>% \n",
+ " eval_metrics(truth = cuisine, estimate = .pred_class)"
+ ],
+ "execution_count": null,
+ "outputs": []
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "HaegQseriAcj"
+ },
+ "source": [
+ "يبدو أن هذا النموذج لا يعمل بشكل جيد. ربما تغيير معايير النموذج (راجع `help(\"nearest_neighbor\")`) سيحسن أداء النموذج. تأكد من تجربته.\n",
+ "\n",
+ "> ✅ يرجى الاطلاع على:\n",
+ ">\n",
+ "> - [Hands-on Machine Learning with R](https://bradleyboehmke.github.io/HOML/)\n",
+ ">\n",
+ "> - [An Introduction to Statistical Learning with Applications in R](https://www.statlearning.com/)\n",
+ ">\n",
+ "> للتعرف أكثر على مصنفات *K*-Nearest Neighbors.\n",
+ "\n",
+ "### المصنفات التجميعية\n",
+ "\n",
+ "تعمل خوارزميات التجميع عن طريق دمج عدة نماذج أساسية لإنتاج نموذج مثالي إما عن طريق:\n",
+ "\n",
+ "`bagging`: تطبيق *دالة متوسط* على مجموعة من النماذج الأساسية.\n",
+ "\n",
+ "`boosting`: بناء سلسلة من النماذج التي تعتمد على بعضها البعض لتحسين الأداء التنبؤي.\n",
+ "\n",
+ "لنبدأ بتجربة نموذج الغابة العشوائية (Random Forest)، الذي يقوم ببناء مجموعة كبيرة من أشجار القرار ثم يطبق دالة متوسط للحصول على نموذج أفضل بشكل عام.\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "metadata": {
+ "id": "49DPoVs6iK1M"
+ },
+ "source": [
+ "# Make a random forest specification\n",
+ "rf_spec <- rand_forest() %>% \n",
+ " set_engine(\"ranger\") %>% \n",
+ " set_mode(\"classification\")\n",
+ "\n",
+ "# Bundle recipe and model specification into a workflow\n",
+ "rf_wf <- workflow() %>% \n",
+ " add_recipe(cuisines_recipe) %>% \n",
+ " add_model(rf_spec)\n",
+ "\n",
+ "# Train a random forest model\n",
+ "rf_wf_fit <- rf_wf %>% \n",
+ " fit(data = cuisines_train)\n",
+ "\n",
+ "\n",
+ "# Make predictions and Evaluate model performance\n",
+ "rf_wf_fit %>% \n",
+ " augment(new_data = cuisines_test) %>% \n",
+ " eval_metrics(truth = cuisine, estimate = .pred_class)"
+ ],
+ "execution_count": null,
+ "outputs": []
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "RGVYwC_aiUWc"
+ },
+ "source": [
+ "عمل رائع 👏!\n",
+ "\n",
+ "دعونا نجرب أيضًا نموذج الشجرة المعززة.\n",
+ "\n",
+ "تعرف الشجرة المعززة بأنها طريقة تجميعية تقوم بإنشاء سلسلة من أشجار القرار المتتابعة، حيث تعتمد كل شجرة على نتائج الأشجار السابقة في محاولة لتقليل الخطأ تدريجيًا. تركز على أوزان العناصر التي تم تصنيفها بشكل غير صحيح وتقوم بتعديل التناسب للمصنف التالي لتصحيحها.\n",
+ "\n",
+ "هناك طرق مختلفة لتطبيق هذا النموذج (راجع `help(\"boost_tree\")`). في هذا المثال، سنقوم بتطبيق الأشجار المعززة باستخدام محرك `xgboost`.\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "metadata": {
+ "id": "Py1YWo-micWs"
+ },
+ "source": [
+ "# Make a boosted tree specification\n",
+ "boost_spec <- boost_tree(trees = 200) %>% \n",
+ " set_engine(\"xgboost\") %>% \n",
+ " set_mode(\"classification\")\n",
+ "\n",
+ "# Bundle recipe and model specification into a workflow\n",
+ "boost_wf <- workflow() %>% \n",
+ " add_recipe(cuisines_recipe) %>% \n",
+ " add_model(boost_spec)\n",
+ "\n",
+ "# Train a boosted tree model\n",
+ "boost_wf_fit <- boost_wf %>% \n",
+ " fit(data = cuisines_train)\n",
+ "\n",
+ "\n",
+ "# Make predictions and Evaluate model performance\n",
+ "boost_wf_fit %>% \n",
+ " augment(new_data = cuisines_test) %>% \n",
+ " eval_metrics(truth = cuisine, estimate = .pred_class)"
+ ],
+ "execution_count": null,
+ "outputs": []
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "zNQnbuejigZM"
+ },
+ "source": [
+ "> ✅ يرجى الاطلاع على:\n",
+ ">\n",
+ "> - [التعلم الآلي للعلماء الاجتماعيين](https://cimentadaj.github.io/ml_socsci/tree-based-methods.html#random-forests)\n",
+ ">\n",
+ "> - [التعلم الآلي العملي باستخدام R](https://bradleyboehmke.github.io/HOML/)\n",
+ ">\n",
+ "> - [مقدمة في التعلم الإحصائي مع تطبيقات في R](https://www.statlearning.com/)\n",
+ ">\n",
+ "> - - يستعرض نموذج AdaBoost الذي يُعد بديلاً جيدًا لـ xgboost.\n",
+ ">\n",
+ "> لمعرفة المزيد عن المصنفات المجمعة.\n",
+ "\n",
+ "## 4. إضافي - مقارنة نماذج متعددة\n",
+ "\n",
+ "قمنا بتطبيق عدد كبير من النماذج في هذا المختبر 🙌. قد يصبح من الممل أو المرهق إنشاء العديد من سير العمل من مجموعات مختلفة من المعالجات المسبقة و/أو مواصفات النماذج، ثم حساب مقاييس الأداء واحدًا تلو الآخر.\n",
+ "\n",
+ "دعونا نرى ما إذا كان بإمكاننا معالجة هذا الأمر عن طريق إنشاء دالة تقوم بتطبيق قائمة من سير العمل على مجموعة التدريب، ثم تعيد مقاييس الأداء بناءً على مجموعة الاختبار. سنستخدم `map()` و `map_dfr()` من حزمة [purrr](https://purrr.tidyverse.org/) لتطبيق الدوال على كل عنصر في القائمة.\n",
+ "\n",
+ "> دوال [`map()`](https://purrr.tidyverse.org/reference/map.html) تتيح لك استبدال العديد من الحلقات التكرارية بكود أكثر اختصارًا وأسهل قراءة. أفضل مكان لتعلم المزيد عن دوال [`map()`](https://purrr.tidyverse.org/reference/map.html) هو [فصل التكرار](http://r4ds.had.co.nz/iteration.html) في كتاب R for Data Science.\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "metadata": {
+ "id": "Qzb7LyZnimd2"
+ },
+ "source": [
+ "set.seed(2056)\n",
+ "\n",
+ "# Create a metric set\n",
+ "eval_metrics <- metric_set(ppv, sens, accuracy, f_meas)\n",
+ "\n",
+ "# Define a function that returns performance metrics\n",
+ "compare_models <- function(workflow_list, train_set, test_set){\n",
+ " \n",
+ " suppressWarnings(\n",
+ " # Fit each model to the train_set\n",
+ " map(workflow_list, fit, data = train_set) %>% \n",
+ " # Make predictions on the test set\n",
+ " map_dfr(augment, new_data = test_set, .id = \"model\") %>%\n",
+ " # Select desired columns\n",
+ " select(model, cuisine, .pred_class) %>% \n",
+ " # Evaluate model performance\n",
+ " group_by(model) %>% \n",
+ " eval_metrics(truth = cuisine, estimate = .pred_class) %>% \n",
+ " ungroup()\n",
+ " )\n",
+ " \n",
+ "} # End of function"
+ ],
+ "execution_count": null,
+ "outputs": []
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "Fwa712sNisDA"
+ },
+ "source": []
+ },
+ {
+ "cell_type": "code",
+ "metadata": {
+ "id": "3i4VJOi2iu-a"
+ },
+ "source": [
+ "# Make a list of workflows\n",
+ "workflow_list <- list(\n",
+ " \"svc\" = svc_linear_wf,\n",
+ " \"svm\" = svm_rbf_wf,\n",
+ " \"knn\" = knn_wf,\n",
+ " \"random_forest\" = rf_wf,\n",
+ " \"xgboost\" = boost_wf)\n",
+ "\n",
+ "# Call the function\n",
+ "set.seed(2056)\n",
+ "perf_metrics <- compare_models(workflow_list = workflow_list, train_set = cuisines_train, test_set = cuisines_test)\n",
+ "\n",
+ "# Print out performance metrics\n",
+ "perf_metrics %>% \n",
+ " group_by(.metric) %>% \n",
+ " arrange(desc(.estimate)) %>% \n",
+ " slice_head(n=7)\n",
+ "\n",
+ "# Compare accuracy\n",
+ "perf_metrics %>% \n",
+ " filter(.metric == \"accuracy\") %>% \n",
+ " arrange(desc(.estimate))\n"
+ ],
+ "execution_count": null,
+ "outputs": []
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "KuWK_lEli4nW"
+ },
+ "source": [
+ "[**workflowset**](https://workflowsets.tidymodels.org/) تتيح للمستخدمين إنشاء وتطبيق عدد كبير من النماذج بسهولة، لكنها مصممة بشكل أساسي للعمل مع تقنيات إعادة أخذ العينات مثل `cross-validation`، وهي طريقة لم نتناولها بعد.\n",
+ "\n",
+ "## **🚀التحدي**\n",
+ "\n",
+ "كل واحدة من هذه التقنيات تحتوي على عدد كبير من المعاملات التي يمكنك تعديلها، مثل `cost` في SVMs، و`neighbors` في KNN، و`mtry` (المتنبئات المختارة عشوائيًا) في Random Forest.\n",
+ "\n",
+ "ابحث عن القيم الافتراضية لكل واحدة وفكر في ما يعنيه تعديل هذه القيم بالنسبة لجودة النموذج.\n",
+ "\n",
+ "للتعرف على المزيد حول نموذج معين ومعاملاته، استخدم: `help(\"model\")` مثلًا `help(\"rand_forest\")`.\n",
+ "\n",
+ "> في الممارسة العملية، نقوم عادةً *بتقدير* *أفضل القيم* لهذه المعاملات عن طريق تدريب العديد من النماذج على `مجموعة بيانات محاكاة` وقياس مدى أداء هذه النماذج. تُعرف هذه العملية باسم **الضبط**.\n",
+ "\n",
+ "### [**اختبار ما بعد المحاضرة**](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/24/)\n",
+ "\n",
+ "### **المراجعة والدراسة الذاتية**\n",
+ "\n",
+ "هناك الكثير من المصطلحات في هذه الدروس، لذا خذ دقيقة لمراجعة [هذه القائمة](https://docs.microsoft.com/dotnet/machine-learning/resources/glossary?WT.mc_id=academic-77952-leestott) من المصطلحات المفيدة!\n",
+ "\n",
+ "#### شكر خاص إلى:\n",
+ "\n",
+ "[`Allison Horst`](https://twitter.com/allison_horst/) على إنشاء الرسوم التوضيحية الرائعة التي تجعل R أكثر ترحيبًا وجاذبية. يمكنك العثور على المزيد من الرسوم التوضيحية في [معرضها](https://www.google.com/url?q=https://github.com/allisonhorst/stats-illustrations&sa=D&source=editors&ust=1626380772530000&usg=AOvVaw3zcfyCizFQZpkSLzxiiQEM).\n",
+ "\n",
+ "[Cassie Breviu](https://www.twitter.com/cassieview) و[Jen Looper](https://www.twitter.com/jenlooper) على إنشاء النسخة الأصلية من هذا المقرر بلغة Python ♥️\n",
+ "\n",
+ "تعلم سعيد،\n",
+ "\n",
+ "[Eric](https://twitter.com/ericntay)، سفير طلاب Microsoft Learn الذهبي.\n",
+ "\n",
+ "
\n",
+ " \n",
+ " عمل فني بواسطة @allison_horst\n"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "\n---\n\n**إخلاء المسؤولية**: \nتم ترجمة هذا المستند باستخدام خدمة الترجمة بالذكاء الاصطناعي [Co-op Translator](https://github.com/Azure/co-op-translator). بينما نسعى لتحقيق الدقة، يرجى العلم أن الترجمات الآلية قد تحتوي على أخطاء أو معلومات غير دقيقة. يجب اعتبار المستند الأصلي بلغته الأصلية المصدر الموثوق. للحصول على معلومات حاسمة، يُوصى بالاستعانة بترجمة بشرية احترافية. نحن غير مسؤولين عن أي سوء فهم أو تفسيرات خاطئة تنشأ عن استخدام هذه الترجمة.\n"
+ ]
+ }
+ ]
+}
\ No newline at end of file
diff --git a/translations/ar/4-Classification/3-Classifiers-2/solution/notebook.ipynb b/translations/ar/4-Classification/3-Classifiers-2/solution/notebook.ipynb
new file mode 100644
index 000000000..7c107f8ea
--- /dev/null
+++ b/translations/ar/4-Classification/3-Classifiers-2/solution/notebook.ipynb
@@ -0,0 +1,304 @@
+{
+ "cells": [
+ {
+ "source": [
+ "# بناء المزيد من نماذج التصنيف\n"
+ ],
+ "cell_type": "markdown",
+ "metadata": {}
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 1,
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "execute_result",
+ "data": {
+ "text/plain": [
+ " Unnamed: 0 cuisine almond angelica anise anise_seed apple \\\n",
+ "0 0 indian 0 0 0 0 0 \n",
+ "1 1 indian 1 0 0 0 0 \n",
+ "2 2 indian 0 0 0 0 0 \n",
+ "3 3 indian 0 0 0 0 0 \n",
+ "4 4 indian 0 0 0 0 0 \n",
+ "\n",
+ " apple_brandy apricot armagnac ... whiskey white_bread white_wine \\\n",
+ "0 0 0 0 ... 0 0 0 \n",
+ "1 0 0 0 ... 0 0 0 \n",
+ "2 0 0 0 ... 0 0 0 \n",
+ "3 0 0 0 ... 0 0 0 \n",
+ "4 0 0 0 ... 0 0 0 \n",
+ "\n",
+ " whole_grain_wheat_flour wine wood yam yeast yogurt zucchini \n",
+ "0 0 0 0 0 0 0 0 \n",
+ "1 0 0 0 0 0 0 0 \n",
+ "2 0 0 0 0 0 0 0 \n",
+ "3 0 0 0 0 0 0 0 \n",
+ "4 0 0 0 0 0 1 0 \n",
+ "\n",
+ "[5 rows x 382 columns]"
+ ],
+ "text/html": "
"
+ },
+ "metadata": {},
+ "execution_count": 3
+ }
+ ],
+ "source": [
+ "cuisines_feature_df = cuisines_df.drop(['Unnamed: 0', 'cuisine'], axis=1)\n",
+ "cuisines_feature_df.head()"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "# جرب مصنفات مختلفة\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 4,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "from sklearn.neighbors import KNeighborsClassifier\n",
+ "from sklearn.linear_model import LogisticRegression\n",
+ "from sklearn.svm import SVC\n",
+ "from sklearn.ensemble import RandomForestClassifier, AdaBoostClassifier\n",
+ "from sklearn.model_selection import train_test_split, cross_val_score\n",
+ "from sklearn.metrics import accuracy_score,precision_score,confusion_matrix,classification_report, precision_recall_curve\n",
+ "import numpy as np"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 5,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "X_train, X_test, y_train, y_test = train_test_split(cuisines_feature_df, cuisines_label_df, test_size=0.3)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 6,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "\n",
+ "C = 10\n",
+ "# Create different classifiers.\n",
+ "classifiers = {\n",
+ " 'Linear SVC': SVC(kernel='linear', C=C, probability=True,random_state=0),\n",
+ " 'KNN classifier': KNeighborsClassifier(C),\n",
+ " 'SVC': SVC(),\n",
+ " 'RFST': RandomForestClassifier(n_estimators=100),\n",
+ " 'ADA': AdaBoostClassifier(n_estimators=100)\n",
+ " \n",
+ "}\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 7,
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "name": "stdout",
+ "text": [
+ "Accuracy (train) for Linear SVC: 76.4% \n",
+ " precision recall f1-score support\n",
+ "\n",
+ " chinese 0.64 0.66 0.65 242\n",
+ " indian 0.91 0.86 0.89 236\n",
+ " japanese 0.72 0.73 0.73 245\n",
+ " korean 0.83 0.75 0.79 234\n",
+ " thai 0.75 0.82 0.78 242\n",
+ "\n",
+ " accuracy 0.76 1199\n",
+ " macro avg 0.77 0.76 0.77 1199\n",
+ "weighted avg 0.77 0.76 0.77 1199\n",
+ "\n",
+ "Accuracy (train) for KNN classifier: 70.7% \n",
+ " precision recall f1-score support\n",
+ "\n",
+ " chinese 0.65 0.63 0.64 242\n",
+ " indian 0.84 0.81 0.82 236\n",
+ " japanese 0.60 0.81 0.69 245\n",
+ " korean 0.89 0.53 0.67 234\n",
+ " thai 0.69 0.75 0.72 242\n",
+ "\n",
+ " accuracy 0.71 1199\n",
+ " macro avg 0.73 0.71 0.71 1199\n",
+ "weighted avg 0.73 0.71 0.71 1199\n",
+ "\n",
+ "Accuracy (train) for SVC: 80.1% \n",
+ " precision recall f1-score support\n",
+ "\n",
+ " chinese 0.71 0.69 0.70 242\n",
+ " indian 0.92 0.92 0.92 236\n",
+ " japanese 0.77 0.78 0.77 245\n",
+ " korean 0.87 0.77 0.82 234\n",
+ " thai 0.75 0.86 0.80 242\n",
+ "\n",
+ " accuracy 0.80 1199\n",
+ " macro avg 0.80 0.80 0.80 1199\n",
+ "weighted avg 0.80 0.80 0.80 1199\n",
+ "\n",
+ "Accuracy (train) for RFST: 82.8% \n",
+ " precision recall f1-score support\n",
+ "\n",
+ " chinese 0.80 0.75 0.77 242\n",
+ " indian 0.90 0.91 0.90 236\n",
+ " japanese 0.82 0.78 0.80 245\n",
+ " korean 0.85 0.82 0.83 234\n",
+ " thai 0.78 0.89 0.83 242\n",
+ "\n",
+ " accuracy 0.83 1199\n",
+ " macro avg 0.83 0.83 0.83 1199\n",
+ "weighted avg 0.83 0.83 0.83 1199\n",
+ "\n",
+ "Accuracy (train) for ADA: 71.1% \n",
+ " precision recall f1-score support\n",
+ "\n",
+ " chinese 0.60 0.57 0.58 242\n",
+ " indian 0.87 0.84 0.86 236\n",
+ " japanese 0.71 0.60 0.65 245\n",
+ " korean 0.68 0.78 0.72 234\n",
+ " thai 0.70 0.78 0.74 242\n",
+ "\n",
+ " accuracy 0.71 1199\n",
+ " macro avg 0.71 0.71 0.71 1199\n",
+ "weighted avg 0.71 0.71 0.71 1199\n",
+ "\n"
+ ]
+ }
+ ],
+ "source": [
+ "n_classifiers = len(classifiers)\n",
+ "\n",
+ "for index, (name, classifier) in enumerate(classifiers.items()):\n",
+ " classifier.fit(X_train, np.ravel(y_train))\n",
+ "\n",
+ " y_pred = classifier.predict(X_test)\n",
+ " accuracy = accuracy_score(y_test, y_pred)\n",
+ " print(\"Accuracy (train) for %s: %0.1f%% \" % (name, accuracy * 100))\n",
+ " print(classification_report(y_test,y_pred))"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "\n---\n\n**إخلاء المسؤولية**: \nتمت ترجمة هذا المستند باستخدام خدمة الترجمة الآلية [Co-op Translator](https://github.com/Azure/co-op-translator). بينما نسعى لتحقيق الدقة، يرجى العلم أن الترجمات الآلية قد تحتوي على أخطاء أو عدم دقة. يجب اعتبار المستند الأصلي بلغته الأصلية هو المصدر الموثوق. للحصول على معلومات حساسة أو هامة، يُوصى بالاستعانة بترجمة بشرية احترافية. نحن غير مسؤولين عن أي سوء فهم أو تفسيرات خاطئة تنشأ عن استخدام هذه الترجمة.\n"
+ ]
+ }
+ ],
+ "metadata": {
+ "interpreter": {
+ "hash": "70b38d7a306a849643e446cd70466270a13445e5987dfa1344ef2b127438fa4d"
+ },
+ "kernelspec": {
+ "name": "python3",
+ "display_name": "Python 3.7.0 64-bit ('3.7')"
+ },
+ "language_info": {
+ "codemirror_mode": {
+ "name": "ipython",
+ "version": 3
+ },
+ "file_extension": ".py",
+ "mimetype": "text/x-python",
+ "name": "python",
+ "nbconvert_exporter": "python",
+ "pygments_lexer": "ipython3",
+ "version": "3.7.0"
+ },
+ "metadata": {
+ "interpreter": {
+ "hash": "70b38d7a306a849643e446cd70466270a13445e5987dfa1344ef2b127438fa4d"
+ }
+ },
+ "coopTranslator": {
+ "original_hash": "7ea2b714669c823a596d986ba2d5739f",
+ "translation_date": "2025-08-29T15:26:00+00:00",
+ "source_file": "4-Classification/3-Classifiers-2/solution/notebook.ipynb",
+ "language_code": "ar"
+ }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 4
+}
\ No newline at end of file
diff --git a/translations/ar/4-Classification/4-Applied/README.md b/translations/ar/4-Classification/4-Applied/README.md
new file mode 100644
index 000000000..40bfb7527
--- /dev/null
+++ b/translations/ar/4-Classification/4-Applied/README.md
@@ -0,0 +1,329 @@
+
+# بناء تطبيق ويب لتوصية المأكولات
+
+في هذا الدرس، ستقوم ببناء نموذج تصنيف باستخدام بعض التقنيات التي تعلمتها في الدروس السابقة ومع مجموعة بيانات المأكولات الشهية التي تم استخدامها طوال هذه السلسلة. بالإضافة إلى ذلك، ستقوم ببناء تطبيق ويب صغير لاستخدام النموذج المحفوظ، مستفيدًا من بيئة تشغيل Onnx للويب.
+
+إحدى أكثر الاستخدامات العملية فائدة لتعلم الآلة هي بناء أنظمة التوصية، ويمكنك اتخاذ الخطوة الأولى في هذا الاتجاه اليوم!
+
+[](https://youtu.be/17wdM9AHMfg "تطبيق تعلم الآلة")
+
+> 🎥 انقر على الصورة أعلاه لمشاهدة الفيديو: جين لوبر تبني تطبيق ويب باستخدام بيانات تصنيف المأكولات
+
+## [اختبار ما قبل المحاضرة](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/25/)
+
+في هذا الدرس ستتعلم:
+
+- كيفية بناء نموذج وحفظه كملف Onnx
+- كيفية استخدام Netron لفحص النموذج
+- كيفية استخدام النموذج الخاص بك في تطبيق ويب للاستدلال
+
+## بناء النموذج الخاص بك
+
+بناء أنظمة تعلم الآلة التطبيقية هو جزء مهم من الاستفادة من هذه التقنيات في أنظمة عملك. يمكنك استخدام النماذج داخل تطبيقات الويب الخاصة بك (وبالتالي استخدامها في وضع عدم الاتصال إذا لزم الأمر) باستخدام Onnx.
+
+في [درس سابق](../../3-Web-App/1-Web-App/README.md)، قمت ببناء نموذج انحدار حول مشاهدات الأجسام الطائرة المجهولة، وقمت بحفظه باستخدام "pickle"، واستخدمته في تطبيق Flask. على الرغم من أن هذه البنية مفيدة جدًا، إلا أنها تطبيق Python كامل، وقد تتطلب متطلباتك استخدام تطبيق JavaScript.
+
+في هذا الدرس، يمكنك بناء نظام أساسي يعتمد على JavaScript للاستدلال. ولكن أولاً، تحتاج إلى تدريب نموذج وتحويله للاستخدام مع Onnx.
+
+## تمرين - تدريب نموذج التصنيف
+
+أولاً، قم بتدريب نموذج تصنيف باستخدام مجموعة بيانات المأكولات المنظفة التي استخدمناها.
+
+1. ابدأ باستيراد المكتبات المفيدة:
+
+ ```python
+ !pip install skl2onnx
+ import pandas as pd
+ ```
+
+ تحتاج إلى '[skl2onnx](https://onnx.ai/sklearn-onnx/)' للمساعدة في تحويل نموذج Scikit-learn الخاص بك إلى تنسيق Onnx.
+
+1. ثم، اعمل مع بياناتك بنفس الطريقة التي قمت بها في الدروس السابقة، عن طريق قراءة ملف CSV باستخدام `read_csv()`:
+
+ ```python
+ data = pd.read_csv('../data/cleaned_cuisines.csv')
+ data.head()
+ ```
+
+1. قم بإزالة العمودين الأولين غير الضروريين واحفظ البيانات المتبقية كـ 'X':
+
+ ```python
+ X = data.iloc[:,2:]
+ X.head()
+ ```
+
+1. احفظ التصنيفات كـ 'y':
+
+ ```python
+ y = data[['cuisine']]
+ y.head()
+
+ ```
+
+### بدء روتين التدريب
+
+سنستخدم مكتبة 'SVC' التي تتمتع بدقة جيدة.
+
+1. استيراد المكتبات المناسبة من Scikit-learn:
+
+ ```python
+ from sklearn.model_selection import train_test_split
+ from sklearn.svm import SVC
+ from sklearn.model_selection import cross_val_score
+ from sklearn.metrics import accuracy_score,precision_score,confusion_matrix,classification_report
+ ```
+
+1. فصل مجموعات التدريب والاختبار:
+
+ ```python
+ X_train, X_test, y_train, y_test = train_test_split(X,y,test_size=0.3)
+ ```
+
+1. بناء نموذج تصنيف SVC كما فعلت في الدرس السابق:
+
+ ```python
+ model = SVC(kernel='linear', C=10, probability=True,random_state=0)
+ model.fit(X_train,y_train.values.ravel())
+ ```
+
+1. الآن، اختبر النموذج الخاص بك باستخدام `predict()`:
+
+ ```python
+ y_pred = model.predict(X_test)
+ ```
+
+1. اطبع تقرير التصنيف للتحقق من جودة النموذج:
+
+ ```python
+ print(classification_report(y_test,y_pred))
+ ```
+
+ كما رأينا من قبل، الدقة جيدة:
+
+ ```output
+ precision recall f1-score support
+
+ chinese 0.72 0.69 0.70 257
+ indian 0.91 0.87 0.89 243
+ japanese 0.79 0.77 0.78 239
+ korean 0.83 0.79 0.81 236
+ thai 0.72 0.84 0.78 224
+
+ accuracy 0.79 1199
+ macro avg 0.79 0.79 0.79 1199
+ weighted avg 0.79 0.79 0.79 1199
+ ```
+
+### تحويل النموذج الخاص بك إلى Onnx
+
+تأكد من إجراء التحويل باستخدام العدد الصحيح من التنسورات. تحتوي مجموعة البيانات هذه على 380 مكونًا مدرجًا، لذا تحتاج إلى تدوين هذا الرقم في `FloatTensorType`:
+
+1. قم بالتحويل باستخدام عدد التنسورات 380.
+
+ ```python
+ from skl2onnx import convert_sklearn
+ from skl2onnx.common.data_types import FloatTensorType
+
+ initial_type = [('float_input', FloatTensorType([None, 380]))]
+ options = {id(model): {'nocl': True, 'zipmap': False}}
+ ```
+
+1. أنشئ ملف onx واحفظه كملف **model.onnx**:
+
+ ```python
+ onx = convert_sklearn(model, initial_types=initial_type, options=options)
+ with open("./model.onnx", "wb") as f:
+ f.write(onx.SerializeToString())
+ ```
+
+ > ملاحظة، يمكنك تمرير [خيارات](https://onnx.ai/sklearn-onnx/parameterized.html) في نص التحويل الخاص بك. في هذه الحالة، قمنا بتمرير 'nocl' ليكون True و'zipmap' ليكون False. نظرًا لأن هذا نموذج تصنيف، لديك خيار إزالة ZipMap الذي ينتج قائمة من القواميس (غير ضروري). يشير `nocl` إلى تضمين معلومات الفئة في النموذج. قم بتقليل حجم النموذج الخاص بك عن طريق تعيين `nocl` إلى 'True'.
+
+تشغيل الدفتر بالكامل الآن سيبني نموذج Onnx ويحفظه في هذا المجلد.
+
+## عرض النموذج الخاص بك
+
+نماذج Onnx ليست مرئية جدًا في Visual Studio Code، ولكن هناك برنامج مجاني جيد يستخدمه العديد من الباحثين لعرض النموذج للتأكد من أنه تم بناؤه بشكل صحيح. قم بتنزيل [Netron](https://github.com/lutzroeder/Netron) وافتح ملف model.onnx الخاص بك. يمكنك رؤية نموذجك البسيط مصورًا، مع مدخلاته الـ 380 والمصنف المدرج:
+
+
+
+Netron هو أداة مفيدة لعرض النماذج الخاصة بك.
+
+الآن أنت جاهز لاستخدام هذا النموذج الرائع في تطبيق ويب. دعنا نبني تطبيقًا سيكون مفيدًا عندما تنظر في ثلاجتك وتحاول معرفة أي مجموعة من المكونات المتبقية يمكنك استخدامها لطهي طبق معين، كما يحدده النموذج الخاص بك.
+
+## بناء تطبيق ويب للتوصية
+
+يمكنك استخدام النموذج الخاص بك مباشرة في تطبيق ويب. تتيح لك هذه البنية أيضًا تشغيله محليًا وحتى في وضع عدم الاتصال إذا لزم الأمر. ابدأ بإنشاء ملف `index.html` في نفس المجلد حيث قمت بتخزين ملف `model.onnx`.
+
+1. في هذا الملف _index.html_، أضف العلامات التالية:
+
+ ```html
+
+
+
+ Cuisine Matcher
+
+
+ ...
+
+
+ ```
+
+1. الآن، أثناء العمل داخل علامات `body`، أضف بعض العلامات لعرض قائمة من مربعات الاختيار التي تعكس بعض المكونات:
+
+ ```html
+
Check your refrigerator. What can you create?
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ```
+
+ لاحظ أن كل مربع اختيار تم إعطاؤه قيمة. تعكس هذه القيمة الفهرس حيث يوجد المكون وفقًا لمجموعة البيانات. التفاح، على سبيل المثال، في هذه القائمة الأبجدية، يشغل العمود الخامس، لذا فإن قيمته هي '4' لأننا نبدأ العد من 0. يمكنك استشارة [جدول المكونات](../../../../4-Classification/data/ingredient_indexes.csv) لاكتشاف فهرس مكون معين.
+
+ أثناء استمرارك في العمل في ملف index.html، أضف كتلة نصية حيث يتم استدعاء النموذج بعد إغلاق العلامة ``.
+
+1. أولاً، استورد [Onnx Runtime](https://www.onnxruntime.ai/):
+
+ ```html
+
+ ```
+
+ > يتم استخدام Onnx Runtime لتمكين تشغيل نماذج Onnx الخاصة بك عبر مجموعة واسعة من منصات الأجهزة، بما في ذلك التحسينات وواجهة برمجة التطبيقات للاستخدام.
+
+1. بمجرد أن تكون بيئة التشغيل في مكانها، يمكنك استدعاؤها:
+
+ ```html
+
+ ```
+
+في هذا الكود، هناك عدة أمور تحدث:
+
+1. قمت بإنشاء مصفوفة من 380 قيمة ممكنة (1 أو 0) ليتم تعيينها وإرسالها إلى النموذج للاستدلال، بناءً على ما إذا كان مربع الاختيار للمكون محددًا.
+2. قمت بإنشاء مصفوفة من مربعات الاختيار وطريقة لتحديد ما إذا كانت محددة في وظيفة `init` التي يتم استدعاؤها عند بدء التطبيق. عندما يتم تحديد مربع اختيار، يتم تعديل مصفوفة `ingredients` لتعكس المكون المختار.
+3. قمت بإنشاء وظيفة `testCheckboxes` التي تتحقق مما إذا كان أي مربع اختيار قد تم تحديده.
+4. تستخدم وظيفة `startInference` عند الضغط على الزر، وإذا تم تحديد أي مربع اختيار، تبدأ عملية الاستدلال.
+5. تتضمن روتين الاستدلال:
+ 1. إعداد تحميل غير متزامن للنموذج
+ 2. إنشاء بنية Tensor لإرسالها إلى النموذج
+ 3. إنشاء 'feeds' التي تعكس الإدخال `float_input` الذي قمت بإنشائه عند تدريب النموذج الخاص بك (يمكنك استخدام Netron للتحقق من هذا الاسم)
+ 4. إرسال هذه 'feeds' إلى النموذج وانتظار الرد
+
+## اختبار التطبيق الخاص بك
+
+افتح جلسة طرفية في Visual Studio Code في المجلد حيث يوجد ملف index.html الخاص بك. تأكد من أن لديك [http-server](https://www.npmjs.com/package/http-server) مثبتًا عالميًا، واكتب `http-server` في الموجه. يجب أن يفتح localhost ويمكنك عرض تطبيق الويب الخاص بك. تحقق من المأكولات الموصى بها بناءً على المكونات المختلفة:
+
+
+
+تهانينا، لقد أنشأت تطبيق ويب للتوصية يحتوي على عدد قليل من الحقول. خذ بعض الوقت لتطوير هذا النظام!
+
+## 🚀تحدي
+
+تطبيق الويب الخاص بك بسيط جدًا، لذا استمر في تطويره باستخدام المكونات وفهارسها من بيانات [ingredient_indexes](../../../../4-Classification/data/ingredient_indexes.csv). ما هي تركيبات النكهات التي تعمل على إنشاء طبق وطني معين؟
+
+## [اختبار ما بعد المحاضرة](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/26/)
+
+## المراجعة والدراسة الذاتية
+
+بينما تناول هذا الدرس فقط فائدة إنشاء نظام توصية لمكونات الطعام، فإن هذا المجال من تطبيقات تعلم الآلة غني جدًا بالأمثلة. اقرأ المزيد حول كيفية بناء هذه الأنظمة:
+
+- https://www.sciencedirect.com/topics/computer-science/recommendation-engine
+- https://www.technologyreview.com/2014/08/25/171547/the-ultimate-challenge-for-recommendation-engines/
+- https://www.technologyreview.com/2015/03/23/168831/everything-is-a-recommendation/
+
+## الواجب
+
+[بناء نظام توصية جديد](assignment.md)
+
+---
+
+**إخلاء المسؤولية**:
+تمت ترجمة هذا المستند باستخدام خدمة الترجمة الآلية [Co-op Translator](https://github.com/Azure/co-op-translator). بينما نسعى لتحقيق الدقة، يرجى العلم أن الترجمات الآلية قد تحتوي على أخطاء أو معلومات غير دقيقة. يجب اعتبار المستند الأصلي بلغته الأصلية هو المصدر الموثوق. للحصول على معلومات حساسة أو هامة، يُوصى بالاستعانة بترجمة بشرية احترافية. نحن غير مسؤولين عن أي سوء فهم أو تفسيرات خاطئة تنشأ عن استخدام هذه الترجمة.
\ No newline at end of file
diff --git a/translations/ar/4-Classification/4-Applied/assignment.md b/translations/ar/4-Classification/4-Applied/assignment.md
new file mode 100644
index 000000000..9666e539e
--- /dev/null
+++ b/translations/ar/4-Classification/4-Applied/assignment.md
@@ -0,0 +1,25 @@
+
+# بناء نظام توصيات
+
+## التعليمات
+
+بناءً على التمارين التي قمت بها في هذا الدرس، أصبحت تعرف كيفية إنشاء تطبيق ويب يعتمد على JavaScript باستخدام Onnx Runtime ونموذج Onnx محوّل. جرّب إنشاء نظام توصيات جديد باستخدام البيانات من هذه الدروس أو من مصادر أخرى (يرجى ذكر المصدر). يمكنك إنشاء نظام توصيات للحيوانات الأليفة بناءً على سمات الشخصية المختلفة، أو نظام توصيات لأنواع الموسيقى بناءً على مزاج الشخص. كن مبدعًا!
+
+## معايير التقييم
+
+| المعايير | ممتاز | مقبول | يحتاج إلى تحسين |
+| -------- | ---------------------------------------------------------------------- | ------------------------------------- | --------------------------------- |
+| | يتم تقديم تطبيق ويب ودفتر ملاحظات، كلاهما موثق جيدًا ويعمل بشكل صحيح | أحدهما مفقود أو يحتوي على أخطاء | كلاهما مفقود أو يحتوي على أخطاء |
+
+---
+
+**إخلاء المسؤولية**:
+تم ترجمة هذا المستند باستخدام خدمة الترجمة بالذكاء الاصطناعي [Co-op Translator](https://github.com/Azure/co-op-translator). بينما نسعى لتحقيق الدقة، يرجى العلم أن الترجمات الآلية قد تحتوي على أخطاء أو معلومات غير دقيقة. يجب اعتبار المستند الأصلي بلغته الأصلية المصدر الموثوق. للحصول على معلومات حاسمة، يُوصى بالاستعانة بترجمة بشرية احترافية. نحن غير مسؤولين عن أي سوء فهم أو تفسيرات خاطئة تنشأ عن استخدام هذه الترجمة.
\ No newline at end of file
diff --git a/translations/ar/4-Classification/4-Applied/notebook.ipynb b/translations/ar/4-Classification/4-Applied/notebook.ipynb
new file mode 100644
index 000000000..390681f8f
--- /dev/null
+++ b/translations/ar/4-Classification/4-Applied/notebook.ipynb
@@ -0,0 +1,41 @@
+{
+ "metadata": {
+ "language_info": {
+ "codemirror_mode": {
+ "name": "ipython",
+ "version": 3
+ },
+ "file_extension": ".py",
+ "mimetype": "text/x-python",
+ "name": "python",
+ "nbconvert_exporter": "python",
+ "pygments_lexer": "ipython3",
+ "version": 3
+ },
+ "orig_nbformat": 4,
+ "coopTranslator": {
+ "original_hash": "2f3e0d9e9ac5c301558fb8bf733ac0cb",
+ "translation_date": "2025-08-29T15:25:20+00:00",
+ "source_file": "4-Classification/4-Applied/notebook.ipynb",
+ "language_code": "ar"
+ }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 2,
+ "cells": [
+ {
+ "source": [
+ "# بناء موصي بالمأكولات\n"
+ ],
+ "cell_type": "markdown",
+ "metadata": {}
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "\n---\n\n**إخلاء المسؤولية**: \nتمت ترجمة هذه الوثيقة باستخدام خدمة الترجمة الآلية [Co-op Translator](https://github.com/Azure/co-op-translator). بينما نسعى لتحقيق الدقة، يرجى العلم أن الترجمات الآلية قد تحتوي على أخطاء أو معلومات غير دقيقة. يجب اعتبار الوثيقة الأصلية بلغتها الأصلية المصدر الموثوق. للحصول على معلومات حساسة أو هامة، يُوصى بالاستعانة بترجمة بشرية احترافية. نحن غير مسؤولين عن أي سوء فهم أو تفسيرات خاطئة ناتجة عن استخدام هذه الترجمة.\n"
+ ]
+ }
+ ]
+}
\ No newline at end of file
diff --git a/translations/ar/4-Classification/4-Applied/solution/notebook.ipynb b/translations/ar/4-Classification/4-Applied/solution/notebook.ipynb
new file mode 100644
index 000000000..a86a90dae
--- /dev/null
+++ b/translations/ar/4-Classification/4-Applied/solution/notebook.ipynb
@@ -0,0 +1,292 @@
+{
+ "metadata": {
+ "language_info": {
+ "codemirror_mode": {
+ "name": "ipython",
+ "version": 3
+ },
+ "file_extension": ".py",
+ "mimetype": "text/x-python",
+ "name": "python",
+ "nbconvert_exporter": "python",
+ "pygments_lexer": "ipython3",
+ "version": "3.7.0"
+ },
+ "orig_nbformat": 2,
+ "kernelspec": {
+ "name": "python3",
+ "display_name": "Python 3.7.0 64-bit ('3.7')"
+ },
+ "metadata": {
+ "interpreter": {
+ "hash": "70b38d7a306a849643e446cd70466270a13445e5987dfa1344ef2b127438fa4d"
+ }
+ },
+ "interpreter": {
+ "hash": "70b38d7a306a849643e446cd70466270a13445e5987dfa1344ef2b127438fa4d"
+ },
+ "coopTranslator": {
+ "original_hash": "49325d6dd12a3628fc64fa7ccb1a80ff",
+ "translation_date": "2025-08-29T15:25:33+00:00",
+ "source_file": "4-Classification/4-Applied/solution/notebook.ipynb",
+ "language_code": "ar"
+ }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 2,
+ "cells": [
+ {
+ "source": [
+ "# بناء موصي المأكولات\n"
+ ],
+ "cell_type": "markdown",
+ "metadata": {}
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 58,
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "name": "stdout",
+ "text": [
+ "Requirement already satisfied: skl2onnx in /Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages (1.8.0)\n",
+ "Requirement already satisfied: protobuf in /Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages (from skl2onnx) (3.8.0)\n",
+ "Requirement already satisfied: numpy>=1.15 in /Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages (from skl2onnx) (1.19.2)\n",
+ "Requirement already satisfied: onnx>=1.2.1 in /Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages (from skl2onnx) (1.9.0)\n",
+ "Requirement already satisfied: six in /Users/jenlooper/Library/Python/3.7/lib/python/site-packages (from skl2onnx) (1.12.0)\n",
+ "Requirement already satisfied: onnxconverter-common<1.9,>=1.6.1 in /Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages (from skl2onnx) (1.8.1)\n",
+ "Requirement already satisfied: scikit-learn>=0.19 in /Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages (from skl2onnx) (0.24.2)\n",
+ "Requirement already satisfied: scipy>=1.0 in /Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages (from skl2onnx) (1.4.1)\n",
+ "Requirement already satisfied: setuptools in /Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages (from protobuf->skl2onnx) (45.1.0)\n",
+ "Requirement already satisfied: typing-extensions>=3.6.2.1 in /Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages (from onnx>=1.2.1->skl2onnx) (3.10.0.0)\n",
+ "Requirement already satisfied: threadpoolctl>=2.0.0 in /Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages (from scikit-learn>=0.19->skl2onnx) (2.1.0)\n",
+ "Requirement already satisfied: joblib>=0.11 in /Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages (from scikit-learn>=0.19->skl2onnx) (0.16.0)\n",
+ "\u001b[33mWARNING: You are using pip version 20.2.3; however, version 21.1.2 is available.\n",
+ "You should consider upgrading via the '/Library/Frameworks/Python.framework/Versions/3.7/bin/python3.7 -m pip install --upgrade pip' command.\u001b[0m\n",
+ "Note: you may need to restart the kernel to use updated packages.\n"
+ ]
+ }
+ ],
+ "source": [
+ "!pip install skl2onnx"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 59,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "import pandas as pd \n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 60,
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "execute_result",
+ "data": {
+ "text/plain": [
+ " Unnamed: 0 cuisine almond angelica anise anise_seed apple \\\n",
+ "0 0 indian 0 0 0 0 0 \n",
+ "1 1 indian 1 0 0 0 0 \n",
+ "2 2 indian 0 0 0 0 0 \n",
+ "3 3 indian 0 0 0 0 0 \n",
+ "4 4 indian 0 0 0 0 0 \n",
+ "\n",
+ " apple_brandy apricot armagnac ... whiskey white_bread white_wine \\\n",
+ "0 0 0 0 ... 0 0 0 \n",
+ "1 0 0 0 ... 0 0 0 \n",
+ "2 0 0 0 ... 0 0 0 \n",
+ "3 0 0 0 ... 0 0 0 \n",
+ "4 0 0 0 ... 0 0 0 \n",
+ "\n",
+ " whole_grain_wheat_flour wine wood yam yeast yogurt zucchini \n",
+ "0 0 0 0 0 0 0 0 \n",
+ "1 0 0 0 0 0 0 0 \n",
+ "2 0 0 0 0 0 0 0 \n",
+ "3 0 0 0 0 0 0 0 \n",
+ "4 0 0 0 0 0 1 0 \n",
+ "\n",
+ "[5 rows x 382 columns]"
+ ],
+ "text/html": "
"
+ },
+ "metadata": {},
+ "execution_count": 62
+ }
+ ],
+ "source": [
+ "y = data[['cuisine']]\n",
+ "y.head()"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 63,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "from sklearn.model_selection import train_test_split\n",
+ "from sklearn.svm import SVC\n",
+ "from sklearn.model_selection import cross_val_score\n",
+ "from sklearn.metrics import accuracy_score,precision_score,confusion_matrix,classification_report"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 64,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "X_train, X_test, y_train, y_test = train_test_split(X,y,test_size=0.3)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 65,
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "execute_result",
+ "data": {
+ "text/plain": [
+ "SVC(C=10, kernel='linear', probability=True, random_state=0)"
+ ]
+ },
+ "metadata": {},
+ "execution_count": 65
+ }
+ ],
+ "source": [
+ "model = SVC(kernel='linear', C=10, probability=True,random_state=0)\n",
+ "model.fit(X_train,y_train.values.ravel())\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 66,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "y_pred = model.predict(X_test)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 67,
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "name": "stdout",
+ "text": [
+ " precision recall f1-score support\n\n chinese 0.72 0.70 0.71 236\n indian 0.91 0.88 0.89 243\n japanese 0.80 0.75 0.77 240\n korean 0.80 0.81 0.81 230\n thai 0.76 0.85 0.80 250\n\n accuracy 0.80 1199\n macro avg 0.80 0.80 0.80 1199\nweighted avg 0.80 0.80 0.80 1199\n\n"
+ ]
+ }
+ ],
+ "source": [
+ "print(classification_report(y_test,y_pred))"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 68,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "from skl2onnx import convert_sklearn\n",
+ "from skl2onnx.common.data_types import FloatTensorType\n",
+ "\n",
+ "initial_type = [('float_input', FloatTensorType([None, 380]))]\n",
+ "options = {id(model): {'nocl': True, 'zipmap': False}}\n",
+ "onx = convert_sklearn(model, initial_types=initial_type, options=options)\n",
+ "with open(\"./model.onnx\", \"wb\") as f:\n",
+ " f.write(onx.SerializeToString())\n",
+ "\n",
+ "\n"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "\n---\n\n**إخلاء المسؤولية**: \nتمت ترجمة هذا المستند باستخدام خدمة الترجمة الآلية [Co-op Translator](https://github.com/Azure/co-op-translator). بينما نسعى لتحقيق الدقة، يرجى العلم أن الترجمات الآلية قد تحتوي على أخطاء أو معلومات غير دقيقة. يجب اعتبار المستند الأصلي بلغته الأصلية هو المصدر الموثوق. للحصول على معلومات حساسة أو هامة، يُوصى بالاستعانة بترجمة بشرية احترافية. نحن غير مسؤولين عن أي سوء فهم أو تفسيرات خاطئة تنشأ عن استخدام هذه الترجمة.\n"
+ ]
+ }
+ ]
+}
\ No newline at end of file
diff --git a/translations/ar/4-Classification/README.md b/translations/ar/4-Classification/README.md
new file mode 100644
index 000000000..c634f330a
--- /dev/null
+++ b/translations/ar/4-Classification/README.md
@@ -0,0 +1,41 @@
+
+# البدء مع التصنيف
+
+## موضوع إقليمي: المأكولات الآسيوية والهندية اللذيذة 🍜
+
+في آسيا والهند، تتميز تقاليد الطعام بتنوعها الكبير ولذتها الفائقة! دعونا نلقي نظرة على بيانات حول المأكولات الإقليمية لفهم مكوناتها بشكل أفضل.
+
+
+> الصورة بواسطة Lisheng Chang على Unsplash
+
+## ما الذي ستتعلمه
+
+في هذا القسم، ستبني على دراستك السابقة حول الانحدار وستتعلم عن مصنفات أخرى يمكنك استخدامها لفهم البيانات بشكل أفضل.
+
+> هناك أدوات منخفضة الكود يمكن أن تساعدك في التعرف على كيفية العمل مع نماذج التصنيف. جرّب [Azure ML لهذه المهمة](https://docs.microsoft.com/learn/modules/create-classification-model-azure-machine-learning-designer/?WT.mc_id=academic-77952-leestott)
+
+## الدروس
+
+1. [مقدمة في التصنيف](1-Introduction/README.md)
+2. [مصنفات إضافية](2-Classifiers-1/README.md)
+3. [مصنفات أخرى](3-Classifiers-2/README.md)
+4. [تطبيق تعلم الآلة: بناء تطبيق ويب](4-Applied/README.md)
+
+## الشكر
+
+تم كتابة "البدء مع التصنيف" بحب ♥️ من قبل [Cassie Breviu](https://www.twitter.com/cassiebreviu) و [Jen Looper](https://www.twitter.com/jenlooper)
+
+تم الحصول على مجموعة بيانات المأكولات اللذيذة من [Kaggle](https://www.kaggle.com/hoandan/asian-and-indian-cuisines).
+
+---
+
+**إخلاء المسؤولية**:
+تمت ترجمة هذا المستند باستخدام خدمة الترجمة الآلية [Co-op Translator](https://github.com/Azure/co-op-translator). بينما نسعى لتحقيق الدقة، يرجى العلم أن الترجمات الآلية قد تحتوي على أخطاء أو معلومات غير دقيقة. يجب اعتبار المستند الأصلي بلغته الأصلية هو المصدر الموثوق. للحصول على معلومات حساسة أو هامة، يُوصى بالاستعانة بترجمة بشرية احترافية. نحن غير مسؤولين عن أي سوء فهم أو تفسيرات خاطئة تنشأ عن استخدام هذه الترجمة.
\ No newline at end of file
diff --git a/translations/ar/5-Clustering/1-Visualize/README.md b/translations/ar/5-Clustering/1-Visualize/README.md
new file mode 100644
index 000000000..df584d79e
--- /dev/null
+++ b/translations/ar/5-Clustering/1-Visualize/README.md
@@ -0,0 +1,347 @@
+
+# مقدمة إلى التجميع
+
+التجميع هو نوع من [التعلم غير الموجه](https://wikipedia.org/wiki/Unsupervised_learning) الذي يفترض أن مجموعة البيانات غير معنونة أو أن مدخلاتها غير مرتبطة بمخرجات محددة مسبقًا. يستخدم التجميع خوارزميات مختلفة لفرز البيانات غير المعنونة وتوفير مجموعات بناءً على الأنماط التي يكتشفها في البيانات.
+
+[](https://youtu.be/ty2advRiWJM "No One Like You by PSquare")
+
+> 🎥 انقر على الصورة أعلاه لمشاهدة الفيديو. أثناء دراستك لتعلم الآلة باستخدام التجميع، استمتع ببعض أغاني الرقص النيجيرية - هذه أغنية مشهورة من عام 2014 لفرقة PSquare.
+
+## [اختبار ما قبل المحاضرة](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/27/)
+
+### مقدمة
+
+[التجميع](https://link.springer.com/referenceworkentry/10.1007%2F978-0-387-30164-8_124) مفيد جدًا لاستكشاف البيانات. دعونا نرى ما إذا كان يمكنه المساعدة في اكتشاف الاتجاهات والأنماط في طريقة استهلاك الجمهور النيجيري للموسيقى.
+
+✅ خذ دقيقة للتفكير في استخدامات التجميع. في الحياة الواقعية، يحدث التجميع عندما يكون لديك كومة من الغسيل وتحتاج إلى فرز ملابس أفراد عائلتك 🧦👕👖🩲. في علم البيانات، يحدث التجميع عند محاولة تحليل تفضيلات المستخدم أو تحديد خصائص أي مجموعة بيانات غير معنونة. يساعد التجميع، بطريقة ما، في فهم الفوضى، مثل درج الجوارب.
+
+[](https://youtu.be/esmzYhuFnds "Introduction to Clustering")
+
+> 🎥 انقر على الصورة أعلاه لمشاهدة الفيديو: يقدم جون غوتاغ من MIT مقدمة عن التجميع.
+
+في بيئة مهنية، يمكن استخدام التجميع لتحديد أشياء مثل تقسيم السوق، أو تحديد الفئات العمرية التي تشتري منتجات معينة، على سبيل المثال. استخدام آخر يمكن أن يكون اكتشاف الشذوذ، ربما لاكتشاف الاحتيال من مجموعة بيانات معاملات بطاقات الائتمان. أو قد تستخدم التجميع لتحديد الأورام في مجموعة من الفحوصات الطبية.
+
+✅ فكر لدقيقة في كيفية مواجهتك للتجميع "في الحياة الواقعية"، سواء في البنوك أو التجارة الإلكترونية أو بيئة الأعمال.
+
+> 🎓 من المثير للاهتمام أن تحليل التجميع نشأ في مجالات الأنثروبولوجيا وعلم النفس في ثلاثينيات القرن الماضي. هل يمكنك تخيل كيف كان يمكن استخدامه؟
+
+بدلاً من ذلك، يمكنك استخدامه لتجميع نتائج البحث - مثل الروابط التسويقية أو الصور أو المراجعات، على سبيل المثال. يكون التجميع مفيدًا عندما يكون لديك مجموعة بيانات كبيرة تريد تقليلها وإجراء تحليل أكثر تفصيلاً عليها، لذا يمكن استخدام هذه التقنية لفهم البيانات قبل بناء نماذج أخرى.
+
+✅ بمجرد تنظيم بياناتك في مجموعات، يمكنك تعيين معرف مجموعة لها، وهذه التقنية يمكن أن تكون مفيدة عند الحفاظ على خصوصية مجموعة البيانات؛ يمكنك بدلاً من ذلك الإشارة إلى نقطة بيانات بمعرف المجموعة الخاص بها، بدلاً من بيانات تعريفية أكثر كشفًا. هل يمكنك التفكير في أسباب أخرى قد تجعلك تشير إلى معرف مجموعة بدلاً من عناصر أخرى من المجموعة لتحديدها؟
+
+تعرف على المزيد حول تقنيات التجميع في هذا [الوحدة التعليمية](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 | غرض عام، استقرائي |
+| Affinity propagation | العديد من المجموعات غير المتساوية، استقرائي |
+| Mean-shift | العديد من المجموعات غير المتساوية، استقرائي |
+| Spectral clustering | مجموعات قليلة ومتساوية، استنتاجي |
+| Ward hierarchical clustering | العديد من المجموعات المقيدة، استنتاجي |
+| Agglomerative clustering | العديد من المجموعات المقيدة، مسافات غير إقليدية، استنتاجي |
+| DBSCAN | هندسة غير مسطحة، مجموعات غير متساوية، استنتاجي |
+| OPTICS | هندسة غير مسطحة، مجموعات غير متساوية بكثافة متغيرة، استنتاجي |
+| Gaussian mixtures | هندسة مسطحة، استقرائي |
+| 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) تُقاس على طول منحنى. إذا كانت بياناتك، عند تصورها، لا تبدو وكأنها موجودة على مستوى مستوٍ، فقد تحتاج إلى استخدام خوارزمية متخصصة للتعامل معها.
+>
+
+> رسم توضيحي بواسطة [Dasani Madipalli](https://twitter.com/dasani_decoded)
+>
+> 🎓 ['المسافات'](https://web.stanford.edu/class/cs345a/slides/12-clustering.pdf)
+>
+> يتم تعريف المجموعات بواسطة مصفوفة المسافات الخاصة بها، أي المسافات بين النقاط. يمكن قياس هذه المسافة بطرق مختلفة. يتم تعريف المجموعات الإقليدية بواسطة متوسط قيم النقاط، وتحتوي على "مركز" أو نقطة مركزية. يتم قياس المسافات بالتالي بواسطة المسافة إلى هذا المركز. تشير المسافات غير الإقليدية إلى "clustroids"، النقطة الأقرب إلى النقاط الأخرى. يمكن تعريف clustroids بدورها بطرق مختلفة.
+>
+> 🎓 ['مقيدة'](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) يوضح الفرق بين استخدام خوارزميات K-Means مقابل HDBSCAN لاستكشاف مجموعة بيانات صاخبة بكثافة مجموعات غير متساوية.
+
+## خوارزميات التجميع
+
+هناك أكثر من 100 خوارزمية للتجميع، ويعتمد استخدامها على طبيعة البيانات المتاحة. دعونا نناقش بعض الخوارزميات الرئيسية:
+
+- **التجميع الهرمي**. إذا تم تصنيف كائن بناءً على قربه من كائن قريب، بدلاً من كائن بعيد، يتم تشكيل المجموعات بناءً على مسافة أعضائها من وإلى الكائنات الأخرى. التجميع التراكمي في Scikit-learn هو تجميع هرمي.
+
+ 
+ > رسم توضيحي بواسطة [Dasani Madipalli](https://twitter.com/dasani_decoded)
+
+- **التجميع المركزي**. تتطلب هذه الخوارزمية الشهيرة اختيار "k"، أو عدد المجموعات التي سيتم تشكيلها، وبعد ذلك تحدد الخوارزمية النقطة المركزية للمجموعة وتجمع البيانات حول تلك النقطة. [التجميع باستخدام K-means](https://wikipedia.org/wiki/K-means_clustering) هو نسخة شائعة من التجميع المركزي. يتم تحديد المركز بواسطة المتوسط الأقرب، ومن هنا جاء الاسم. يتم تقليل المسافة المربعة من المجموعة.
+
+ 
+ > رسم توضيحي بواسطة [Dasani Madipalli](https://twitter.com/dasani_decoded)
+
+- **التجميع القائم على التوزيع**. يعتمد على النمذجة الإحصائية، يركز التجميع القائم على التوزيع على تحديد احتمال انتماء نقطة بيانات إلى مجموعة، وتعيينها وفقًا لذلك. تنتمي طرق المزيج الغاوسي إلى هذا النوع.
+
+- **التجميع القائم على الكثافة**. يتم تعيين نقاط البيانات إلى مجموعات بناءً على كثافتها، أو تجمعها حول بعضها البعض. تعتبر نقاط البيانات البعيدة عن المجموعة نقاط شاذة أو ضوضاء. تنتمي DBSCAN وMean-shift وOPTICS إلى هذا النوع من التجميع.
+
+- **التجميع القائم على الشبكة**. بالنسبة لمجموعات البيانات متعددة الأبعاد، يتم إنشاء شبكة ويتم تقسيم البيانات بين خلايا الشبكة، مما يؤدي إلى إنشاء مجموعات.
+
+## تمرين - قم بتجميع بياناتك
+
+يتم تعزيز تقنية التجميع بشكل كبير من خلال التصور المناسب، لذا دعونا نبدأ بتصور بيانات الموسيقى الخاصة بنا. سيساعدنا هذا التمرين في تحديد أي من طرق التجميع يجب أن نستخدمها بشكل أكثر فعالية لطبيعة هذه البيانات.
+
+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()
+ ```
+
+ تحقق من الأسطر القليلة الأولى من البيانات:
+
+ | | الاسم | الألبوم | الفنان | النوع الموسيقي الرئيسي | تاريخ الإصدار | الطول | الشعبية | القابلية للرقص | الصوتية | الطاقة | الآلية | الحضور | الصوت | الكلامية | الإيقاع | توقيع الوقت |
+ | --- | ------------------------ | ---------------------------- | ------------------- | ---------------- | ------------ | ------ | ---------- | ------------ | ------------ | ------ | ---------------- | -------- | -------- | ----------- | ------- | -------------- |
+ | 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
+
+ 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 |
+
+> 🤔 إذا كنا نعمل مع التجميع، وهي طريقة غير خاضعة للإشراف لا تتطلب بيانات مصنفة، فلماذا نعرض هذه البيانات مع تسميات؟ في مرحلة استكشاف البيانات، تكون مفيدة، لكنها ليست ضرورية لعمل خوارزميات التجميع. يمكنك ببساطة إزالة رؤوس الأعمدة والإشارة إلى البيانات برقم العمود.
+
+انظر إلى القيم العامة للبيانات. لاحظ أن الشعبية يمكن أن تكون "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]` إلى قيمة أكبر، أو قم بإزالتها لرؤية الكل.
+
+لاحظ أنه عندما يتم وصف النوع الموسيقي الأعلى بأنه "مفقود"، فهذا يعني أن 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`، بالإضافة إلى تصفية المجموعة لإزالة أي قيمة شعبية تساوي 0 (مما يعني أنها لم تصنف بشعبية في المجموعة ويمكن اعتبارها ضوضاء لأغراضنا):
+
+ ```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`، وهو ليس مفاجئًا جدًا، نظرًا لأن الموسيقى الصاخبة عادة ما تكون مليئة بالطاقة. بخلاف ذلك، تكون الارتباطات ضعيفة نسبيًا. سيكون من المثير للاهتمام معرفة ما يمكن أن تفعله خوارزمية التجميع بهذه البيانات.
+
+ > 🎓 لاحظ أن الارتباط لا يعني السببية! لدينا دليل على الارتباط ولكن ليس لدينا دليل على السببية. [موقع ويب مسلي](https://tylervigen.com/spurious-correlations) يحتوي على بعض الرسوم التي تؤكد هذه النقطة.
+
+هل هناك أي تقارب في هذه المجموعة من البيانات حول شعبية الأغنية المتصورة وقابليتها للرقص؟ يظهر FacetGrid أن هناك دوائر متحدة المركز تتماشى، بغض النظر عن النوع الموسيقي. هل يمكن أن تكون الأذواق النيجيرية تتقارب عند مستوى معين من القابلية للرقص لهذا النوع الموسيقي؟
+
+✅ جرب نقاط بيانات مختلفة (مثل الطاقة، الصخب، الكلامية) والمزيد من الأنواع الموسيقية أو أنواع مختلفة. ماذا يمكنك أن تكتشف؟ ألقِ نظرة على جدول `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 (تقدير كثافة النواة) الذي يمثل البيانات باستخدام منحنى كثافة احتمالية مستمر. يتيح لنا ذلك تفسير البيانات عند العمل مع توزيعات متعددة.
+
+ بشكل عام، الأنواع الموسيقية الثلاثة تتماشى بشكل فضفاض من حيث شعبيتها وقابليتها للرقص. تحديد التجمعات في هذه البيانات المتراصة سيكون تحديًا:
+
+ 
+
+1. قم بإنشاء مخطط مبعثر:
+
+ ```python
+ sns.FacetGrid(df, hue="artist_top_genre", height=5) \
+ .map(plt.scatter, "popularity", "danceability") \
+ .add_legend()
+ ```
+
+ يظهر مخطط مبعثر على نفس المحاور نمطًا مشابهًا للتقارب.
+
+ 
+
+بشكل عام، للتجميع، يمكنك استخدام المخططات المبعثرة لإظهار تجمعات البيانات، لذا فإن إتقان هذا النوع من التصور مفيد جدًا. في الدرس التالي، سنأخذ هذه البيانات المصفاة ونستخدم التجميع باستخدام k-means لاكتشاف مجموعات في هذه البيانات التي تبدو متداخلة بطرق مثيرة للاهتمام.
+
+---
+
+## 🚀تحدي
+
+استعدادًا للدرس التالي، قم بإنشاء مخطط حول خوارزميات التجميع المختلفة التي قد تكتشفها وتستخدمها في بيئة الإنتاج. ما هي أنواع المشاكل التي تحاول خوارزميات التجميع معالجتها؟
+
+## [اختبار ما بعد المحاضرة](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/28/)
+
+## المراجعة والدراسة الذاتية
+
+قبل تطبيق خوارزميات التجميع، كما تعلمنا، من الجيد فهم طبيعة مجموعة البيانات الخاصة بك. اقرأ المزيد عن هذا الموضوع [هنا](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](https://github.com/Azure/co-op-translator). بينما نسعى لتحقيق الدقة، يرجى العلم أن الترجمات الآلية قد تحتوي على أخطاء أو معلومات غير دقيقة. يجب اعتبار المستند الأصلي بلغته الأصلية هو المصدر الموثوق. للحصول على معلومات حساسة أو هامة، يُوصى بالاستعانة بترجمة بشرية احترافية. نحن غير مسؤولين عن أي سوء فهم أو تفسيرات خاطئة تنشأ عن استخدام هذه الترجمة.
\ No newline at end of file
diff --git a/translations/ar/5-Clustering/1-Visualize/assignment.md b/translations/ar/5-Clustering/1-Visualize/assignment.md
new file mode 100644
index 000000000..8b9451645
--- /dev/null
+++ b/translations/ar/5-Clustering/1-Visualize/assignment.md
@@ -0,0 +1,25 @@
+
+# البحث عن تصورات أخرى للتجميع
+
+## التعليمات
+
+في هذا الدرس، عملت مع بعض تقنيات التصور لفهم كيفية رسم بياناتك استعدادًا لتجميعها. الرسوم البيانية النقطية، على وجه الخصوص، مفيدة في العثور على مجموعات من الكائنات. قم بالبحث عن طرق مختلفة ومكتبات مختلفة لإنشاء الرسوم البيانية النقطية ووثق عملك في دفتر ملاحظات. يمكنك استخدام البيانات من هذا الدرس، دروس أخرى، أو بيانات تقوم بجمعها بنفسك (يرجى الإشارة إلى مصدرها في دفتر الملاحظات الخاص بك). قم برسم بعض البيانات باستخدام الرسوم البيانية النقطية واشرح ما تكتشفه.
+
+## المعيار
+
+| المعيار | ممتاز | مقبول | يحتاج إلى تحسين |
+| -------- | ------------------------------------------------------------- | --------------------------------------------------------------------------------------- | ----------------------------------- |
+| | يتم تقديم دفتر ملاحظات يحتوي على خمسة رسوم بيانية نقطية موثقة جيدًا | يتم تقديم دفتر ملاحظات يحتوي على أقل من خمسة رسوم بيانية نقطية وهو أقل توثيقًا | يتم تقديم دفتر ملاحظات غير مكتمل |
+
+---
+
+**إخلاء المسؤولية**:
+تم ترجمة هذا المستند باستخدام خدمة الترجمة الآلية [Co-op Translator](https://github.com/Azure/co-op-translator). بينما نسعى لتحقيق الدقة، يرجى العلم أن الترجمات الآلية قد تحتوي على أخطاء أو معلومات غير دقيقة. يجب اعتبار المستند الأصلي بلغته الأصلية هو المصدر الموثوق. للحصول على معلومات حساسة أو هامة، يُوصى بالاستعانة بترجمة بشرية احترافية. نحن غير مسؤولين عن أي سوء فهم أو تفسيرات خاطئة ناتجة عن استخدام هذه الترجمة.
\ No newline at end of file
diff --git a/translations/ar/5-Clustering/1-Visualize/notebook.ipynb b/translations/ar/5-Clustering/1-Visualize/notebook.ipynb
new file mode 100644
index 000000000..7151b2a60
--- /dev/null
+++ b/translations/ar/5-Clustering/1-Visualize/notebook.ipynb
@@ -0,0 +1,52 @@
+{
+ "metadata": {
+ "language_info": {
+ "codemirror_mode": {
+ "name": "ipython",
+ "version": 3
+ },
+ "file_extension": ".py",
+ "mimetype": "text/x-python",
+ "name": "python",
+ "nbconvert_exporter": "python",
+ "pygments_lexer": "ipython3",
+ "version": "3.8.3"
+ },
+ "orig_nbformat": 2,
+ "kernelspec": {
+ "name": "python383jvsc74a57bd0e134e05457d34029b6460cd73bbf1ed73f339b5b6d98c95be70b69eba114fe95",
+ "display_name": "Python 3.8.3 64-bit (conda)"
+ },
+ "coopTranslator": {
+ "original_hash": "40e0707e96b3e1899a912776006264f9",
+ "translation_date": "2025-08-29T15:09:20+00:00",
+ "source_file": "5-Clustering/1-Visualize/notebook.ipynb",
+ "language_code": "ar"
+ }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 2,
+ "cells": [
+ {
+ "source": [
+ "# تحليل للموسيقى النيجيرية المستخرجة من سبوتيفاي\n"
+ ],
+ "cell_type": "markdown",
+ "metadata": {}
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": []
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "\n---\n\n**إخلاء المسؤولية**: \nتم ترجمة هذا المستند باستخدام خدمة الترجمة الآلية [Co-op Translator](https://github.com/Azure/co-op-translator). بينما نسعى لتحقيق الدقة، يرجى العلم أن الترجمات الآلية قد تحتوي على أخطاء أو معلومات غير دقيقة. يجب اعتبار المستند الأصلي بلغته الأصلية هو المصدر الموثوق. للحصول على معلومات حساسة أو هامة، يُوصى بالاستعانة بترجمة بشرية احترافية. نحن غير مسؤولين عن أي سوء فهم أو تفسيرات خاطئة ناتجة عن استخدام هذه الترجمة.\n"
+ ]
+ }
+ ]
+}
\ No newline at end of file
diff --git a/translations/ar/5-Clustering/1-Visualize/solution/Julia/README.md b/translations/ar/5-Clustering/1-Visualize/solution/Julia/README.md
new file mode 100644
index 000000000..f446e32e2
--- /dev/null
+++ b/translations/ar/5-Clustering/1-Visualize/solution/Julia/README.md
@@ -0,0 +1,15 @@
+
+هذا عنصر نائب مؤقت
+
+---
+
+**إخلاء المسؤولية**:
+تمت ترجمة هذه الوثيقة باستخدام خدمة الترجمة الآلية [Co-op Translator](https://github.com/Azure/co-op-translator). بينما نسعى لتحقيق الدقة، يرجى العلم أن الترجمات الآلية قد تحتوي على أخطاء أو معلومات غير دقيقة. يجب اعتبار الوثيقة الأصلية بلغتها الأصلية المصدر الموثوق. للحصول على معلومات حساسة أو هامة، يُوصى بالاستعانة بترجمة بشرية احترافية. نحن غير مسؤولين عن أي سوء فهم أو تفسيرات خاطئة ناتجة عن استخدام هذه الترجمة.
\ No newline at end of file
diff --git a/translations/ar/5-Clustering/1-Visualize/solution/R/lesson_14-R.ipynb b/translations/ar/5-Clustering/1-Visualize/solution/R/lesson_14-R.ipynb
new file mode 100644
index 000000000..fe2a35220
--- /dev/null
+++ b/translations/ar/5-Clustering/1-Visualize/solution/R/lesson_14-R.ipynb
@@ -0,0 +1,499 @@
+{
+ "cells": [
+ {
+ "cell_type": "markdown",
+ "source": [
+ "## **تحليل الموسيقى النيجيرية المستخرجة من Spotify**\n",
+ "\n",
+ "التجميع هو نوع من [التعلم غير المراقب](https://wikipedia.org/wiki/Unsupervised_learning) الذي يفترض أن مجموعة البيانات غير مصنفة أو أن مدخلاتها غير مرتبطة بمخرجات محددة مسبقًا. يستخدم خوارزميات مختلفة لفرز البيانات غير المصنفة وتقديم مجموعات بناءً على الأنماط التي يكتشفها في البيانات.\n",
+ "\n",
+ "[**اختبار ما قبل المحاضرة**](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/27/)\n",
+ "\n",
+ "### **المقدمة**\n",
+ "\n",
+ "[التجميع](https://link.springer.com/referenceworkentry/10.1007%2F978-0-387-30164-8_124) مفيد جدًا لاستكشاف البيانات. دعونا نرى ما إذا كان يمكنه المساعدة في اكتشاف الاتجاهات والأنماط في طريقة استهلاك الجمهور النيجيري للموسيقى.\n",
+ "\n",
+ "> ✅ خذ دقيقة للتفكير في استخدامات التجميع. في الحياة اليومية، يحدث التجميع عندما يكون لديك كومة من الغسيل وتحتاج إلى فرز ملابس أفراد الأسرة 🧦👕👖🩲. في علم البيانات، يحدث التجميع عند محاولة تحليل تفضيلات المستخدم أو تحديد خصائص أي مجموعة بيانات غير مصنفة. التجميع، بطريقة ما، يساعد في فهم الفوضى، مثل درج الجوارب.\n",
+ "\n",
+ "في بيئة العمل، يمكن استخدام التجميع لتحديد أشياء مثل تقسيم السوق، أو تحديد الفئات العمرية التي تشتري منتجات معينة، على سبيل المثال. استخدام آخر يمكن أن يكون اكتشاف الشذوذ، ربما للكشف عن الاحتيال من مجموعة بيانات معاملات بطاقات الائتمان. أو قد تستخدم التجميع لتحديد الأورام في مجموعة من الفحوصات الطبية.\n",
+ "\n",
+ "✅ فكر لدقيقة كيف قد تكون واجهت التجميع \"في الحياة الواقعية\"، في بيئة مصرفية، تجارة إلكترونية، أو أعمال.\n",
+ "\n",
+ "> 🎓 من المثير للاهتمام أن تحليل التجميع نشأ في مجالات الأنثروبولوجيا وعلم النفس في الثلاثينيات. هل يمكنك تخيل كيف كان يمكن استخدامه؟\n",
+ "\n",
+ "بدلاً من ذلك، يمكنك استخدامه لتجميع نتائج البحث - مثل روابط التسوق، الصور، أو المراجعات، على سبيل المثال. التجميع مفيد عندما يكون لديك مجموعة بيانات كبيرة تريد تقليلها وتريد إجراء تحليل أكثر تفصيلًا عليها، لذا يمكن استخدام هذه التقنية للتعرف على البيانات قبل بناء نماذج أخرى.\n",
+ "\n",
+ "✅ بمجرد تنظيم بياناتك في مجموعات، يمكنك تعيين معرف مجموعة لها، وهذه التقنية يمكن أن تكون مفيدة عند الحفاظ على خصوصية مجموعة البيانات؛ يمكنك بدلاً من ذلك الإشارة إلى نقطة بيانات بمعرف المجموعة، بدلاً من بيانات تعريفية أكثر كشفًا. هل يمكنك التفكير في أسباب أخرى قد تجعلك تشير إلى معرف المجموعة بدلاً من عناصر أخرى في المجموعة لتحديدها؟\n",
+ "\n",
+ "### البدء مع التجميع\n",
+ "\n",
+ "> 🎓 كيفية إنشاء المجموعات تعتمد بشكل كبير على كيفية جمع نقاط البيانات في مجموعات. دعونا نستعرض بعض المصطلحات:\n",
+ ">\n",
+ "> 🎓 ['الاستنتاج الانتقالي' مقابل 'الاستنتاج الاستقرائي'](https://wikipedia.org/wiki/Transduction_(machine_learning))\n",
+ ">\n",
+ "> الاستنتاج الانتقالي مشتق من حالات تدريب ملاحظة ترتبط بحالات اختبار محددة. الاستنتاج الاستقرائي مشتق من حالات تدريب ترتبط بقواعد عامة يتم تطبيقها بعد ذلك فقط على حالات الاختبار.\n",
+ ">\n",
+ "> مثال: تخيل أن لديك مجموعة بيانات مصنفة جزئيًا فقط. بعض الأشياء هي \"سجلات\"، وبعضها \"أقراص مدمجة\"، وبعضها فارغ. مهمتك هي توفير تسميات للفارغات. إذا اخترت نهجًا استقرائيًا، ستدرب نموذجًا يبحث عن \"السجلات\" و\"الأقراص المدمجة\"، وتطبق تلك التسميات على بياناتك غير المصنفة. هذا النهج سيواجه صعوبة في تصنيف الأشياء التي هي في الواقع \"كاسيتات\". من ناحية أخرى، النهج الانتقالي يتعامل مع هذه البيانات غير المعروفة بشكل أكثر فعالية حيث يعمل على تجميع العناصر المتشابهة معًا ثم يطبق تسمية على المجموعة. في هذه الحالة، قد تعكس المجموعات \"أشياء موسيقية دائرية\" و\"أشياء موسيقية مربعة\".\n",
+ ">\n",
+ "> 🎓 ['الهندسة غير المسطحة' مقابل 'الهندسة المسطحة'](https://datascience.stackexchange.com/questions/52260/terminology-flat-geometry-in-the-context-of-clustering)\n",
+ ">\n",
+ "> مشتقة من المصطلحات الرياضية، تشير الهندسة غير المسطحة مقابل الهندسة المسطحة إلى قياس المسافات بين النقاط إما بطرق هندسية \"مسطحة\" ([إقليدية](https://wikipedia.org/wiki/Euclidean_geometry)) أو \"غير مسطحة\" (غير إقليدية).\n",
+ ">\n",
+ "> \"مسطحة\" في هذا السياق تشير إلى الهندسة الإقليدية (بعض أجزائها تُدرس كـ \"هندسة مستوية\")، و\"غير مسطحة\" تشير إلى الهندسة غير الإقليدية. ما علاقة الهندسة بتعلم الآلة؟ حسنًا، كحقلين متجذرين في الرياضيات، يجب أن يكون هناك طريقة مشتركة لقياس المسافات بين النقاط في المجموعات، ويمكن القيام بذلك بطريقة \"مسطحة\" أو \"غير مسطحة\"، اعتمادًا على طبيعة البيانات. [المسافات الإقليدية](https://wikipedia.org/wiki/Euclidean_distance) تُقاس كطول قطعة مستقيمة بين نقطتين. [المسافات غير الإقليدية](https://wikipedia.org/wiki/Non-Euclidean_geometry) تُقاس على طول منحنى. إذا كانت بياناتك، عند تصورها، تبدو وكأنها لا توجد على مستوى، قد تحتاج إلى استخدام خوارزمية متخصصة للتعامل معها.\n",
+ "\n",
+ "
\n",
+ " \n",
+ " إنفوجرافيك بواسطة داساني ماديبالي\n",
+ "\n",
+ "\n",
+ "\n",
+ "> 🎓 ['المسافات'](https://web.stanford.edu/class/cs345a/slides/12-clustering.pdf)\n",
+ ">\n",
+ "> تُعرّف المجموعات بمصفوفة المسافات الخاصة بها، مثل المسافات بين النقاط. يمكن قياس هذه المسافة بعدة طرق. تُعرّف المجموعات الإقليدية بمتوسط قيم النقاط، وتحتوي على \"مركز\" أو نقطة مركزية. تُقاس المسافات بالتالي بالمسافة إلى هذا المركز. تشير المسافات غير الإقليدية إلى \"مراكز المجموعات\"، وهي النقطة الأقرب إلى النقاط الأخرى. يمكن تعريف مراكز المجموعات بطرق مختلفة.\n",
+ ">\n",
+ "> 🎓 ['المقيدة'](https://wikipedia.org/wiki/Constrained_clustering)\n",
+ ">\n",
+ "> [التجميع المقيد](https://web.cs.ucdavis.edu/~davidson/Publications/ICDMTutorial.pdf) يقدم التعلم \"شبه المراقب\" إلى هذه الطريقة غير المراقبة. يتم تمييز العلاقات بين النقاط كـ \"لا يمكن الربط\" أو \"يجب الربط\" بحيث تُفرض بعض القواعد على مجموعة البيانات.\n",
+ ">\n",
+ "> مثال: إذا تُركت خوارزمية حرة على مجموعة بيانات غير مصنفة أو شبه مصنفة، قد تكون المجموعات التي تنتجها ذات جودة ضعيفة. في المثال أعلاه، قد تُجمع المجموعات \"أشياء موسيقية دائرية\" و\"أشياء موسيقية مربعة\" و\"أشياء مثلثة\" و\"كوكيز\". إذا أُعطيت بعض القيود، أو قواعد لتتبعها (\"يجب أن يكون العنصر مصنوعًا من البلاستيك\"، \"يجب أن يكون العنصر قادرًا على إنتاج الموسيقى\") يمكن أن يساعد ذلك في \"تقييد\" الخوارزمية لاتخاذ خيارات أفضل.\n",
+ ">\n",
+ "> 🎓 'الكثافة'\n",
+ ">\n",
+ "> تُعتبر البيانات \"الصاخبة\" بأنها \"كثيفة\". قد تُظهر المسافات بين النقاط في كل مجموعة من مجموعاتها، عند الفحص، أنها أكثر أو أقل كثافة، أو \"مزدحمة\"، وبالتالي تحتاج هذه البيانات إلى التحليل باستخدام الطريقة المناسبة للتجميع. [هذه المقالة](https://www.kdnuggets.com/2020/02/understanding-density-based-clustering.html) توضح الفرق بين استخدام خوارزميات التجميع K-Means مقابل HDBSCAN لاستكشاف مجموعة بيانات صاخبة ذات كثافة غير متساوية.\n",
+ "\n",
+ "تعلم المزيد عن تقنيات التجميع في هذا [الوحدة التعليمية](https://docs.microsoft.com/learn/modules/train-evaluate-cluster-models?WT.mc_id=academic-77952-leestott)\n",
+ "\n",
+ "### **خوارزميات التجميع**\n",
+ "\n",
+ "هناك أكثر من 100 خوارزمية للتجميع، ويعتمد استخدامها على طبيعة البيانات المتوفرة. دعونا نناقش بعض الأنواع الرئيسية:\n",
+ "\n",
+ "- **التجميع الهرمي**. إذا تم تصنيف كائن بناءً على قربه من كائن قريب، بدلاً من كائن بعيد، تُشكل المجموعات بناءً على المسافة بين أعضائها. يتميز التجميع الهرمي بدمج مجموعتين بشكل متكرر.\n",
+ "\n",
+ "
\n",
+ " \n",
+ " إنفوجرافيك بواسطة داساني ماديبالي\n",
+ "\n",
+ "\n",
+ "\n",
+ "- **التجميع المركزي**. تتطلب هذه الخوارزمية الشهيرة اختيار \"k\"، أو عدد المجموعات التي سيتم تشكيلها، وبعد ذلك تحدد الخوارزمية النقطة المركزية للمجموعة وتجمع البيانات حول تلك النقطة. [التجميع K-means](https://wikipedia.org/wiki/K-means_clustering) هو نسخة شهيرة من التجميع المركزي الذي يفصل مجموعة البيانات إلى مجموعات K محددة مسبقًا. يتم تحديد المركز بواسطة أقرب متوسط، ومن هنا جاء الاسم. يتم تقليل المسافة المربعة من المجموعة.\n",
+ "\n",
+ "
\n",
+ " \n",
+ " إنفوجرافيك بواسطة داساني ماديبالي\n",
+ "\n",
+ "\n",
+ "\n",
+ "- **التجميع القائم على التوزيع**. يعتمد على النمذجة الإحصائية، يركز التجميع القائم على التوزيع على تحديد احتمال انتماء نقطة بيانات إلى مجموعة، وتعيينها وفقًا لذلك. تنتمي طرق Gaussian mixture إلى هذا النوع.\n",
+ "\n",
+ "- **التجميع القائم على الكثافة**. تُعيّن نقاط البيانات إلى مجموعات بناءً على كثافتها، أو تجمعها حول بعضها البعض. تُعتبر نقاط البيانات البعيدة عن المجموعة شذوذًا أو ضوضاء. تنتمي DBSCAN، Mean-shift وOPTICS إلى هذا النوع من التجميع.\n",
+ "\n",
+ "- **التجميع القائم على الشبكة**. بالنسبة لمجموعات البيانات متعددة الأبعاد، يتم إنشاء شبكة وتقسيم البيانات بين خلايا الشبكة، مما يؤدي إلى إنشاء مجموعات.\n",
+ "\n",
+ "أفضل طريقة لتعلم التجميع هي تجربته بنفسك، وهذا ما ستفعله في هذا التمرين.\n",
+ "\n",
+ "سنحتاج إلى بعض الحزم لإكمال هذا الوحدة. يمكنك تثبيتها باستخدام: `install.packages(c('tidyverse', 'tidymodels', 'DataExplorer', 'summarytools', 'plotly', 'paletteer', 'corrplot', 'patchwork'))`\n",
+ "\n",
+ "بدلاً من ذلك، يقوم البرنامج النصي أدناه بالتحقق مما إذا كانت الحزم المطلوبة لإكمال هذا الوحدة مثبتة ويقوم بتثبيتها لك في حالة وجود نقص.\n"
+ ],
+ "metadata": {}
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "source": [
+ "suppressWarnings(if(!require(\"pacman\")) install.packages(\"pacman\"))\r\n",
+ "\r\n",
+ "pacman::p_load('tidyverse', 'tidymodels', 'DataExplorer', 'summarytools', 'plotly', 'paletteer', 'corrplot', 'patchwork')\r\n"
+ ],
+ "outputs": [],
+ "metadata": {}
+ },
+ {
+ "cell_type": "markdown",
+ "source": [
+ "## تمرين - تجميع بياناتك\n",
+ "\n",
+ "التجميع كطريقة يعتمد بشكل كبير على التصور الصحيح، لذا دعونا نبدأ بتصور بيانات الموسيقى الخاصة بنا. هذا التمرين سيساعدنا في تحديد أي من طرق التجميع يمكننا استخدامها بشكل أكثر فعالية بناءً على طبيعة هذه البيانات.\n",
+ "\n",
+ "لنبدأ مباشرة باستيراد البيانات.\n"
+ ],
+ "metadata": {}
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "source": [
+ "# Load the core tidyverse and make it available in your current R session\r\n",
+ "library(tidyverse)\r\n",
+ "\r\n",
+ "# Import the data into a tibble\r\n",
+ "df <- read_csv(file = \"https://raw.githubusercontent.com/microsoft/ML-For-Beginners/main/5-Clustering/data/nigerian-songs.csv\")\r\n",
+ "\r\n",
+ "# View the first 5 rows of the data set\r\n",
+ "df %>% \r\n",
+ " slice_head(n = 5)\r\n"
+ ],
+ "outputs": [],
+ "metadata": {}
+ },
+ {
+ "cell_type": "markdown",
+ "source": [
+ "في بعض الأحيان، قد نرغب في الحصول على معلومات إضافية حول بياناتنا. يمكننا إلقاء نظرة على `البيانات` و`هيكلها` باستخدام وظيفة [*glimpse()*](https://pillar.r-lib.org/reference/glimpse.html):\n"
+ ],
+ "metadata": {}
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "source": [
+ "# Glimpse into the data set\r\n",
+ "df %>% \r\n",
+ " glimpse()\r\n"
+ ],
+ "outputs": [],
+ "metadata": {}
+ },
+ {
+ "cell_type": "markdown",
+ "source": [
+ "عمل رائع! 💪\n",
+ "\n",
+ "يمكننا ملاحظة أن `glimpse()` يعرض لك العدد الإجمالي للصفوف (الملاحظات) والأعمدة (المتغيرات)، ثم يعرض أول بضعة إدخالات لكل متغير في صف بعد اسم المتغير. بالإضافة إلى ذلك، يتم عرض *نوع البيانات* الخاص بالمتغير مباشرة بعد اسم المتغير داخل `< >`.\n",
+ "\n",
+ "`DataExplorer::introduce()` يمكنه تلخيص هذه المعلومات بشكل منظم:\n"
+ ],
+ "metadata": {}
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "source": [
+ "# Describe basic information for our data\r\n",
+ "df %>% \r\n",
+ " introduce()\r\n",
+ "\r\n",
+ "# A visual display of the same\r\n",
+ "df %>% \r\n",
+ " plot_intro()\r\n"
+ ],
+ "outputs": [],
+ "metadata": {}
+ },
+ {
+ "cell_type": "markdown",
+ "source": [
+ "رائع! لقد اكتشفنا للتو أن بياناتنا لا تحتوي على أي قيم مفقودة.\n",
+ "\n",
+ "وبينما نحن في هذا السياق، يمكننا استكشاف إحصائيات النزعة المركزية الشائعة (مثل [المتوسط](https://en.wikipedia.org/wiki/Arithmetic_mean) و[الوسيط](https://en.wikipedia.org/wiki/Median)) وقياسات التشتت (مثل [الانحراف المعياري](https://en.wikipedia.org/wiki/Standard_deviation)) باستخدام `summarytools::descr()`\n"
+ ],
+ "metadata": {}
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "source": [
+ "# Describe common statistics\r\n",
+ "df %>% \r\n",
+ " descr(stats = \"common\")\r\n"
+ ],
+ "outputs": [],
+ "metadata": {}
+ },
+ {
+ "cell_type": "markdown",
+ "source": [
+ "دعونا نلقي نظرة على القيم العامة للبيانات. لاحظ أن الشعبية يمكن أن تكون `0`، مما يظهر الأغاني التي ليس لها تصنيف. سنقوم بإزالة تلك قريبًا.\n",
+ "\n",
+ "> 🤔 إذا كنا نعمل مع التجميع، وهي طريقة غير خاضعة للإشراف لا تتطلب بيانات ذات تسميات، فلماذا نعرض هذه البيانات مع تسميات؟ في مرحلة استكشاف البيانات، تكون مفيدة، لكنها ليست ضرورية لعمل خوارزميات التجميع.\n",
+ "\n",
+ "### 1. استكشاف الأنواع الموسيقية الشهيرة\n",
+ "\n",
+ "لنمضي قدمًا ونكتشف الأنواع الموسيقية الأكثر شهرة 🎶 من خلال حساب عدد مرات ظهورها.\n"
+ ],
+ "metadata": {}
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "source": [
+ "# Popular genres\r\n",
+ "top_genres <- df %>% \r\n",
+ " count(artist_top_genre, sort = TRUE) %>% \r\n",
+ "# Encode to categorical and reorder the according to count\r\n",
+ " mutate(artist_top_genre = factor(artist_top_genre) %>% fct_inorder())\r\n",
+ "\r\n",
+ "# Print the top genres\r\n",
+ "top_genres\r\n"
+ ],
+ "outputs": [],
+ "metadata": {}
+ },
+ {
+ "cell_type": "markdown",
+ "source": [
+ "هذا سار بشكل جيد! يقولون إن الصورة تساوي ألف صف من إطار البيانات (في الواقع، لا أحد يقول ذلك أبدًا 😅). لكنك فهمت الفكرة، أليس كذلك؟\n",
+ "\n",
+ "إحدى الطرق لتصور البيانات الفئوية (المتغيرات النصية أو الفئوية) هي استخدام الرسوم البيانية الشريطية. لنقم بإنشاء رسم شريطي لأفضل 10 أنواع:\n"
+ ],
+ "metadata": {}
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "source": [
+ "# Change the default gray theme\r\n",
+ "theme_set(theme_light())\r\n",
+ "\r\n",
+ "# Visualize popular genres\r\n",
+ "top_genres %>%\r\n",
+ " slice(1:10) %>% \r\n",
+ " ggplot(mapping = aes(x = artist_top_genre, y = n,\r\n",
+ " fill = artist_top_genre)) +\r\n",
+ " geom_col(alpha = 0.8) +\r\n",
+ " paletteer::scale_fill_paletteer_d(\"rcartocolor::Vivid\") +\r\n",
+ " ggtitle(\"Top genres\") +\r\n",
+ " theme(plot.title = element_text(hjust = 0.5),\r\n",
+ " # Rotates the X markers (so we can read them)\r\n",
+ " axis.text.x = element_text(angle = 90))\r\n"
+ ],
+ "outputs": [],
+ "metadata": {}
+ },
+ {
+ "cell_type": "markdown",
+ "source": [
+ "الآن أصبح من الأسهل تحديد أن لدينا أنواع موسيقية `مفقودة` 🧐!\n",
+ "\n",
+ "> التصور الجيد سيظهر لك أشياء لم تكن تتوقعها، أو يثير أسئلة جديدة حول البيانات - هادلي ويكهام وغاريت غروليموند، [R For Data Science](https://r4ds.had.co.nz/introduction.html)\n",
+ "\n",
+ "ملاحظة، عندما يتم وصف النوع الموسيقي الأعلى بأنه `مفقود`، فهذا يعني أن Spotify لم يقم بتصنيفه، لذا دعونا نتخلص منه.\n"
+ ],
+ "metadata": {}
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "source": [
+ "# Visualize popular genres\r\n",
+ "top_genres %>%\r\n",
+ " filter(artist_top_genre != \"Missing\") %>% \r\n",
+ " slice(1:10) %>% \r\n",
+ " ggplot(mapping = aes(x = artist_top_genre, y = n,\r\n",
+ " fill = artist_top_genre)) +\r\n",
+ " geom_col(alpha = 0.8) +\r\n",
+ " paletteer::scale_fill_paletteer_d(\"rcartocolor::Vivid\") +\r\n",
+ " ggtitle(\"Top genres\") +\r\n",
+ " theme(plot.title = element_text(hjust = 0.5),\r\n",
+ " # Rotates the X markers (so we can read them)\r\n",
+ " axis.text.x = element_text(angle = 90))\r\n"
+ ],
+ "outputs": [],
+ "metadata": {}
+ },
+ {
+ "cell_type": "markdown",
+ "source": [
+ "من خلال استكشاف البيانات بشكل بسيط، نلاحظ أن الأنواع الثلاثة الأكثر شيوعًا تهيمن على هذه المجموعة من البيانات. دعونا نركز على `afro dancehall`، `afropop`، و`nigerian pop`. بالإضافة إلى ذلك، نقوم بتصفية البيانات لإزالة أي عنصر بقيمة شعبية تساوي 0 (مما يعني أنه لم يتم تصنيفه بشعبية في المجموعة ويمكن اعتباره ضوضاء لأغراضنا):\n"
+ ],
+ "metadata": {}
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "source": [
+ "nigerian_songs <- df %>% \r\n",
+ " # Concentrate on top 3 genres\r\n",
+ " filter(artist_top_genre %in% c(\"afro dancehall\", \"afropop\",\"nigerian pop\")) %>% \r\n",
+ " # Remove unclassified observations\r\n",
+ " filter(popularity != 0)\r\n",
+ "\r\n",
+ "\r\n",
+ "\r\n",
+ "# Visualize popular genres\r\n",
+ "nigerian_songs %>%\r\n",
+ " count(artist_top_genre) %>%\r\n",
+ " ggplot(mapping = aes(x = artist_top_genre, y = n,\r\n",
+ " fill = artist_top_genre)) +\r\n",
+ " geom_col(alpha = 0.8) +\r\n",
+ " paletteer::scale_fill_paletteer_d(\"ggsci::category10_d3\") +\r\n",
+ " ggtitle(\"Top genres\") +\r\n",
+ " theme(plot.title = element_text(hjust = 0.5))\r\n"
+ ],
+ "outputs": [],
+ "metadata": {}
+ },
+ {
+ "cell_type": "markdown",
+ "source": [
+ "دعونا نرى ما إذا كانت هناك أي علاقة خطية واضحة بين المتغيرات العددية في مجموعة البيانات الخاصة بنا. يتم قياس هذه العلاقة رياضيًا باستخدام [إحصائية الارتباط](https://en.wikipedia.org/wiki/Correlation).\n",
+ "\n",
+ "إحصائية الارتباط هي قيمة تتراوح بين -1 و 1 تشير إلى قوة العلاقة. القيم التي تزيد عن 0 تشير إلى وجود ارتباط *إيجابي* (تميل القيم العالية لأحد المتغيرات إلى التزامن مع القيم العالية للمتغير الآخر)، بينما القيم التي تقل عن 0 تشير إلى وجود ارتباط *سلبي* (تميل القيم العالية لأحد المتغيرات إلى التزامن مع القيم المنخفضة للمتغير الآخر).\n"
+ ],
+ "metadata": {}
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "source": [
+ "# Narrow down to numeric variables and fid correlation\r\n",
+ "corr_mat <- nigerian_songs %>% \r\n",
+ " select(where(is.numeric)) %>% \r\n",
+ " cor()\r\n",
+ "\r\n",
+ "# Visualize correlation matrix\r\n",
+ "corrplot(corr_mat, order = 'AOE', col = c('white', 'black'), bg = 'gold2') \r\n"
+ ],
+ "outputs": [],
+ "metadata": {}
+ },
+ {
+ "cell_type": "markdown",
+ "source": [
+ "البيانات ليست مترابطة بشكل قوي باستثناء بين `energy` و `loudness`، وهذا منطقي، نظرًا لأن الموسيقى الصاخبة عادةً ما تكون مليئة بالطاقة. هناك ارتباط بين `Popularity` و `release date`، وهذا أيضًا منطقي، حيث أن الأغاني الحديثة غالبًا ما تكون أكثر شهرة. يبدو أن هناك علاقة بين الطول والطاقة أيضًا.\n",
+ "\n",
+ "سيكون من المثير للاهتمام معرفة ما يمكن أن يفعله خوارزمية التجميع بهذه البيانات!\n",
+ "\n",
+ "> 🎓 لاحظ أن الارتباط لا يعني السببية! لدينا دليل على وجود ارتباط ولكن ليس لدينا دليل على وجود سببية. هناك [موقع ويب ممتع](https://tylervigen.com/spurious-correlations) يحتوي على بعض الرسوم التي تؤكد هذه النقطة.\n",
+ "\n",
+ "### 2. استكشاف توزيع البيانات\n",
+ "\n",
+ "دعونا نطرح بعض الأسئلة الأكثر دقة. هل الأنواع الموسيقية تختلف بشكل كبير في تصور قابليتها للرقص بناءً على شهرتها؟ دعونا نفحص توزيع البيانات لأكثر ثلاثة أنواع موسيقية شهرة من حيث الشعبية وقابلية الرقص على محور x و y باستخدام [مخططات الكثافة](https://www.khanacademy.org/math/ap-statistics/density-curves-normal-distribution-ap/density-curves/v/density-curves).\n"
+ ],
+ "metadata": {}
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "source": [
+ "# Perform 2D kernel density estimation\r\n",
+ "density_estimate_2d <- nigerian_songs %>% \r\n",
+ " ggplot(mapping = aes(x = popularity, y = danceability, color = artist_top_genre)) +\r\n",
+ " geom_density_2d(bins = 5, size = 1) +\r\n",
+ " paletteer::scale_color_paletteer_d(\"RSkittleBrewer::wildberry\") +\r\n",
+ " xlim(-20, 80) +\r\n",
+ " ylim(0, 1.2)\r\n",
+ "\r\n",
+ "# Density plot based on the popularity\r\n",
+ "density_estimate_pop <- nigerian_songs %>% \r\n",
+ " ggplot(mapping = aes(x = popularity, fill = artist_top_genre, color = artist_top_genre)) +\r\n",
+ " geom_density(size = 1, alpha = 0.5) +\r\n",
+ " paletteer::scale_fill_paletteer_d(\"RSkittleBrewer::wildberry\") +\r\n",
+ " paletteer::scale_color_paletteer_d(\"RSkittleBrewer::wildberry\") +\r\n",
+ " theme(legend.position = \"none\")\r\n",
+ "\r\n",
+ "# Density plot based on the danceability\r\n",
+ "density_estimate_dance <- nigerian_songs %>% \r\n",
+ " ggplot(mapping = aes(x = danceability, fill = artist_top_genre, color = artist_top_genre)) +\r\n",
+ " geom_density(size = 1, alpha = 0.5) +\r\n",
+ " paletteer::scale_fill_paletteer_d(\"RSkittleBrewer::wildberry\") +\r\n",
+ " paletteer::scale_color_paletteer_d(\"RSkittleBrewer::wildberry\")\r\n",
+ "\r\n",
+ "\r\n",
+ "# Patch everything together\r\n",
+ "library(patchwork)\r\n",
+ "density_estimate_2d / (density_estimate_pop + density_estimate_dance)\r\n"
+ ],
+ "outputs": [],
+ "metadata": {}
+ },
+ {
+ "cell_type": "markdown",
+ "source": [
+ "نلاحظ وجود دوائر متداخلة تتماشى مع بعضها البعض، بغض النظر عن النوع الموسيقي. هل يمكن أن تكون الأذواق النيجيرية تتقارب عند مستوى معين من قابلية الرقص لهذا النوع؟\n",
+ "\n",
+ "بشكل عام، تتوافق الأنواع الثلاثة من حيث شعبيتها وقابليتها للرقص. تحديد التجمعات في هذه البيانات غير المرتبطة بشكل وثيق سيكون تحديًا. دعونا نرى ما إذا كان الرسم البياني النقطي يمكن أن يدعم ذلك.\n"
+ ],
+ "metadata": {}
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "source": [
+ "# A scatter plot of popularity and danceability\r\n",
+ "scatter_plot <- nigerian_songs %>% \r\n",
+ " ggplot(mapping = aes(x = popularity, y = danceability, color = artist_top_genre, shape = artist_top_genre)) +\r\n",
+ " geom_point(size = 2, alpha = 0.8) +\r\n",
+ " paletteer::scale_color_paletteer_d(\"futurevisions::mars\")\r\n",
+ "\r\n",
+ "# Add a touch of interactivity\r\n",
+ "ggplotly(scatter_plot)\r\n"
+ ],
+ "outputs": [],
+ "metadata": {}
+ },
+ {
+ "cell_type": "markdown",
+ "source": [
+ "مخطط التبعثر لنفس المحاور يظهر نمطًا مشابهًا للتقارب.\n",
+ "\n",
+ "بشكل عام، بالنسبة للتجميع، يمكنك استخدام مخططات التبعثر لإظهار مجموعات البيانات، لذا فإن إتقان هذا النوع من التصور مفيد جدًا. في الدرس التالي، سنأخذ هذه البيانات المصفاة ونستخدم التجميع باستخدام خوارزمية k-means لاكتشاف مجموعات في هذه البيانات التي تبدو متداخلة بطرق مثيرة للاهتمام.\n",
+ "\n",
+ "## **🚀 التحدي**\n",
+ "\n",
+ "استعدادًا للدرس التالي، قم بإنشاء مخطط حول خوارزميات التجميع المختلفة التي قد تكتشفها وتستخدمها في بيئة الإنتاج. ما هي أنواع المشاكل التي يحاول التجميع معالجتها؟\n",
+ "\n",
+ "## [**اختبار ما بعد المحاضرة**](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/28/)\n",
+ "\n",
+ "## **المراجعة والدراسة الذاتية**\n",
+ "\n",
+ "قبل تطبيق خوارزميات التجميع، كما تعلمنا، من الجيد فهم طبيعة مجموعة البيانات الخاصة بك. اقرأ المزيد عن هذا الموضوع [هنا](https://www.kdnuggets.com/2019/10/right-clustering-algorithm.html)\n",
+ "\n",
+ "عمّق فهمك لتقنيات التجميع:\n",
+ "\n",
+ "- [تدريب وتقييم نماذج التجميع باستخدام Tidymodels وأدوات أخرى](https://rpubs.com/eR_ic/clustering)\n",
+ "\n",
+ "- برادلي بومكي وبراندون غرينويل، [*Hands-On Machine Learning with R*](https://bradleyboehmke.github.io/HOML/)*.*\n",
+ "\n",
+ "## **التكليف**\n",
+ "\n",
+ "[ابحث عن تصورات أخرى للتجميع](https://github.com/microsoft/ML-For-Beginners/blob/main/5-Clustering/1-Visualize/assignment.md)\n",
+ "\n",
+ "## شكر خاص إلى:\n",
+ "\n",
+ "[Jen Looper](https://www.twitter.com/jenlooper) لإنشاء النسخة الأصلية من هذا الوحدة بلغة بايثون ♥️\n",
+ "\n",
+ "[`Dasani Madipalli`](https://twitter.com/dasani_decoded) لإنشاء الرسوم التوضيحية الرائعة التي تجعل مفاهيم تعلم الآلة أكثر قابلية للفهم وأسهل للاستيعاب.\n",
+ "\n",
+ "تعلم سعيد،\n",
+ "\n",
+ "[Eric](https://twitter.com/ericntay)، سفير ذهبي في Microsoft Learn.\n"
+ ],
+ "metadata": {}
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "\n---\n\n**إخلاء المسؤولية**: \nتم ترجمة هذا المستند باستخدام خدمة الترجمة بالذكاء الاصطناعي [Co-op Translator](https://github.com/Azure/co-op-translator). بينما نسعى لتحقيق الدقة، يرجى العلم أن الترجمات الآلية قد تحتوي على أخطاء أو معلومات غير دقيقة. يجب اعتبار المستند الأصلي بلغته الأصلية المصدر الرسمي. للحصول على معلومات حاسمة، يُوصى بالاستعانة بترجمة بشرية احترافية. نحن غير مسؤولين عن أي سوء فهم أو تفسيرات خاطئة تنشأ عن استخدام هذه الترجمة.\n"
+ ]
+ }
+ ],
+ "metadata": {
+ "anaconda-cloud": "",
+ "kernelspec": {
+ "display_name": "R",
+ "language": "R",
+ "name": "ir"
+ },
+ "language_info": {
+ "codemirror_mode": "r",
+ "file_extension": ".r",
+ "mimetype": "text/x-r-source",
+ "name": "R",
+ "pygments_lexer": "r",
+ "version": "3.4.1"
+ },
+ "coopTranslator": {
+ "original_hash": "99c36449cad3708a435f6798cfa39972",
+ "translation_date": "2025-08-29T15:11:46+00:00",
+ "source_file": "5-Clustering/1-Visualize/solution/R/lesson_14-R.ipynb",
+ "language_code": "ar"
+ }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 1
+}
\ No newline at end of file
diff --git a/translations/ar/5-Clustering/1-Visualize/solution/notebook.ipynb b/translations/ar/5-Clustering/1-Visualize/solution/notebook.ipynb
new file mode 100644
index 000000000..e3d6b5118
--- /dev/null
+++ b/translations/ar/5-Clustering/1-Visualize/solution/notebook.ipynb
@@ -0,0 +1,844 @@
+{
+ "cells": [
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "# تحليل الموسيقى النيجيرية المستخرجة من سبوتيفاي\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 2,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "Defaulting to user installation because normal site-packages is not writeable\n",
+ "Requirement already satisfied: seaborn in /Users/jenniferlooper/Library/Python/3.8/lib/python/site-packages (0.11.2)\n",
+ "Requirement already satisfied: matplotlib>=2.2 in /Users/jenniferlooper/Library/Python/3.8/lib/python/site-packages (from seaborn) (3.5.0)\n",
+ "Requirement already satisfied: numpy>=1.15 in /Users/jenniferlooper/Library/Python/3.8/lib/python/site-packages (from seaborn) (1.21.4)\n",
+ "Requirement already satisfied: pandas>=0.23 in /Users/jenniferlooper/Library/Python/3.8/lib/python/site-packages (from seaborn) (1.3.4)\n",
+ "Requirement already satisfied: scipy>=1.0 in /Users/jenniferlooper/Library/Python/3.8/lib/python/site-packages (from seaborn) (1.7.2)\n",
+ "Requirement already satisfied: fonttools>=4.22.0 in /Users/jenniferlooper/Library/Python/3.8/lib/python/site-packages (from matplotlib>=2.2->seaborn) (4.28.1)\n",
+ "Requirement already satisfied: pyparsing>=2.2.1 in /Users/jenniferlooper/Library/Python/3.8/lib/python/site-packages (from matplotlib>=2.2->seaborn) (2.4.7)\n",
+ "Requirement already satisfied: kiwisolver>=1.0.1 in /Users/jenniferlooper/Library/Python/3.8/lib/python/site-packages (from matplotlib>=2.2->seaborn) (1.3.2)\n",
+ "Requirement already satisfied: pillow>=6.2.0 in /Users/jenniferlooper/Library/Python/3.8/lib/python/site-packages (from matplotlib>=2.2->seaborn) (8.4.0)\n",
+ "Requirement already satisfied: cycler>=0.10 in /Users/jenniferlooper/Library/Python/3.8/lib/python/site-packages (from matplotlib>=2.2->seaborn) (0.11.0)\n",
+ "Requirement already satisfied: packaging>=20.0 in /Users/jenniferlooper/Library/Python/3.8/lib/python/site-packages (from matplotlib>=2.2->seaborn) (21.2)\n",
+ "Requirement already satisfied: setuptools-scm>=4 in /Users/jenniferlooper/Library/Python/3.8/lib/python/site-packages (from matplotlib>=2.2->seaborn) (6.3.2)\n",
+ "Requirement already satisfied: python-dateutil>=2.7 in /Users/jenniferlooper/Library/Python/3.8/lib/python/site-packages (from matplotlib>=2.2->seaborn) (2.8.2)\n",
+ "Requirement already satisfied: pytz>=2017.3 in /Users/jenniferlooper/Library/Python/3.8/lib/python/site-packages (from pandas>=0.23->seaborn) (2021.3)\n",
+ "Requirement already satisfied: six>=1.5 in /Users/jenniferlooper/Library/Python/3.8/lib/python/site-packages (from python-dateutil>=2.7->matplotlib>=2.2->seaborn) (1.16.0)\n",
+ "Requirement already satisfied: tomli>=1.0.0 in /Users/jenniferlooper/Library/Python/3.8/lib/python/site-packages (from setuptools-scm>=4->matplotlib>=2.2->seaborn) (1.2.2)\n",
+ "Requirement already satisfied: setuptools in /Users/jenniferlooper/Library/Python/3.8/lib/python/site-packages (from setuptools-scm>=4->matplotlib>=2.2->seaborn) (59.1.1)\n",
+ "Note: you may need to restart the kernel to use updated packages.\n"
+ ]
+ }
+ ],
+ "source": [
+ "!pip install seaborn"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 3,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "import matplotlib.pyplot as plt\n",
+ "import pandas as pd"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 4,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "
"
+ ]
+ },
+ "metadata": {
+ "needs_background": "light"
+ },
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "df = df[(df['artist_top_genre'] == 'afro dancehall') | (df['artist_top_genre'] == 'afropop') | (df['artist_top_genre'] == 'nigerian pop')]\n",
+ "df = df[(df['popularity'] > 0)]\n",
+ "top = df['artist_top_genre'].value_counts()\n",
+ "plt.figure(figsize=(10,7))\n",
+ "sns.barplot(x=top.index,y=top.values)\n",
+ "plt.xticks(rotation=45)\n",
+ "plt.title('Top genres',color = 'blue')"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "البيانات ليست مترابطة بشكل قوي باستثناء بين الطاقة والجهارة، وهو أمر منطقي. الشعبية لها ارتباط بتاريخ الإصدار، وهو أيضًا منطقي، حيث إن الأغاني الأحدث ربما تكون أكثر شهرة. الطول والطاقة يبدو أن بينهما ارتباطًا - ربما الأغاني الأقصر أكثر حيوية؟\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 11,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "image/png": "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",
+ "text/plain": [
+ "
"
+ ]
+ },
+ "metadata": {
+ "needs_background": "light"
+ },
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "corrmat = df.corr()\n",
+ "f, ax = plt.subplots(figsize=(12, 9))\n",
+ "sns.heatmap(corrmat, vmax=.8, square=True);"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "هل الأنواع مختلفة بشكل كبير في تصور قابليتها للرقص، بناءً على شعبيتها؟ قم بفحص توزيع بيانات الأنواع الثلاثة الأولى لدينا للشعبية وقابلية الرقص على طول المحورين السيني والصادي المعطى.\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 12,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "image/png": "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OKvs+++/H25FAXz55ZcALFiwgJycHDl53mmA3GUnIyNzRFx22WXce++9fPPNN2g0GkaMGBEWj76YMWMGxcXFXHrppQQCAaZOncq1115LY2MjZrOZ559/nurqagoKCvjjH/+IwWDg8ccf584778Tv95OcnMwTTzwRPt+mTZv46KOP0Ov1/QZolTm1kAVJRkbmiCgoKODzzz/vtX3/lBR79uzpse+OO+7gjjvu6HWMXq/npZde6rW925uuL37961//KHIE/ZiQu+xkZGRkZE4K5BaSjIzMgJKamsrixYsP65jDLS9zaiC3kGRkZGRkTgpkQZKRkZGROSmQBUlGRkZG5qRAFiQZGRkZmZMCWZBkZGSOKU1NTdx6663H5FzPPfccixYtOibnkjn5kb3sZGRkjikJCQn861//Oibnuueee47JeWRODWRBkpGROSLWrl3LK6+8gk6no6ysjIKCAv7617/S3NzM9ddfz+LFi2lsbOTee+/FarWSn5/P+vXrWbZsGU6nk8cff5zS0lKCwSC33norF1xwQTgSeGdnJzNmzKC5uZlx48Yxd+5cnnnmGVavXo3VaiUqKooXXniBuLg4pkyZwtlnn83GjRtRKpU8++yzpKWl9bC1v3QVFRUVPProo3R2dmIwGHjooYcoKiriwQcfRBAESkpKcDgc3H777Vx88cUD8C3/uJAFSUbmFMW+bQn2rcdnPk7k8JlEFp1x0HKbN2/m66+/Jj4+nssvv5wVK1aQn58f3v/EE09w7rnncs0117BgwQK++OILAF566SWGDBnCU089hcPh4MorrwxHBW9qauKrr75CpVLx4IMPAlBVVUV5eTnvvfceCoWC+++/n88//5ybb76ZlpYWJk6cyCOPPMKTTz7Jf//73/Bx+9OdrmLx4sU88MADfP7559x3333cdtttzJ49my1btnDPPffw7bffhu147733aGtrY+7cuUyePJm4uLij/WqPiL6C1p6OyGNIMjIyR0xeXh6JiYkoFApycnKwWq099q9cuZI5c+YAcNZZZ2EymQBYtWoV7733HnPmzOGaa67B5XJRWloKwODBg3tE8gbIyMjggQce4MMPP+TJJ59ky5YtPVJdTJ06NWzPD23oZv90FU1NTTQ2NlJdXc3s2bMBGDFiBGazmfLycgDmzp2LWq0mMTGRUaNGsXHjxqP6ro6OH4cgyS0k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",
+ "text/plain": [
+ "
"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "sns.set_theme(style=\"ticks\")\n",
+ "\n",
+ "# Show the joint distribution using kernel density estimation\n",
+ "g = sns.jointplot(\n",
+ " data=df,\n",
+ " x=\"popularity\", y=\"danceability\", hue=\"artist_top_genre\",\n",
+ " kind=\"kde\",\n",
+ ")"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "بشكل عام، تتوافق الأنواع الثلاثة من حيث شعبيتها وقابليتها للرقص. يظهر مخطط التبعثر لنفس المحاور نمطًا مشابهًا للتقارب. جرّب مخطط التبعثر للتحقق من توزيع البيانات لكل نوع.\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 13,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ "/Users/jenniferlooper/Library/Python/3.8/lib/python/site-packages/seaborn/axisgrid.py:337: UserWarning: The `size` parameter has been renamed to `height`; please update your code.\n",
+ " warnings.warn(msg, UserWarning)\n"
+ ]
+ },
+ {
+ "data": {
+ "text/plain": [
+ ""
+ ]
+ },
+ "execution_count": 13,
+ "metadata": {},
+ "output_type": "execute_result"
+ },
+ {
+ "data": {
+ "image/png": "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",
+ "text/plain": [
+ "
"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "sns.FacetGrid(df, hue=\"artist_top_genre\", size=5) \\\n",
+ " .map(plt.scatter, \"popularity\", \"danceability\") \\\n",
+ " .add_legend()"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "\n---\n\n**إخلاء المسؤولية**: \nتمت ترجمة هذا المستند باستخدام خدمة الترجمة الآلية [Co-op Translator](https://github.com/Azure/co-op-translator). بينما نسعى لتحقيق الدقة، يرجى العلم أن الترجمات الآلية قد تحتوي على أخطاء أو معلومات غير دقيقة. يجب اعتبار المستند الأصلي بلغته الأصلية هو المصدر الموثوق. للحصول على معلومات حساسة أو هامة، يُوصى بالاستعانة بترجمة بشرية احترافية. نحن غير مسؤولين عن أي سوء فهم أو تفسيرات خاطئة تنشأ عن استخدام هذه الترجمة.\n"
+ ]
+ }
+ ],
+ "metadata": {
+ "interpreter": {
+ "hash": "31f2aee4e71d21fbe5cf8b01ff0e069b9275f58929596ceb00d14d90e3e16cd6"
+ },
+ "kernelspec": {
+ "display_name": "Python 3.7.0 64-bit ('3.7')",
+ "language": "python",
+ "name": "python3"
+ },
+ "language_info": {
+ "codemirror_mode": {
+ "name": "ipython",
+ "version": 3
+ },
+ "file_extension": ".py",
+ "mimetype": "text/x-python",
+ "name": "python",
+ "nbconvert_exporter": "python",
+ "pygments_lexer": "ipython3",
+ "version": "3.8.9"
+ },
+ "metadata": {
+ "interpreter": {
+ "hash": "70b38d7a306a849643e446cd70466270a13445e5987dfa1344ef2b127438fa4d"
+ }
+ },
+ "orig_nbformat": 2,
+ "coopTranslator": {
+ "original_hash": "c61deff2839902ac8cb4ed411eb10fee",
+ "translation_date": "2025-08-29T15:09:54+00:00",
+ "source_file": "5-Clustering/1-Visualize/solution/notebook.ipynb",
+ "language_code": "ar"
+ }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 2
+}
\ No newline at end of file
diff --git a/translations/ar/5-Clustering/2-K-Means/README.md b/translations/ar/5-Clustering/2-K-Means/README.md
new file mode 100644
index 000000000..39a15c78b
--- /dev/null
+++ b/translations/ar/5-Clustering/2-K-Means/README.md
@@ -0,0 +1,261 @@
+
+# التجميع باستخدام K-Means
+
+## [اختبار ما قبل المحاضرة](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/29/)
+
+في هذا الدرس، ستتعلم كيفية إنشاء مجموعات باستخدام مكتبة Scikit-learn ومجموعة بيانات الموسيقى النيجيرية التي قمت باستيرادها سابقًا. سنغطي أساسيات K-Means للتجميع. تذكر أنه، كما تعلمت في الدرس السابق، هناك العديد من الطرق للعمل مع المجموعات والطريقة التي تستخدمها تعتمد على بياناتك. سنجرب K-Means لأنه التقنية الأكثر شيوعًا للتجميع. لنبدأ!
+
+المصطلحات التي ستتعرف عليها:
+
+- تقييم Silhouette
+- طريقة Elbow
+- القصور الذاتي (Inertia)
+- التباين (Variance)
+
+## المقدمة
+
+[التجميع باستخدام K-Means](https://wikipedia.org/wiki/K-means_clustering) هو طريقة مشتقة من مجال معالجة الإشارات. تُستخدم لتقسيم وتصنيف مجموعات البيانات إلى 'k' مجموعات باستخدام سلسلة من الملاحظات. تعمل كل ملاحظة على تجميع نقطة بيانات معينة بالقرب من أقرب 'متوسط'، أو النقطة المركزية للمجموعة.
+
+يمكن تصور المجموعات كـ [مخططات Voronoi](https://wikipedia.org/wiki/Voronoi_diagram)، التي تتضمن نقطة (أو 'بذرة') ومنطقتها المقابلة.
+
+
+
+> رسم توضيحي من [Jen Looper](https://twitter.com/jenlooper)
+
+تتم عملية التجميع باستخدام K-Means [في ثلاث خطوات](https://scikit-learn.org/stable/modules/clustering.html#k-means):
+
+1. يختار الخوارزمية عددًا من النقاط المركزية 'k' عن طريق أخذ عينات من مجموعة البيانات. بعد ذلك، تقوم بالتكرار:
+ 1. تعين كل عينة إلى أقرب مركز.
+ 2. تنشئ مراكز جديدة عن طريق حساب متوسط القيم لجميع العينات المخصصة للمراكز السابقة.
+ 3. ثم تحسب الفرق بين المراكز الجديدة والقديمة وتكرر العملية حتى تستقر المراكز.
+
+أحد عيوب استخدام K-Means هو أنك ستحتاج إلى تحديد 'k'، أي عدد المراكز. لحسن الحظ، تساعد طريقة 'elbow' في تقدير قيمة بداية جيدة لـ 'k'. ستجربها بعد قليل.
+
+## المتطلبات الأساسية
+
+ستعمل في ملف [_notebook.ipynb_](https://github.com/microsoft/ML-For-Beginners/blob/main/5-Clustering/2-K-Means/notebook.ipynb) الخاص بهذا الدرس، والذي يتضمن استيراد البيانات وتنظيفها الأولي الذي قمت به في الدرس السابق.
+
+## التمرين - التحضير
+
+ابدأ بإلقاء نظرة أخرى على بيانات الأغاني.
+
+1. أنشئ مخططًا صندوقيًا، باستخدام `boxplot()` لكل عمود:
+
+ ```python
+ plt.figure(figsize=(20,20), dpi=200)
+
+ plt.subplot(4,3,1)
+ sns.boxplot(x = 'popularity', data = df)
+
+ plt.subplot(4,3,2)
+ sns.boxplot(x = 'acousticness', data = df)
+
+ plt.subplot(4,3,3)
+ sns.boxplot(x = 'energy', data = df)
+
+ plt.subplot(4,3,4)
+ sns.boxplot(x = 'instrumentalness', data = df)
+
+ plt.subplot(4,3,5)
+ sns.boxplot(x = 'liveness', data = df)
+
+ plt.subplot(4,3,6)
+ sns.boxplot(x = 'loudness', data = df)
+
+ plt.subplot(4,3,7)
+ sns.boxplot(x = 'speechiness', data = df)
+
+ plt.subplot(4,3,8)
+ sns.boxplot(x = 'tempo', data = df)
+
+ plt.subplot(4,3,9)
+ sns.boxplot(x = 'time_signature', data = df)
+
+ plt.subplot(4,3,10)
+ sns.boxplot(x = 'danceability', data = df)
+
+ plt.subplot(4,3,11)
+ sns.boxplot(x = 'length', data = df)
+
+ plt.subplot(4,3,12)
+ sns.boxplot(x = 'release_date', data = df)
+ ```
+
+ هذه البيانات تحتوي على بعض الضوضاء: من خلال ملاحظة كل عمود كمخطط صندوقي، يمكنك رؤية القيم الشاذة.
+
+ 
+
+يمكنك مراجعة مجموعة البيانات وإزالة هذه القيم الشاذة، ولكن ذلك سيجعل البيانات قليلة جدًا.
+
+1. في الوقت الحالي، اختر الأعمدة التي ستستخدمها في تمرين التجميع. اختر الأعمدة ذات النطاقات المتشابهة وقم بترميز عمود `artist_top_genre` كبيانات رقمية:
+
+ ```python
+ from sklearn.preprocessing import LabelEncoder
+ le = LabelEncoder()
+
+ X = df.loc[:, ('artist_top_genre','popularity','danceability','acousticness','loudness','energy')]
+
+ y = df['artist_top_genre']
+
+ X['artist_top_genre'] = le.fit_transform(X['artist_top_genre'])
+
+ y = le.transform(y)
+ ```
+
+1. الآن تحتاج إلى اختيار عدد المجموعات المستهدفة. أنت تعلم أن هناك 3 أنواع من الأغاني التي قمنا بتحديدها من مجموعة البيانات، لذا دعنا نجرب 3:
+
+ ```python
+ from sklearn.cluster import KMeans
+
+ nclusters = 3
+ seed = 0
+
+ km = KMeans(n_clusters=nclusters, random_state=seed)
+ km.fit(X)
+
+ # Predict the cluster for each data point
+
+ y_cluster_kmeans = km.predict(X)
+ y_cluster_kmeans
+ ```
+
+سترى مصفوفة مطبوعة تحتوي على المجموعات المتوقعة (0، 1، أو 2) لكل صف في إطار البيانات.
+
+1. استخدم هذه المصفوفة لحساب 'تقييم Silhouette':
+
+ ```python
+ from sklearn import metrics
+ score = metrics.silhouette_score(X, y_cluster_kmeans)
+ score
+ ```
+
+## تقييم Silhouette
+
+ابحث عن تقييم Silhouette أقرب إلى 1. يتراوح هذا التقييم بين -1 و 1، وإذا كان التقييم 1، فإن المجموعة كثيفة ومنفصلة بشكل جيد عن المجموعات الأخرى. القيمة القريبة من 0 تمثل مجموعات متداخلة مع عينات قريبة جدًا من حدود القرار للمجموعات المجاورة. [(المصدر)](https://dzone.com/articles/kmeans-silhouette-score-explained-with-python-exam)
+
+تقييمنا هو **0.53**، وهو في المنتصف. يشير ذلك إلى أن بياناتنا ليست مناسبة تمامًا لهذا النوع من التجميع، ولكن دعنا نستمر.
+
+### التمرين - بناء نموذج
+
+1. استورد `KMeans` وابدأ عملية التجميع.
+
+ ```python
+ from sklearn.cluster import KMeans
+ wcss = []
+
+ for i in range(1, 11):
+ kmeans = KMeans(n_clusters = i, init = 'k-means++', random_state = 42)
+ kmeans.fit(X)
+ wcss.append(kmeans.inertia_)
+
+ ```
+
+ هناك بعض الأجزاء هنا التي تستحق التوضيح.
+
+ > 🎓 النطاق: هذه هي التكرارات لعملية التجميع.
+
+ > 🎓 random_state: "يحدد توليد الأرقام العشوائية لتهيئة المراكز." [المصدر](https://scikit-learn.org/stable/modules/generated/sklearn.cluster.KMeans.html#sklearn.cluster.KMeans)
+
+ > 🎓 WCSS: "مجموع المربعات داخل المجموعة" يقيس متوسط المسافة المربعة لجميع النقاط داخل المجموعة إلى مركز المجموعة. [المصدر](https://medium.com/@ODSC/unsupervised-learning-evaluating-clusters-bd47eed175ce).
+
+ > 🎓 القصور الذاتي: تحاول خوارزميات K-Means اختيار المراكز لتقليل 'القصور الذاتي'، "وهو مقياس لمدى تماسك المجموعات داخليًا." [المصدر](https://scikit-learn.org/stable/modules/clustering.html). يتم إلحاق القيمة بمتغير wcss في كل تكرار.
+
+ > 🎓 k-means++: في [Scikit-learn](https://scikit-learn.org/stable/modules/clustering.html#k-means) يمكنك استخدام تحسين 'k-means++'، الذي "يهيئ المراكز لتكون (بشكل عام) بعيدة عن بعضها البعض، مما يؤدي إلى نتائج أفضل على الأرجح من التهيئة العشوائية."
+
+### طريقة Elbow
+
+في السابق، افترضت أنه، لأنك استهدفت 3 أنواع من الأغاني، يجب أن تختار 3 مجموعات. ولكن هل هذا صحيح؟
+
+1. استخدم طريقة 'elbow' للتأكد.
+
+ ```python
+ plt.figure(figsize=(10,5))
+ sns.lineplot(x=range(1, 11), y=wcss, marker='o', color='red')
+ plt.title('Elbow')
+ plt.xlabel('Number of clusters')
+ plt.ylabel('WCSS')
+ plt.show()
+ ```
+
+ استخدم متغير `wcss` الذي قمت ببنائه في الخطوة السابقة لإنشاء مخطط يظهر مكان 'الانحناء' في الرسم البياني، مما يشير إلى العدد الأمثل للمجموعات. ربما يكون **3** بالفعل!
+
+ 
+
+## التمرين - عرض المجموعات
+
+1. جرب العملية مرة أخرى، هذه المرة مع تحديد ثلاث مجموعات، واعرض المجموعات كمخطط مبعثر:
+
+ ```python
+ from sklearn.cluster import KMeans
+ kmeans = KMeans(n_clusters = 3)
+ kmeans.fit(X)
+ labels = kmeans.predict(X)
+ plt.scatter(df['popularity'],df['danceability'],c = labels)
+ plt.xlabel('popularity')
+ plt.ylabel('danceability')
+ plt.show()
+ ```
+
+1. تحقق من دقة النموذج:
+
+ ```python
+ labels = kmeans.labels_
+
+ correct_labels = sum(y == labels)
+
+ print("Result: %d out of %d samples were correctly labeled." % (correct_labels, y.size))
+
+ print('Accuracy score: {0:0.2f}'. format(correct_labels/float(y.size)))
+ ```
+
+ دقة هذا النموذج ليست جيدة جدًا، وشكل المجموعات يعطيك تلميحًا عن السبب.
+
+ 
+
+ هذه البيانات غير متوازنة جدًا، وغير مترابطة بشكل كافٍ، وهناك تباين كبير بين قيم الأعمدة لتجميعها بشكل جيد. في الواقع، المجموعات التي تتشكل ربما تكون متأثرة بشكل كبير أو منحازة بفعل الفئات الثلاثة التي حددناها أعلاه. كان ذلك جزءًا من عملية التعلم!
+
+ في توثيق Scikit-learn، يمكنك أن ترى أن نموذجًا مثل هذا، مع مجموعات غير محددة بشكل جيد، يعاني من مشكلة 'التباين':
+
+ 
+ > رسم توضيحي من Scikit-learn
+
+## التباين
+
+يُعرف التباين بأنه "متوسط الفروق المربعة عن المتوسط" [(المصدر)](https://www.mathsisfun.com/data/standard-deviation.html). في سياق مشكلة التجميع هذه، يشير إلى البيانات التي تميل أرقامها إلى التباعد بشكل كبير عن المتوسط.
+
+✅ هذه لحظة رائعة للتفكير في جميع الطرق التي يمكنك من خلالها تصحيح هذه المشكلة. هل تقوم بتعديل البيانات أكثر؟ استخدام أعمدة مختلفة؟ استخدام خوارزمية مختلفة؟ تلميح: جرب [تقييس بياناتك](https://www.mygreatlearning.com/blog/learning-data-science-with-k-means-clustering/) لتطبيعها واختبار أعمدة أخرى.
+
+> جرب هذا '[حاسبة التباين](https://www.calculatorsoup.com/calculators/statistics/variance-calculator.php)' لفهم المفهوم بشكل أكبر.
+
+---
+
+## 🚀تحدي
+
+اقضِ بعض الوقت مع هذا الدفتر، وعدّل المعلمات. هل يمكنك تحسين دقة النموذج عن طريق تنظيف البيانات أكثر (إزالة القيم الشاذة، على سبيل المثال)؟ يمكنك استخدام الأوزان لإعطاء وزن أكبر لعينات بيانات معينة. ماذا يمكنك أن تفعل أيضًا لإنشاء مجموعات أفضل؟
+
+تلميح: جرب تقييس بياناتك. هناك كود معلق في الدفتر يضيف التقييس القياسي لجعل أعمدة البيانات أكثر تشابهًا من حيث النطاق. ستجد أنه بينما ينخفض تقييم Silhouette، يصبح 'الانحناء' في الرسم البياني لطريقة Elbow أكثر سلاسة. يحدث هذا لأن ترك البيانات دون تقييس يسمح للبيانات ذات التباين الأقل بأن تحمل وزنًا أكبر. اقرأ المزيد عن هذه المشكلة [هنا](https://stats.stackexchange.com/questions/21222/are-mean-normalization-and-feature-scaling-needed-for-k-means-clustering/21226#21226).
+
+## [اختبار ما بعد المحاضرة](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/30/)
+
+## المراجعة والدراسة الذاتية
+
+ألقِ نظرة على محاكي K-Means [مثل هذا](https://user.ceng.metu.edu.tr/~akifakkus/courses/ceng574/k-means/). يمكنك استخدام هذه الأداة لتصور نقاط البيانات النموذجية وتحديد مراكزها. يمكنك تعديل عشوائية البيانات، وعدد المجموعات، وعدد المراكز. هل يساعدك هذا في فهم كيفية تجميع البيانات؟
+
+كما يمكنك الاطلاع على [هذه النشرة حول K-Means](https://stanford.edu/~cpiech/cs221/handouts/kmeans.html) من جامعة ستانفورد.
+
+## الواجب
+
+[جرّب طرق تجميع مختلفة](assignment.md)
+
+---
+
+**إخلاء المسؤولية**:
+تم ترجمة هذا المستند باستخدام خدمة الترجمة الآلية [Co-op Translator](https://github.com/Azure/co-op-translator). بينما نسعى لتحقيق الدقة، يرجى العلم أن الترجمات الآلية قد تحتوي على أخطاء أو معلومات غير دقيقة. يجب اعتبار المستند الأصلي بلغته الأصلية هو المصدر الموثوق. للحصول على معلومات حساسة أو هامة، يُوصى بالاستعانة بترجمة بشرية احترافية. نحن غير مسؤولين عن أي سوء فهم أو تفسيرات خاطئة ناتجة عن استخدام هذه الترجمة.
\ No newline at end of file
diff --git a/translations/ar/5-Clustering/2-K-Means/assignment.md b/translations/ar/5-Clustering/2-K-Means/assignment.md
new file mode 100644
index 000000000..c1ff4bb5f
--- /dev/null
+++ b/translations/ar/5-Clustering/2-K-Means/assignment.md
@@ -0,0 +1,25 @@
+
+# جرب طرقًا مختلفة للتجميع
+
+## التعليمات
+
+في هذا الدرس، تعلمت عن التجميع باستخدام K-Means. أحيانًا لا يكون K-Means مناسبًا لبياناتك. قم بإنشاء دفتر ملاحظات باستخدام بيانات إما من هذه الدروس أو من مصدر آخر (اذكر المصدر) وأظهر طريقة تجميع مختلفة لا تستخدم K-Means. ماذا تعلمت؟
+
+## المعايير
+
+| المعايير | مثالي | مقبول | يحتاج إلى تحسين |
+| -------- | -------------------------------------------------------------- | ----------------------------------------------------------------- | ---------------------------- |
+| | يتم تقديم دفتر ملاحظات يحتوي على نموذج تجميع موثق جيدًا | يتم تقديم دفتر ملاحظات بدون توثيق جيد و/أو غير مكتمل | يتم تقديم عمل غير مكتمل |
+
+---
+
+**إخلاء المسؤولية**:
+تمت ترجمة هذا المستند باستخدام خدمة الترجمة الآلية [Co-op Translator](https://github.com/Azure/co-op-translator). بينما نسعى لتحقيق الدقة، يرجى العلم أن الترجمات الآلية قد تحتوي على أخطاء أو معلومات غير دقيقة. يجب اعتبار المستند الأصلي بلغته الأصلية هو المصدر الموثوق. للحصول على معلومات حساسة أو هامة، يُوصى بالاستعانة بترجمة بشرية احترافية. نحن غير مسؤولين عن أي سوء فهم أو تفسيرات خاطئة تنشأ عن استخدام هذه الترجمة.
\ No newline at end of file
diff --git a/translations/ar/5-Clustering/2-K-Means/notebook.ipynb b/translations/ar/5-Clustering/2-K-Means/notebook.ipynb
new file mode 100644
index 000000000..eb8edfb6d
--- /dev/null
+++ b/translations/ar/5-Clustering/2-K-Means/notebook.ipynb
@@ -0,0 +1,233 @@
+{
+ "metadata": {
+ "language_info": {
+ "codemirror_mode": {
+ "name": "ipython",
+ "version": 3
+ },
+ "file_extension": ".py",
+ "mimetype": "text/x-python",
+ "name": "python",
+ "nbconvert_exporter": "python",
+ "pygments_lexer": "ipython3",
+ "version": "3.7.0"
+ },
+ "orig_nbformat": 2,
+ "kernelspec": {
+ "name": "python37364bit8d3b438fb5fc4430a93ac2cb74d693a7",
+ "display_name": "Python 3.7.0 64-bit ('3.7')"
+ },
+ "metadata": {
+ "interpreter": {
+ "hash": "70b38d7a306a849643e446cd70466270a13445e5987dfa1344ef2b127438fa4d"
+ }
+ },
+ "coopTranslator": {
+ "original_hash": "3e5c8ab363e8d88f566d4365efc7e0bd",
+ "translation_date": "2025-08-29T15:15:00+00:00",
+ "source_file": "5-Clustering/2-K-Means/notebook.ipynb",
+ "language_code": "ar"
+ }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 2,
+ "cells": [
+ {
+ "source": [
+ "# تحليل للموسيقى النيجيرية المستخرجة من سبوتيفاي\n"
+ ],
+ "cell_type": "markdown",
+ "metadata": {}
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 5,
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "name": "stdout",
+ "text": [
+ "Requirement already satisfied: seaborn in /Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages (0.11.1)\n",
+ "Requirement already satisfied: numpy>=1.15 in /Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages (from seaborn) (1.19.2)\n",
+ "Requirement already satisfied: pandas>=0.23 in /Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages (from seaborn) (1.1.2)\n",
+ "Requirement already satisfied: scipy>=1.0 in /Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages (from seaborn) (1.4.1)\n",
+ "Requirement already satisfied: matplotlib>=2.2 in /Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages (from seaborn) (3.1.0)\n",
+ "Requirement already satisfied: python-dateutil>=2.7.3 in /Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages (from pandas>=0.23->seaborn) (2.8.0)\n",
+ "Requirement already satisfied: pytz>=2017.2 in /Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages (from pandas>=0.23->seaborn) (2019.1)\n",
+ "Requirement already satisfied: cycler>=0.10 in /Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages (from matplotlib>=2.2->seaborn) (0.10.0)\n",
+ "Requirement already satisfied: kiwisolver>=1.0.1 in /Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages (from matplotlib>=2.2->seaborn) (1.1.0)\n",
+ "Requirement already satisfied: pyparsing!=2.0.4,!=2.1.2,!=2.1.6,>=2.0.1 in /Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages (from matplotlib>=2.2->seaborn) (2.4.0)\n",
+ "Requirement already satisfied: six>=1.5 in /Users/jenlooper/Library/Python/3.7/lib/python/site-packages (from python-dateutil>=2.7.3->pandas>=0.23->seaborn) (1.12.0)\n",
+ "Requirement already satisfied: setuptools in /Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages (from kiwisolver>=1.0.1->matplotlib>=2.2->seaborn) (45.1.0)\n",
+ "\u001b[33mWARNING: You are using pip version 20.2.3; however, version 21.1.2 is available.\n",
+ "You should consider upgrading via the '/Library/Frameworks/Python.framework/Versions/3.7/bin/python3.7 -m pip install --upgrade pip' command.\u001b[0m\n",
+ "Note: you may need to restart the kernel to use updated packages.\n"
+ ]
+ }
+ ],
+ "source": [
+ "pip install seaborn"
+ ]
+ },
+ {
+ "source": [
+ "ابدأ من حيث انتهينا في الدرس الأخير، مع استيراد البيانات وتصفيتها.\n"
+ ],
+ "cell_type": "markdown",
+ "metadata": {}
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 6,
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "execute_result",
+ "data": {
+ "text/plain": [
+ " name album \\\n",
+ "0 Sparky Mandy & The Jungle \n",
+ "1 shuga rush EVERYTHING YOU HEARD IS TRUE \n",
+ "2 LITT! LITT! \n",
+ "3 Confident / Feeling Cool Enjoy Your Life \n",
+ "4 wanted you rare. \n",
+ "\n",
+ " artist artist_top_genre release_date length popularity \\\n",
+ "0 Cruel Santino alternative r&b 2019 144000 48 \n",
+ "1 Odunsi (The Engine) afropop 2020 89488 30 \n",
+ "2 AYLØ indie r&b 2018 207758 40 \n",
+ "3 Lady Donli nigerian pop 2019 175135 14 \n",
+ "4 Odunsi (The Engine) afropop 2018 152049 25 \n",
+ "\n",
+ " danceability acousticness energy instrumentalness liveness loudness \\\n",
+ "0 0.666 0.8510 0.420 0.534000 0.1100 -6.699 \n",
+ "1 0.710 0.0822 0.683 0.000169 0.1010 -5.640 \n",
+ "2 0.836 0.2720 0.564 0.000537 0.1100 -7.127 \n",
+ "3 0.894 0.7980 0.611 0.000187 0.0964 -4.961 \n",
+ "4 0.702 0.1160 0.833 0.910000 0.3480 -6.044 \n",
+ "\n",
+ " speechiness tempo time_signature \n",
+ "0 0.0829 133.015 5 \n",
+ "1 0.3600 129.993 3 \n",
+ "2 0.0424 130.005 4 \n",
+ "3 0.1130 111.087 4 \n",
+ "4 0.0447 105.115 4 "
+ ],
+ "text/html": "
"
+ },
+ "metadata": {},
+ "execution_count": 8
+ }
+ ],
+ "source": [
+ "df.head()"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "\n---\n\n**إخلاء المسؤولية**: \nتمت ترجمة هذا المستند باستخدام خدمة الترجمة الآلية [Co-op Translator](https://github.com/Azure/co-op-translator). بينما نسعى لتحقيق الدقة، يرجى العلم أن الترجمات الآلية قد تحتوي على أخطاء أو معلومات غير دقيقة. يجب اعتبار المستند الأصلي بلغته الأصلية هو المصدر الموثوق. للحصول على معلومات حساسة أو هامة، يُوصى بالاستعانة بترجمة بشرية احترافية. نحن غير مسؤولين عن أي سوء فهم أو تفسيرات خاطئة تنشأ عن استخدام هذه الترجمة.\n"
+ ]
+ }
+ ]
+}
\ No newline at end of file
diff --git a/translations/ar/5-Clustering/2-K-Means/solution/Julia/README.md b/translations/ar/5-Clustering/2-K-Means/solution/Julia/README.md
new file mode 100644
index 000000000..18c42ff41
--- /dev/null
+++ b/translations/ar/5-Clustering/2-K-Means/solution/Julia/README.md
@@ -0,0 +1,15 @@
+
+هذا عنصر نائب مؤقت
+
+---
+
+**إخلاء المسؤولية**:
+تمت ترجمة هذا المستند باستخدام خدمة الترجمة الآلية [Co-op Translator](https://github.com/Azure/co-op-translator). بينما نسعى لتحقيق الدقة، يرجى العلم أن الترجمات الآلية قد تحتوي على أخطاء أو معلومات غير دقيقة. يجب اعتبار المستند الأصلي بلغته الأصلية هو المصدر الموثوق. للحصول على معلومات حساسة أو هامة، يُوصى بالاستعانة بترجمة بشرية احترافية. نحن غير مسؤولين عن أي سوء فهم أو تفسيرات خاطئة تنشأ عن استخدام هذه الترجمة.
\ No newline at end of file
diff --git a/translations/ar/5-Clustering/2-K-Means/solution/R/lesson_15-R.ipynb b/translations/ar/5-Clustering/2-K-Means/solution/R/lesson_15-R.ipynb
new file mode 100644
index 000000000..2a5271f6d
--- /dev/null
+++ b/translations/ar/5-Clustering/2-K-Means/solution/R/lesson_15-R.ipynb
@@ -0,0 +1,639 @@
+{
+ "nbformat": 4,
+ "nbformat_minor": 0,
+ "metadata": {
+ "anaconda-cloud": "",
+ "kernelspec": {
+ "display_name": "R",
+ "language": "R",
+ "name": "ir"
+ },
+ "language_info": {
+ "codemirror_mode": "r",
+ "file_extension": ".r",
+ "mimetype": "text/x-r-source",
+ "name": "R",
+ "pygments_lexer": "r",
+ "version": "3.4.1"
+ },
+ "colab": {
+ "name": "lesson_14.ipynb",
+ "provenance": [],
+ "collapsed_sections": [],
+ "toc_visible": true
+ },
+ "coopTranslator": {
+ "original_hash": "ad65fb4aad0a156b42216e4929f490fc",
+ "translation_date": "2025-08-29T15:18:04+00:00",
+ "source_file": "5-Clustering/2-K-Means/solution/R/lesson_15-R.ipynb",
+ "language_code": "ar"
+ }
+ },
+ "cells": [
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "GULATlQXLXyR"
+ },
+ "source": [
+ "## استكشاف التجميع باستخدام K-Means في R ومبادئ البيانات المنظمة\n",
+ "\n",
+ "### [**اختبار ما قبل المحاضرة**](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/29/)\n",
+ "\n",
+ "في هذا الدرس، ستتعلم كيفية إنشاء مجموعات باستخدام حزمة Tidymodels وحزم أخرى في نظام R البيئي (سنطلق عليها الأصدقاء 🧑🤝🧑)، بالإضافة إلى مجموعة بيانات الموسيقى النيجيرية التي قمت باستيرادها سابقًا. سنغطي أساسيات K-Means للتجميع. تذكر أنه، كما تعلمت في الدرس السابق، هناك العديد من الطرق للعمل مع المجموعات والطريقة التي تستخدمها تعتمد على بياناتك. سنجرب K-Means لأنها التقنية الأكثر شيوعًا للتجميع. لنبدأ!\n",
+ "\n",
+ "المصطلحات التي ستتعرف عليها:\n",
+ "\n",
+ "- تقييم Silhouette\n",
+ "\n",
+ "- طريقة Elbow\n",
+ "\n",
+ "- القصور الذاتي (Inertia)\n",
+ "\n",
+ "- التباين (Variance)\n",
+ "\n",
+ "### **المقدمة**\n",
+ "\n",
+ "[التجميع باستخدام K-Means](https://wikipedia.org/wiki/K-means_clustering) هو طريقة مشتقة من مجال معالجة الإشارات. تُستخدم لتقسيم وتصنيف مجموعات البيانات إلى `k مجموعات` بناءً على التشابه في خصائصها.\n",
+ "\n",
+ "يمكن تصور المجموعات كـ [مخططات فورونوي](https://wikipedia.org/wiki/Voronoi_diagram)، التي تتضمن نقطة (أو \"بذرة\") ومنطقتها المقابلة.\n",
+ "\n",
+ "
\n",
+ " \n",
+ " رسم توضيحي بواسطة Jen Looper\n",
+ "\n",
+ "خطوات التجميع باستخدام K-Means هي كالتالي:\n",
+ "\n",
+ "1. يبدأ عالم البيانات بتحديد عدد المجموعات المراد إنشاؤها.\n",
+ "\n",
+ "2. بعد ذلك، يختار الخوارزم عشوائيًا K ملاحظات من مجموعة البيانات لتكون بمثابة المراكز الأولية للمجموعات (أي المراكز).\n",
+ "\n",
+ "3. يتم بعد ذلك تعيين كل ملاحظة متبقية إلى أقرب مركز.\n",
+ "\n",
+ "4. يتم حساب المتوسط الجديد لكل مجموعة ويتم نقل المركز إلى هذا المتوسط.\n",
+ "\n",
+ "5. الآن وبعد إعادة حساب المراكز، يتم التحقق مرة أخرى من كل ملاحظة لمعرفة ما إذا كانت قد تكون أقرب إلى مجموعة مختلفة. يتم إعادة تعيين جميع العناصر باستخدام متوسطات المجموعات المحدثة. يتم تكرار خطوات تعيين المجموعات وتحديث المراكز بشكل تكراري حتى تتوقف تعيينات المجموعات عن التغيير (أي عند تحقيق التقارب). عادةً ما تنتهي الخوارزمية عندما ينتج عن كل تكرار جديد حركة ضئيلة للمراكز وتصبح المجموعات ثابتة.\n",
+ "\n",
+ "
\n",
+ "\n",
+ "> لاحظ أنه بسبب العشوائية في اختيار الملاحظات الأولية k المستخدمة كمراكز بداية، قد نحصل على نتائج مختلفة قليلاً في كل مرة نطبق فيها الإجراء. لهذا السبب، تستخدم معظم الخوارزميات عدة *بدايات عشوائية* وتختار التكرار الذي يحتوي على أقل WCSS. لذلك، يُوصى بشدة دائمًا بتشغيل K-Means مع عدة قيم لـ *nstart* لتجنب *الوقوع في الحد الأدنى المحلي غير المرغوب فيه.*\n",
+ "\n",
+ "
\n",
+ "\n",
+ "توضح هذه الرسوم المتحركة القصيرة باستخدام [الأعمال الفنية](https://github.com/allisonhorst/stats-illustrations) لـ Allison Horst عملية التجميع:\n",
+ "\n",
+ "
\n",
+ " \n",
+ " عمل فني بواسطة @allison_horst\n",
+ "\n",
+ "سؤال أساسي يطرح نفسه في التجميع: كيف تعرف عدد المجموعات التي يجب تقسيم بياناتك إليها؟ أحد عيوب استخدام K-Means هو أنك ستحتاج إلى تحديد `k`، أي عدد `المراكز`. لحسن الحظ، تساعد طريقة `elbow` في تقدير قيمة بداية جيدة لـ `k`. ستجربها بعد قليل.\n",
+ "\n",
+ "### \n",
+ "\n",
+ "**المتطلبات الأساسية**\n",
+ "\n",
+ "سنبدأ من حيث توقفنا في [الدرس السابق](https://github.com/microsoft/ML-For-Beginners/blob/main/5-Clustering/1-Visualize/solution/R/lesson_14-R.ipynb)، حيث قمنا بتحليل مجموعة البيانات، وإنشاء العديد من التصورات، وتصفيتها إلى الملاحظات ذات الأهمية. تأكد من الاطلاع عليه!\n",
+ "\n",
+ "سنحتاج إلى بعض الحزم لإكمال هذا الدرس. يمكنك تثبيتها باستخدام: `install.packages(c('tidyverse', 'tidymodels', 'cluster', 'summarytools', 'plotly', 'paletteer', 'factoextra', 'patchwork'))`\n",
+ "\n",
+ "بدلاً من ذلك، يقوم النص أدناه بالتحقق مما إذا كانت الحزم المطلوبة لإكمال هذا الدرس مثبتة لديك، ويقوم بتثبيتها إذا كانت مفقودة.\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "metadata": {
+ "id": "ah_tBi58LXyi"
+ },
+ "source": [
+ "suppressWarnings(if(!require(\"pacman\")) install.packages(\"pacman\"))\n",
+ "\n",
+ "pacman::p_load('tidyverse', 'tidymodels', 'cluster', 'summarytools', 'plotly', 'paletteer', 'factoextra', 'patchwork')\n"
+ ],
+ "execution_count": null,
+ "outputs": []
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "7e--UCUTLXym"
+ },
+ "source": [
+ "لننطلق بسرعة!\n",
+ "\n",
+ "## 1. رقصة مع البيانات: حصر الأنواع الموسيقية في الثلاثة الأكثر شهرة\n",
+ "\n",
+ "هذا تذكير بما قمنا به في الدرس السابق. لنقم بتقطيع وتحليل بعض البيانات!\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "metadata": {
+ "id": "Ycamx7GGLXyn"
+ },
+ "source": [
+ "# Load the core tidyverse and make it available in your current R session\n",
+ "library(tidyverse)\n",
+ "\n",
+ "# Import the data into a tibble\n",
+ "df <- read_csv(file = \"https://raw.githubusercontent.com/microsoft/ML-For-Beginners/main/5-Clustering/data/nigerian-songs.csv\", show_col_types = FALSE)\n",
+ "\n",
+ "# Narrow down to top 3 popular genres\n",
+ "nigerian_songs <- df %>% \n",
+ " # Concentrate on top 3 genres\n",
+ " filter(artist_top_genre %in% c(\"afro dancehall\", \"afropop\",\"nigerian pop\")) %>% \n",
+ " # Remove unclassified observations\n",
+ " filter(popularity != 0)\n",
+ "\n",
+ "\n",
+ "\n",
+ "# Visualize popular genres using bar plots\n",
+ "theme_set(theme_light())\n",
+ "nigerian_songs %>%\n",
+ " count(artist_top_genre) %>%\n",
+ " ggplot(mapping = aes(x = artist_top_genre, y = n,\n",
+ " fill = artist_top_genre)) +\n",
+ " geom_col(alpha = 0.8) +\n",
+ " paletteer::scale_fill_paletteer_d(\"ggsci::category10_d3\") +\n",
+ " ggtitle(\"Top genres\") +\n",
+ " theme(plot.title = element_text(hjust = 0.5))\n"
+ ],
+ "execution_count": null,
+ "outputs": []
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "b5h5zmkPLXyp"
+ },
+ "source": [
+ "🤩 هذا سار بشكل جيد!\n",
+ "\n",
+ "## 2. المزيد من استكشاف البيانات.\n",
+ "\n",
+ "ما مدى نظافة هذه البيانات؟ دعونا نتحقق من القيم الشاذة باستخدام مخططات الصندوق. سنركز على الأعمدة الرقمية التي تحتوي على عدد أقل من القيم الشاذة (على الرغم من أنه يمكنك تنظيف القيم الشاذة). يمكن لمخططات الصندوق أن تعرض نطاق البيانات وستساعد في اختيار الأعمدة التي يمكن استخدامها. لاحظ أن مخططات الصندوق لا تعرض التباين، وهو عنصر مهم للحصول على بيانات قابلة للتجميع بشكل جيد. يرجى الاطلاع على [هذا النقاش](https://stats.stackexchange.com/questions/91536/deduce-variance-from-boxplot) لمزيد من القراءة.\n",
+ "\n",
+ "تُستخدم [مخططات الصندوق](https://en.wikipedia.org/wiki/Box_plot) لتمثيل توزيع البيانات الرقمية بشكل رسومي، لذا دعونا نبدأ بـ *اختيار* جميع الأعمدة الرقمية إلى جانب الأنواع الموسيقية الشهيرة.\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "metadata": {
+ "id": "HhNreJKLLXyq"
+ },
+ "source": [
+ "# Select top genre column and all other numeric columns\n",
+ "df_numeric <- nigerian_songs %>% \n",
+ " select(artist_top_genre, where(is.numeric)) \n",
+ "\n",
+ "# Display the data\n",
+ "df_numeric %>% \n",
+ " slice_head(n = 5)\n"
+ ],
+ "execution_count": null,
+ "outputs": []
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "uYXrwJRaLXyq"
+ },
+ "source": [
+ "شاهد كيف تجعل أداة التحديد `where` هذا الأمر سهلاً 💁؟ استكشف وظائف أخرى مشابهة [هنا](https://tidyselect.r-lib.org/).\n",
+ "\n",
+ "بما أننا سنقوم بإنشاء مخطط صندوقي لكل خاصية رقمية ونرغب في تجنب استخدام الحلقات، دعونا نعيد تنسيق بياناتنا إلى صيغة *أطول* تتيح لنا الاستفادة من `facets` - وهي رسوم فرعية تعرض كل منها مجموعة فرعية من البيانات.\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "metadata": {
+ "id": "gd5bR3f8LXys"
+ },
+ "source": [
+ "# Pivot data from wide to long\n",
+ "df_numeric_long <- df_numeric %>% \n",
+ " pivot_longer(!artist_top_genre, names_to = \"feature_names\", values_to = \"values\") \n",
+ "\n",
+ "# Print out data\n",
+ "df_numeric_long %>% \n",
+ " slice_head(n = 15)\n"
+ ],
+ "execution_count": null,
+ "outputs": []
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "-7tE1swnLXyv"
+ },
+ "source": [
+ "أطول بكثير! حان الوقت الآن لبعض `ggplots`! إذاً، ما هو `geom` الذي سنستخدمه؟\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "metadata": {
+ "id": "r88bIsyuLXyy"
+ },
+ "source": [
+ "# Make a box plot\n",
+ "df_numeric_long %>% \n",
+ " ggplot(mapping = aes(x = feature_names, y = values, fill = feature_names)) +\n",
+ " geom_boxplot() +\n",
+ " facet_wrap(~ feature_names, ncol = 4, scales = \"free\") +\n",
+ " theme(legend.position = \"none\")\n"
+ ],
+ "execution_count": null,
+ "outputs": []
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "EYVyKIUELXyz"
+ },
+ "source": [
+ "!سهل جدًا\n",
+ "\n",
+ "الآن يمكننا أن نلاحظ أن هذه البيانات تحتوي على بعض الضوضاء: من خلال مراقبة كل عمود كـ boxplot، يمكنك رؤية القيم الشاذة. يمكنك مراجعة مجموعة البيانات وإزالة هذه القيم الشاذة، ولكن ذلك سيجعل البيانات محدودة جدًا.\n",
+ "\n",
+ "في الوقت الحالي، دعونا نختار الأعمدة التي سنستخدمها في تمرين التجميع الخاص بنا. لنختار الأعمدة الرقمية ذات النطاقات المتشابهة. يمكننا ترميز `artist_top_genre` كرقم، ولكن سنقوم بتجاهله في الوقت الحالي.\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "metadata": {
+ "id": "-wkpINyZLXy0"
+ },
+ "source": [
+ "# Select variables with similar ranges\n",
+ "df_numeric_select <- df_numeric %>% \n",
+ " select(popularity, danceability, acousticness, loudness, energy) \n",
+ "\n",
+ "# Normalize data\n",
+ "# df_numeric_select <- scale(df_numeric_select)\n"
+ ],
+ "execution_count": null,
+ "outputs": []
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "D7dLzgpqLXy1"
+ },
+ "source": [
+ "## 3. حساب التجميع باستخدام k-means في R\n",
+ "\n",
+ "يمكننا حساب k-means في R باستخدام الدالة المدمجة `kmeans`. راجع `help(\"kmeans()\")`. تقبل دالة `kmeans()` إطار بيانات يحتوي على أعمدة رقمية فقط كوسيطة رئيسية.\n",
+ "\n",
+ "الخطوة الأولى عند استخدام التجميع باستخدام k-means هي تحديد عدد المجموعات (k) التي سيتم إنشاؤها في الحل النهائي. نحن نعلم أن هناك 3 أنواع من الأغاني التي استخرجناها من مجموعة البيانات، لذا دعونا نجرب 3:\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "metadata": {
+ "id": "uC4EQ5w7LXy5"
+ },
+ "source": [
+ "set.seed(2056)\n",
+ "# Kmeans clustering for 3 clusters\n",
+ "kclust <- kmeans(\n",
+ " df_numeric_select,\n",
+ " # Specify the number of clusters\n",
+ " centers = 3,\n",
+ " # How many random initial configurations\n",
+ " nstart = 25\n",
+ ")\n",
+ "\n",
+ "# Display clustering object\n",
+ "kclust\n"
+ ],
+ "execution_count": null,
+ "outputs": []
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "hzfhscWrLXy-"
+ },
+ "source": [
+ "يحتوي كائن kmeans على عدة معلومات موضحة بشكل جيد في `help(\"kmeans()\")`. في الوقت الحالي، دعونا نركز على بعض النقاط. نلاحظ أن البيانات قد تم تقسيمها إلى 3 مجموعات بأحجام 65، 110، 111. كما يحتوي الناتج على مراكز المجموعات (المتوسطات) للمجموعات الثلاث عبر المتغيرات الخمسة.\n",
+ "\n",
+ "يمثل متجه التجميع تعيين المجموعة لكل ملاحظة. دعونا نستخدم وظيفة `augment` لإضافة تعيين المجموعة إلى مجموعة البيانات الأصلية.\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "metadata": {
+ "id": "0XwwpFGQLXy_"
+ },
+ "source": [
+ "# Add predicted cluster assignment to data set\n",
+ "augment(kclust, df_numeric_select) %>% \n",
+ " relocate(.cluster) %>% \n",
+ " slice_head(n = 10)\n"
+ ],
+ "execution_count": null,
+ "outputs": []
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "NXIVXXACLXzA"
+ },
+ "source": [
+ "لقد قمنا للتو بتقسيم مجموعة البيانات الخاصة بنا إلى مجموعة من 3 مجموعات. إذًا، ما مدى جودة التجميع الذي قمنا به 🤷؟ دعونا نلقي نظرة على `Silhouette score`.\n",
+ "\n",
+ "### **درجة Silhouette**\n",
+ "\n",
+ "[تحليل Silhouette](https://en.wikipedia.org/wiki/Silhouette_(clustering)) يمكن استخدامه لدراسة المسافة الفاصلة بين المجموعات الناتجة. تتراوح هذه الدرجة بين -1 و 1، وإذا كانت الدرجة قريبة من 1، فإن المجموعة تكون كثيفة ومفصولة بشكل جيد عن المجموعات الأخرى. أما القيمة القريبة من 0 فتشير إلى مجموعات متداخلة مع عينات قريبة جدًا من حدود القرار للمجموعات المجاورة. [المصدر](https://dzone.com/articles/kmeans-silhouette-score-explained-with-python-exam).\n",
+ "\n",
+ "طريقة Silhouette المتوسطة تحسب متوسط Silhouette للملاحظات لقيم مختلفة من *k*. تشير درجة Silhouette المتوسطة العالية إلى تجميع جيد.\n",
+ "\n",
+ "وظيفة `silhouette` في حزمة التجميع تُستخدم لحساب عرض Silhouette المتوسط.\n",
+ "\n",
+ "> يمكن حساب Silhouette باستخدام أي [مسافة](https://en.wikipedia.org/wiki/Distance \"Distance\") مثل [المسافة الإقليدية](https://en.wikipedia.org/wiki/Euclidean_distance \"Euclidean distance\") أو [مسافة مانهاتن](https://en.wikipedia.org/wiki/Manhattan_distance \"Manhattan distance\") التي ناقشناها في [الدرس السابق](https://github.com/microsoft/ML-For-Beginners/blob/main/5-Clustering/1-Visualize/solution/R/lesson_14-R.ipynb).\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "metadata": {
+ "id": "Jn0McL28LXzB"
+ },
+ "source": [
+ "# Load cluster package\n",
+ "library(cluster)\n",
+ "\n",
+ "# Compute average silhouette score\n",
+ "ss <- silhouette(kclust$cluster,\n",
+ " # Compute euclidean distance\n",
+ " dist = dist(df_numeric_select))\n",
+ "mean(ss[, 3])\n"
+ ],
+ "execution_count": null,
+ "outputs": []
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "QyQRn97nLXzC"
+ },
+ "source": [
+ "نتيجتنا هي **.549**، مما يعني أنها تقع في المنتصف. يشير هذا إلى أن بياناتنا ليست مناسبة بشكل خاص لهذا النوع من التجميع. دعونا نرى ما إذا كان بإمكاننا تأكيد هذا الحدس بصريًا. توفر [حزمة factoextra](https://rpkgs.datanovia.com/factoextra/index.html) وظائف (`fviz_cluster()`) لتصور التجميع.\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "metadata": {
+ "id": "7a6Km1_FLXzD"
+ },
+ "source": [
+ "library(factoextra)\n",
+ "\n",
+ "# Visualize clustering results\n",
+ "fviz_cluster(kclust, df_numeric_select)\n"
+ ],
+ "execution_count": null,
+ "outputs": []
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "IBwCWt-0LXzD"
+ },
+ "source": [
+ "يشير التداخل في المجموعات إلى أن بياناتنا ليست مناسبة تمامًا لهذا النوع من التجميع، ولكن دعونا نستمر.\n",
+ "\n",
+ "## 4. تحديد العدد الأمثل للمجموعات\n",
+ "\n",
+ "سؤال أساسي غالبًا ما يطرح في تجميع K-Means هو - بدون وجود تسميات معروفة للفئات، كيف تعرف عدد المجموعات التي يجب تقسيم بياناتك إليها؟\n",
+ "\n",
+ "إحدى الطرق التي يمكننا تجربتها لمعرفة ذلك هي استخدام عينة من البيانات لـ `إنشاء سلسلة من نماذج التجميع` مع زيادة تدريجية في عدد المجموعات (على سبيل المثال من 1 إلى 10)، وتقييم مقاييس التجميع مثل **مقياس Silhouette.**\n",
+ "\n",
+ "دعونا نحدد العدد الأمثل للمجموعات من خلال حساب خوارزمية التجميع لقيم مختلفة لـ *k* وتقييم **مجموع المربعات داخل المجموعات** (WCSS). يقيس مجموع المربعات داخل المجموعات (WCSS) مدى تماسك التجميع، ونريد أن يكون صغيرًا قدر الإمكان، حيث تشير القيم الأقل إلى أن نقاط البيانات أقرب إلى بعضها البعض.\n",
+ "\n",
+ "دعونا نستكشف تأثير الخيارات المختلفة لـ `k`، من 1 إلى 10، على هذا التجميع.\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "metadata": {
+ "id": "hSeIiylDLXzE"
+ },
+ "source": [
+ "# Create a series of clustering models\n",
+ "kclusts <- tibble(k = 1:10) %>% \n",
+ " # Perform kmeans clustering for 1,2,3 ... ,10 clusters\n",
+ " mutate(model = map(k, ~ kmeans(df_numeric_select, centers = .x, nstart = 25)),\n",
+ " # Farm out clustering metrics eg WCSS\n",
+ " glanced = map(model, ~ glance(.x))) %>% \n",
+ " unnest(cols = glanced)\n",
+ " \n",
+ "\n",
+ "# View clustering rsulsts\n",
+ "kclusts\n"
+ ],
+ "execution_count": null,
+ "outputs": []
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "m7rS2U1eLXzE"
+ },
+ "source": [
+ "الآن بعد أن حصلنا على مجموع مربعات المسافات داخل المجموعات (tot.withinss) لكل خوارزمية تجميع مع المركز *k*، نستخدم [طريقة الكوع](https://en.wikipedia.org/wiki/Elbow_method_(clustering)) لتحديد العدد الأمثل للمجموعات. تتضمن الطريقة رسم WCSS كدالة لعدد المجموعات، واختيار [نقطة الكوع في المنحنى](https://en.wikipedia.org/wiki/Elbow_of_the_curve \"Elbow of the curve\") كعدد المجموعات التي سيتم استخدامها.\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "metadata": {
+ "id": "o_DjHGItLXzF"
+ },
+ "source": [
+ "set.seed(2056)\n",
+ "# Use elbow method to determine optimum number of clusters\n",
+ "kclusts %>% \n",
+ " ggplot(mapping = aes(x = k, y = tot.withinss)) +\n",
+ " geom_line(size = 1.2, alpha = 0.8, color = \"#FF7F0EFF\") +\n",
+ " geom_point(size = 2, color = \"#FF7F0EFF\")\n"
+ ],
+ "execution_count": null,
+ "outputs": []
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "pLYyt5XSLXzG"
+ },
+ "source": [
+ "يُظهر الرسم البياني انخفاضًا كبيرًا في WCSS (مما يعني زيادة *التماسك*) مع زيادة عدد المجموعات من واحدة إلى اثنتين، وانخفاضًا ملحوظًا آخر من اثنتين إلى ثلاث مجموعات. بعد ذلك، يصبح الانخفاض أقل وضوحًا، مما يؤدي إلى ظهور ما يُعرف بـ `elbow` 💪 في الرسم البياني عند حوالي ثلاث مجموعات. هذه إشارة جيدة على وجود مجموعتين إلى ثلاث مجموعات منفصلة بشكل معقول من نقاط البيانات.\n",
+ "\n",
+ "يمكننا الآن المضي قدمًا واستخراج نموذج التجميع حيث `k = 3`:\n",
+ "\n",
+ "> `pull()`: تُستخدم لاستخراج عمود واحد\n",
+ ">\n",
+ "> `pluck()`: تُستخدم لفهرسة هياكل البيانات مثل القوائم\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "metadata": {
+ "id": "JP_JPKBILXzG"
+ },
+ "source": [
+ "# Extract k = 3 clustering\n",
+ "final_kmeans <- kclusts %>% \n",
+ " filter(k == 3) %>% \n",
+ " pull(model) %>% \n",
+ " pluck(1)\n",
+ "\n",
+ "\n",
+ "final_kmeans\n"
+ ],
+ "execution_count": null,
+ "outputs": []
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "l_PDTu8tLXzI"
+ },
+ "source": [
+ "رائع! لنقم الآن بعرض المجموعات التي حصلنا عليها. هل ترغب في إضافة بعض التفاعلية باستخدام `plotly`؟\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "metadata": {
+ "id": "dNcleFe-LXzJ"
+ },
+ "source": [
+ "# Add predicted cluster assignment to data set\n",
+ "results <- augment(final_kmeans, df_numeric_select) %>% \n",
+ " bind_cols(df_numeric %>% select(artist_top_genre)) \n",
+ "\n",
+ "# Plot cluster assignments\n",
+ "clust_plt <- results %>% \n",
+ " ggplot(mapping = aes(x = popularity, y = danceability, color = .cluster, shape = artist_top_genre)) +\n",
+ " geom_point(size = 2, alpha = 0.8) +\n",
+ " paletteer::scale_color_paletteer_d(\"ggthemes::Tableau_10\")\n",
+ "\n",
+ "ggplotly(clust_plt)\n"
+ ],
+ "execution_count": null,
+ "outputs": []
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "6JUM_51VLXzK"
+ },
+ "source": [
+ "ربما كنا نتوقع أن يكون لكل مجموعة (ممثلة بألوان مختلفة) أنواع مميزة (ممثلة بأشكال مختلفة).\n",
+ "\n",
+ "لنلقِ نظرة على دقة النموذج.\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "metadata": {
+ "id": "HdIMUGq7LXzL"
+ },
+ "source": [
+ "# Assign genres to predefined integers\n",
+ "label_count <- results %>% \n",
+ " group_by(artist_top_genre) %>% \n",
+ " mutate(id = cur_group_id()) %>% \n",
+ " ungroup() %>% \n",
+ " summarise(correct_labels = sum(.cluster == id))\n",
+ "\n",
+ "\n",
+ "# Print results \n",
+ "cat(\"Result:\", label_count$correct_labels, \"out of\", nrow(results), \"samples were correctly labeled.\")\n",
+ "\n",
+ "cat(\"\\nAccuracy score:\", label_count$correct_labels/nrow(results))\n"
+ ],
+ "execution_count": null,
+ "outputs": []
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "C50wvaAOLXzM"
+ },
+ "source": [
+ "دقة هذا النموذج ليست سيئة، لكنها ليست ممتازة أيضًا. قد يكون السبب أن البيانات لا تناسب بشكل جيد خوارزمية K-Means Clustering. هذه البيانات غير متوازنة بشكل كبير، قليلة الترابط، وهناك تباين كبير بين قيم الأعمدة مما يجعل عملية التجميع صعبة. في الواقع، من المحتمل أن تكون المجموعات التي تتشكل متأثرة بشكل كبير أو منحازة بفعل الفئات الثلاثة التي قمنا بتعريفها أعلاه.\n",
+ "\n",
+ "ومع ذلك، كانت هذه تجربة تعليمية رائعة!\n",
+ "\n",
+ "في توثيق Scikit-learn، يمكنك أن ترى أن نموذجًا مثل هذا، حيث المجموعات ليست محددة بوضوح، يعاني من مشكلة \"التباين\":\n",
+ "\n",
+ "
\n",
+ " \n",
+ " رسم توضيحي من Scikit-learn\n",
+ "\n",
+ "\n",
+ "\n",
+ "## **التباين**\n",
+ "\n",
+ "يُعرف التباين بأنه \"متوسط الفروق المربعة عن المتوسط\" [المصدر](https://www.mathsisfun.com/data/standard-deviation.html). في سياق مشكلة التجميع هذه، يشير إلى البيانات التي تميل أرقامها إلى التباعد بشكل كبير عن المتوسط.\n",
+ "\n",
+ "✅ هذه فرصة رائعة للتفكير في جميع الطرق التي يمكنك من خلالها تصحيح هذه المشكلة. هل يمكنك تعديل البيانات أكثر؟ استخدام أعمدة مختلفة؟ تجربة خوارزمية مختلفة؟ تلميح: جرب [تقييس البيانات](https://www.mygreatlearning.com/blog/learning-data-science-with-k-means-clustering/) لتطبيعها واختبار أعمدة أخرى.\n",
+ "\n",
+ "> جرب هذا '[حاسبة التباين](https://www.calculatorsoup.com/calculators/statistics/variance-calculator.php)' لفهم المفهوم بشكل أفضل.\n",
+ "\n",
+ "------------------------------------------------------------------------\n",
+ "\n",
+ "## **🚀التحدي**\n",
+ "\n",
+ "اقضِ بعض الوقت مع هذا الدفتر، وعدّل المعلمات. هل يمكنك تحسين دقة النموذج عن طريق تنظيف البيانات أكثر (مثل إزالة القيم الشاذة)؟ يمكنك استخدام الأوزان لإعطاء أهمية أكبر لبعض عينات البيانات. ما الذي يمكنك فعله أيضًا لإنشاء مجموعات أفضل؟\n",
+ "\n",
+ "تلميح: جرب تقييس البيانات. هناك كود معلق في الدفتر يضيف التقييس القياسي لجعل أعمدة البيانات أكثر تشابهًا من حيث النطاق. ستلاحظ أنه بينما ينخفض مؤشر السيلويت، فإن \"الانحناء\" في الرسم البياني للكوع يصبح أكثر سلاسة. هذا لأن ترك البيانات دون تقييس يسمح للبيانات ذات التباين الأقل بأن تحمل وزنًا أكبر. اقرأ المزيد عن هذه المشكلة [هنا](https://stats.stackexchange.com/questions/21222/are-mean-normalization-and-feature-scaling-needed-for-k-means-clustering/21226#21226).\n",
+ "\n",
+ "## [**اختبار ما بعد المحاضرة**](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/30/)\n",
+ "\n",
+ "## **المراجعة والدراسة الذاتية**\n",
+ "\n",
+ "- ألقِ نظرة على محاكي K-Means [مثل هذا](https://user.ceng.metu.edu.tr/~akifakkus/courses/ceng574/k-means/). يمكنك استخدام هذه الأداة لتصور نقاط البيانات النموذجية وتحديد مراكزها. يمكنك تعديل عشوائية البيانات، وعدد المجموعات، وعدد المراكز. هل يساعدك هذا في الحصول على فكرة عن كيفية تجميع البيانات؟\n",
+ "\n",
+ "- ألقِ نظرة أيضًا على [هذا المستند عن K-Means](https://stanford.edu/~cpiech/cs221/handouts/kmeans.html) من جامعة ستانفورد.\n",
+ "\n",
+ "هل تريد تجربة مهاراتك المكتسبة حديثًا في التجميع على مجموعات بيانات تناسب K-Means Clustering؟ يرجى الاطلاع على:\n",
+ "\n",
+ "- [تدريب وتقييم نماذج التجميع](https://rpubs.com/eR_ic/clustering) باستخدام Tidymodels وأدوات أخرى\n",
+ "\n",
+ "- [تحليل التجميع باستخدام K-Means](https://uc-r.github.io/kmeans_clustering)، دليل UC لتحليل البيانات باستخدام R\n",
+ "\n",
+ "- [التجميع باستخدام K-Means ومبادئ البيانات المنظمة](https://www.tidymodels.org/learn/statistics/k-means/)\n",
+ "\n",
+ "## **التكليف**\n",
+ "\n",
+ "[جرب طرق تجميع مختلفة](https://github.com/microsoft/ML-For-Beginners/blob/main/5-Clustering/2-K-Means/assignment.md)\n",
+ "\n",
+ "## شكر خاص إلى:\n",
+ "\n",
+ "[Jen Looper](https://www.twitter.com/jenlooper) لإنشاء النسخة الأصلية من هذا النموذج بلغة Python ♥️\n",
+ "\n",
+ "[`Allison Horst`](https://twitter.com/allison_horst/) لابتكار الرسوم التوضيحية الرائعة التي تجعل R أكثر ترحيبًا وجاذبية. يمكنك العثور على المزيد من الرسوم التوضيحية في [معرضها](https://www.google.com/url?q=https://github.com/allisonhorst/stats-illustrations&sa=D&source=editors&ust=1626380772530000&usg=AOvVaw3zcfyCizFQZpkSLzxiiQEM).\n",
+ "\n",
+ "تعلم سعيد،\n",
+ "\n",
+ "[Eric](https://twitter.com/ericntay)، سفير Microsoft Learn Student الذهبي.\n",
+ "\n",
+ "
\n",
+ " \n",
+ " عمل فني من @allison_horst\n"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "\n---\n\n**إخلاء المسؤولية**: \nتم ترجمة هذا المستند باستخدام خدمة الترجمة بالذكاء الاصطناعي [Co-op Translator](https://github.com/Azure/co-op-translator). بينما نسعى لتحقيق الدقة، يرجى العلم أن الترجمات الآلية قد تحتوي على أخطاء أو عدم دقة. يجب اعتبار المستند الأصلي بلغته الأصلية هو المصدر الموثوق. للحصول على معلومات حساسة، يُوصى بالاستعانة بترجمة بشرية احترافية. نحن غير مسؤولين عن أي سوء فهم أو تفسيرات خاطئة ناتجة عن استخدام هذه الترجمة.\n"
+ ]
+ }
+ ]
+}
\ No newline at end of file
diff --git a/translations/ar/5-Clustering/2-K-Means/solution/notebook.ipynb b/translations/ar/5-Clustering/2-K-Means/solution/notebook.ipynb
new file mode 100644
index 000000000..36a72bd36
--- /dev/null
+++ b/translations/ar/5-Clustering/2-K-Means/solution/notebook.ipynb
@@ -0,0 +1,554 @@
+{
+ "metadata": {
+ "language_info": {
+ "codemirror_mode": {
+ "name": "ipython",
+ "version": 3
+ },
+ "file_extension": ".py",
+ "mimetype": "text/x-python",
+ "name": "python",
+ "nbconvert_exporter": "python",
+ "pygments_lexer": "ipython3",
+ "version": "3.7.0"
+ },
+ "orig_nbformat": 2,
+ "kernelspec": {
+ "name": "python37364bit8d3b438fb5fc4430a93ac2cb74d693a7",
+ "display_name": "Python 3.7.0 64-bit ('3.7')"
+ },
+ "metadata": {
+ "interpreter": {
+ "hash": "70b38d7a306a849643e446cd70466270a13445e5987dfa1344ef2b127438fa4d"
+ }
+ },
+ "coopTranslator": {
+ "original_hash": "e867e87e3129c8875423a82945f4ad5e",
+ "translation_date": "2025-08-29T15:15:43+00:00",
+ "source_file": "5-Clustering/2-K-Means/solution/notebook.ipynb",
+ "language_code": "ar"
+ }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 2,
+ "cells": [
+ {
+ "source": [
+ "# تحليل الموسيقى النيجيرية المستخرجة من سبوتيفاي\n"
+ ],
+ "cell_type": "markdown",
+ "metadata": {}
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 10,
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "name": "stdout",
+ "text": [
+ "Requirement already satisfied: seaborn in /Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages (0.11.1)\n",
+ "Requirement already satisfied: pandas>=0.23 in /Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages (from seaborn) (1.1.2)\n",
+ "Requirement already satisfied: matplotlib>=2.2 in /Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages (from seaborn) (3.1.0)\n",
+ "Requirement already satisfied: scipy>=1.0 in /Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages (from seaborn) (1.4.1)\n",
+ "Requirement already satisfied: numpy>=1.15 in /Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages (from seaborn) (1.19.2)\n",
+ "Requirement already satisfied: python-dateutil>=2.7.3 in /Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages (from pandas>=0.23->seaborn) (2.8.0)\n",
+ "Requirement already satisfied: pytz>=2017.2 in /Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages (from pandas>=0.23->seaborn) (2019.1)\n",
+ "Requirement already satisfied: kiwisolver>=1.0.1 in /Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages (from matplotlib>=2.2->seaborn) (1.1.0)\n",
+ "Requirement already satisfied: cycler>=0.10 in /Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages (from matplotlib>=2.2->seaborn) (0.10.0)\n",
+ "Requirement already satisfied: pyparsing!=2.0.4,!=2.1.2,!=2.1.6,>=2.0.1 in /Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages (from matplotlib>=2.2->seaborn) (2.4.0)\n",
+ "Requirement already satisfied: six>=1.5 in /Users/jenlooper/Library/Python/3.7/lib/python/site-packages (from python-dateutil>=2.7.3->pandas>=0.23->seaborn) (1.12.0)\n",
+ "Requirement already satisfied: setuptools in /Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages (from kiwisolver>=1.0.1->matplotlib>=2.2->seaborn) (45.1.0)\n",
+ "\u001b[33mWARNING: You are using pip version 20.2.3; however, version 21.1.2 is available.\n",
+ "You should consider upgrading via the '/Library/Frameworks/Python.framework/Versions/3.7/bin/python3.7 -m pip install --upgrade pip' command.\u001b[0m\n",
+ "Note: you may need to restart the kernel to use updated packages.\n"
+ ]
+ }
+ ],
+ "source": [
+ "pip install seaborn"
+ ]
+ },
+ {
+ "source": [
+ "ابدأ من حيث انتهينا في الدرس الأخير، مع البيانات المستوردة والمصفاة.\n"
+ ],
+ "cell_type": "markdown",
+ "metadata": {}
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 11,
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "execute_result",
+ "data": {
+ "text/plain": [
+ " name album \\\n",
+ "0 Sparky Mandy & The Jungle \n",
+ "1 shuga rush EVERYTHING YOU HEARD IS TRUE \n",
+ "2 LITT! LITT! \n",
+ "3 Confident / Feeling Cool Enjoy Your Life \n",
+ "4 wanted you rare. \n",
+ "\n",
+ " artist artist_top_genre release_date length popularity \\\n",
+ "0 Cruel Santino alternative r&b 2019 144000 48 \n",
+ "1 Odunsi (The Engine) afropop 2020 89488 30 \n",
+ "2 AYLØ indie r&b 2018 207758 40 \n",
+ "3 Lady Donli nigerian pop 2019 175135 14 \n",
+ "4 Odunsi (The Engine) afropop 2018 152049 25 \n",
+ "\n",
+ " danceability acousticness energy instrumentalness liveness loudness \\\n",
+ "0 0.666 0.8510 0.420 0.534000 0.1100 -6.699 \n",
+ "1 0.710 0.0822 0.683 0.000169 0.1010 -5.640 \n",
+ "2 0.836 0.2720 0.564 0.000537 0.1100 -7.127 \n",
+ "3 0.894 0.7980 0.611 0.000187 0.0964 -4.961 \n",
+ "4 0.702 0.1160 0.833 0.910000 0.3480 -6.044 \n",
+ "\n",
+ " speechiness tempo time_signature \n",
+ "0 0.0829 133.015 5 \n",
+ "1 0.3600 129.993 3 \n",
+ "2 0.0424 130.005 4 \n",
+ "3 0.1130 111.087 4 \n",
+ "4 0.0447 105.115 4 "
+ ],
+ "text/html": "
"
+ },
+ "metadata": {},
+ "execution_count": 107
+ }
+ ],
+ "source": [
+ "df.head()"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 108,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "from sklearn.preprocessing import StandardScaler\n",
+ "\n",
+ "scaler = StandardScaler()\n",
+ "\n",
+ "# X = df.loc[:, ('danceability','energy')]\n",
+ "\n",
+ "\n",
+ "\n",
+ "\n",
+ "\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 110,
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "error",
+ "ename": "ValueError",
+ "evalue": "Unknown label type: 'continuous'",
+ "traceback": [
+ "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
+ "\u001b[0;31mValueError\u001b[0m Traceback (most recent call last)",
+ "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m\u001b[0m\n\u001b[1;32m 20\u001b[0m \u001b[0;31m# we create an instance of SVM and fit out data. We do not scale our\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 21\u001b[0m \u001b[0;31m# data since we want to plot the support vectors\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 22\u001b[0;31m \u001b[0mls30\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;34m(\u001b[0m\u001b[0mLabelSpreading\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mfit\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mX\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0my_30\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0my_30\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m'Label Spreading 30% data'\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 23\u001b[0m \u001b[0mls50\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;34m(\u001b[0m\u001b[0mLabelSpreading\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mfit\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mX\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0my_50\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0my_50\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m'Label Spreading 50% data'\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 24\u001b[0m \u001b[0mls100\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;34m(\u001b[0m\u001b[0mLabelSpreading\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mfit\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mX\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0my\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0my\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m'Label Spreading 100% data'\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
+ "\u001b[0;32m/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/sklearn/semi_supervised/_label_propagation.py\u001b[0m in \u001b[0;36mfit\u001b[0;34m(self, X, y)\u001b[0m\n\u001b[1;32m 228\u001b[0m \u001b[0mX\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0my\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_validate_data\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mX\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0my\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 229\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mX_\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mX\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 230\u001b[0;31m \u001b[0mcheck_classification_targets\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0my\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 231\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 232\u001b[0m \u001b[0;31m# actual graph construction (implementations should override this)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
+ "\u001b[0;32m/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/sklearn/utils/multiclass.py\u001b[0m in \u001b[0;36mcheck_classification_targets\u001b[0;34m(y)\u001b[0m\n\u001b[1;32m 181\u001b[0m if y_type not in ['binary', 'multiclass', 'multiclass-multioutput',\n\u001b[1;32m 182\u001b[0m 'multilabel-indicator', 'multilabel-sequences']:\n\u001b[0;32m--> 183\u001b[0;31m \u001b[0;32mraise\u001b[0m \u001b[0mValueError\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m\"Unknown label type: %r\"\u001b[0m \u001b[0;34m%\u001b[0m \u001b[0my_type\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 184\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 185\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n",
+ "\u001b[0;31mValueError\u001b[0m: Unknown label type: 'continuous'"
+ ]
+ }
+ ],
+ "source": [
+ "from sklearn.svm import SVC\n",
+ "from sklearn.semi_supervised import LabelSpreading\n",
+ "from sklearn.semi_supervised import SelfTrainingClassifier\n",
+ "from sklearn import datasets\n",
+ "\n",
+ "X = df[['danceability','acousticness']].values\n",
+ "y = df['energy'].values\n",
+ "\n",
+ "# X = scaler.fit_transform(X)\n",
+ "\n",
+ "# step size in the mesh\n",
+ "h = .02\n",
+ "\n",
+ "rng = np.random.RandomState(0)\n",
+ "y_rand = rng.rand(y.shape[0])\n",
+ "y_30 = np.copy(y)\n",
+ "y_30[y_rand < 0.3] = -1 # set random samples to be unlabeled\n",
+ "y_50 = np.copy(y)\n",
+ "y_50[y_rand < 0.5] = -1\n",
+ "# we create an instance of SVM and fit out data. We do not scale our\n",
+ "# data since we want to plot the support vectors\n",
+ "ls30 = (LabelSpreading().fit(X, y_30), y_30, 'Label Spreading 30% data')\n",
+ "ls50 = (LabelSpreading().fit(X, y_50), y_50, 'Label Spreading 50% data')\n",
+ "ls100 = (LabelSpreading().fit(X, y), y, 'Label Spreading 100% data')\n",
+ "\n",
+ "# the base classifier for self-training is identical to the SVC\n",
+ "base_classifier = SVC(kernel='rbf', gamma=.5, probability=True)\n",
+ "st30 = (SelfTrainingClassifier(base_classifier).fit(X, y_30),\n",
+ " y_30, 'Self-training 30% data')\n",
+ "st50 = (SelfTrainingClassifier(base_classifier).fit(X, y_50),\n",
+ " y_50, 'Self-training 50% data')\n",
+ "\n",
+ "rbf_svc = (SVC(kernel='rbf', gamma=.5).fit(X, y), y, 'SVC with rbf kernel')\n",
+ "\n",
+ "# create a mesh to plot in\n",
+ "x_min, x_max = X[:, 0].min() - 1, X[:, 0].max() + 1\n",
+ "y_min, y_max = X[:, 1].min() - 1, X[:, 1].max() + 1\n",
+ "xx, yy = np.meshgrid(np.arange(x_min, x_max, h),\n",
+ " np.arange(y_min, y_max, h))\n",
+ "\n",
+ "color_map = {-1: (1, 1, 1), 0: (0, 0, .9), 1: (1, 0, 0), 2: (.8, .6, 0)}\n",
+ "\n",
+ "classifiers = (ls30, st30, ls50, st50, ls100, rbf_svc)\n",
+ "for i, (clf, y_train, title) in enumerate(classifiers):\n",
+ " # Plot the decision boundary. For that, we will assign a color to each\n",
+ " # point in the mesh [x_min, x_max]x[y_min, y_max].\n",
+ " plt.subplot(3, 2, i + 1)\n",
+ " Z = clf.predict(np.c_[xx.ravel(), yy.ravel()])\n",
+ "\n",
+ " # Put the result into a color plot\n",
+ " Z = Z.reshape(xx.shape)\n",
+ " plt.contourf(xx, yy, Z, cmap=plt.cm.Paired)\n",
+ " plt.axis('off')\n",
+ "\n",
+ " # Plot also the training points\n",
+ " colors = [color_map[y] for y in y_train]\n",
+ " plt.scatter(X[:, 0], X[:, 1], c=colors, edgecolors='black')\n",
+ "\n",
+ " plt.title(title)\n",
+ "\n",
+ "plt.suptitle(\"Unlabeled points are colored white\", y=0.1)\n",
+ "plt.show()"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": []
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "\n---\n\n**إخلاء المسؤولية**: \nتم ترجمة هذا المستند باستخدام خدمة الترجمة الآلية [Co-op Translator](https://github.com/Azure/co-op-translator). بينما نسعى لتحقيق الدقة، يرجى العلم أن الترجمات الآلية قد تحتوي على أخطاء أو معلومات غير دقيقة. يجب اعتبار المستند الأصلي بلغته الأصلية هو المصدر الموثوق. للحصول على معلومات حساسة أو هامة، يُوصى بالاستعانة بترجمة بشرية احترافية. نحن غير مسؤولين عن أي سوء فهم أو تفسيرات خاطئة ناتجة عن استخدام هذه الترجمة.\n"
+ ]
+ }
+ ]
+}
\ No newline at end of file
diff --git a/translations/ar/5-Clustering/README.md b/translations/ar/5-Clustering/README.md
new file mode 100644
index 000000000..88f9e9bad
--- /dev/null
+++ b/translations/ar/5-Clustering/README.md
@@ -0,0 +1,42 @@
+
+# نماذج التجميع في تعلم الآلة
+
+التجميع هو مهمة في تعلم الآلة تهدف إلى العثور على الأشياء التي تشبه بعضها البعض وتجميعها في مجموعات تُسمى "العناقيد". ما يميز التجميع عن الأساليب الأخرى في تعلم الآلة هو أن الأمور تحدث تلقائيًا، في الواقع، يمكن القول إنه عكس التعلم الموجّه.
+
+## موضوع إقليمي: نماذج التجميع لتفضيلات الجمهور النيجيري الموسيقية 🎧
+
+الجمهور النيجيري المتنوع لديه أذواق موسيقية متنوعة. باستخدام البيانات المستخرجة من Spotify (مستوحاة من [هذه المقالة](https://towardsdatascience.com/country-wise-visual-analysis-of-music-taste-using-spotify-api-seaborn-in-python-77f5b749b421))، دعونا نلقي نظرة على بعض الموسيقى الشعبية في نيجيريا. تتضمن هذه المجموعة من البيانات معلومات حول درجات "القابلية للرقص"، "الصوتية"، مستوى الصوت، "الكلامية"، الشعبية والطاقة للأغاني المختلفة. سيكون من المثير اكتشاف الأنماط في هذه البيانات!
+
+
+
+> صورة بواسطة Marcela Laskoski على Unsplash
+
+في هذه السلسلة من الدروس، ستكتشف طرقًا جديدة لتحليل البيانات باستخدام تقنيات التجميع. التجميع مفيد بشكل خاص عندما تفتقر مجموعة البيانات إلى تسميات. إذا كانت تحتوي على تسميات، فإن تقنيات التصنيف مثل تلك التي تعلمتها في الدروس السابقة قد تكون أكثر فائدة. ولكن في الحالات التي تبحث فيها عن تجميع بيانات غير مُسماة، فإن التجميع طريقة رائعة لاكتشاف الأنماط.
+
+> هناك أدوات منخفضة الكود يمكن أن تساعدك في تعلم كيفية العمل مع نماذج التجميع. جرب [Azure ML لهذه المهمة](https://docs.microsoft.com/learn/modules/create-clustering-model-azure-machine-learning-designer/?WT.mc_id=academic-77952-leestott)
+
+## الدروس
+
+1. [مقدمة في التجميع](1-Visualize/README.md)
+2. [تجميع K-Means](2-K-Means/README.md)
+
+## الشكر
+
+تم كتابة هذه الدروس مع 🎶 بواسطة [Jen Looper](https://www.twitter.com/jenlooper) مع مراجعات مفيدة من [Rishit Dagli](https://rishit_dagli) و [Muhammad Sakib Khan Inan](https://twitter.com/Sakibinan).
+
+تم الحصول على مجموعة بيانات [الأغاني النيجيرية](https://www.kaggle.com/sootersaalu/nigerian-songs-spotify) من Kaggle بعد استخراجها من Spotify.
+
+أمثلة مفيدة عن K-Means ساعدت في إنشاء هذا الدرس تشمل [استكشاف زهرة السوسن](https://www.kaggle.com/bburns/iris-exploration-pca-k-means-and-gmm-clustering)، [دفتر ملاحظات تمهيدي](https://www.kaggle.com/prashant111/k-means-clustering-with-python)، و[مثال افتراضي لمنظمة غير حكومية](https://www.kaggle.com/ankandash/pca-k-means-clustering-hierarchical-clustering).
+
+---
+
+**إخلاء المسؤولية**:
+تم ترجمة هذا المستند باستخدام خدمة الترجمة الآلية [Co-op Translator](https://github.com/Azure/co-op-translator). بينما نسعى لتحقيق الدقة، يرجى العلم أن الترجمات الآلية قد تحتوي على أخطاء أو معلومات غير دقيقة. يجب اعتبار المستند الأصلي بلغته الأصلية هو المصدر الموثوق. للحصول على معلومات حساسة أو هامة، يُوصى بالاستعانة بترجمة بشرية احترافية. نحن غير مسؤولين عن أي سوء فهم أو تفسيرات خاطئة ناتجة عن استخدام هذه الترجمة.
\ No newline at end of file
diff --git a/translations/ar/6-NLP/1-Introduction-to-NLP/README.md b/translations/ar/6-NLP/1-Introduction-to-NLP/README.md
new file mode 100644
index 000000000..94dfc143c
--- /dev/null
+++ b/translations/ar/6-NLP/1-Introduction-to-NLP/README.md
@@ -0,0 +1,179 @@
+
+# مقدمة في معالجة اللغة الطبيعية
+
+تتناول هذه الدرس لمحة تاريخية ومفاهيم مهمة حول *معالجة اللغة الطبيعية*، وهو مجال فرعي من *اللغويات الحاسوبية*.
+
+## [اختبار ما قبل المحاضرة](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/31/)
+
+## مقدمة
+
+تُعرف معالجة اللغة الطبيعية (NLP) بأنها واحدة من أكثر المجالات شهرة حيث تم تطبيق التعلم الآلي واستخدامه في برامج الإنتاج.
+
+✅ هل يمكنك التفكير في برامج تستخدمها يوميًا وربما تحتوي على بعض تقنيات معالجة اللغة الطبيعية؟ ماذا عن برامج معالجة النصوص أو التطبيقات المحمولة التي تستخدمها بانتظام؟
+
+ستتعلم في هذا الدرس:
+
+- **فكرة اللغات**. كيف تطورت اللغات وما هي المجالات الرئيسية لدراستها.
+- **التعريف والمفاهيم**. ستتعلم أيضًا تعريفات ومفاهيم حول كيفية معالجة الحواسيب للنصوص، بما في ذلك التحليل النحوي، القواعد، وتحديد الأسماء والأفعال. هناك بعض المهام البرمجية في هذا الدرس، وسيتم تقديم العديد من المفاهيم المهمة التي ستتعلم برمجتها لاحقًا في الدروس القادمة.
+
+## اللغويات الحاسوبية
+
+اللغويات الحاسوبية هي مجال بحث وتطوير يمتد لعقود عديدة يدرس كيفية عمل الحواسيب مع اللغات، بل وحتى فهمها، ترجمتها، والتواصل بها. معالجة اللغة الطبيعية (NLP) هو مجال ذو صلة يركز على كيفية معالجة الحواسيب للغات "الطبيعية"، أي اللغات البشرية.
+
+### مثال - الإملاء الصوتي على الهاتف
+
+إذا سبق لك أن أمليت على هاتفك بدلاً من الكتابة أو سألت مساعدًا افتراضيًا سؤالًا، فقد تم تحويل كلامك إلى نص ثم معالجته أو *تحليله* من اللغة التي تحدثت بها. بعد ذلك، تم معالجة الكلمات المفتاحية المكتشفة إلى صيغة يمكن للهاتف أو المساعد فهمها والعمل بناءً عليها.
+
+
+> الفهم اللغوي الحقيقي صعب! الصورة من [Jen Looper](https://twitter.com/jenlooper)
+
+### كيف أصبحت هذه التقنية ممكنة؟
+
+هذا ممكن لأن شخصًا ما كتب برنامجًا حاسوبيًا للقيام بذلك. قبل بضعة عقود، توقع بعض كتاب الخيال العلمي أن الناس سيتحدثون إلى حواسيبهم بشكل رئيسي، وأن الحواسيب ستفهم دائمًا ما يقصدونه. للأسف، تبين أن هذه مشكلة أصعب مما تخيلها الكثيرون، وعلى الرغم من أن المشكلة أصبحت مفهومة بشكل أفضل اليوم، إلا أن هناك تحديات كبيرة لتحقيق معالجة "مثالية" للغة الطبيعية عندما يتعلق الأمر بفهم معنى الجملة. هذه مشكلة صعبة بشكل خاص عندما يتعلق الأمر بفهم الفكاهة أو اكتشاف المشاعر مثل السخرية في الجملة.
+
+في هذه المرحلة، قد تتذكر دروس المدرسة حيث كان المعلم يشرح أجزاء القواعد في الجملة. في بعض البلدان، يتم تعليم الطلاب القواعد واللغويات كمادة مخصصة، ولكن في العديد من البلدان، يتم تضمين هذه المواضيع كجزء من تعلم اللغة: سواء كانت لغتك الأولى في المدرسة الابتدائية (تعلم القراءة والكتابة) وربما لغة ثانية في المرحلة الثانوية. لا تقلق إذا لم تكن خبيرًا في التمييز بين الأسماء والأفعال أو الظروف والصفات!
+
+إذا كنت تجد صعوبة في التفرقة بين *الحاضر البسيط* و*الحاضر المستمر*، فأنت لست وحدك. هذا تحدٍ للكثير من الناس، حتى الناطقين الأصليين للغة. الخبر السار هو أن الحواسيب جيدة جدًا في تطبيق القواعد الرسمية، وستتعلم كتابة كود يمكنه *تحليل* الجملة كما يفعل الإنسان. التحدي الأكبر الذي ستتناوله لاحقًا هو فهم *المعنى* و*المشاعر* في الجملة.
+
+## المتطلبات الأساسية
+
+المتطلب الرئيسي لهذا الدرس هو القدرة على قراءة وفهم لغة هذا الدرس. لا توجد مسائل رياضية أو معادلات لحلها. بينما كتب المؤلف الأصلي هذا الدرس باللغة الإنجليزية، فإنه مترجم أيضًا إلى لغات أخرى، لذا قد تكون تقرأ ترجمة. هناك أمثلة حيث يتم استخدام عدد من اللغات المختلفة (لمقارنة قواعدها المختلفة). هذه الأمثلة *غير* مترجمة، ولكن النص التوضيحي مترجم، لذا يجب أن يكون المعنى واضحًا.
+
+بالنسبة للمهام البرمجية، ستستخدم لغة Python، والأمثلة تستخدم Python 3.8.
+
+في هذا القسم، ستحتاج إلى:
+
+- **فهم Python 3**. فهم لغة البرمجة Python 3، حيث يستخدم هذا الدرس المدخلات، الحلقات، قراءة الملفات، والمصفوفات.
+- **Visual Studio Code + الإضافة**. سنستخدم Visual Studio Code وإضافته الخاصة بـ Python. يمكنك أيضًا استخدام بيئة تطوير Python التي تفضلها.
+- **TextBlob**. [TextBlob](https://github.com/sloria/TextBlob) هي مكتبة مبسطة لمعالجة النصوص في Python. اتبع التعليمات على موقع TextBlob لتثبيتها على نظامك (قم بتثبيت corpora أيضًا كما هو موضح أدناه):
+
+ ```bash
+ pip install -U textblob
+ python -m textblob.download_corpora
+ ```
+
+> 💡 نصيحة: يمكنك تشغيل Python مباشرة في بيئات VS Code. تحقق من [التوثيق](https://code.visualstudio.com/docs/languages/python?WT.mc_id=academic-77952-leestott) لمزيد من المعلومات.
+
+## التحدث إلى الآلات
+
+تاريخ محاولة جعل الحواسيب تفهم اللغة البشرية يعود إلى عقود، وكان أحد أوائل العلماء الذين فكروا في معالجة اللغة الطبيعية هو *آلان تورينج*.
+
+### اختبار تورينج
+
+عندما كان تورينج يبحث في *الذكاء الاصطناعي* في خمسينيات القرن الماضي، فكر في إمكانية إجراء اختبار محادثة بين إنسان وحاسوب (عبر مراسلات مكتوبة) حيث لا يستطيع الإنسان في المحادثة تحديد ما إذا كان يتحدث مع إنسان آخر أم حاسوب.
+
+إذا لم يستطع الإنسان بعد فترة معينة من المحادثة تحديد ما إذا كانت الإجابات من حاسوب أم لا، فهل يمكن القول إن الحاسوب *يفكر*؟
+
+### الإلهام - "لعبة التقليد"
+
+جاءت الفكرة من لعبة حفلات تُسمى *لعبة التقليد* حيث يكون المحقق في غرفة بمفرده ومكلف بتحديد أي من شخصين (في غرفة أخرى) هو ذكر وأيهما أنثى. يمكن للمحقق إرسال ملاحظات، ويجب أن يحاول التفكير في أسئلة تكشف إجاباتها المكتوبة عن جنس الشخص الغامض. بالطبع، يحاول اللاعبون في الغرفة الأخرى خداع المحقق من خلال الإجابة بطريقة تضلله أو تربكه، مع إعطاء انطباع بالإجابة بصدق.
+
+### تطوير إليزا
+
+في ستينيات القرن الماضي، طور عالم من معهد MIT يُدعى *جوزيف وايزنبوم* [*إليزا*](https://wikipedia.org/wiki/ELIZA)، وهي "معالج نفسي" حاسوبي يسأل الإنسان أسئلة ويعطي انطباعًا بفهم إجاباته. ومع ذلك، بينما كانت إليزا قادرة على تحليل الجملة وتحديد بعض التركيبات النحوية والكلمات المفتاحية لتقديم إجابة معقولة، لم يكن يمكن القول إنها *تفهم* الجملة. إذا قُدمت إليزا بجملة بصيغة "**أنا** حزين"، فقد تعيد ترتيب الكلمات وتستبدل بعضها لتكوين الإجابة "منذ متى **أنت** حزين؟".
+
+هذا أعطى انطباعًا بأن إليزا فهمت العبارة وطرحت سؤالًا متابعًا، بينما في الواقع، كانت تغير الزمن وتضيف بعض الكلمات. إذا لم تستطع إليزا تحديد كلمة مفتاحية لديها إجابة لها، فإنها تقدم إجابة عشوائية قد تكون قابلة للتطبيق على العديد من العبارات المختلفة. يمكن خداع إليزا بسهولة، على سبيل المثال إذا كتب المستخدم "**أنت** دراجة"، فقد ترد بـ "منذ متى **أنا** دراجة؟"، بدلاً من إجابة أكثر منطقية.
+
+[](https://youtu.be/RMK9AphfLco "الدردشة مع إليزا")
+
+> 🎥 انقر على الصورة أعلاه لمشاهدة فيديو عن برنامج إليزا الأصلي
+
+> ملاحظة: يمكنك قراءة الوصف الأصلي لـ [إليزا](https://cacm.acm.org/magazines/1966/1/13317-elizaa-computer-program-for-the-study-of-natural-language-communication-between-man-and-machine/abstract) الذي نُشر عام 1966 إذا كان لديك حساب ACM. بدلاً من ذلك، اقرأ عن إليزا على [ويكيبيديا](https://wikipedia.org/wiki/ELIZA).
+
+## تمرين - برمجة روبوت محادثة بسيط
+
+روبوت المحادثة، مثل إليزا، هو برنامج يستخرج مدخلات المستخدم ويبدو وكأنه يفهم ويستجيب بذكاء. على عكس إليزا، لن يحتوي روبوتنا على العديد من القواعد التي تعطيه انطباعًا بإجراء محادثة ذكية. بدلاً من ذلك، سيكون لروبوتنا قدرة واحدة فقط، وهي استمرار المحادثة بإجابات عشوائية قد تعمل في أي محادثة تافهة تقريبًا.
+
+### الخطة
+
+خطواتك عند بناء روبوت محادثة:
+
+1. طباعة تعليمات توضح للمستخدم كيفية التفاعل مع الروبوت.
+2. بدء حلقة.
+ 1. قبول مدخلات المستخدم.
+ 2. إذا طلب المستخدم الخروج، يتم إنهاء البرنامج.
+ 3. معالجة مدخلات المستخدم وتحديد الإجابة (في هذه الحالة، الإجابة هي اختيار عشوائي من قائمة من الإجابات العامة الممكنة).
+ 4. طباعة الإجابة.
+3. العودة إلى الخطوة 2.
+
+### بناء الروبوت
+
+لنقم بإنشاء الروبوت الآن. سنبدأ بتعريف بعض العبارات.
+
+1. قم بإنشاء هذا الروبوت بنفسك في Python باستخدام الإجابات العشوائية التالية:
+
+ ```python
+ random_responses = ["That is quite interesting, please tell me more.",
+ "I see. Do go on.",
+ "Why do you say that?",
+ "Funny weather we've been having, isn't it?",
+ "Let's change the subject.",
+ "Did you catch the game last night?"]
+ ```
+
+ هنا مثال على المخرجات لتوجيهك (مدخلات المستخدم تبدأ بـ `>`):
+
+ ```output
+ Hello, I am Marvin, the simple robot.
+ You can end this conversation at any time by typing 'bye'
+ After typing each answer, press 'enter'
+ How are you today?
+ > I am good thanks
+ That is quite interesting, please tell me more.
+ > today I went for a walk
+ Did you catch the game last night?
+ > I did, but my team lost
+ Funny weather we've been having, isn't it?
+ > yes but I hope next week is better
+ Let's change the subject.
+ > ok, lets talk about music
+ Why do you say that?
+ > because I like music!
+ Why do you say that?
+ > bye
+ It was nice talking to you, goodbye!
+ ```
+
+ حل محتمل لهذه المهمة موجود [هنا](https://github.com/microsoft/ML-For-Beginners/blob/main/6-NLP/1-Introduction-to-NLP/solution/bot.py)
+
+ ✅ توقف وفكر
+
+ 1. هل تعتقد أن الإجابات العشوائية قد "تخدع" شخصًا ليعتقد أن الروبوت يفهمه بالفعل؟
+ 2. ما الميزات التي يحتاجها الروبوت ليكون أكثر فعالية؟
+ 3. إذا كان الروبوت يمكنه حقًا "فهم" معنى الجملة، فهل يحتاج إلى "تذكر" معنى الجمل السابقة في المحادثة أيضًا؟
+
+---
+
+## 🚀تحدي
+
+اختر أحد العناصر في قسم "توقف وفكر" أعلاه وحاول إما تنفيذه في الكود أو كتابة حل على الورق باستخدام الكود الوهمي (pseudocode).
+
+في الدرس التالي، ستتعلم عن عدد من الطرق الأخرى لتحليل اللغة الطبيعية والتعلم الآلي.
+
+## [اختبار ما بعد المحاضرة](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/32/)
+
+## المراجعة والدراسة الذاتية
+
+اطلع على المراجع أدناه كفرص إضافية للقراءة.
+
+### المراجع
+
+1. شوبيرت، لينهارت، "اللغويات الحاسوبية"، *موسوعة ستانفورد للفلسفة* (إصدار ربيع 2020)، إدوارد ن. زالتا (محرر)، الرابط = .
+2. جامعة برينستون "حول WordNet." [WordNet](https://wordnet.princeton.edu/). جامعة برينستون. 2010.
+
+## الواجب
+
+[ابحث عن روبوت](assignment.md)
+
+---
+
+**إخلاء المسؤولية**:
+تمت ترجمة هذا المستند باستخدام خدمة الترجمة الآلية [Co-op Translator](https://github.com/Azure/co-op-translator). بينما نسعى لتحقيق الدقة، يرجى العلم أن الترجمات الآلية قد تحتوي على أخطاء أو معلومات غير دقيقة. يجب اعتبار المستند الأصلي بلغته الأصلية هو المصدر الموثوق. للحصول على معلومات حساسة أو هامة، يُوصى بالاستعانة بترجمة بشرية احترافية. نحن غير مسؤولين عن أي سوء فهم أو تفسيرات خاطئة تنشأ عن استخدام هذه الترجمة.
\ No newline at end of file
diff --git a/translations/ar/6-NLP/1-Introduction-to-NLP/assignment.md b/translations/ar/6-NLP/1-Introduction-to-NLP/assignment.md
new file mode 100644
index 000000000..ae8990831
--- /dev/null
+++ b/translations/ar/6-NLP/1-Introduction-to-NLP/assignment.md
@@ -0,0 +1,25 @@
+
+# البحث عن روبوت
+
+## التعليمات
+
+الروبوتات موجودة في كل مكان. مهمتك: العثور على واحد وتبنيه! يمكنك العثور عليها في مواقع الويب، تطبيقات البنوك، وعلى الهاتف، مثل عندما تتصل بشركات الخدمات المالية للحصول على نصيحة أو معلومات عن الحساب. قم بتحليل الروبوت وحاول أن تربكه. إذا تمكنت من إرباك الروبوت، لماذا تعتقد أن ذلك حدث؟ اكتب ورقة قصيرة عن تجربتك.
+
+## معايير التقييم
+
+| المعايير | ممتاز | مقبول | يحتاج إلى تحسين |
+| -------- | --------------------------------------------------------------------------------------------------------- | ----------------------------------------- | ------------------- |
+| | يتم كتابة ورقة كاملة تشرح بنية الروبوت المفترضة وتوضح تجربتك معه | الورقة غير مكتملة أو غير مدروسة بشكل جيد | لم يتم تقديم أي ورقة |
+
+---
+
+**إخلاء المسؤولية**:
+تمت ترجمة هذه الوثيقة باستخدام خدمة الترجمة الآلية [Co-op Translator](https://github.com/Azure/co-op-translator). بينما نسعى لتحقيق الدقة، يرجى العلم أن الترجمات الآلية قد تحتوي على أخطاء أو معلومات غير دقيقة. يجب اعتبار الوثيقة الأصلية بلغتها الأصلية المصدر الموثوق. للحصول على معلومات حساسة أو هامة، يُوصى بالاستعانة بترجمة بشرية احترافية. نحن غير مسؤولين عن أي سوء فهم أو تفسيرات خاطئة تنشأ عن استخدام هذه الترجمة.
\ No newline at end of file
diff --git a/translations/ar/6-NLP/2-Tasks/README.md b/translations/ar/6-NLP/2-Tasks/README.md
new file mode 100644
index 000000000..d07c13280
--- /dev/null
+++ b/translations/ar/6-NLP/2-Tasks/README.md
@@ -0,0 +1,228 @@
+
+# مهام وتقنيات معالجة اللغة الطبيعية الشائعة
+
+في معظم مهام *معالجة اللغة الطبيعية*، يجب تقسيم النص المراد معالجته، وفحصه، وتخزين النتائج أو مقارنتها مع القواعد ومجموعات البيانات. تتيح هذه المهام للمبرمج استنتاج _المعنى_ أو _النية_ أو فقط _تكرار_ المصطلحات والكلمات في النص.
+
+## [اختبار ما قبل المحاضرة](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/33/)
+
+دعونا نستكشف التقنيات الشائعة المستخدمة في معالجة النصوص. عند دمجها مع التعلم الآلي، تساعد هذه التقنيات في تحليل كميات كبيرة من النصوص بكفاءة. ومع ذلك، قبل تطبيق التعلم الآلي على هذه المهام، دعونا نفهم المشكلات التي يواجهها متخصص معالجة اللغة الطبيعية.
+
+## المهام الشائعة في معالجة اللغة الطبيعية
+
+هناك طرق مختلفة لتحليل النص الذي تعمل عليه. هناك مهام يمكنك تنفيذها ومن خلالها يمكنك فهم النص واستخلاص الاستنتاجات. عادةً ما يتم تنفيذ هذه المهام بشكل متسلسل.
+
+### تقسيم النص إلى وحدات (Tokenization)
+
+ربما تكون أول خطوة تقوم بها معظم خوارزميات معالجة اللغة الطبيعية هي تقسيم النص إلى وحدات أو كلمات. على الرغم من أن هذا يبدو بسيطًا، إلا أن التعامل مع علامات الترقيم وفواصل الكلمات والجمل في اللغات المختلفة يمكن أن يجعل الأمر معقدًا. قد تحتاج إلى استخدام طرق مختلفة لتحديد الحدود.
+
+
+> تقسيم جملة من **Pride and Prejudice**. تصميم بواسطة [Jen Looper](https://twitter.com/jenlooper)
+
+### التضمين (Embeddings)
+
+[تضمين الكلمات](https://wikipedia.org/wiki/Word_embedding) هو طريقة لتحويل بيانات النص إلى أرقام. يتم التضمين بطريقة تجعل الكلمات ذات المعاني المتشابهة أو الكلمات المستخدمة معًا تتجمع معًا.
+
+
+> "أكن أعلى درجات الاحترام لأعصابك، فهي أصدقائي القدامى." - تضمين الكلمات لجملة من **Pride and Prejudice**. تصميم بواسطة [Jen Looper](https://twitter.com/jenlooper)
+
+✅ جرب [هذه الأداة المثيرة](https://projector.tensorflow.org/) لتجربة تضمين الكلمات. النقر على كلمة واحدة يظهر مجموعات من الكلمات المشابهة: "toy" تتجمع مع "disney"، "lego"، "playstation"، و"console".
+
+### التحليل النحوي وتحديد أجزاء الكلام (Parsing & Part-of-speech Tagging)
+
+كل كلمة تم تقسيمها يمكن تصنيفها كجزء من الكلام - اسم، فعل، أو صفة. الجملة `the quick red fox jumped over the lazy brown dog` قد يتم تصنيفها كالتالي: fox = اسم، jumped = فعل.
+
+
+
+> تحليل جملة من **Pride and Prejudice**. تصميم بواسطة [Jen Looper](https://twitter.com/jenlooper)
+
+التحليل النحوي هو التعرف على الكلمات المرتبطة ببعضها البعض في الجملة - على سبيل المثال `the quick red fox jumped` هو تسلسل صفة-اسم-فعل منفصل عن تسلسل `lazy brown dog`.
+
+### تكرار الكلمات والعبارات
+
+إجراء مفيد عند تحليل نص كبير هو بناء قاموس لكل كلمة أو عبارة ذات اهتمام وعدد مرات ظهورها. العبارة `the quick red fox jumped over the lazy brown dog` تحتوي على تكرار للكلمة "the" بمقدار 2.
+
+دعونا نلقي نظرة على نص مثال حيث نعد تكرار الكلمات. قصيدة "The Winners" لروديارد كيبلينغ تحتوي على المقطع التالي:
+
+```output
+What the moral? Who rides may read.
+When the night is thick and the tracks are blind
+A friend at a pinch is a friend, indeed,
+But a fool to wait for the laggard behind.
+Down to Gehenna or up to the Throne,
+He travels the fastest who travels alone.
+```
+
+نظرًا لأن تكرار العبارات يمكن أن يكون حساسًا لحالة الأحرف أو غير حساس حسب الحاجة، فإن العبارة `a friend` لها تكرار بمقدار 2 و`the` لها تكرار بمقدار 6، و`travels` بمقدار 2.
+
+### N-grams
+
+يمكن تقسيم النص إلى تسلسلات من الكلمات بطول محدد، كلمة واحدة (unigram)، كلمتين (bigrams)، ثلاث كلمات (trigrams) أو أي عدد من الكلمات (n-grams).
+
+على سبيل المثال `the quick red fox jumped over the lazy brown dog` مع درجة n-gram بمقدار 2 ينتج n-grams التالية:
+
+1. the quick
+2. quick red
+3. red fox
+4. fox jumped
+5. jumped over
+6. over the
+7. the lazy
+8. lazy brown
+9. brown dog
+
+قد يكون من الأسهل تصورها كصندوق متحرك فوق الجملة. هنا هو المثال لـ n-grams من 3 كلمات، حيث يتم تمييز n-gram في كل جملة:
+
+1. **the quick red** fox jumped over the lazy brown dog
+2. the **quick red fox** jumped over the lazy brown dog
+3. the quick **red fox jumped** over the lazy brown dog
+4. the quick red **fox jumped over** the lazy brown dog
+5. the quick red fox **jumped over the** lazy brown dog
+6. the quick red fox jumped **over the lazy** brown dog
+7. the quick red fox jumped over **the lazy brown** dog
+8. the quick red fox jumped over the **lazy brown dog**
+
+
+
+> قيمة N-gram بمقدار 3: تصميم بواسطة [Jen Looper](https://twitter.com/jenlooper)
+
+### استخراج العبارات الاسمية
+
+في معظم الجمل، هناك اسم يكون هو الموضوع أو المفعول به للجملة. في اللغة الإنجليزية، غالبًا ما يمكن التعرف عليه بوجود "a" أو "an" أو "the" قبله. تحديد الموضوع أو المفعول به للجملة عن طريق "استخراج العبارة الاسمية" هو مهمة شائعة في معالجة اللغة الطبيعية عند محاولة فهم معنى الجملة.
+
+✅ في الجملة "I cannot fix on the hour, or the spot, or the look or the words, which laid the foundation. It is too long ago. I was in the middle before I knew that I had begun."، هل يمكنك تحديد العبارات الاسمية؟
+
+في الجملة `the quick red fox jumped over the lazy brown dog` هناك عبارتان اسميتان: **quick red fox** و**lazy brown dog**.
+
+### تحليل المشاعر
+
+يمكن تحليل الجملة أو النص لمعرفة المشاعر، أو مدى *إيجابيته* أو *سلبيته*. يتم قياس المشاعر من حيث *القطبية* و*الموضوعية/الذاتية*. يتم قياس القطبية من -1.0 إلى 1.0 (سلبي إلى إيجابي) ومن 0.0 إلى 1.0 (الأكثر موضوعية إلى الأكثر ذاتية).
+
+✅ لاحقًا ستتعلم أن هناك طرقًا مختلفة لتحديد المشاعر باستخدام التعلم الآلي، ولكن إحدى الطرق هي وجود قائمة بالكلمات والعبارات التي يتم تصنيفها كإيجابية أو سلبية بواسطة خبير بشري وتطبيق هذا النموذج على النص لحساب درجة القطبية. هل ترى كيف يمكن أن تعمل هذه الطريقة في بعض الظروف وأقل في أخرى؟
+
+### التصريف
+
+التصريف يتيح لك أخذ كلمة والحصول على صيغة المفرد أو الجمع لها.
+
+### التوحيد (Lemmatization)
+
+*اللمّة* هي الجذر أو الكلمة الرئيسية لمجموعة من الكلمات، على سبيل المثال *flew*، *flies*، *flying* لها لمّة الفعل *fly*.
+
+هناك أيضًا قواعد بيانات مفيدة متاحة للباحث في معالجة اللغة الطبيعية، وأبرزها:
+
+### WordNet
+
+[WordNet](https://wordnet.princeton.edu/) هي قاعدة بيانات للكلمات، المرادفات، الأضداد والعديد من التفاصيل الأخرى لكل كلمة في العديد من اللغات المختلفة. إنها مفيدة للغاية عند محاولة بناء الترجمات، المدقق الإملائي، أو أدوات اللغة من أي نوع.
+
+## مكتبات معالجة اللغة الطبيعية
+
+لحسن الحظ، لا تحتاج إلى بناء كل هذه التقنيات بنفسك، حيث توجد مكتبات Python ممتازة تجعلها أكثر سهولة للمطورين الذين ليسوا متخصصين في معالجة اللغة الطبيعية أو التعلم الآلي. تتضمن الدروس القادمة المزيد من الأمثلة على هذه المكتبات، ولكن هنا ستتعلم بعض الأمثلة المفيدة لمساعدتك في المهمة التالية.
+
+### تمرين - استخدام مكتبة `TextBlob`
+
+دعونا نستخدم مكتبة تسمى TextBlob لأنها تحتوي على واجهات برمجية مفيدة للتعامل مع هذه الأنواع من المهام. TextBlob "تعتمد على العملاقين [NLTK](https://nltk.org) و[pattern](https://github.com/clips/pattern)، وتعمل بشكل جيد مع كليهما." تحتوي على قدر كبير من التعلم الآلي المدمج في واجهاتها البرمجية.
+
+> ملاحظة: دليل [البدء السريع](https://textblob.readthedocs.io/en/dev/quickstart.html#quickstart) متاح لـ TextBlob ويوصى به للمطورين ذوي الخبرة في Python.
+
+عند محاولة تحديد *العبارات الاسمية*، تقدم TextBlob عدة خيارات للمستخرجين للعثور على العبارات الاسمية.
+
+1. ألقِ نظرة على `ConllExtractor`.
+
+ ```python
+ from textblob import TextBlob
+ from textblob.np_extractors import ConllExtractor
+ # import and create a Conll extractor to use later
+ extractor = ConllExtractor()
+
+ # later when you need a noun phrase extractor:
+ user_input = input("> ")
+ user_input_blob = TextBlob(user_input, np_extractor=extractor) # note non-default extractor specified
+ np = user_input_blob.noun_phrases
+ ```
+
+ > ما الذي يحدث هنا؟ [ConllExtractor](https://textblob.readthedocs.io/en/dev/api_reference.html?highlight=Conll#textblob.en.np_extractors.ConllExtractor) هو "مستخرج للعبارات الاسمية يستخدم تحليل الكتل المدرب باستخدام مجموعة بيانات ConLL-2000." يشير ConLL-2000 إلى مؤتمر تعلم اللغة الطبيعية الحسابية لعام 2000. كل عام، استضاف المؤتمر ورشة عمل لمعالجة مشكلة صعبة في معالجة اللغة الطبيعية، وفي عام 2000 كانت المشكلة هي تقسيم العبارات الاسمية. تم تدريب نموذج على صحيفة وول ستريت جورنال، باستخدام "الأقسام 15-18 كبيانات تدريب (211727 رمزًا) والقسم 20 كبيانات اختبار (47377 رمزًا)". يمكنك الاطلاع على الإجراءات المستخدمة [هنا](https://www.clips.uantwerpen.be/conll2000/chunking/) والنتائج [هنا](https://ifarm.nl/erikt/research/np-chunking.html).
+
+### تحدي - تحسين الروبوت الخاص بك باستخدام معالجة اللغة الطبيعية
+
+في الدرس السابق، قمت ببناء روبوت بسيط للأسئلة والأجوبة. الآن، ستجعل "مارفن" أكثر تعاطفًا من خلال تحليل مدخلاتك لمعرفة المشاعر وطباعة استجابة تتناسب مع المشاعر. ستحتاج أيضًا إلى تحديد `noun_phrase` وطرح أسئلة حولها.
+
+خطواتك عند بناء روبوت محادثة أفضل:
+
+1. طباعة التعليمات التي تنصح المستخدم بكيفية التفاعل مع الروبوت
+2. بدء الحلقة
+ 1. قبول مدخلات المستخدم
+ 2. إذا طلب المستخدم الخروج، قم بالخروج
+ 3. معالجة مدخلات المستخدم وتحديد استجابة المشاعر المناسبة
+ 4. إذا تم اكتشاف عبارة اسمية في المشاعر، قم بجمعها واطلب المزيد من المدخلات حول هذا الموضوع
+ 5. طباعة الاستجابة
+3. العودة إلى الخطوة 2
+
+إليك مقتطف الكود لتحديد المشاعر باستخدام TextBlob. لاحظ أن هناك أربعة *تدرجات* فقط لاستجابة المشاعر (يمكنك إضافة المزيد إذا أردت):
+
+```python
+if user_input_blob.polarity <= -0.5:
+ response = "Oh dear, that sounds bad. "
+elif user_input_blob.polarity <= 0:
+ response = "Hmm, that's not great. "
+elif user_input_blob.polarity <= 0.5:
+ response = "Well, that sounds positive. "
+elif user_input_blob.polarity <= 1:
+ response = "Wow, that sounds great. "
+```
+
+إليك بعض المخرجات النموذجية لتوجيهك (مدخلات المستخدم تبدأ بـ >):
+
+```output
+Hello, I am Marvin, the friendly robot.
+You can end this conversation at any time by typing 'bye'
+After typing each answer, press 'enter'
+How are you today?
+> I am ok
+Well, that sounds positive. Can you tell me more?
+> I went for a walk and saw a lovely cat
+Well, that sounds positive. Can you tell me more about lovely cats?
+> cats are the best. But I also have a cool dog
+Wow, that sounds great. Can you tell me more about cool dogs?
+> I have an old hounddog but he is sick
+Hmm, that's not great. Can you tell me more about old hounddogs?
+> bye
+It was nice talking to you, goodbye!
+```
+
+يمكنك العثور على حل محتمل للمهمة [هنا](https://github.com/microsoft/ML-For-Beginners/blob/main/6-NLP/2-Tasks/solution/bot.py)
+
+✅ تحقق من المعرفة
+
+1. هل تعتقد أن الاستجابات المتعاطفة قد "تخدع" شخصًا ليعتقد أن الروبوت يفهمه بالفعل؟
+2. هل يجعل تحديد العبارة الاسمية الروبوت أكثر "إقناعًا"؟
+3. لماذا قد يكون استخراج "العبارة الاسمية" من الجملة أمرًا مفيدًا؟
+
+---
+
+قم بتنفيذ الروبوت في التحقق من المعرفة السابق واختبره على صديق. هل يمكنه خداعهم؟ هل يمكنك جعل الروبوت الخاص بك أكثر "إقناعًا"؟
+
+## 🚀تحدي
+
+خذ مهمة من التحقق من المعرفة السابق وحاول تنفيذها. اختبر الروبوت على صديق. هل يمكنه خداعهم؟ هل يمكنك جعل الروبوت الخاص بك أكثر "إقناعًا"؟
+
+## [اختبار ما بعد المحاضرة](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/34/)
+
+## المراجعة والدراسة الذاتية
+
+في الدروس القادمة، ستتعلم المزيد عن تحليل المشاعر. ابحث عن هذه التقنية المثيرة في مقالات مثل تلك الموجودة على [KDNuggets](https://www.kdnuggets.com/tag/nlp)
+
+## الواجب
+
+[اجعل الروبوت يتحدث](assignment.md)
+
+---
+
+**إخلاء المسؤولية**:
+تمت ترجمة هذا المستند باستخدام خدمة الترجمة الآلية [Co-op Translator](https://github.com/Azure/co-op-translator). بينما نسعى لتحقيق الدقة، يرجى العلم أن الترجمات الآلية قد تحتوي على أخطاء أو معلومات غير دقيقة. يجب اعتبار المستند الأصلي بلغته الأصلية هو المصدر الموثوق. للحصول على معلومات حساسة أو هامة، يُوصى بالاستعانة بترجمة بشرية احترافية. نحن غير مسؤولين عن أي سوء فهم أو تفسيرات خاطئة تنشأ عن استخدام هذه الترجمة.
\ No newline at end of file
diff --git a/translations/ar/6-NLP/2-Tasks/assignment.md b/translations/ar/6-NLP/2-Tasks/assignment.md
new file mode 100644
index 000000000..2ffe4f76b
--- /dev/null
+++ b/translations/ar/6-NLP/2-Tasks/assignment.md
@@ -0,0 +1,25 @@
+
+# اجعل الروبوت يرد عليك
+
+## التعليمات
+
+في الدروس السابقة، قمت ببرمجة روبوت أساسي للدردشة معه. هذا الروبوت يعطي إجابات عشوائية حتى تقول "وداعًا". هل يمكنك جعل الإجابات أقل عشوائية، وتفعيل إجابات محددة إذا قلت أشياء معينة، مثل "لماذا" أو "كيف"؟ فكر قليلاً في كيفية استخدام التعلم الآلي لجعل هذا النوع من العمل أقل يدوية أثناء تطوير الروبوت الخاص بك. يمكنك استخدام مكتبات NLTK أو TextBlob لتسهيل مهامك.
+
+## معايير التقييم
+
+| المعايير | ممتاز | مقبول | يحتاج إلى تحسين |
+| -------- | --------------------------------------------- | ------------------------------------------------ | ----------------------- |
+| | يتم تقديم ملف bot.py جديد ومُوثق | يتم تقديم ملف روبوت جديد ولكنه يحتوي على أخطاء | لم يتم تقديم ملف |
+
+---
+
+**إخلاء المسؤولية**:
+تم ترجمة هذا المستند باستخدام خدمة الترجمة الآلية [Co-op Translator](https://github.com/Azure/co-op-translator). بينما نسعى لتحقيق الدقة، يرجى العلم أن الترجمات الآلية قد تحتوي على أخطاء أو معلومات غير دقيقة. يجب اعتبار المستند الأصلي بلغته الأصلية هو المصدر الموثوق. للحصول على معلومات حساسة أو هامة، يُوصى بالاستعانة بترجمة بشرية احترافية. نحن غير مسؤولين عن أي سوء فهم أو تفسيرات خاطئة تنشأ عن استخدام هذه الترجمة.
\ No newline at end of file
diff --git a/translations/ar/6-NLP/3-Translation-Sentiment/README.md b/translations/ar/6-NLP/3-Translation-Sentiment/README.md
new file mode 100644
index 000000000..b37acccc9
--- /dev/null
+++ b/translations/ar/6-NLP/3-Translation-Sentiment/README.md
@@ -0,0 +1,200 @@
+
+# الترجمة وتحليل المشاعر باستخدام التعلم الآلي
+
+في الدروس السابقة، تعلمت كيفية بناء روبوت أساسي باستخدام `TextBlob`، وهي مكتبة تحتوي على تقنيات تعلم آلي خلف الكواليس لأداء مهام معالجة اللغة الطبيعية الأساسية مثل استخراج العبارات الاسمية. أحد التحديات المهمة في اللغويات الحاسوبية هو الترجمة الدقيقة لجملة من لغة منطوقة أو مكتوبة إلى أخرى.
+
+## [اختبار ما قبل المحاضرة](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/35/)
+
+الترجمة هي مشكلة صعبة للغاية بسبب وجود آلاف اللغات، ولكل منها قواعد نحوية مختلفة تمامًا. إحدى الطرق هي تحويل القواعد النحوية الرسمية للغة واحدة، مثل الإنجليزية، إلى هيكل غير معتمد على اللغة، ثم ترجمتها عن طريق تحويلها مرة أخرى إلى لغة أخرى. هذه الطريقة تتطلب الخطوات التالية:
+
+1. **التحديد**. تحديد أو تصنيف الكلمات في اللغة المدخلة إلى أسماء، أفعال، إلخ.
+2. **إنشاء الترجمة**. إنتاج ترجمة مباشرة لكل كلمة بتنسيق اللغة المستهدفة.
+
+### مثال على جملة، من الإنجليزية إلى الأيرلندية
+
+في اللغة "الإنجليزية"، الجملة _I feel happy_ تتكون من ثلاث كلمات بالترتيب:
+
+- **الموضوع** (I)
+- **الفعل** (feel)
+- **الصفة** (happy)
+
+ومع ذلك، في اللغة "الأيرلندية"، نفس الجملة لها هيكل نحوي مختلف تمامًا - يتم التعبير عن المشاعر مثل "*happy*" أو "*sad*" على أنها *موجودة عليك*.
+
+العبارة الإنجليزية `I feel happy` في الأيرلندية ستكون `Tá athas orm`. الترجمة *الحرفية* ستكون `Happy is upon me`.
+
+المتحدث الأيرلندي الذي يترجم إلى الإنجليزية سيقول `I feel happy`، وليس `Happy is upon me`، لأنه يفهم معنى الجملة، حتى لو كانت الكلمات وهيكل الجملة مختلفين.
+
+الترتيب الرسمي للجملة في الأيرلندية هو:
+
+- **الفعل** (Tá أو is)
+- **الصفة** (athas، أو happy)
+- **الموضوع** (orm، أو upon me)
+
+## الترجمة
+
+برنامج الترجمة البسيط قد يترجم الكلمات فقط، متجاهلاً هيكل الجملة.
+
+✅ إذا كنت قد تعلمت لغة ثانية (أو ثالثة أو أكثر) كشخص بالغ، ربما بدأت بالتفكير بلغتك الأم، وترجمة المفهوم كلمة بكلمة في ذهنك إلى اللغة الثانية، ثم التحدث بترجمتك. هذا مشابه لما تفعله برامج الترجمة البسيطة. من المهم تجاوز هذه المرحلة لتحقيق الطلاقة!
+
+الترجمة البسيطة تؤدي إلى ترجمات سيئة (وأحيانًا مضحكة): `I feel happy` تُترجم حرفيًا إلى `Mise bhraitheann athas` في الأيرلندية. هذا يعني (حرفيًا) `me feel happy` وهي ليست جملة أيرلندية صحيحة. على الرغم من أن الإنجليزية والأيرلندية هما لغتان يتم التحدث بهما في جزيرتين متجاورتين، إلا أنهما لغتان مختلفتان تمامًا مع هياكل نحوية مختلفة.
+
+> يمكنك مشاهدة بعض الفيديوهات حول التقاليد اللغوية الأيرلندية مثل [هذا الفيديو](https://www.youtube.com/watch?v=mRIaLSdRMMs)
+
+### طرق التعلم الآلي
+
+حتى الآن، تعلمت عن نهج القواعد الرسمية لمعالجة اللغة الطبيعية. نهج آخر هو تجاهل معنى الكلمات، وبدلاً من ذلك استخدام التعلم الآلي لاكتشاف الأنماط. يمكن أن يعمل هذا في الترجمة إذا كان لديك الكثير من النصوص (مجموعة نصوص) أو نصوص (مجموعات نصوص) في كل من اللغة الأصلية واللغة المستهدفة.
+
+على سبيل المثال، ضع في اعتبارك حالة *Pride and Prejudice*، وهي رواية إنجليزية مشهورة كتبتها جين أوستن في عام 1813. إذا قمت بمراجعة الكتاب باللغة الإنجليزية وترجمة بشرية للكتاب باللغة *الفرنسية*، يمكنك اكتشاف عبارات في أحدهما تُترجم بشكل *اصطلاحي* إلى الآخر. ستقوم بذلك بعد قليل.
+
+على سبيل المثال، عندما تُترجم عبارة إنجليزية مثل `I have no money` حرفيًا إلى الفرنسية، قد تصبح `Je n'ai pas de monnaie`. "Monnaie" هي كلمة فرنسية خادعة، حيث أن 'money' و 'monnaie' ليسا مترادفين. ترجمة أفضل قد يقوم بها إنسان ستكون `Je n'ai pas d'argent`، لأنها تنقل المعنى بشكل أفضل بأنك لا تملك المال (بدلاً من 'الفكة' التي هي معنى 'monnaie').
+
+
+
+> الصورة بواسطة [Jen Looper](https://twitter.com/jenlooper)
+
+إذا كان لدى نموذج التعلم الآلي عدد كافٍ من الترجمات البشرية لبناء نموذج عليها، يمكنه تحسين دقة الترجمات من خلال تحديد الأنماط الشائعة في النصوص التي تم ترجمتها مسبقًا بواسطة متحدثين بشريين خبراء في كلا اللغتين.
+
+### تمرين - الترجمة
+
+يمكنك استخدام `TextBlob` لترجمة الجمل. جرب الجملة الشهيرة الأولى من **Pride and Prejudice**:
+
+```python
+from textblob import TextBlob
+
+blob = TextBlob(
+ "It is a truth universally acknowledged, that a single man in possession of a good fortune, must be in want of a wife!"
+)
+print(blob.translate(to="fr"))
+
+```
+
+يقوم `TextBlob` بعمل جيد جدًا في الترجمة: "C'est une vérité universellement reconnue, qu'un homme célibataire en possession d'une bonne fortune doit avoir besoin d'une femme!".
+
+يمكن القول إن ترجمة TextBlob أكثر دقة، في الواقع، من الترجمة الفرنسية للكتاب عام 1932 بواسطة V. Leconte و Ch. Pressoir:
+
+"C'est une vérité universelle qu'un célibataire pourvu d'une belle fortune doit avoir envie de se marier, et, si peu que l'on sache de son sentiment à cet egard, lorsqu'il arrive dans une nouvelle résidence, cette idée est si bien fixée dans l'esprit de ses voisins qu'ils le considèrent sur-le-champ comme la propriété légitime de l'une ou l'autre de leurs filles."
+
+في هذه الحالة، الترجمة المستندة إلى التعلم الآلي تقوم بعمل أفضل من المترجم البشري الذي يضيف كلمات غير ضرورية إلى النص الأصلي للمؤلف من أجل "التوضيح".
+
+> ما الذي يحدث هنا؟ ولماذا TextBlob جيد جدًا في الترجمة؟ حسنًا، خلف الكواليس، يستخدم Google Translate، وهو ذكاء اصطناعي متقدم قادر على تحليل ملايين العبارات للتنبؤ بأفضل النصوص للمهمة المطلوبة. لا يوجد شيء يدوي يحدث هنا وتحتاج إلى اتصال بالإنترنت لاستخدام `blob.translate`.
+
+✅ جرب بعض الجمل الأخرى. أيهما أفضل، الترجمة باستخدام التعلم الآلي أم الترجمة البشرية؟ وفي أي الحالات؟
+
+## تحليل المشاعر
+
+مجال آخر يمكن أن يعمل فيه التعلم الآلي بشكل جيد جدًا هو تحليل المشاعر. النهج غير المستند إلى التعلم الآلي لتحليل المشاعر هو تحديد الكلمات والعبارات التي تكون 'إيجابية' و'سلبية'. ثم، بالنظر إلى نص جديد، يتم حساب القيمة الإجمالية للكلمات الإيجابية والسلبية والمحايدة لتحديد المشاعر العامة.
+
+هذا النهج يمكن خداعه بسهولة كما قد تكون رأيت في مهمة Marvin - الجملة `Great, that was a wonderful waste of time, I'm glad we are lost on this dark road` هي جملة ذات مشاعر سلبية ساخرة، لكن الخوارزمية البسيطة تكتشف 'great'، 'wonderful'، 'glad' كإيجابية و 'waste'، 'lost' و 'dark' ككلمات سلبية. المشاعر العامة تتأثر بهذه الكلمات المتضاربة.
+
+✅ توقف لحظة وفكر في كيفية التعبير عن السخرية كمتحدثين بشريين. يلعب تنغيم الصوت دورًا كبيرًا. حاول قول العبارة "Well, that film was awesome" بطرق مختلفة لاكتشاف كيف ينقل صوتك المعنى.
+
+### طرق التعلم الآلي
+
+النهج المستند إلى التعلم الآلي سيكون جمع نصوص سلبية وإيجابية يدويًا - تغريدات، أو مراجعات أفلام، أو أي شيء حيث أعطى الإنسان تقييمًا *ورأيًا مكتوبًا*. ثم يمكن تطبيق تقنيات معالجة اللغة الطبيعية على الآراء والتقييمات، بحيث تظهر الأنماط (على سبيل المثال، مراجعات الأفلام الإيجابية تميل إلى احتواء عبارة 'Oscar worthy' أكثر من مراجعات الأفلام السلبية، أو مراجعات المطاعم الإيجابية تقول 'gourmet' أكثر بكثير من 'disgusting').
+
+> ⚖️ **مثال**: إذا كنت تعمل في مكتب سياسي وكان هناك قانون جديد قيد المناقشة، قد يكتب الناخبون إلى المكتب برسائل دعم أو رسائل ضد القانون الجديد. لنفترض أنك مكلف بقراءة الرسائل وفرزها في مجموعتين، *مع* و *ضد*. إذا كانت هناك الكثير من الرسائل، قد تشعر بالإرهاق أثناء محاولة قراءتها جميعًا. ألن يكون من الجيد إذا كان هناك روبوت يمكنه قراءة جميع الرسائل نيابة عنك، فهمها وإخبارك في أي مجموعة تنتمي كل رسالة؟
+>
+> إحدى الطرق لتحقيق ذلك هي استخدام التعلم الآلي. ستقوم بتدريب النموذج بجزء من الرسائل *ضد* وجزء من الرسائل *مع*. النموذج سيميل إلى ربط العبارات والكلمات بالجانب ضد والجانب مع، *ولكنه لن يفهم أيًا من المحتوى*، فقط أن كلمات وأنماط معينة من المرجح أن تظهر في رسالة *ضد* أو رسالة *مع*. يمكنك اختباره ببعض الرسائل التي لم تستخدمها لتدريب النموذج، ومعرفة ما إذا كان يصل إلى نفس النتيجة التي وصلت إليها. ثم، بمجرد أن تكون راضيًا عن دقة النموذج، يمكنك معالجة الرسائل المستقبلية دون الحاجة إلى قراءة كل واحدة.
+
+✅ هل يبدو هذا العملية مشابهة للعمليات التي استخدمتها في الدروس السابقة؟
+
+## تمرين - جمل ذات مشاعر
+
+يتم قياس المشاعر باستخدام *القطبية* من -1 إلى 1، مما يعني أن -1 هي المشاعر الأكثر سلبية، و1 هي المشاعر الأكثر إيجابية. يتم قياس المشاعر أيضًا بدرجة من 0 - 1 للموضوعية (0) والذاتية (1).
+
+ألقِ نظرة أخرى على *Pride and Prejudice* لجين أوستن. النص متاح هنا في [Project Gutenberg](https://www.gutenberg.org/files/1342/1342-h/1342-h.htm). المثال أدناه يظهر برنامجًا قصيرًا يحلل مشاعر الجملة الأولى والأخيرة من الكتاب ويعرض درجة قطبية المشاعر ودرجة الموضوعية/الذاتية.
+
+يجب عليك استخدام مكتبة `TextBlob` (الموصوفة أعلاه) لتحديد `sentiment` (لا تحتاج إلى كتابة حاسبة مشاعر خاصة بك) في المهمة التالية.
+
+```python
+from textblob import TextBlob
+
+quote1 = """It is a truth universally acknowledged, that a single man in possession of a good fortune, must be in want of a wife."""
+
+quote2 = """Darcy, as well as Elizabeth, really loved them; and they were both ever sensible of the warmest gratitude towards the persons who, by bringing her into Derbyshire, had been the means of uniting them."""
+
+sentiment1 = TextBlob(quote1).sentiment
+sentiment2 = TextBlob(quote2).sentiment
+
+print(quote1 + " has a sentiment of " + str(sentiment1))
+print(quote2 + " has a sentiment of " + str(sentiment2))
+```
+
+سترى الناتج التالي:
+
+```output
+It is a truth universally acknowledged, that a single man in possession of a good fortune, must be in want # of a wife. has a sentiment of Sentiment(polarity=0.20952380952380953, subjectivity=0.27142857142857146)
+
+Darcy, as well as Elizabeth, really loved them; and they were
+ both ever sensible of the warmest gratitude towards the persons
+ who, by bringing her into Derbyshire, had been the means of
+ uniting them. has a sentiment of Sentiment(polarity=0.7, subjectivity=0.8)
+```
+
+## تحدي - تحقق من قطبية المشاعر
+
+مهمتك هي تحديد، باستخدام قطبية المشاعر، ما إذا كان *Pride and Prejudice* يحتوي على جمل إيجابية تمامًا أكثر من الجمل السلبية تمامًا. لهذه المهمة، يمكنك افتراض أن درجة القطبية 1 أو -1 هي إيجابية تمامًا أو سلبية تمامًا على التوالي.
+
+**الخطوات:**
+
+1. قم بتنزيل [نسخة من Pride and Prejudice](https://www.gutenberg.org/files/1342/1342-h/1342-h.htm) من Project Gutenberg كملف .txt. قم بإزالة البيانات الوصفية في بداية ونهاية الملف، تاركًا النص الأصلي فقط
+2. افتح الملف في Python واستخرج المحتويات كسلسلة نصية
+3. أنشئ TextBlob باستخدام سلسلة النصوص الخاصة بالكتاب
+4. قم بتحليل كل جملة في الكتاب في حلقة
+ 1. إذا كانت القطبية 1 أو -1، قم بتخزين الجملة في مصفوفة أو قائمة للرسائل الإيجابية أو السلبية
+5. في النهاية، قم بطباعة جميع الجمل الإيجابية والجمل السلبية (بشكل منفصل) وعدد كل منها.
+
+إليك [حل نموذجي](https://github.com/microsoft/ML-For-Beginners/blob/main/6-NLP/3-Translation-Sentiment/solution/notebook.ipynb).
+
+✅ تحقق من المعرفة
+
+1. المشاعر تعتمد على الكلمات المستخدمة في الجملة، ولكن هل *يفهم* الكود الكلمات؟
+2. هل تعتقد أن قطبية المشاعر دقيقة، أو بمعنى آخر، هل *تتفق* مع الدرجات؟
+ 1. على وجه الخصوص، هل تتفق أو تختلف مع القطبية الإيجابية المطلقة للجمل التالية؟
+ * “What an excellent father you have, girls!” said she, when the door was shut.
+ * “Your examination of Mr. Darcy is over, I presume,” said Miss Bingley; “and pray what is the result?” “I am perfectly convinced by it that Mr. Darcy has no defect.
+ * How wonderfully these sort of things occur!
+ * I have the greatest dislike in the world to that sort of thing.
+ * Charlotte is an excellent manager, I dare say.
+ * “This is delightful indeed!
+ * I am so happy!
+ * Your idea of the ponies is delightful.
+ 2. الجمل الثلاث التالية تم تصنيفها بقطبية إيجابية مطلقة، ولكن عند القراءة الدقيقة، فهي ليست جمل إيجابية. لماذا اعتقد تحليل المشاعر أنها جمل إيجابية؟
+ * Happy shall I be, when his stay at Netherfield is over!” “I wish I could say anything to comfort you,” replied Elizabeth; “but it is wholly out of my power.
+ * If I could but see you as happy!
+ * Our distress, my dear Lizzy, is very great.
+ 3. هل تتفق أو تختلف مع القطبية السلبية المطلقة للجمل التالية؟
+ - Everybody is disgusted with his pride.
+ - “I should like to know how he behaves among strangers.” “You shall hear then—but prepare yourself for something very dreadful.
+ - The pause was to Elizabeth’s feelings dreadful.
+ - It would be dreadful!
+
+✅ أي شخص مهتم بجين أوستن سيفهم أنها غالبًا ما تستخدم كتبها لانتقاد الجوانب الأكثر سخافة في مجتمع إنجلترا في عصر الوصاية. إليزابيث بينيت، الشخصية الرئيسية في *Pride and Prejudice*، هي مراقبة اجتماعية بارعة (مثل المؤلفة) ولغتها غالبًا ما تكون مليئة بالتلميحات. حتى السيد دارسي (الحب الرئيسي في القصة) يلاحظ استخدام إليزابيث المرح والمزاح للغة: "لقد كان لي شرف معرفتك لفترة كافية لأعرف أنك تجد متعة كبيرة في التعبير عن آراء ليست في الواقع آرائك."
+
+---
+
+## 🚀تحدي
+
+هل يمكنك تحسين Marvin أكثر عن طريق استخراج ميزات أخرى من مدخلات المستخدم؟
+
+## [اختبار ما بعد المحاضرة](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/36/)
+
+## المراجعة والدراسة الذاتية
+هناك العديد من الطرق لاستخلاص المشاعر من النصوص. فكر في التطبيقات التجارية التي قد تستفيد من هذه التقنية. فكر أيضًا في كيفية احتمال حدوث أخطاء عند استخدامها. اقرأ المزيد عن الأنظمة المتطورة الجاهزة للمؤسسات التي تحلل المشاعر مثل [Azure Text Analysis](https://docs.microsoft.com/azure/cognitive-services/Text-Analytics/how-tos/text-analytics-how-to-sentiment-analysis?tabs=version-3-1?WT.mc_id=academic-77952-leestott). جرّب بعض الجمل من رواية "كبرياء وتحامل" المذكورة أعلاه، وشاهد ما إذا كان بإمكانها اكتشاف الفروق الدقيقة.
+
+## المهمة
+
+[الرخصة الشعرية](assignment.md)
+
+---
+
+**إخلاء المسؤولية**:
+تمت ترجمة هذا المستند باستخدام خدمة الترجمة بالذكاء الاصطناعي [Co-op Translator](https://github.com/Azure/co-op-translator). بينما نسعى لتحقيق الدقة، يرجى العلم أن الترجمات الآلية قد تحتوي على أخطاء أو معلومات غير دقيقة. يجب اعتبار المستند الأصلي بلغته الأصلية المصدر الموثوق. للحصول على معلومات حساسة أو هامة، يُوصى بالاستعانة بترجمة بشرية احترافية. نحن غير مسؤولين عن أي سوء فهم أو تفسيرات خاطئة تنشأ عن استخدام هذه الترجمة.
\ No newline at end of file
diff --git a/translations/ar/6-NLP/3-Translation-Sentiment/assignment.md b/translations/ar/6-NLP/3-Translation-Sentiment/assignment.md
new file mode 100644
index 000000000..8ef25e023
--- /dev/null
+++ b/translations/ar/6-NLP/3-Translation-Sentiment/assignment.md
@@ -0,0 +1,25 @@
+
+# رخصة شعرية
+
+## التعليمات
+
+في [هذا الدفتر](https://www.kaggle.com/jenlooper/emily-dickinson-word-frequency) يمكنك العثور على أكثر من 500 قصيدة لإميلي ديكنسون تم تحليلها مسبقًا لتحديد المشاعر باستخدام تحليلات النصوص من Azure. باستخدام هذه المجموعة من البيانات، قم بتحليلها باستخدام التقنيات الموضحة في الدرس. هل يتطابق الشعور المقترح للقصيدة مع قرار خدمة Azure الأكثر تطورًا؟ لماذا أو لماذا لا، برأيك؟ هل هناك شيء يفاجئك؟
+
+## المعيار
+
+| المعايير | مثالي | مقبول | يحتاج إلى تحسين |
+| -------- | -------------------------------------------------------------------------- | ----------------------------------------------------- | ------------------------ |
+| | يتم تقديم دفتر يحتوي على تحليل قوي لعينة من أعمال المؤلف | الدفتر غير مكتمل أو لا يقوم بالتحليل | لم يتم تقديم أي دفتر |
+
+---
+
+**إخلاء المسؤولية**:
+تمت ترجمة هذه الوثيقة باستخدام خدمة الترجمة الآلية [Co-op Translator](https://github.com/Azure/co-op-translator). بينما نسعى لتحقيق الدقة، يرجى العلم أن الترجمات الآلية قد تحتوي على أخطاء أو معلومات غير دقيقة. يجب اعتبار الوثيقة الأصلية بلغتها الأصلية المصدر الموثوق. للحصول على معلومات حساسة أو هامة، يُوصى بالاستعانة بترجمة بشرية احترافية. نحن غير مسؤولين عن أي سوء فهم أو تفسيرات خاطئة ناتجة عن استخدام هذه الترجمة.
\ No newline at end of file
diff --git a/translations/ar/6-NLP/3-Translation-Sentiment/solution/Julia/README.md b/translations/ar/6-NLP/3-Translation-Sentiment/solution/Julia/README.md
new file mode 100644
index 000000000..8011803ab
--- /dev/null
+++ b/translations/ar/6-NLP/3-Translation-Sentiment/solution/Julia/README.md
@@ -0,0 +1,15 @@
+
+هذا مجرد عنصر نائب مؤقت
+
+---
+
+**إخلاء المسؤولية**:
+تمت ترجمة هذا المستند باستخدام خدمة الترجمة الآلية [Co-op Translator](https://github.com/Azure/co-op-translator). بينما نسعى لتحقيق الدقة، يرجى العلم أن الترجمات الآلية قد تحتوي على أخطاء أو معلومات غير دقيقة. يجب اعتبار المستند الأصلي بلغته الأصلية هو المصدر الموثوق. للحصول على معلومات حساسة أو هامة، يُوصى بالاستعانة بترجمة بشرية احترافية. نحن غير مسؤولين عن أي سوء فهم أو تفسيرات خاطئة تنشأ عن استخدام هذه الترجمة.
\ No newline at end of file
diff --git a/translations/ar/6-NLP/3-Translation-Sentiment/solution/R/README.md b/translations/ar/6-NLP/3-Translation-Sentiment/solution/R/README.md
new file mode 100644
index 000000000..4bbc6fd12
--- /dev/null
+++ b/translations/ar/6-NLP/3-Translation-Sentiment/solution/R/README.md
@@ -0,0 +1,15 @@
+
+هذا عنصر نائب مؤقت
+
+---
+
+**إخلاء المسؤولية**:
+تمت ترجمة هذا المستند باستخدام خدمة الترجمة الآلية [Co-op Translator](https://github.com/Azure/co-op-translator). بينما نسعى لتحقيق الدقة، يرجى العلم أن الترجمات الآلية قد تحتوي على أخطاء أو معلومات غير دقيقة. يجب اعتبار المستند الأصلي بلغته الأصلية هو المصدر الموثوق. للحصول على معلومات حساسة أو هامة، يُوصى بالاستعانة بترجمة بشرية احترافية. نحن غير مسؤولين عن أي سوء فهم أو تفسيرات خاطئة تنشأ عن استخدام هذه الترجمة.
\ No newline at end of file
diff --git a/translations/ar/6-NLP/3-Translation-Sentiment/solution/notebook.ipynb b/translations/ar/6-NLP/3-Translation-Sentiment/solution/notebook.ipynb
new file mode 100644
index 000000000..d5ade7684
--- /dev/null
+++ b/translations/ar/6-NLP/3-Translation-Sentiment/solution/notebook.ipynb
@@ -0,0 +1,100 @@
+{
+ "metadata": {
+ "language_info": {
+ "codemirror_mode": {
+ "name": "ipython",
+ "version": 3
+ },
+ "file_extension": ".py",
+ "mimetype": "text/x-python",
+ "name": "python",
+ "nbconvert_exporter": "python",
+ "pygments_lexer": "ipython3",
+ "version": 3
+ },
+ "orig_nbformat": 4,
+ "coopTranslator": {
+ "original_hash": "27de2abc0235ebd22080fc8f1107454d",
+ "translation_date": "2025-08-29T15:43:46+00:00",
+ "source_file": "6-NLP/3-Translation-Sentiment/solution/notebook.ipynb",
+ "language_code": "ar"
+ }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 2,
+ "cells": [
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "from textblob import TextBlob\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "# You should download the book text, clean it, and import it here\n",
+ "with open(\"pride.txt\", encoding=\"utf8\") as f:\n",
+ " file_contents = f.read()\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "book_pride = TextBlob(file_contents)\n",
+ "positive_sentiment_sentences = []\n",
+ "negative_sentiment_sentences = []"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "for sentence in book_pride.sentences:\n",
+ " if sentence.sentiment.polarity == 1:\n",
+ " positive_sentiment_sentences.append(sentence)\n",
+ " if sentence.sentiment.polarity == -1:\n",
+ " negative_sentiment_sentences.append(sentence)\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "print(\"The \" + str(len(positive_sentiment_sentences)) + \" most positive sentences:\")\n",
+ "for sentence in positive_sentiment_sentences:\n",
+ " print(\"+ \" + str(sentence.replace(\"\\n\", \"\").replace(\" \", \" \")))\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "print(\"The \" + str(len(negative_sentiment_sentences)) + \" most negative sentences:\")\n",
+ "for sentence in negative_sentiment_sentences:\n",
+ " print(\"- \" + str(sentence.replace(\"\\n\", \"\").replace(\" \", \" \")))"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "\n---\n\n**إخلاء المسؤولية**: \nتم ترجمة هذا المستند باستخدام خدمة الترجمة بالذكاء الاصطناعي [Co-op Translator](https://github.com/Azure/co-op-translator). بينما نسعى لتحقيق الدقة، يرجى العلم أن الترجمات الآلية قد تحتوي على أخطاء أو معلومات غير دقيقة. يجب اعتبار المستند الأصلي بلغته الأصلية المصدر الموثوق. للحصول على معلومات حاسمة، يُوصى بالاستعانة بترجمة بشرية احترافية. نحن غير مسؤولين عن أي سوء فهم أو تفسيرات خاطئة ناتجة عن استخدام هذه الترجمة.\n"
+ ]
+ }
+ ]
+}
\ No newline at end of file
diff --git a/translations/ar/6-NLP/4-Hotel-Reviews-1/README.md b/translations/ar/6-NLP/4-Hotel-Reviews-1/README.md
new file mode 100644
index 000000000..93b1c800c
--- /dev/null
+++ b/translations/ar/6-NLP/4-Hotel-Reviews-1/README.md
@@ -0,0 +1,418 @@
+
+# تحليل المشاعر باستخدام تقييمات الفنادق - معالجة البيانات
+
+في هذا القسم، ستستخدم التقنيات التي تعلمتها في الدروس السابقة لإجراء تحليل استكشافي للبيانات على مجموعة بيانات كبيرة. بمجرد أن تحصل على فهم جيد لفائدة الأعمدة المختلفة، ستتعلم:
+
+- كيفية إزالة الأعمدة غير الضرورية
+- كيفية حساب بيانات جديدة بناءً على الأعمدة الموجودة
+- كيفية حفظ مجموعة البيانات الناتجة لاستخدامها في التحدي النهائي
+
+## [اختبار ما قبل المحاضرة](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/37/)
+
+### المقدمة
+
+حتى الآن، تعلمت أن البيانات النصية تختلف تمامًا عن البيانات الرقمية. إذا كانت النصوص مكتوبة أو منطوقة من قبل البشر، يمكن تحليلها لاكتشاف الأنماط والتكرارات، المشاعر والمعاني. تأخذك هذه الدرسة إلى مجموعة بيانات حقيقية مع تحدٍ حقيقي: **[515K تقييمات فنادق في أوروبا](https://www.kaggle.com/jiashenliu/515k-hotel-reviews-data-in-europe)** وتشمل [رخصة CC0: المجال العام](https://creativecommons.org/publicdomain/zero/1.0/). تم جمع البيانات من Booking.com من مصادر عامة. منشئ مجموعة البيانات هو Jiashen Liu.
+
+### التحضير
+
+ستحتاج إلى:
+
+- القدرة على تشغيل دفاتر .ipynb باستخدام Python 3
+- مكتبة pandas
+- مكتبة NLTK، [والتي يجب تثبيتها محليًا](https://www.nltk.org/install.html)
+- مجموعة البيانات المتوفرة على Kaggle [515K تقييمات فنادق في أوروبا](https://www.kaggle.com/jiashenliu/515k-hotel-reviews-data-in-europe). حجمها حوالي 230 ميجابايت بعد فك الضغط. قم بتنزيلها إلى مجلد `/data` الجذر المرتبط بهذه الدروس.
+
+## التحليل الاستكشافي للبيانات
+
+يفترض هذا التحدي أنك تقوم ببناء روبوت توصيات للفنادق باستخدام تحليل المشاعر وتقييمات الضيوف. تتضمن مجموعة البيانات التي ستستخدمها تقييمات لـ 1493 فندقًا مختلفًا في 6 مدن.
+
+باستخدام Python، ومجموعة بيانات تقييمات الفنادق، وتحليل المشاعر باستخدام NLTK، يمكنك اكتشاف:
+
+- ما هي الكلمات والعبارات الأكثر استخدامًا في التقييمات؟
+- هل تتطابق *العلامات* الرسمية التي تصف الفندق مع درجات التقييم (على سبيل المثال، هل التقييمات السلبية أكثر لفندق معين من قبل *عائلة مع أطفال صغار* مقارنة بـ *مسافر منفرد*، مما قد يشير إلى أنه أفضل لـ *المسافرين المنفردين*)؟
+- هل تتفق درجات المشاعر في NLTK مع التقييم الرقمي للمراجع؟
+
+#### مجموعة البيانات
+
+دعونا نستكشف مجموعة البيانات التي قمت بتنزيلها وحفظها محليًا. افتح الملف في محرر مثل VS Code أو حتى Excel.
+
+رؤوس الأعمدة في مجموعة البيانات هي كما يلي:
+
+*Hotel_Address, Additional_Number_of_Scoring, Review_Date, Average_Score, Hotel_Name, Reviewer_Nationality, Negative_Review, Review_Total_Negative_Word_Counts, Total_Number_of_Reviews, Positive_Review, Review_Total_Positive_Word_Counts, Total_Number_of_Reviews_Reviewer_Has_Given, Reviewer_Score, Tags, days_since_review, lat, lng*
+
+هنا تم تجميعها بطريقة قد تكون أسهل للفحص:
+##### أعمدة الفندق
+
+- `Hotel_Name`, `Hotel_Address`, `lat` (خط العرض), `lng` (خط الطول)
+ - باستخدام *lat* و*lng* يمكنك رسم خريطة باستخدام Python تُظهر مواقع الفنادق (ربما يتم تلوينها حسب التقييمات السلبية والإيجابية)
+ - من الواضح أن Hotel_Address ليس مفيدًا لنا، وربما نستبدله بدولة لتسهيل الفرز والبحث
+
+**أعمدة المراجعات العامة للفندق**
+
+- `Average_Score`
+ - وفقًا لمنشئ مجموعة البيانات، هذا العمود هو *متوسط تقييم الفندق، محسوب بناءً على أحدث تعليق في العام الماضي*. يبدو أن هذه طريقة غير عادية لحساب التقييم، ولكن بما أن هذه هي البيانات المستخرجة، يمكننا قبولها كما هي في الوقت الحالي.
+
+ ✅ بناءً على الأعمدة الأخرى في هذه البيانات، هل يمكنك التفكير في طريقة أخرى لحساب متوسط التقييم؟
+
+- `Total_Number_of_Reviews`
+ - إجمالي عدد التقييمات التي تلقاها هذا الفندق - ليس من الواضح (دون كتابة بعض الأكواد) ما إذا كان هذا يشير إلى التقييمات في مجموعة البيانات.
+- `Additional_Number_of_Scoring`
+ - يعني أن التقييم تم تقديمه ولكن لم يتم كتابة مراجعة إيجابية أو سلبية من قبل المراجع.
+
+**أعمدة المراجعات**
+
+- `Reviewer_Score`
+ - هذه قيمة رقمية بأقصى حد عشري واحد بين القيم الدنيا والقصوى 2.5 و10
+ - لم يتم توضيح سبب كون 2.5 هو أدنى تقييم ممكن
+- `Negative_Review`
+ - إذا لم يكتب المراجع شيئًا، سيكون هذا الحقل "**No Negative**"
+ - لاحظ أن المراجع قد يكتب مراجعة إيجابية في عمود المراجعة السلبية (على سبيل المثال، "لا يوجد شيء سيء في هذا الفندق")
+- `Review_Total_Negative_Word_Counts`
+ - تشير أعداد الكلمات السلبية الأعلى إلى تقييم أقل (دون التحقق من المشاعر)
+- `Positive_Review`
+ - إذا لم يكتب المراجع شيئًا، سيكون هذا الحقل "**No Positive**"
+ - لاحظ أن المراجع قد يكتب مراجعة سلبية في عمود المراجعة الإيجابية (على سبيل المثال، "لا يوجد شيء جيد في هذا الفندق على الإطلاق")
+- `Review_Total_Positive_Word_Counts`
+ - تشير أعداد الكلمات الإيجابية الأعلى إلى تقييم أعلى (دون التحقق من المشاعر)
+- `Review_Date` و`days_since_review`
+ - يمكن تطبيق مقياس حداثة أو قدم على المراجعة (قد لا تكون المراجعات القديمة دقيقة مثل المراجعات الجديدة بسبب تغييرات في إدارة الفندق، أو تجديدات، أو إضافة مرافق مثل مسبح)
+- `Tags`
+ - هذه أوصاف قصيرة قد يختارها المراجع لوصف نوع الضيف الذي كان عليه (على سبيل المثال، منفرد أو عائلة)، نوع الغرفة التي حصل عليها، مدة الإقامة وكيفية تقديم المراجعة.
+ - لسوء الحظ، استخدام هذه العلامات يمثل مشكلة، تحقق من القسم أدناه الذي يناقش فائدتها.
+
+**أعمدة المراجع**
+
+- `Total_Number_of_Reviews_Reviewer_Has_Given`
+ - قد يكون هذا عاملًا في نموذج التوصية، على سبيل المثال، إذا كان بإمكانك تحديد أن المراجعين الأكثر إنتاجية الذين لديهم مئات المراجعات كانوا أكثر ميلًا إلى السلبية بدلاً من الإيجابية. ومع ذلك، فإن المراجع لأي مراجعة معينة غير معرف برمز فريد، وبالتالي لا يمكن ربطه بمجموعة من المراجعات. هناك 30 مراجعًا لديهم 100 مراجعة أو أكثر، ولكن من الصعب رؤية كيف يمكن أن يساعد ذلك في نموذج التوصية.
+- `Reviewer_Nationality`
+ - قد يعتقد البعض أن بعض الجنسيات أكثر ميلًا لتقديم مراجعات إيجابية أو سلبية بسبب ميول وطنية. كن حذرًا عند بناء مثل هذه الآراء القصصية في نماذجك. هذه قوالب نمطية وطنية (وأحيانًا عرقية)، وكل مراجع هو فرد كتب مراجعة بناءً على تجربته. قد تكون قد تمت تصفيتها من خلال العديد من العدسات مثل إقاماتهم الفندقية السابقة، المسافة التي قطعوها، ومزاجهم الشخصي. التفكير بأن جنسيتهم كانت السبب في تقييمهم أمر يصعب تبريره.
+
+##### أمثلة
+
+| متوسط التقييم | إجمالي عدد التقييمات | تقييم المراجع | المراجعة السلبية | المراجعة الإيجابية | العلامات |
+| -------------- | ---------------------- | ---------------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------- | ----------------------------------------------------------------------------------------- |
+| 7.8 | 1945 | 2.5 | هذا ليس فندقًا حاليًا بل موقع بناء. تعرضت للإزعاج من الضوضاء غير المقبولة طوال اليوم أثناء الراحة بعد رحلة طويلة والعمل في الغرفة. طلبت تغيير الغرفة ولكن لم تكن هناك غرفة هادئة متاحة. الأسوأ من ذلك، تم تحميلي رسومًا زائدة. غادرت في المساء لأنني كنت بحاجة إلى مغادرة مبكرة جدًا. مكان رهيب. لا تعاقب نفسك بالحجز هنا. | لا شيء. مكان رهيب. ابتعد. | رحلة عمل، زوجان، غرفة مزدوجة قياسية، إقامة لمدة ليلتين |
+
+كما ترى، لم يكن هذا الضيف سعيدًا بإقامته في هذا الفندق. الفندق لديه متوسط تقييم جيد يبلغ 7.8 و1945 مراجعة، لكن هذا المراجع أعطاه 2.5 وكتب 115 كلمة عن مدى سلبية إقامته. إذا لم يكتبوا شيئًا على الإطلاق في عمود المراجعة الإيجابية، قد تستنتج أنه لم يكن هناك شيء إيجابي، ولكن للأسف كتبوا 7 كلمات تحذيرية. إذا قمنا فقط بعد الكلمات بدلاً من معنى الكلمات أو مشاعرها، قد نحصل على رؤية مشوهة لنية المراجع. الغريب أن تقييمهم بـ 2.5 محير، لأنه إذا كانت الإقامة في الفندق سيئة جدًا، فلماذا يعطونه أي نقاط على الإطلاق؟ عند التحقيق في مجموعة البيانات عن كثب، ستلاحظ أن أدنى تقييم ممكن هو 2.5، وليس 0. وأعلى تقييم ممكن هو 10.
+
+##### العلامات
+
+كما ذكر أعلاه، عند النظر لأول مرة، يبدو أن فكرة استخدام `Tags` لتصنيف البيانات منطقية. لسوء الحظ، هذه العلامات ليست موحدة، مما يعني أنه في فندق معين، قد تكون الخيارات *غرفة فردية*، *غرفة مزدوجة*، و*غرفة توأم*، ولكن في الفندق التالي، تكون *غرفة فردية ديلوكس*، *غرفة كلاسيكية كوين*، و*غرفة تنفيذية كينغ*. قد تكون هذه نفس الأشياء، ولكن هناك العديد من الاختلافات بحيث يصبح الخيار:
+
+1. محاولة تغيير جميع المصطلحات إلى معيار واحد، وهو أمر صعب للغاية، لأنه ليس من الواضح ما هو مسار التحويل في كل حالة (على سبيل المثال، *غرفة فردية كلاسيكية* تتطابق مع *غرفة فردية* ولكن *غرفة كوين متفوقة مع إطلالة على الحديقة أو المدينة* أصعب في المطابقة)
+
+2. يمكننا اتخاذ نهج NLP وقياس تكرار مصطلحات معينة مثل *منفرد*، *مسافر عمل*، أو *عائلة مع أطفال صغار* كما تنطبق على كل فندق، وإدخال ذلك في التوصية.
+
+العلامات عادةً (ولكن ليس دائمًا) تكون حقلًا واحدًا يحتوي على قائمة من 5 إلى 6 قيم مفصولة بفواصل تتماشى مع *نوع الرحلة*، *نوع الضيوف*، *نوع الغرفة*، *عدد الليالي*، و*نوع الجهاز الذي تم تقديم المراجعة عليه*. ومع ذلك، نظرًا لأن بعض المراجعين لا يملؤون كل حقل (قد يتركون واحدًا فارغًا)، فإن القيم ليست دائمًا بنفس الترتيب.
+
+كمثال، خذ *نوع المجموعة*. هناك 1025 إمكانية فريدة في هذا الحقل في عمود `Tags`، وللأسف فقط بعضها يشير إلى مجموعة (بعضها يشير إلى نوع الغرفة وما إلى ذلك). إذا قمت بتصفية فقط القيم التي تشير إلى العائلة، تحتوي النتائج على العديد من النتائج من نوع *غرفة عائلية*. إذا قمت بتضمين مصطلح *مع*، أي عد القيم *عائلة مع*، تكون النتائج أفضل، مع أكثر من 80,000 من أصل 515,000 نتيجة تحتوي على العبارة "عائلة مع أطفال صغار" أو "عائلة مع أطفال كبار".
+
+هذا يعني أن عمود العلامات ليس عديم الفائدة تمامًا بالنسبة لنا، ولكنه سيحتاج إلى بعض العمل لجعله مفيدًا.
+
+##### متوسط تقييم الفندق
+
+هناك عدد من الغرائب أو التناقضات مع مجموعة البيانات التي لا أستطيع فهمها، ولكنها موضحة هنا لتكون على دراية بها عند بناء نماذجك. إذا اكتشفتها، يرجى إخبارنا في قسم المناقشة!
+
+تحتوي مجموعة البيانات على الأعمدة التالية المتعلقة بمتوسط التقييم وعدد المراجعات:
+
+1. Hotel_Name
+2. Additional_Number_of_Scoring
+3. Average_Score
+4. Total_Number_of_Reviews
+5. Reviewer_Score
+
+الفندق الوحيد الذي يحتوي على أكبر عدد من المراجعات في هذه المجموعة هو *Britannia International Hotel Canary Wharf* مع 4789 مراجعة من أصل 515,000. ولكن إذا نظرنا إلى قيمة `Total_Number_of_Reviews` لهذا الفندق، فهي 9086. قد تستنتج أن هناك العديد من التقييمات بدون مراجعات، لذا ربما يجب أن نضيف قيمة عمود `Additional_Number_of_Scoring`. تلك القيمة هي 2682، وإضافتها إلى 4789 تعطينا 7471، وهو ما يزال أقل بـ 1615 من `Total_Number_of_Reviews`.
+
+إذا أخذت عمود `Average_Score`، قد تستنتج أنه متوسط المراجعات في مجموعة البيانات، ولكن الوصف من Kaggle هو "*متوسط تقييم الفندق، محسوب بناءً على أحدث تعليق في العام الماضي*". هذا لا يبدو مفيدًا جدًا، ولكن يمكننا حساب متوسطنا الخاص بناءً على تقييمات المراجعين في مجموعة البيانات. باستخدام نفس الفندق كمثال، متوسط تقييم الفندق المعطى هو 7.1 ولكن التقييم المحسوب (متوسط تقييمات المراجعين *في* مجموعة البيانات) هو 6.8. هذا قريب، ولكنه ليس نفس القيمة، ويمكننا فقط التخمين أن التقييمات المعطاة في مراجعات `Additional_Number_of_Scoring` زادت المتوسط إلى 7.1. لسوء الحظ، مع عدم وجود طريقة لاختبار أو إثبات هذا الافتراض، من الصعب استخدام أو الوثوق بـ `Average_Score`، `Additional_Number_of_Scoring` و`Total_Number_of_Reviews` عندما تستند إلى، أو تشير إلى، بيانات لا نملكها.
+
+لتعقيد الأمور أكثر، الفندق الذي يحتوي على ثاني أعلى عدد من المراجعات لديه متوسط تقييم محسوب يبلغ 8.12 ومتوسط التقييم في مجموعة البيانات هو 8.1. هل هذا التقييم صحيح مصادفة أم أن الفندق الأول هو التناقض؟
+في حال كان هذا الفندق حالة شاذة، وربما تكون معظم القيم متطابقة (لكن بعضها لا يتطابق لسبب ما)، سنكتب برنامجًا قصيرًا لاستكشاف القيم في مجموعة البيانات وتحديد الاستخدام الصحيح (أو عدم الاستخدام) لهذه القيم.
+
+> 🚨 ملاحظة تحذيرية
+>
+> عند العمل مع هذه المجموعة من البيانات، ستكتب كودًا يحسب شيئًا من النص دون الحاجة إلى قراءة النص أو تحليله بنفسك. هذه هي جوهر معالجة اللغة الطبيعية (NLP)، تفسير المعنى أو المشاعر دون الحاجة إلى تدخل بشري. ومع ذلك، قد تقرأ بعض المراجعات السلبية. أنصحك بعدم القيام بذلك، لأنك لست بحاجة لذلك. بعض هذه المراجعات سخيفة أو غير ذات صلة، مثل "الطقس لم يكن جيدًا"، وهو أمر خارج عن سيطرة الفندق أو أي شخص. ولكن هناك جانب مظلم لبعض المراجعات أيضًا. أحيانًا تكون المراجعات السلبية عنصرية أو متحيزة جنسيًا أو عمرية. هذا أمر مؤسف ولكنه متوقع في مجموعة بيانات مأخوذة من موقع عام. بعض المراجعين يتركون مراجعات قد تجدها غير لائقة أو مزعجة أو مؤلمة. من الأفضل أن تدع الكود يقيس المشاعر بدلاً من قراءتها بنفسك والتأثر بها. ومع ذلك، فإن الذين يكتبون مثل هذه الأمور هم أقلية، لكنهم موجودون.
+
+## تمرين - استكشاف البيانات
+### تحميل البيانات
+
+يكفي النظر إلى البيانات بصريًا، الآن ستكتب بعض الكود للحصول على إجابات! يستخدم هذا القسم مكتبة pandas. أول مهمة لك هي التأكد من أنه يمكنك تحميل وقراءة بيانات CSV. تحتوي مكتبة pandas على أداة تحميل CSV سريعة، ويتم وضع النتيجة في إطار بيانات، كما في الدروس السابقة. يحتوي ملف CSV الذي نقوم بتحميله على أكثر من نصف مليون صف، ولكن فقط 17 عمودًا. توفر pandas العديد من الطرق القوية للتفاعل مع إطار البيانات، بما في ذلك القدرة على إجراء عمليات على كل صف.
+
+من هنا فصاعدًا في هذا الدرس، ستكون هناك مقتطفات من الكود وبعض الشروحات للكود وبعض المناقشات حول ما تعنيه النتائج. استخدم الملف _notebook.ipynb_ المرفق لكتابة الكود الخاص بك.
+
+لنبدأ بتحميل ملف البيانات الذي ستستخدمه:
+
+```python
+# Load the hotel reviews from CSV
+import pandas as pd
+import time
+# importing time so the start and end time can be used to calculate file loading time
+print("Loading data file now, this could take a while depending on file size")
+start = time.time()
+# df is 'DataFrame' - make sure you downloaded the file to the data folder
+df = pd.read_csv('../../data/Hotel_Reviews.csv')
+end = time.time()
+print("Loading took " + str(round(end - start, 2)) + " seconds")
+```
+
+الآن بعد أن تم تحميل البيانات، يمكننا إجراء بعض العمليات عليها. احتفظ بهذا الكود في أعلى البرنامج للجزء التالي.
+
+## استكشاف البيانات
+
+في هذه الحالة، البيانات بالفعل *نظيفة*، مما يعني أنها جاهزة للعمل عليها، ولا تحتوي على أحرف بلغات أخرى قد تسبب مشاكل للخوارزميات التي تتوقع أحرفًا باللغة الإنجليزية فقط.
+
+✅ قد تضطر إلى العمل مع بيانات تحتاج إلى بعض المعالجة الأولية لتنسيقها قبل تطبيق تقنيات معالجة اللغة الطبيعية، ولكن ليس هذه المرة. إذا اضطررت لذلك، كيف ستتعامل مع الأحرف غير الإنجليزية؟
+
+خذ لحظة للتأكد من أنه بمجرد تحميل البيانات، يمكنك استكشافها باستخدام الكود. من السهل جدًا التركيز على الأعمدة `Negative_Review` و `Positive_Review`. هذه الأعمدة مليئة بالنص الطبيعي لمعالجة خوارزميات معالجة اللغة الطبيعية. ولكن انتظر! قبل أن تبدأ في معالجة اللغة الطبيعية وتحليل المشاعر، يجب أن تتبع الكود أدناه للتحقق مما إذا كانت القيم المعطاة في مجموعة البيانات تتطابق مع القيم التي تحسبها باستخدام pandas.
+
+## عمليات إطار البيانات
+
+المهمة الأولى في هذا الدرس هي التحقق مما إذا كانت الافتراضات التالية صحيحة عن طريق كتابة كود يفحص إطار البيانات (دون تغييره).
+
+> مثل العديد من مهام البرمجة، هناك عدة طرق لإكمال ذلك، ولكن النصيحة الجيدة هي القيام بذلك بأبسط وأسهل طريقة ممكنة، خاصة إذا كان ذلك سيكون أسهل للفهم عندما تعود إلى هذا الكود في المستقبل. مع إطارات البيانات، هناك واجهة برمجية شاملة غالبًا ما تحتوي على طريقة للقيام بما تريد بكفاءة.
+
+تعامل مع الأسئلة التالية كمهام برمجية وحاول الإجابة عليها دون النظر إلى الحل.
+
+1. اطبع *الشكل* الخاص بإطار البيانات الذي قمت بتحميله للتو (الشكل هو عدد الصفوف والأعمدة).
+2. احسب عدد مرات تكرار الجنسيات للمراجعين:
+ 1. كم عدد القيم المميزة الموجودة في العمود `Reviewer_Nationality` وما هي؟
+ 2. ما هي الجنسية الأكثر شيوعًا بين المراجعين في مجموعة البيانات (اطبع البلد وعدد المراجعات)؟
+ 3. ما هي الجنسيات العشر الأكثر تكرارًا التالية، وعدد مرات تكرارها؟
+3. ما هو الفندق الأكثر مراجعة لكل من الجنسيات العشر الأكثر تكرارًا؟
+4. كم عدد المراجعات لكل فندق (عدد مرات تكرار الفندق) في مجموعة البيانات؟
+5. بينما يوجد عمود `Average_Score` لكل فندق في مجموعة البيانات، يمكنك أيضًا حساب متوسط النقاط (الحصول على متوسط جميع نقاط المراجعين في مجموعة البيانات لكل فندق). أضف عمودًا جديدًا إلى إطار البيانات بعنوان `Calc_Average_Score` يحتوي على هذا المتوسط المحسوب.
+6. هل هناك أي فنادق لديها نفس القيمة (مقربة إلى مكان عشري واحد) في العمودين `Average_Score` و `Calc_Average_Score`؟
+ 1. حاول كتابة دالة Python تأخذ سلسلة (صف) كوسيطة وتقارن القيم، وتطبع رسالة عندما تكون القيم غير متساوية. ثم استخدم الطريقة `.apply()` لمعالجة كل صف باستخدام الدالة.
+7. احسب واطبع عدد الصفوف التي تحتوي على قيم "No Negative" في العمود `Negative_Review`.
+8. احسب واطبع عدد الصفوف التي تحتوي على قيم "No Positive" في العمود `Positive_Review`.
+9. احسب واطبع عدد الصفوف التي تحتوي على قيم "No Positive" في العمود `Positive_Review` **و** قيم "No Negative" في العمود `Negative_Review`.
+
+### إجابات الكود
+
+1. اطبع *الشكل* الخاص بإطار البيانات الذي قمت بتحميله للتو (الشكل هو عدد الصفوف والأعمدة).
+
+ ```python
+ print("The shape of the data (rows, cols) is " + str(df.shape))
+ > The shape of the data (rows, cols) is (515738, 17)
+ ```
+
+2. احسب عدد مرات تكرار الجنسيات للمراجعين:
+
+ 1. كم عدد القيم المميزة الموجودة في العمود `Reviewer_Nationality` وما هي؟
+ 2. ما هي الجنسية الأكثر شيوعًا بين المراجعين في مجموعة البيانات (اطبع البلد وعدد المراجعات)؟
+
+ ```python
+ # value_counts() creates a Series object that has index and values in this case, the country and the frequency they occur in reviewer nationality
+ nationality_freq = df["Reviewer_Nationality"].value_counts()
+ print("There are " + str(nationality_freq.size) + " different nationalities")
+ # print first and last rows of the Series. Change to nationality_freq.to_string() to print all of the data
+ print(nationality_freq)
+
+ There are 227 different nationalities
+ United Kingdom 245246
+ United States of America 35437
+ Australia 21686
+ Ireland 14827
+ United Arab Emirates 10235
+ ...
+ Comoros 1
+ Palau 1
+ Northern Mariana Islands 1
+ Cape Verde 1
+ Guinea 1
+ Name: Reviewer_Nationality, Length: 227, dtype: int64
+ ```
+
+ 3. ما هي الجنسيات العشر الأكثر تكرارًا التالية، وعدد مرات تكرارها؟
+
+ ```python
+ print("The highest frequency reviewer nationality is " + str(nationality_freq.index[0]).strip() + " with " + str(nationality_freq[0]) + " reviews.")
+ # Notice there is a leading space on the values, strip() removes that for printing
+ # What is the top 10 most common nationalities and their frequencies?
+ print("The next 10 highest frequency reviewer nationalities are:")
+ print(nationality_freq[1:11].to_string())
+
+ The highest frequency reviewer nationality is United Kingdom with 245246 reviews.
+ The next 10 highest frequency reviewer nationalities are:
+ United States of America 35437
+ Australia 21686
+ Ireland 14827
+ United Arab Emirates 10235
+ Saudi Arabia 8951
+ Netherlands 8772
+ Switzerland 8678
+ Germany 7941
+ Canada 7894
+ France 7296
+ ```
+
+3. ما هو الفندق الأكثر مراجعة لكل من الجنسيات العشر الأكثر تكرارًا؟
+
+ ```python
+ # What was the most frequently reviewed hotel for the top 10 nationalities
+ # Normally with pandas you will avoid an explicit loop, but wanted to show creating a new dataframe using criteria (don't do this with large amounts of data because it could be very slow)
+ for nat in nationality_freq[:10].index:
+ # First, extract all the rows that match the criteria into a new dataframe
+ nat_df = df[df["Reviewer_Nationality"] == nat]
+ # Now get the hotel freq
+ freq = nat_df["Hotel_Name"].value_counts()
+ print("The most reviewed hotel for " + str(nat).strip() + " was " + str(freq.index[0]) + " with " + str(freq[0]) + " reviews.")
+
+ The most reviewed hotel for United Kingdom was Britannia International Hotel Canary Wharf with 3833 reviews.
+ The most reviewed hotel for United States of America was Hotel Esther a with 423 reviews.
+ The most reviewed hotel for Australia was Park Plaza Westminster Bridge London with 167 reviews.
+ The most reviewed hotel for Ireland was Copthorne Tara Hotel London Kensington with 239 reviews.
+ The most reviewed hotel for United Arab Emirates was Millennium Hotel London Knightsbridge with 129 reviews.
+ The most reviewed hotel for Saudi Arabia was The Cumberland A Guoman Hotel with 142 reviews.
+ The most reviewed hotel for Netherlands was Jaz Amsterdam with 97 reviews.
+ The most reviewed hotel for Switzerland was Hotel Da Vinci with 97 reviews.
+ The most reviewed hotel for Germany was Hotel Da Vinci with 86 reviews.
+ The most reviewed hotel for Canada was St James Court A Taj Hotel London with 61 reviews.
+ ```
+
+4. كم عدد المراجعات لكل فندق (عدد مرات تكرار الفندق) في مجموعة البيانات؟
+
+ ```python
+ # First create a new dataframe based on the old one, removing the uneeded columns
+ hotel_freq_df = df.drop(["Hotel_Address", "Additional_Number_of_Scoring", "Review_Date", "Average_Score", "Reviewer_Nationality", "Negative_Review", "Review_Total_Negative_Word_Counts", "Positive_Review", "Review_Total_Positive_Word_Counts", "Total_Number_of_Reviews_Reviewer_Has_Given", "Reviewer_Score", "Tags", "days_since_review", "lat", "lng"], axis = 1)
+
+ # Group the rows by Hotel_Name, count them and put the result in a new column Total_Reviews_Found
+ hotel_freq_df['Total_Reviews_Found'] = hotel_freq_df.groupby('Hotel_Name').transform('count')
+
+ # Get rid of all the duplicated rows
+ hotel_freq_df = hotel_freq_df.drop_duplicates(subset = ["Hotel_Name"])
+ display(hotel_freq_df)
+ ```
+ | اسم الفندق | إجمالي عدد المراجعات | عدد المراجعات الموجودة |
+ | :----------------------------------------: | :---------------------: | :-----------------: |
+ | Britannia International Hotel Canary Wharf | 9086 | 4789 |
+ | Park Plaza Westminster Bridge London | 12158 | 4169 |
+ | Copthorne Tara Hotel London Kensington | 7105 | 3578 |
+ | ... | ... | ... |
+ | Mercure Paris Porte d Orleans | 110 | 10 |
+ | Hotel Wagner | 135 | 10 |
+ | Hotel Gallitzinberg | 173 | 8 |
+
+ قد تلاحظ أن النتائج *المحصورة في مجموعة البيانات* لا تتطابق مع القيمة الموجودة في `Total_Number_of_Reviews`. من غير الواضح ما إذا كانت هذه القيمة في مجموعة البيانات تمثل إجمالي عدد المراجعات التي حصل عليها الفندق، ولكن لم يتم جمعها جميعًا، أو حسابًا آخر. لا يتم استخدام `Total_Number_of_Reviews` في النموذج بسبب هذا الغموض.
+
+5. بينما يوجد عمود `Average_Score` لكل فندق في مجموعة البيانات، يمكنك أيضًا حساب متوسط النقاط (الحصول على متوسط جميع نقاط المراجعين في مجموعة البيانات لكل فندق). أضف عمودًا جديدًا إلى إطار البيانات بعنوان `Calc_Average_Score` يحتوي على هذا المتوسط المحسوب. اطبع الأعمدة `Hotel_Name`، `Average_Score`، و `Calc_Average_Score`.
+
+ ```python
+ # define a function that takes a row and performs some calculation with it
+ def get_difference_review_avg(row):
+ return row["Average_Score"] - row["Calc_Average_Score"]
+
+ # 'mean' is mathematical word for 'average'
+ df['Calc_Average_Score'] = round(df.groupby('Hotel_Name').Reviewer_Score.transform('mean'), 1)
+
+ # Add a new column with the difference between the two average scores
+ df["Average_Score_Difference"] = df.apply(get_difference_review_avg, axis = 1)
+
+ # Create a df without all the duplicates of Hotel_Name (so only 1 row per hotel)
+ review_scores_df = df.drop_duplicates(subset = ["Hotel_Name"])
+
+ # Sort the dataframe to find the lowest and highest average score difference
+ review_scores_df = review_scores_df.sort_values(by=["Average_Score_Difference"])
+
+ display(review_scores_df[["Average_Score_Difference", "Average_Score", "Calc_Average_Score", "Hotel_Name"]])
+ ```
+
+ قد تتساءل أيضًا عن قيمة `Average_Score` ولماذا تكون أحيانًا مختلفة عن متوسط النقاط المحسوب. بما أننا لا نستطيع معرفة سبب تطابق بعض القيم، ولكن البعض الآخر لديه اختلاف، فمن الأفضل في هذه الحالة استخدام نقاط المراجعات التي لدينا لحساب المتوسط بأنفسنا. ومع ذلك، فإن الاختلافات عادة ما تكون صغيرة جدًا، إليك الفنادق التي لديها أكبر انحراف بين متوسط النقاط في مجموعة البيانات والمتوسط المحسوب:
+
+ | فرق متوسط النقاط | متوسط النقاط | المتوسط المحسوب | اسم الفندق |
+ | :----------------------: | :-----------: | :----------------: | ------------------------------------------: |
+ | -0.8 | 7.7 | 8.5 | Best Western Hotel Astoria |
+ | -0.7 | 8.8 | 9.5 | Hotel Stendhal Place Vend me Paris MGallery |
+ | -0.7 | 7.5 | 8.2 | Mercure Paris Porte d Orleans |
+ | -0.7 | 7.9 | 8.6 | Renaissance Paris Vendome Hotel |
+ | -0.5 | 7.0 | 7.5 | Hotel Royal Elys es |
+ | ... | ... | ... | ... |
+ | 0.7 | 7.5 | 6.8 | Mercure Paris Op ra Faubourg Montmartre |
+ | 0.8 | 7.1 | 6.3 | Holiday Inn Paris Montparnasse Pasteur |
+ | 0.9 | 6.8 | 5.9 | Villa Eugenie |
+ | 0.9 | 8.6 | 7.7 | MARQUIS Faubourg St Honor Relais Ch teaux |
+ | 1.3 | 7.2 | 5.9 | Kube Hotel Ice Bar |
+
+ مع وجود فندق واحد فقط لديه فرق في النقاط أكبر من 1، يعني ذلك أنه يمكننا تجاهل الفرق واستخدام المتوسط المحسوب.
+
+6. احسب واطبع عدد الصفوف التي تحتوي على قيم "No Negative" في العمود `Negative_Review`.
+
+7. احسب واطبع عدد الصفوف التي تحتوي على قيم "No Positive" في العمود `Positive_Review`.
+
+8. احسب واطبع عدد الصفوف التي تحتوي على قيم "No Positive" في العمود `Positive_Review` **و** قيم "No Negative" في العمود `Negative_Review`.
+
+ ```python
+ # with lambdas:
+ start = time.time()
+ no_negative_reviews = df.apply(lambda x: True if x['Negative_Review'] == "No Negative" else False , axis=1)
+ print("Number of No Negative reviews: " + str(len(no_negative_reviews[no_negative_reviews == True].index)))
+
+ no_positive_reviews = df.apply(lambda x: True if x['Positive_Review'] == "No Positive" else False , axis=1)
+ print("Number of No Positive reviews: " + str(len(no_positive_reviews[no_positive_reviews == True].index)))
+
+ both_no_reviews = df.apply(lambda x: True if x['Negative_Review'] == "No Negative" and x['Positive_Review'] == "No Positive" else False , axis=1)
+ print("Number of both No Negative and No Positive reviews: " + str(len(both_no_reviews[both_no_reviews == True].index)))
+ end = time.time()
+ print("Lambdas took " + str(round(end - start, 2)) + " seconds")
+
+ Number of No Negative reviews: 127890
+ Number of No Positive reviews: 35946
+ Number of both No Negative and No Positive reviews: 127
+ Lambdas took 9.64 seconds
+ ```
+
+## طريقة أخرى
+
+طريقة أخرى لحساب العناصر بدون استخدام Lambdas، واستخدام sum لحساب الصفوف:
+
+ ```python
+ # without lambdas (using a mixture of notations to show you can use both)
+ start = time.time()
+ no_negative_reviews = sum(df.Negative_Review == "No Negative")
+ print("Number of No Negative reviews: " + str(no_negative_reviews))
+
+ no_positive_reviews = sum(df["Positive_Review"] == "No Positive")
+ print("Number of No Positive reviews: " + str(no_positive_reviews))
+
+ both_no_reviews = sum((df.Negative_Review == "No Negative") & (df.Positive_Review == "No Positive"))
+ print("Number of both No Negative and No Positive reviews: " + str(both_no_reviews))
+
+ end = time.time()
+ print("Sum took " + str(round(end - start, 2)) + " seconds")
+
+ Number of No Negative reviews: 127890
+ Number of No Positive reviews: 35946
+ Number of both No Negative and No Positive reviews: 127
+ Sum took 0.19 seconds
+ ```
+
+ قد تكون لاحظت أن هناك 127 صفًا تحتوي على قيم "No Negative" و "No Positive" في الأعمدة `Negative_Review` و `Positive_Review` على التوالي. هذا يعني أن المراجع أعطى الفندق درجة رقمية، لكنه امتنع عن كتابة مراجعة إيجابية أو سلبية. لحسن الحظ، هذا عدد صغير من الصفوف (127 من أصل 515738، أو 0.02%)، لذا من المحتمل ألا يؤثر ذلك على النموذج أو النتائج في أي اتجاه معين، ولكن قد لا تتوقع أن تحتوي مجموعة بيانات المراجعات على صفوف بدون مراجعات، لذا من المفيد استكشاف البيانات لاكتشاف صفوف مثل هذه.
+
+الآن بعد أن استكشفت مجموعة البيانات، في الدرس التالي ستقوم بتصفية البيانات وإضافة تحليل المشاعر.
+
+---
+## 🚀تحدي
+
+يوضح هذا الدرس، كما رأينا في الدروس السابقة، مدى أهمية فهم بياناتك وعيوبها قبل إجراء العمليات عليها. البيانات النصية، على وجه الخصوص، تحتاج إلى تدقيق دقيق. استكشف مجموعات بيانات مختلفة مليئة بالنصوص وحاول اكتشاف المناطق التي قد تؤدي إلى إدخال تحيز أو مشاعر منحرفة في النموذج.
+
+## [اختبار ما بعد المحاضرة](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/38/)
+
+## المراجعة والدراسة الذاتية
+
+خذ [مسار التعلم هذا حول معالجة اللغة الطبيعية](https://docs.microsoft.com/learn/paths/explore-natural-language-processing/?WT.mc_id=academic-77952-leestott) لاكتشاف الأدوات التي يمكنك تجربتها عند بناء نماذج تعتمد على النصوص والكلام.
+
+## الواجب
+
+[NLTK](assignment.md)
+
+---
+
+**إخلاء المسؤولية**:
+تمت ترجمة هذا المستند باستخدام خدمة الترجمة الآلية [Co-op Translator](https://github.com/Azure/co-op-translator). بينما نسعى لتحقيق الدقة، يرجى العلم أن الترجمات الآلية قد تحتوي على أخطاء أو معلومات غير دقيقة. يجب اعتبار المستند الأصلي بلغته الأصلية هو المصدر الموثوق. للحصول على معلومات حساسة أو هامة، يُوصى بالاستعانة بترجمة بشرية احترافية. نحن غير مسؤولين عن أي سوء فهم أو تفسيرات خاطئة تنشأ عن استخدام هذه الترجمة.
\ No newline at end of file
diff --git a/translations/ar/6-NLP/4-Hotel-Reviews-1/assignment.md b/translations/ar/6-NLP/4-Hotel-Reviews-1/assignment.md
new file mode 100644
index 000000000..41d12eedc
--- /dev/null
+++ b/translations/ar/6-NLP/4-Hotel-Reviews-1/assignment.md
@@ -0,0 +1,19 @@
+
+# NLTK
+
+## التعليمات
+
+NLTK هي مكتبة معروفة تُستخدم في علم اللغويات الحاسوبية ومعالجة اللغة الطبيعية. اغتنم هذه الفرصة لقراءة '[كتاب NLTK](https://www.nltk.org/book/)' وتجربة التمارين الموجودة فيه. في هذه المهمة غير المُدرجة، ستتعرف على هذه المكتبة بشكل أعمق.
+
+---
+
+**إخلاء المسؤولية**:
+تم ترجمة هذا المستند باستخدام خدمة الترجمة بالذكاء الاصطناعي [Co-op Translator](https://github.com/Azure/co-op-translator). بينما نسعى لتحقيق الدقة، يرجى العلم أن الترجمات الآلية قد تحتوي على أخطاء أو معلومات غير دقيقة. يجب اعتبار المستند الأصلي بلغته الأصلية هو المصدر الموثوق. للحصول على معلومات حساسة أو هامة، يُوصى بالاستعانة بترجمة بشرية احترافية. نحن غير مسؤولين عن أي سوء فهم أو تفسيرات خاطئة ناتجة عن استخدام هذه الترجمة.
\ No newline at end of file
diff --git a/translations/ar/6-NLP/4-Hotel-Reviews-1/notebook.ipynb b/translations/ar/6-NLP/4-Hotel-Reviews-1/notebook.ipynb
new file mode 100644
index 000000000..e69de29bb
diff --git a/translations/ar/6-NLP/4-Hotel-Reviews-1/solution/Julia/README.md b/translations/ar/6-NLP/4-Hotel-Reviews-1/solution/Julia/README.md
new file mode 100644
index 000000000..e76ef3331
--- /dev/null
+++ b/translations/ar/6-NLP/4-Hotel-Reviews-1/solution/Julia/README.md
@@ -0,0 +1,15 @@
+
+هذا مكان مؤقت
+
+---
+
+**إخلاء المسؤولية**:
+تمت ترجمة هذا المستند باستخدام خدمة الترجمة بالذكاء الاصطناعي [Co-op Translator](https://github.com/Azure/co-op-translator). بينما نسعى لتحقيق الدقة، يرجى العلم أن الترجمات الآلية قد تحتوي على أخطاء أو عدم دقة. يجب اعتبار المستند الأصلي بلغته الأصلية هو المصدر الموثوق. للحصول على معلومات حساسة أو هامة، يُوصى بالاستعانة بترجمة بشرية احترافية. نحن غير مسؤولين عن أي سوء فهم أو تفسيرات خاطئة تنشأ عن استخدام هذه الترجمة.
\ No newline at end of file
diff --git a/translations/ar/6-NLP/4-Hotel-Reviews-1/solution/R/README.md b/translations/ar/6-NLP/4-Hotel-Reviews-1/solution/R/README.md
new file mode 100644
index 000000000..4cae9ad99
--- /dev/null
+++ b/translations/ar/6-NLP/4-Hotel-Reviews-1/solution/R/README.md
@@ -0,0 +1,15 @@
+
+هذا عنصر نائب مؤقت
+
+---
+
+**إخلاء المسؤولية**:
+تم ترجمة هذا المستند باستخدام خدمة الترجمة بالذكاء الاصطناعي [Co-op Translator](https://github.com/Azure/co-op-translator). بينما نسعى لتحقيق الدقة، يرجى العلم أن الترجمات الآلية قد تحتوي على أخطاء أو معلومات غير دقيقة. يجب اعتبار المستند الأصلي بلغته الأصلية المصدر الموثوق. للحصول على معلومات حاسمة، يُوصى بالاستعانة بترجمة بشرية احترافية. نحن غير مسؤولين عن أي سوء فهم أو تفسيرات خاطئة تنشأ عن استخدام هذه الترجمة.
\ No newline at end of file
diff --git a/translations/ar/6-NLP/4-Hotel-Reviews-1/solution/notebook.ipynb b/translations/ar/6-NLP/4-Hotel-Reviews-1/solution/notebook.ipynb
new file mode 100644
index 000000000..22346a5fa
--- /dev/null
+++ b/translations/ar/6-NLP/4-Hotel-Reviews-1/solution/notebook.ipynb
@@ -0,0 +1,174 @@
+{
+ "metadata": {
+ "language_info": {
+ "codemirror_mode": {
+ "name": "ipython",
+ "version": 3
+ },
+ "file_extension": ".py",
+ "mimetype": "text/x-python",
+ "name": "python",
+ "nbconvert_exporter": "python",
+ "pygments_lexer": "ipython3",
+ "version": 3
+ },
+ "orig_nbformat": 4,
+ "coopTranslator": {
+ "original_hash": "2d05e7db439376aa824f4b387f8324ca",
+ "translation_date": "2025-08-29T15:43:37+00:00",
+ "source_file": "6-NLP/4-Hotel-Reviews-1/solution/notebook.ipynb",
+ "language_code": "ar"
+ }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 2,
+ "cells": [
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "# EDA\n",
+ "import pandas as pd\n",
+ "import time"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "def get_difference_review_avg(row):\n",
+ " return row[\"Average_Score\"] - row[\"Calc_Average_Score\"]"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "# Load the hotel reviews from CSV\n",
+ "print(\"Loading data file now, this could take a while depending on file size\")\n",
+ "start = time.time()\n",
+ "df = pd.read_csv('../../data/Hotel_Reviews.csv')\n",
+ "end = time.time()\n",
+ "print(\"Loading took \" + str(round(end - start, 2)) + \" seconds\")\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "# What shape is the data (rows, columns)?\n",
+ "print(\"The shape of the data (rows, cols) is \" + str(df.shape))\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "# value_counts() creates a Series object that has index and values\n",
+ "# in this case, the country and the frequency they occur in reviewer nationality\n",
+ "nationality_freq = df[\"Reviewer_Nationality\"].value_counts()\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "# What reviewer nationality is the most common in the dataset?\n",
+ "print(\"The highest frequency reviewer nationality is \" + str(nationality_freq.index[0]).strip() + \" with \" + str(nationality_freq[0]) + \" reviews.\")\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "# What is the top 10 most common nationalities and their frequencies?\n",
+ "print(\"The top 10 highest frequency reviewer nationalities are:\")\n",
+ "print(nationality_freq[0:10].to_string())\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "# How many unique nationalities are there?\n",
+ "print(\"There are \" + str(nationality_freq.index.size) + \" unique nationalities in the dataset\")\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "# What was the most frequently reviewed hotel for the top 10 nationalities - print the hotel and number of reviews\n",
+ "for nat in nationality_freq[:10].index:\n",
+ " # First, extract all the rows that match the criteria into a new dataframe\n",
+ " nat_df = df[df[\"Reviewer_Nationality\"] == nat] \n",
+ " # Now get the hotel freq\n",
+ " freq = nat_df[\"Hotel_Name\"].value_counts()\n",
+ " print(\"The most reviewed hotel for \" + str(nat).strip() + \" was \" + str(freq.index[0]) + \" with \" + str(freq[0]) + \" reviews.\") \n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "# How many reviews are there per hotel (frequency count of hotel) and do the results match the value in `Total_Number_of_Reviews`?\n",
+ "# First create a new dataframe based on the old one, removing the uneeded columns\n",
+ "hotel_freq_df = df.drop([\"Hotel_Address\", \"Additional_Number_of_Scoring\", \"Review_Date\", \"Average_Score\", \"Reviewer_Nationality\", \"Negative_Review\", \"Review_Total_Negative_Word_Counts\", \"Positive_Review\", \"Review_Total_Positive_Word_Counts\", \"Total_Number_of_Reviews_Reviewer_Has_Given\", \"Reviewer_Score\", \"Tags\", \"days_since_review\", \"lat\", \"lng\"], axis = 1)\n",
+ "# Group the rows by Hotel_Name, count them and put the result in a new column Total_Reviews_Found\n",
+ "hotel_freq_df['Total_Reviews_Found'] = hotel_freq_df.groupby('Hotel_Name').transform('count')\n",
+ "# Get rid of all the duplicated rows\n",
+ "hotel_freq_df = hotel_freq_df.drop_duplicates(subset = [\"Hotel_Name\"])\n",
+ "print()\n",
+ "print(hotel_freq_df.to_string())\n",
+ "print(str(hotel_freq_df.shape))"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "# While there is an `Average_Score` for each hotel according to the dataset, \n",
+ "# you can also calculate an average score (getting the average of all reviewer scores in the dataset for each hotel)\n",
+ "# Add a new column to your dataframe with the column header `Calc_Average_Score` that contains that calculated average. \n",
+ "df['Calc_Average_Score'] = round(df.groupby('Hotel_Name').Reviewer_Score.transform('mean'), 1)\n",
+ "# Add a new column with the difference between the two average scores\n",
+ "df[\"Average_Score_Difference\"] = df.apply(get_difference_review_avg, axis = 1)\n",
+ "# Create a df without all the duplicates of Hotel_Name (so only 1 row per hotel)\n",
+ "review_scores_df = df.drop_duplicates(subset = [\"Hotel_Name\"])\n",
+ "# Sort the dataframe to find the lowest and highest average score difference\n",
+ "review_scores_df = review_scores_df.sort_values(by=[\"Average_Score_Difference\"])\n",
+ "print(review_scores_df[[\"Average_Score_Difference\", \"Average_Score\", \"Calc_Average_Score\", \"Hotel_Name\"]])\n",
+ "# Do any hotels have the same (rounded to 1 decimal place) `Average_Score` and `Calc_Average_Score`?\n"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "\n---\n\n**إخلاء المسؤولية**: \nتم ترجمة هذا المستند باستخدام خدمة الترجمة بالذكاء الاصطناعي [Co-op Translator](https://github.com/Azure/co-op-translator). بينما نسعى لتحقيق الدقة، يرجى العلم أن الترجمات الآلية قد تحتوي على أخطاء أو معلومات غير دقيقة. يجب اعتبار المستند الأصلي بلغته الأصلية المصدر الرسمي. للحصول على معلومات حاسمة، يُوصى بالاستعانة بترجمة بشرية احترافية. نحن غير مسؤولين عن أي سوء فهم أو تفسيرات خاطئة تنشأ عن استخدام هذه الترجمة.\n"
+ ]
+ }
+ ]
+}
\ No newline at end of file
diff --git a/translations/ar/6-NLP/5-Hotel-Reviews-2/README.md b/translations/ar/6-NLP/5-Hotel-Reviews-2/README.md
new file mode 100644
index 000000000..84812845a
--- /dev/null
+++ b/translations/ar/6-NLP/5-Hotel-Reviews-2/README.md
@@ -0,0 +1,384 @@
+
+# تحليل المشاعر باستخدام تقييمات الفنادق
+
+الآن بعد أن قمت باستكشاف مجموعة البيانات بالتفصيل، حان الوقت لتصفية الأعمدة واستخدام تقنيات معالجة اللغة الطبيعية (NLP) على مجموعة البيانات للحصول على رؤى جديدة حول الفنادق.
+
+## [اختبار ما قبل المحاضرة](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/39/)
+
+### عمليات التصفية وتحليل المشاعر
+
+كما لاحظت على الأرجح، تحتوي مجموعة البيانات على بعض المشكلات. بعض الأعمدة مليئة بمعلومات غير مفيدة، وأخرى تبدو غير صحيحة. وإذا كانت صحيحة، فمن غير الواضح كيف تم حسابها، ولا يمكن التحقق من الإجابات بشكل مستقل من خلال حساباتك الخاصة.
+
+## تمرين: المزيد من معالجة البيانات
+
+قم بتنظيف البيانات قليلاً. أضف أعمدة ستكون مفيدة لاحقًا، غيّر القيم في أعمدة أخرى، واحذف أعمدة معينة تمامًا.
+
+1. معالجة الأعمدة الأولية
+
+ 1. احذف العمودين `lat` و`lng`.
+
+ 2. استبدل قيم `Hotel_Address` بالقيم التالية (إذا كان العنوان يحتوي على اسم المدينة والبلد، قم بتغييره ليشمل فقط المدينة والبلد).
+
+ المدن والبلدان الوحيدة الموجودة في مجموعة البيانات هي:
+
+ أمستردام، هولندا
+ برشلونة، إسبانيا
+ لندن، المملكة المتحدة
+ ميلانو، إيطاليا
+ باريس، فرنسا
+ فيينا، النمسا
+
+ ```python
+ def replace_address(row):
+ if "Netherlands" in row["Hotel_Address"]:
+ return "Amsterdam, Netherlands"
+ elif "Barcelona" in row["Hotel_Address"]:
+ return "Barcelona, Spain"
+ elif "United Kingdom" in row["Hotel_Address"]:
+ return "London, United Kingdom"
+ elif "Milan" in row["Hotel_Address"]:
+ return "Milan, Italy"
+ elif "France" in row["Hotel_Address"]:
+ return "Paris, France"
+ elif "Vienna" in row["Hotel_Address"]:
+ return "Vienna, Austria"
+
+ # Replace all the addresses with a shortened, more useful form
+ df["Hotel_Address"] = df.apply(replace_address, axis = 1)
+ # The sum of the value_counts() should add up to the total number of reviews
+ print(df["Hotel_Address"].value_counts())
+ ```
+
+ الآن يمكنك استعلام بيانات على مستوى البلد:
+
+ ```python
+ display(df.groupby("Hotel_Address").agg({"Hotel_Name": "nunique"}))
+ ```
+
+ | Hotel_Address | Hotel_Name |
+ | :--------------------- | :--------: |
+ | Amsterdam, Netherlands | 105 |
+ | Barcelona, Spain | 211 |
+ | London, United Kingdom | 400 |
+ | Milan, Italy | 162 |
+ | Paris, France | 458 |
+ | Vienna, Austria | 158 |
+
+2. معالجة أعمدة المراجعات العامة للفنادق
+
+ 1. احذف العمود `Additional_Number_of_Scoring`.
+
+ 2. استبدل `Total_Number_of_Reviews` بعدد المراجعات الفعلي لهذا الفندق الموجود في مجموعة البيانات.
+
+ 3. استبدل `Average_Score` بالنتيجة التي قمت بحسابها بنفسك.
+
+ ```python
+ # Drop `Additional_Number_of_Scoring`
+ df.drop(["Additional_Number_of_Scoring"], axis = 1, inplace=True)
+ # Replace `Total_Number_of_Reviews` and `Average_Score` with our own calculated values
+ df.Total_Number_of_Reviews = df.groupby('Hotel_Name').transform('count')
+ df.Average_Score = round(df.groupby('Hotel_Name').Reviewer_Score.transform('mean'), 1)
+ ```
+
+3. معالجة أعمدة المراجعات
+
+ 1. احذف الأعمدة `Review_Total_Negative_Word_Counts`، `Review_Total_Positive_Word_Counts`، `Review_Date` و`days_since_review`.
+
+ 2. احتفظ بالأعمدة `Reviewer_Score`، `Negative_Review`، و`Positive_Review` كما هي.
+
+ 3. احتفظ بـ `Tags` في الوقت الحالي.
+
+ - سنقوم بإجراء عمليات تصفية إضافية على العلامات في القسم التالي، ثم سيتم حذف العلامات.
+
+4. معالجة أعمدة المراجعين
+
+ 1. احذف العمود `Total_Number_of_Reviews_Reviewer_Has_Given`.
+
+ 2. احتفظ بـ `Reviewer_Nationality`.
+
+### أعمدة العلامات
+
+عمود `Tag` يمثل مشكلة لأنه عبارة عن قائمة (في شكل نصي) مخزنة في العمود. لسوء الحظ، فإن ترتيب وعدد الأقسام الفرعية في هذا العمود ليس دائمًا نفسه. من الصعب على الإنسان تحديد العبارات الصحيحة التي يجب التركيز عليها، لأن هناك 515,000 صف و1427 فندقًا، ولكل منها خيارات مختلفة قليلاً يمكن أن يختارها المراجع. هنا يأتي دور معالجة اللغة الطبيعية (NLP). يمكنك مسح النص والعثور على العبارات الأكثر شيوعًا وعدّها.
+
+لسوء الحظ، نحن لسنا مهتمين بالكلمات الفردية، بل بالعبارات متعددة الكلمات (مثل *رحلة عمل*). تشغيل خوارزمية توزيع التكرار للعبارات متعددة الكلمات على هذا الكم الهائل من البيانات (6762646 كلمة) قد يستغرق وقتًا طويلاً للغاية، ولكن دون النظر إلى البيانات، يبدو أن ذلك ضروري. هنا تكون فائدة تحليل البيانات الاستكشافي، لأنه من خلال عينة من العلامات مثل `['رحلة عمل', 'مسافر منفرد', 'غرفة فردية', 'أقام 5 ليالٍ', 'تم الإرسال من جهاز محمول']`، يمكنك البدء في التساؤل عما إذا كان من الممكن تقليل المعالجة بشكل كبير. لحسن الحظ، يمكن ذلك - ولكن أولاً تحتاج إلى اتباع بعض الخطوات لتحديد العلامات ذات الأهمية.
+
+### تصفية العلامات
+
+تذكر أن الهدف من مجموعة البيانات هو إضافة مشاعر وأعمدة تساعدك في اختيار أفضل فندق (لنفسك أو ربما لمهمة عميل يطلب منك إنشاء روبوت توصيات للفنادق). تحتاج إلى أن تسأل نفسك ما إذا كانت العلامات مفيدة أم لا في مجموعة البيانات النهائية. هنا تفسير واحد (إذا كنت بحاجة إلى مجموعة البيانات لأسباب أخرى، قد تختلف العلامات التي تبقى/تُزال):
+
+1. نوع الرحلة ذو صلة، ويجب أن يبقى.
+2. نوع مجموعة الضيوف مهم، ويجب أن يبقى.
+3. نوع الغرفة أو الجناح أو الاستوديو الذي أقام فيه الضيف غير ذي صلة (جميع الفنادق تحتوي على غرف متشابهة تقريبًا).
+4. الجهاز الذي تم إرسال المراجعة منه غير ذي صلة.
+5. عدد الليالي التي أقامها المراجع *قد* يكون ذا صلة إذا كنت تعتقد أن الإقامات الأطول تعني إعجابهم بالفندق أكثر، ولكنه احتمال ضعيف، وربما غير ذي صلة.
+
+باختصار، **احتفظ بنوعين من العلامات وأزل الباقي**.
+
+أولاً، لا تريد عد العلامات حتى تكون في تنسيق أفضل، مما يعني إزالة الأقواس المربعة وعلامات الاقتباس. يمكنك القيام بذلك بعدة طرق، ولكنك تريد الأسرع لأن معالجة الكثير من البيانات قد تستغرق وقتًا طويلاً. لحسن الحظ، يوفر pandas طريقة سهلة لكل خطوة من هذه الخطوات.
+
+```Python
+# Remove opening and closing brackets
+df.Tags = df.Tags.str.strip("[']")
+# remove all quotes too
+df.Tags = df.Tags.str.replace(" ', '", ",", regex = False)
+```
+
+تصبح كل علامة شيئًا مثل: `رحلة عمل، مسافر منفرد، غرفة فردية، أقام 5 ليالٍ، تم الإرسال من جهاز محمول`.
+
+بعد ذلك نجد مشكلة. بعض المراجعات، أو الصفوف، تحتوي على 5 أعمدة، وبعضها 3، وبعضها 6. هذا نتيجة لكيفية إنشاء مجموعة البيانات، ومن الصعب إصلاحها. تريد الحصول على عدد تكرار لكل عبارة، ولكنها في ترتيب مختلف في كل مراجعة، لذا قد يكون العدد غير دقيق، وقد لا يحصل الفندق على علامة مستحقة.
+
+بدلاً من ذلك، ستستخدم الترتيب المختلف لصالحك، لأن كل علامة هي عبارة متعددة الكلمات ولكنها مفصولة بفاصلة! أبسط طريقة للقيام بذلك هي إنشاء 6 أعمدة مؤقتة مع إدخال كل علامة في العمود المقابل لترتيبها في العلامة. يمكنك بعد ذلك دمج الأعمدة الستة في عمود واحد كبير وتشغيل طريقة `value_counts()` على العمود الناتج. عند طباعته، سترى أن هناك 2428 علامة فريدة. هنا عينة صغيرة:
+
+| Tag | Count |
+| ------------------------------ | ------ |
+| رحلة ترفيهية | 417778 |
+| تم الإرسال من جهاز محمول | 307640 |
+| زوجان | 252294 |
+| أقام ليلة واحدة | 193645 |
+| أقام ليلتين | 133937 |
+| مسافر منفرد | 108545 |
+| أقام 3 ليالٍ | 95821 |
+| رحلة عمل | 82939 |
+| مجموعة | 65392 |
+| عائلة مع أطفال صغار | 61015 |
+| أقام 4 ليالٍ | 47817 |
+| غرفة مزدوجة | 35207 |
+| غرفة مزدوجة قياسية | 32248 |
+| غرفة مزدوجة فاخرة | 31393 |
+| عائلة مع أطفال كبار | 26349 |
+| غرفة مزدوجة ديلوكس | 24823 |
+| غرفة مزدوجة أو توأم | 22393 |
+| أقام 5 ليالٍ | 20845 |
+| غرفة مزدوجة قياسية أو توأم | 17483 |
+| غرفة مزدوجة كلاسيكية | 16989 |
+| غرفة مزدوجة فاخرة أو توأم | 13570 |
+| غرفتان | 12393 |
+
+بعض العلامات الشائعة مثل `تم الإرسال من جهاز محمول` ليست ذات فائدة لنا، لذا قد يكون من الذكاء إزالتها قبل عد تكرار العبارات، ولكنها عملية سريعة جدًا بحيث يمكنك تركها وتجاهلها.
+
+### إزالة علامات مدة الإقامة
+
+إزالة هذه العلامات هي الخطوة الأولى، حيث تقلل العدد الإجمالي للعلامات التي يجب أخذها في الاعتبار قليلاً. لاحظ أنك لا تزيلها من مجموعة البيانات، بل تختار فقط إزالتها من الاعتبار كقيم للعد/الحفظ في مجموعة بيانات المراجعات.
+
+| مدة الإقامة | العدد |
+| ------------- | ------ |
+| أقام ليلة واحدة | 193645 |
+| أقام ليلتين | 133937 |
+| أقام 3 ليالٍ | 95821 |
+| أقام 4 ليالٍ | 47817 |
+| أقام 5 ليالٍ | 20845 |
+| أقام 6 ليالٍ | 9776 |
+| أقام 7 ليالٍ | 7399 |
+| أقام 8 ليالٍ | 2502 |
+| أقام 9 ليالٍ | 1293 |
+| ... | ... |
+
+هناك مجموعة كبيرة من الغرف، الأجنحة، الاستوديوهات، الشقق وما إلى ذلك. جميعها تعني تقريبًا نفس الشيء وليست ذات صلة بك، لذا قم بإزالتها من الاعتبار.
+
+| نوع الغرفة | العدد |
+| --------------------------- | ----- |
+| غرفة مزدوجة | 35207 |
+| غرفة مزدوجة قياسية | 32248 |
+| غرفة مزدوجة فاخرة | 31393 |
+| غرفة مزدوجة ديلوكس | 24823 |
+| غرفة مزدوجة أو توأم | 22393 |
+| غرفة مزدوجة قياسية أو توأم | 17483 |
+| غرفة مزدوجة كلاسيكية | 16989 |
+| غرفة مزدوجة فاخرة أو توأم | 13570 |
+
+أخيرًا، وهذا أمر رائع (لأنه لم يتطلب الكثير من المعالجة على الإطلاق)، ستبقى مع العلامات التالية *المفيدة*:
+
+| Tag | Count |
+| --------------------------------------------- | ------ |
+| رحلة ترفيهية | 417778 |
+| زوجان | 252294 |
+| مسافر منفرد | 108545 |
+| رحلة عمل | 82939 |
+| مجموعة (تم دمجها مع مسافرين مع أصدقاء) | 67535 |
+| عائلة مع أطفال صغار | 61015 |
+| عائلة مع أطفال كبار | 26349 |
+| مع حيوان أليف | 1405 |
+
+يمكنك القول إن `مسافرين مع أصدقاء` تعني نفس الشيء تقريبًا مثل `مجموعة`، وسيكون من العدل دمج الاثنين كما هو موضح أعلاه. الكود لتحديد العلامات الصحيحة موجود في [دفتر العلامات](https://github.com/microsoft/ML-For-Beginners/blob/main/6-NLP/5-Hotel-Reviews-2/solution/1-notebook.ipynb).
+
+الخطوة الأخيرة هي إنشاء أعمدة جديدة لكل من هذه العلامات. ثم، لكل صف مراجعة، إذا كان عمود `Tag` يطابق أحد الأعمدة الجديدة، أضف 1، وإذا لم يكن كذلك، أضف 0. النتيجة النهائية ستكون عدداً يوضح عدد المراجعين الذين اختاروا هذا الفندق (بالمجمل) لأغراض مثل العمل مقابل الترفيه، أو لإحضار حيوان أليف، وهذه معلومات مفيدة عند التوصية بفندق.
+
+```python
+# Process the Tags into new columns
+# The file Hotel_Reviews_Tags.py, identifies the most important tags
+# Leisure trip, Couple, Solo traveler, Business trip, Group combined with Travelers with friends,
+# Family with young children, Family with older children, With a pet
+df["Leisure_trip"] = df.Tags.apply(lambda tag: 1 if "Leisure trip" in tag else 0)
+df["Couple"] = df.Tags.apply(lambda tag: 1 if "Couple" in tag else 0)
+df["Solo_traveler"] = df.Tags.apply(lambda tag: 1 if "Solo traveler" in tag else 0)
+df["Business_trip"] = df.Tags.apply(lambda tag: 1 if "Business trip" in tag else 0)
+df["Group"] = df.Tags.apply(lambda tag: 1 if "Group" in tag or "Travelers with friends" in tag else 0)
+df["Family_with_young_children"] = df.Tags.apply(lambda tag: 1 if "Family with young children" in tag else 0)
+df["Family_with_older_children"] = df.Tags.apply(lambda tag: 1 if "Family with older children" in tag else 0)
+df["With_a_pet"] = df.Tags.apply(lambda tag: 1 if "With a pet" in tag else 0)
+
+```
+
+### حفظ الملف
+
+أخيرًا، احفظ مجموعة البيانات كما هي الآن باسم جديد.
+
+```python
+df.drop(["Review_Total_Negative_Word_Counts", "Review_Total_Positive_Word_Counts", "days_since_review", "Total_Number_of_Reviews_Reviewer_Has_Given"], axis = 1, inplace=True)
+
+# Saving new data file with calculated columns
+print("Saving results to Hotel_Reviews_Filtered.csv")
+df.to_csv(r'../data/Hotel_Reviews_Filtered.csv', index = False)
+```
+
+## عمليات تحليل المشاعر
+
+في هذا القسم الأخير، ستقوم بتطبيق تحليل المشاعر على أعمدة المراجعات وحفظ النتائج في مجموعة بيانات.
+
+## تمرين: تحميل وحفظ البيانات المصفاة
+
+لاحظ أنك الآن تقوم بتحميل مجموعة البيانات المصفاة التي تم حفظها في القسم السابق، **وليس** مجموعة البيانات الأصلية.
+
+```python
+import time
+import pandas as pd
+import nltk as nltk
+from nltk.corpus import stopwords
+from nltk.sentiment.vader import SentimentIntensityAnalyzer
+nltk.download('vader_lexicon')
+
+# Load the filtered hotel reviews from CSV
+df = pd.read_csv('../../data/Hotel_Reviews_Filtered.csv')
+
+# You code will be added here
+
+
+# Finally remember to save the hotel reviews with new NLP data added
+print("Saving results to Hotel_Reviews_NLP.csv")
+df.to_csv(r'../data/Hotel_Reviews_NLP.csv', index = False)
+```
+
+### إزالة الكلمات الشائعة
+
+إذا قمت بتشغيل تحليل المشاعر على أعمدة المراجعات السلبية والإيجابية، فقد يستغرق ذلك وقتًا طويلاً. في اختبار على جهاز لابتوب قوي بمعالج سريع، استغرق الأمر 12-14 دقيقة اعتمادًا على مكتبة تحليل المشاعر المستخدمة. هذا وقت طويل نسبيًا، لذا يستحق التحقيق إذا كان بالإمكان تسريعه.
+
+إزالة الكلمات الشائعة، أو الكلمات الإنجليزية الشائعة التي لا تؤثر على مشاعر الجملة، هي الخطوة الأولى. من خلال إزالتها، يجب أن يعمل تحليل المشاعر بشكل أسرع، دون أن يكون أقل دقة (لأن الكلمات الشائعة لا تؤثر على المشاعر، لكنها تبطئ التحليل).
+
+أطول مراجعة سلبية كانت تحتوي على 395 كلمة، ولكن بعد إزالة الكلمات الشائعة، أصبحت تحتوي على 195 كلمة.
+
+إزالة الكلمات الشائعة هي أيضًا عملية سريعة، حيث استغرقت إزالة الكلمات الشائعة من عمودين للمراجعات عبر 515,000 صف 3.3 ثانية على جهاز الاختبار. قد تستغرق وقتًا أطول أو أقل قليلاً حسب سرعة وحدة المعالجة المركزية لجهازك، وذاكرة الوصول العشوائي، وما إذا كان لديك SSD أم لا، وبعض العوامل الأخرى. قصر مدة العملية يعني أنه إذا حسّنت وقت تحليل المشاعر، فإنها تستحق التنفيذ.
+
+```python
+from nltk.corpus import stopwords
+
+# Load the hotel reviews from CSV
+df = pd.read_csv("../../data/Hotel_Reviews_Filtered.csv")
+
+# Remove stop words - can be slow for a lot of text!
+# Ryan Han (ryanxjhan on Kaggle) has a great post measuring performance of different stop words removal approaches
+# https://www.kaggle.com/ryanxjhan/fast-stop-words-removal # using the approach that Ryan recommends
+start = time.time()
+cache = set(stopwords.words("english"))
+def remove_stopwords(review):
+ text = " ".join([word for word in review.split() if word not in cache])
+ return text
+
+# Remove the stop words from both columns
+df.Negative_Review = df.Negative_Review.apply(remove_stopwords)
+df.Positive_Review = df.Positive_Review.apply(remove_stopwords)
+```
+
+### تنفيذ تحليل المشاعر
+الآن يجب عليك حساب تحليل المشاعر لكل من عمودي المراجعات السلبية والإيجابية، وتخزين النتيجة في عمودين جديدين. سيكون اختبار المشاعر هو مقارنتها بتقييم المراجع لنفس المراجعة. على سبيل المثال، إذا أظهرت المشاعر أن المراجعة السلبية كانت ذات مشاعر إيجابية للغاية (1) والمراجعة الإيجابية كانت أيضًا (1)، ولكن المراجع أعطى الفندق أدنى تقييم ممكن، فهذا يعني أن نص المراجعة لا يتطابق مع التقييم، أو أن محلل المشاعر لم يتمكن من التعرف على المشاعر بشكل صحيح. يجب أن تتوقع أن تكون بعض نتائج تحليل المشاعر خاطئة تمامًا، وغالبًا ما يكون ذلك قابلاً للتفسير، على سبيل المثال قد تكون المراجعة ساخرة للغاية: "بالطبع أحببت النوم في غرفة بدون تدفئة"، وقد يعتقد محلل المشاعر أن هذا شعور إيجابي، على الرغم من أن الإنسان الذي يقرأها سيعرف أنها سخرية.
+
+يوفر NLTK محللات مشاعر مختلفة للتعلم منها، ويمكنك استبدالها ورؤية ما إذا كانت المشاعر أكثر أو أقل دقة. يتم استخدام تحليل المشاعر VADER هنا.
+
+> Hutto, C.J. & Gilbert, E.E. (2014). VADER: A Parsimonious Rule-based Model for Sentiment Analysis of Social Media Text. Eighth International Conference on Weblogs and Social Media (ICWSM-14). Ann Arbor, MI, June 2014.
+
+```python
+from nltk.sentiment.vader import SentimentIntensityAnalyzer
+
+# Create the vader sentiment analyser (there are others in NLTK you can try too)
+vader_sentiment = SentimentIntensityAnalyzer()
+# Hutto, C.J. & Gilbert, E.E. (2014). VADER: A Parsimonious Rule-based Model for Sentiment Analysis of Social Media Text. Eighth International Conference on Weblogs and Social Media (ICWSM-14). Ann Arbor, MI, June 2014.
+
+# There are 3 possibilities of input for a review:
+# It could be "No Negative", in which case, return 0
+# It could be "No Positive", in which case, return 0
+# It could be a review, in which case calculate the sentiment
+def calc_sentiment(review):
+ if review == "No Negative" or review == "No Positive":
+ return 0
+ return vader_sentiment.polarity_scores(review)["compound"]
+```
+
+لاحقًا في برنامجك عندما تكون مستعدًا لحساب المشاعر، يمكنك تطبيقها على كل مراجعة كما يلي:
+
+```python
+# Add a negative sentiment and positive sentiment column
+print("Calculating sentiment columns for both positive and negative reviews")
+start = time.time()
+df["Negative_Sentiment"] = df.Negative_Review.apply(calc_sentiment)
+df["Positive_Sentiment"] = df.Positive_Review.apply(calc_sentiment)
+end = time.time()
+print("Calculating sentiment took " + str(round(end - start, 2)) + " seconds")
+```
+
+يستغرق هذا حوالي 120 ثانية على جهازي، ولكن قد يختلف على كل جهاز. إذا كنت تريد طباعة النتائج ورؤية ما إذا كانت المشاعر تتطابق مع المراجعة:
+
+```python
+df = df.sort_values(by=["Negative_Sentiment"], ascending=True)
+print(df[["Negative_Review", "Negative_Sentiment"]])
+df = df.sort_values(by=["Positive_Sentiment"], ascending=True)
+print(df[["Positive_Review", "Positive_Sentiment"]])
+```
+
+آخر شيء يجب القيام به مع الملف قبل استخدامه في التحدي هو حفظه! يجب عليك أيضًا التفكير في إعادة ترتيب جميع الأعمدة الجديدة بحيث تكون سهلة الاستخدام (بالنسبة للإنسان، هذا تغيير تجميلي).
+
+```python
+# Reorder the columns (This is cosmetic, but to make it easier to explore the data later)
+df = df.reindex(["Hotel_Name", "Hotel_Address", "Total_Number_of_Reviews", "Average_Score", "Reviewer_Score", "Negative_Sentiment", "Positive_Sentiment", "Reviewer_Nationality", "Leisure_trip", "Couple", "Solo_traveler", "Business_trip", "Group", "Family_with_young_children", "Family_with_older_children", "With_a_pet", "Negative_Review", "Positive_Review"], axis=1)
+
+print("Saving results to Hotel_Reviews_NLP.csv")
+df.to_csv(r"../data/Hotel_Reviews_NLP.csv", index = False)
+```
+
+يجب عليك تشغيل الكود بالكامل لـ [دفتر التحليل](https://github.com/microsoft/ML-For-Beginners/blob/main/6-NLP/5-Hotel-Reviews-2/solution/3-notebook.ipynb) (بعد تشغيل [دفتر التصفية](https://github.com/microsoft/ML-For-Beginners/blob/main/6-NLP/5-Hotel-Reviews-2/solution/1-notebook.ipynb) لإنشاء ملف Hotel_Reviews_Filtered.csv).
+
+لمراجعة الخطوات:
+
+1. تم استكشاف ملف البيانات الأصلي **Hotel_Reviews.csv** في الدرس السابق باستخدام [دفتر الاستكشاف](https://github.com/microsoft/ML-For-Beginners/blob/main/6-NLP/4-Hotel-Reviews-1/solution/notebook.ipynb)
+2. تم تصفية Hotel_Reviews.csv باستخدام [دفتر التصفية](https://github.com/microsoft/ML-For-Beginners/blob/main/6-NLP/5-Hotel-Reviews-2/solution/1-notebook.ipynb) مما نتج عنه **Hotel_Reviews_Filtered.csv**
+3. تم معالجة Hotel_Reviews_Filtered.csv باستخدام [دفتر تحليل المشاعر](https://github.com/microsoft/ML-For-Beginners/blob/main/6-NLP/5-Hotel-Reviews-2/solution/3-notebook.ipynb) مما نتج عنه **Hotel_Reviews_NLP.csv**
+4. استخدم Hotel_Reviews_NLP.csv في تحدي معالجة اللغة الطبيعية أدناه
+
+### الخلاصة
+
+عندما بدأت، كان لديك مجموعة بيانات تحتوي على أعمدة وبيانات ولكن لم يكن بالإمكان التحقق من جميعها أو استخدامها. لقد استكشفت البيانات، وقمت بتصفية ما لا تحتاجه، وحولت العلامات إلى شيء مفيد، وحسبت متوسطاتك الخاصة، وأضفت بعض الأعمدة الخاصة بالمشاعر، ومن المحتمل أنك تعلمت بعض الأشياء المثيرة للاهتمام حول معالجة النصوص الطبيعية.
+
+## [اختبار ما بعد المحاضرة](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/40/)
+
+## التحدي
+
+الآن بعد أن قمت بتحليل مجموعة البيانات الخاصة بك للمشاعر، حاول استخدام الاستراتيجيات التي تعلمتها في هذا المنهج (مثل التجميع) لتحديد الأنماط المتعلقة بالمشاعر.
+
+## المراجعة والدراسة الذاتية
+
+خذ [هذا المقرر التعليمي](https://docs.microsoft.com/en-us/learn/modules/classify-user-feedback-with-the-text-analytics-api/?WT.mc_id=academic-77952-leestott) لتتعلم المزيد واستخدام أدوات مختلفة لاستكشاف المشاعر في النصوص.
+
+## الواجب
+
+[جرب مجموعة بيانات مختلفة](assignment.md)
+
+---
+
+**إخلاء المسؤولية**:
+تم ترجمة هذا المستند باستخدام خدمة الترجمة بالذكاء الاصطناعي [Co-op Translator](https://github.com/Azure/co-op-translator). بينما نسعى لتحقيق الدقة، يرجى العلم أن الترجمات الآلية قد تحتوي على أخطاء أو معلومات غير دقيقة. يجب اعتبار المستند الأصلي بلغته الأصلية المصدر الرسمي. للحصول على معلومات حاسمة، يُوصى بالاستعانة بترجمة بشرية احترافية. نحن غير مسؤولين عن أي سوء فهم أو تفسيرات خاطئة تنشأ عن استخدام هذه الترجمة.
\ No newline at end of file
diff --git a/translations/ar/6-NLP/5-Hotel-Reviews-2/assignment.md b/translations/ar/6-NLP/5-Hotel-Reviews-2/assignment.md
new file mode 100644
index 000000000..48d18cef9
--- /dev/null
+++ b/translations/ar/6-NLP/5-Hotel-Reviews-2/assignment.md
@@ -0,0 +1,25 @@
+
+# جرب مجموعة بيانات مختلفة
+
+## التعليمات
+
+الآن بعد أن تعلمت كيفية استخدام مكتبة NLTK لتحديد المشاعر في النصوص، جرب مجموعة بيانات مختلفة. من المحتمل أنك ستحتاج إلى القيام ببعض معالجة البيانات، لذا قم بإنشاء دفتر ملاحظات ووثق عملية تفكيرك. ماذا تكتشف؟
+
+## المعايير
+
+| المعايير | ممتاز | مقبول | يحتاج إلى تحسين |
+| -------- | ----------------------------------------------------------------------------------------------------------------- | --------------------------------------- | ---------------------- |
+| | يتم تقديم دفتر ملاحظات كامل ومجموعة بيانات مع خلايا موثقة جيدًا تشرح كيفية تحديد المشاعر | دفتر الملاحظات يفتقر إلى تفسيرات جيدة | دفتر الملاحظات يحتوي على أخطاء |
+
+---
+
+**إخلاء المسؤولية**:
+تم ترجمة هذا المستند باستخدام خدمة الترجمة بالذكاء الاصطناعي [Co-op Translator](https://github.com/Azure/co-op-translator). بينما نسعى لتحقيق الدقة، يرجى العلم أن الترجمات الآلية قد تحتوي على أخطاء أو معلومات غير دقيقة. يجب اعتبار المستند الأصلي بلغته الأصلية المصدر الرسمي. للحصول على معلومات حاسمة، يُوصى بالاستعانة بترجمة بشرية احترافية. نحن غير مسؤولين عن أي سوء فهم أو تفسيرات خاطئة ناتجة عن استخدام هذه الترجمة.
\ No newline at end of file
diff --git a/translations/ar/6-NLP/5-Hotel-Reviews-2/notebook.ipynb b/translations/ar/6-NLP/5-Hotel-Reviews-2/notebook.ipynb
new file mode 100644
index 000000000..e69de29bb
diff --git a/translations/ar/6-NLP/5-Hotel-Reviews-2/solution/1-notebook.ipynb b/translations/ar/6-NLP/5-Hotel-Reviews-2/solution/1-notebook.ipynb
new file mode 100644
index 000000000..b0984331f
--- /dev/null
+++ b/translations/ar/6-NLP/5-Hotel-Reviews-2/solution/1-notebook.ipynb
@@ -0,0 +1,172 @@
+{
+ "metadata": {
+ "language_info": {
+ "codemirror_mode": {
+ "name": "ipython",
+ "version": 3
+ },
+ "file_extension": ".py",
+ "mimetype": "text/x-python",
+ "name": "python",
+ "nbconvert_exporter": "python",
+ "pygments_lexer": "ipython3",
+ "version": "3.7.0"
+ },
+ "orig_nbformat": 4,
+ "kernelspec": {
+ "name": "python3",
+ "display_name": "Python 3.7.0 64-bit ('3.7')"
+ },
+ "interpreter": {
+ "hash": "70b38d7a306a849643e446cd70466270a13445e5987dfa1344ef2b127438fa4d"
+ },
+ "coopTranslator": {
+ "original_hash": "033cb89c85500224b3c63fd04f49b4aa",
+ "translation_date": "2025-08-29T15:43:54+00:00",
+ "source_file": "6-NLP/5-Hotel-Reviews-2/solution/1-notebook.ipynb",
+ "language_code": "ar"
+ }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 2,
+ "cells": [
+ {
+ "cell_type": "code",
+ "execution_count": 1,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "import pandas as pd\n",
+ "import time\n",
+ "import ast"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 2,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "def replace_address(row):\n",
+ " if \"Netherlands\" in row[\"Hotel_Address\"]:\n",
+ " return \"Amsterdam, Netherlands\"\n",
+ " elif \"Barcelona\" in row[\"Hotel_Address\"]:\n",
+ " return \"Barcelona, Spain\"\n",
+ " elif \"United Kingdom\" in row[\"Hotel_Address\"]:\n",
+ " return \"London, United Kingdom\"\n",
+ " elif \"Milan\" in row[\"Hotel_Address\"]: \n",
+ " return \"Milan, Italy\"\n",
+ " elif \"France\" in row[\"Hotel_Address\"]:\n",
+ " return \"Paris, France\"\n",
+ " elif \"Vienna\" in row[\"Hotel_Address\"]:\n",
+ " return \"Vienna, Austria\" \n",
+ " else:\n",
+ " return row.Hotel_Address\n",
+ " "
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 3,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "# Load the hotel reviews from CSV\n",
+ "start = time.time()\n",
+ "df = pd.read_csv('../../data/Hotel_Reviews.csv')\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 4,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "# dropping columns we will not use:\n",
+ "df.drop([\"lat\", \"lng\"], axis = 1, inplace=True)\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 5,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "# Replace all the addresses with a shortened, more useful form\n",
+ "df[\"Hotel_Address\"] = df.apply(replace_address, axis = 1)\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 6,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "# Drop `Additional_Number_of_Scoring`\n",
+ "df.drop([\"Additional_Number_of_Scoring\"], axis = 1, inplace=True)\n",
+ "# Replace `Total_Number_of_Reviews` and `Average_Score` with our own calculated values\n",
+ "df.Total_Number_of_Reviews = df.groupby('Hotel_Name').transform('count')\n",
+ "df.Average_Score = round(df.groupby('Hotel_Name').Reviewer_Score.transform('mean'), 1)\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 7,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "# Process the Tags into new columns\n",
+ "# The file Hotel_Reviews_Tags.py, identifies the most important tags\n",
+ "# Leisure trip, Couple, Solo traveler, Business trip, Group combined with Travelers with friends, \n",
+ "# Family with young children, Family with older children, With a pet\n",
+ "df[\"Leisure_trip\"] = df.Tags.apply(lambda tag: 1 if \"Leisure trip\" in tag else 0)\n",
+ "df[\"Couple\"] = df.Tags.apply(lambda tag: 1 if \"Couple\" in tag else 0)\n",
+ "df[\"Solo_traveler\"] = df.Tags.apply(lambda tag: 1 if \"Solo traveler\" in tag else 0)\n",
+ "df[\"Business_trip\"] = df.Tags.apply(lambda tag: 1 if \"Business trip\" in tag else 0)\n",
+ "df[\"Group\"] = df.Tags.apply(lambda tag: 1 if \"Group\" in tag or \"Travelers with friends\" in tag else 0)\n",
+ "df[\"Family_with_young_children\"] = df.Tags.apply(lambda tag: 1 if \"Family with young children\" in tag else 0)\n",
+ "df[\"Family_with_older_children\"] = df.Tags.apply(lambda tag: 1 if \"Family with older children\" in tag else 0)\n",
+ "df[\"With_a_pet\"] = df.Tags.apply(lambda tag: 1 if \"With a pet\" in tag else 0)\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 8,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "# No longer need any of these columns\n",
+ "df.drop([\"Review_Date\", \"Review_Total_Negative_Word_Counts\", \"Review_Total_Positive_Word_Counts\", \"days_since_review\", \"Total_Number_of_Reviews_Reviewer_Has_Given\"], axis = 1, inplace=True)\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 9,
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "name": "stdout",
+ "text": [
+ "Saving results to Hotel_Reviews_Filtered.csv\n",
+ "Filtering took 23.74 seconds\n"
+ ]
+ }
+ ],
+ "source": [
+ "# Saving new data file with calculated columns\n",
+ "print(\"Saving results to Hotel_Reviews_Filtered.csv\")\n",
+ "df.to_csv(r'../../data/Hotel_Reviews_Filtered.csv', index = False)\n",
+ "end = time.time()\n",
+ "print(\"Filtering took \" + str(round(end - start, 2)) + \" seconds\")\n"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "\n---\n\n**إخلاء المسؤولية**: \nتم ترجمة هذا المستند باستخدام خدمة الترجمة بالذكاء الاصطناعي [Co-op Translator](https://github.com/Azure/co-op-translator). بينما نسعى لتحقيق الدقة، يرجى العلم أن الترجمات الآلية قد تحتوي على أخطاء أو معلومات غير دقيقة. يجب اعتبار المستند الأصلي بلغته الأصلية المصدر الرسمي. للحصول على معلومات حاسمة، يُوصى بالاستعانة بترجمة بشرية احترافية. نحن غير مسؤولين عن أي سوء فهم أو تفسيرات خاطئة تنشأ عن استخدام هذه الترجمة.\n"
+ ]
+ }
+ ]
+}
\ No newline at end of file
diff --git a/translations/ar/6-NLP/5-Hotel-Reviews-2/solution/2-notebook.ipynb b/translations/ar/6-NLP/5-Hotel-Reviews-2/solution/2-notebook.ipynb
new file mode 100644
index 000000000..1e445b7b1
--- /dev/null
+++ b/translations/ar/6-NLP/5-Hotel-Reviews-2/solution/2-notebook.ipynb
@@ -0,0 +1,137 @@
+{
+ "metadata": {
+ "language_info": {
+ "codemirror_mode": {
+ "name": "ipython",
+ "version": 3
+ },
+ "file_extension": ".py",
+ "mimetype": "text/x-python",
+ "name": "python",
+ "nbconvert_exporter": "python",
+ "pygments_lexer": "ipython3",
+ "version": "3.7.0"
+ },
+ "orig_nbformat": 4,
+ "kernelspec": {
+ "name": "python3",
+ "display_name": "Python 3.7.0 64-bit ('3.7')"
+ },
+ "interpreter": {
+ "hash": "70b38d7a306a849643e446cd70466270a13445e5987dfa1344ef2b127438fa4d"
+ },
+ "coopTranslator": {
+ "original_hash": "341efc86325ec2a214f682f57a189dfd",
+ "translation_date": "2025-08-29T15:44:03+00:00",
+ "source_file": "6-NLP/5-Hotel-Reviews-2/solution/2-notebook.ipynb",
+ "language_code": "ar"
+ }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 2,
+ "cells": [
+ {
+ "cell_type": "code",
+ "execution_count": 4,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "# Load the hotel reviews from CSV (you can )\n",
+ "import pandas as pd \n",
+ "\n",
+ "df = pd.read_csv('../../data/Hotel_Reviews_Filtered.csv')\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 5,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "# We want to find the most useful tags to keep\n",
+ "# Remove opening and closing brackets\n",
+ "df.Tags = df.Tags.str.strip(\"[']\")\n",
+ "# remove all quotes too\n",
+ "df.Tags = df.Tags.str.replace(\" ', '\", \",\", regex = False)\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 6,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "# removing this to take advantage of the 'already a phrase' fact of the dataset \n",
+ "# Now split the strings into a list\n",
+ "tag_list_df = df.Tags.str.split(',', expand = True)\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 7,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "# Remove leading and trailing spaces\n",
+ "df[\"Tag_1\"] = tag_list_df[0].str.strip()\n",
+ "df[\"Tag_2\"] = tag_list_df[1].str.strip()\n",
+ "df[\"Tag_3\"] = tag_list_df[2].str.strip()\n",
+ "df[\"Tag_4\"] = tag_list_df[3].str.strip()\n",
+ "df[\"Tag_5\"] = tag_list_df[4].str.strip()\n",
+ "df[\"Tag_6\"] = tag_list_df[5].str.strip()\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 8,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "# Merge the 6 columns into one with melt\n",
+ "df_tags = df.melt(value_vars=[\"Tag_1\", \"Tag_2\", \"Tag_3\", \"Tag_4\", \"Tag_5\", \"Tag_6\"])\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 9,
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "name": "stdout",
+ "text": [
+ "The shape of the tags with no filtering: (2514684, 2)\n",
+ " index count\n",
+ "0 Leisure trip 338423\n",
+ "1 Couple 205305\n",
+ "2 Solo traveler 89779\n",
+ "3 Business trip 68176\n",
+ "4 Group 51593\n",
+ "5 Family with young children 49318\n",
+ "6 Family with older children 21509\n",
+ "7 Travelers with friends 1610\n",
+ "8 With a pet 1078\n"
+ ]
+ }
+ ],
+ "source": [
+ "# Get the value counts\n",
+ "tag_vc = df_tags.value.value_counts()\n",
+ "# print(tag_vc)\n",
+ "print(\"The shape of the tags with no filtering:\", str(df_tags.shape))\n",
+ "# Drop rooms, suites, and length of stay, mobile device and anything with less count than a 1000\n",
+ "df_tags = df_tags[~df_tags.value.str.contains(\"Standard|room|Stayed|device|Beds|Suite|Studio|King|Superior|Double\", na=False, case=False)]\n",
+ "tag_vc = df_tags.value.value_counts().reset_index(name=\"count\").query(\"count > 1000\")\n",
+ "# Print the top 10 (there should only be 9 and we'll use these in the filtering section)\n",
+ "print(tag_vc[:10])"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "\n---\n\n**إخلاء المسؤولية**: \nتم ترجمة هذا المستند باستخدام خدمة الترجمة بالذكاء الاصطناعي [Co-op Translator](https://github.com/Azure/co-op-translator). بينما نسعى لتحقيق الدقة، يرجى العلم أن الترجمات الآلية قد تحتوي على أخطاء أو عدم دقة. يجب اعتبار المستند الأصلي بلغته الأصلية المصدر الرسمي. للحصول على معلومات حاسمة، يُوصى بالاستعانة بترجمة بشرية احترافية. نحن غير مسؤولين عن أي سوء فهم أو تفسيرات خاطئة تنشأ عن استخدام هذه الترجمة.\n"
+ ]
+ }
+ ]
+}
\ No newline at end of file
diff --git a/translations/ar/6-NLP/5-Hotel-Reviews-2/solution/3-notebook.ipynb b/translations/ar/6-NLP/5-Hotel-Reviews-2/solution/3-notebook.ipynb
new file mode 100644
index 000000000..d69f98972
--- /dev/null
+++ b/translations/ar/6-NLP/5-Hotel-Reviews-2/solution/3-notebook.ipynb
@@ -0,0 +1,260 @@
+{
+ "metadata": {
+ "language_info": {
+ "codemirror_mode": {
+ "name": "ipython",
+ "version": 3
+ },
+ "file_extension": ".py",
+ "mimetype": "text/x-python",
+ "name": "python",
+ "nbconvert_exporter": "python",
+ "pygments_lexer": "ipython3",
+ "version": "3.7.0"
+ },
+ "orig_nbformat": 4,
+ "kernelspec": {
+ "name": "python3",
+ "display_name": "Python 3.7.0 64-bit ('3.7')"
+ },
+ "interpreter": {
+ "hash": "70b38d7a306a849643e446cd70466270a13445e5987dfa1344ef2b127438fa4d"
+ },
+ "coopTranslator": {
+ "original_hash": "705bf02633759f689abc37b19749a16d",
+ "translation_date": "2025-08-29T15:44:11+00:00",
+ "source_file": "6-NLP/5-Hotel-Reviews-2/solution/3-notebook.ipynb",
+ "language_code": "ar"
+ }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 2,
+ "cells": [
+ {
+ "cell_type": "code",
+ "execution_count": 9,
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "name": "stderr",
+ "text": [
+ "[nltk_data] Downloading package vader_lexicon to\n[nltk_data] /Users/jenlooper/nltk_data...\n"
+ ]
+ },
+ {
+ "output_type": "execute_result",
+ "data": {
+ "text/plain": [
+ "True"
+ ]
+ },
+ "metadata": {},
+ "execution_count": 9
+ }
+ ],
+ "source": [
+ "import time\n",
+ "import pandas as pd\n",
+ "import nltk as nltk\n",
+ "from nltk.corpus import stopwords\n",
+ "from nltk.sentiment.vader import SentimentIntensityAnalyzer\n",
+ "nltk.download('vader_lexicon')\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 10,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "vader_sentiment = SentimentIntensityAnalyzer()\n",
+ "\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 11,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "# There are 3 possibilities of input for a review:\n",
+ "# It could be \"No Negative\", in which case, return 0\n",
+ "# It could be \"No Positive\", in which case, return 0\n",
+ "# It could be a review, in which case calculate the sentiment\n",
+ "def calc_sentiment(review): \n",
+ " if review == \"No Negative\" or review == \"No Positive\":\n",
+ " return 0\n",
+ " return vader_sentiment.polarity_scores(review)[\"compound\"] \n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 12,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "# Load the hotel reviews from CSV\n",
+ "df = pd.read_csv(\"../../data/Hotel_Reviews_Filtered.csv\")\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 13,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "# Remove stop words - can be slow for a lot of text!\n",
+ "# Ryan Han (ryanxjhan on Kaggle) has a great post measuring performance of different stop words removal approaches\n",
+ "# https://www.kaggle.com/ryanxjhan/fast-stop-words-removal # using the approach that Ryan recommends\n",
+ "start = time.time()\n",
+ "cache = set(stopwords.words(\"english\"))\n",
+ "def remove_stopwords(review):\n",
+ " text = \" \".join([word for word in review.split() if word not in cache])\n",
+ " return text\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 14,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "# Remove the stop words from both columns\n",
+ "df.Negative_Review = df.Negative_Review.apply(remove_stopwords) \n",
+ "df.Positive_Review = df.Positive_Review.apply(remove_stopwords)\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 15,
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "name": "stdout",
+ "text": [
+ "Removing stop words took 5.77 seconds\n"
+ ]
+ }
+ ],
+ "source": [
+ "end = time.time()\n",
+ "print(\"Removing stop words took \" + str(round(end - start, 2)) + \" seconds\")\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 16,
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "name": "stdout",
+ "text": [
+ "Calculating sentiment columns for both positive and negative reviews\n",
+ "Calculating sentiment took 201.07 seconds\n"
+ ]
+ }
+ ],
+ "source": [
+ "# Add a negative sentiment and positive sentiment column\n",
+ "print(\"Calculating sentiment columns for both positive and negative reviews\")\n",
+ "start = time.time()\n",
+ "df[\"Negative_Sentiment\"] = df.Negative_Review.apply(calc_sentiment)\n",
+ "df[\"Positive_Sentiment\"] = df.Positive_Review.apply(calc_sentiment)\n",
+ "end = time.time()\n",
+ "print(\"Calculating sentiment took \" + str(round(end - start, 2)) + \" seconds\")\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 17,
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "name": "stdout",
+ "text": [
+ " Negative_Review Negative_Sentiment\n",
+ "186584 So bad experience memories I hotel The first n... -0.9920\n",
+ "129503 First charged twice room booked booking second... -0.9896\n",
+ "307286 The staff Had bad experience even booking Janu... -0.9889\n",
+ "452092 No WLAN room Incredibly rude restaurant staff ... -0.9884\n",
+ "201293 We usually traveling Paris 2 3 times year busi... -0.9873\n",
+ "... ... ...\n",
+ "26899 I would say however one night expensive even d... 0.9933\n",
+ "138365 Wifi terribly slow I speed test network upload... 0.9938\n",
+ "79215 I find anything hotel first I walked past hote... 0.9938\n",
+ "278506 The property great location There bakery next ... 0.9945\n",
+ "339189 Guys I like hotel I wish return next year Howe... 0.9948\n",
+ "\n",
+ "[515738 rows x 2 columns]\n",
+ " Positive_Review Positive_Sentiment\n",
+ "137893 Bathroom Shower We going stay twice hotel 2 ni... -0.9820\n",
+ "5839 I completely disappointed mad since reception ... -0.9780\n",
+ "64158 get everything extra internet parking breakfas... -0.9751\n",
+ "124178 I didnt like anythig Room small Asked upgrade ... -0.9721\n",
+ "489137 Very rude manager abusive staff reception Dirt... -0.9703\n",
+ "... ... ...\n",
+ "331570 Everything This recently renovated hotel class... 0.9984\n",
+ "322920 From moment stepped doors Guesthouse Hotel sta... 0.9985\n",
+ "293710 This place surprise expected good actually gre... 0.9985\n",
+ "417442 We celebrated wedding night Langham I commend ... 0.9985\n",
+ "132492 We arrived super cute boutique hotel area expl... 0.9987\n",
+ "\n",
+ "[515738 rows x 2 columns]\n"
+ ]
+ }
+ ],
+ "source": [
+ "df = df.sort_values(by=[\"Negative_Sentiment\"], ascending=True)\n",
+ "print(df[[\"Negative_Review\", \"Negative_Sentiment\"]])\n",
+ "df = df.sort_values(by=[\"Positive_Sentiment\"], ascending=True)\n",
+ "print(df[[\"Positive_Review\", \"Positive_Sentiment\"]])\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 18,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "# Reorder the columns (This is cosmetic, but to make it easier to explore the data later)\n",
+ "df = df.reindex([\"Hotel_Name\", \"Hotel_Address\", \"Total_Number_of_Reviews\", \"Average_Score\", \"Reviewer_Score\", \"Negative_Sentiment\", \"Positive_Sentiment\", \"Reviewer_Nationality\", \"Leisure_trip\", \"Couple\", \"Solo_traveler\", \"Business_trip\", \"Group\", \"Family_with_young_children\", \"Family_with_older_children\", \"With_a_pet\", \"Negative_Review\", \"Positive_Review\"], axis=1)\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 19,
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "name": "stdout",
+ "text": [
+ "Saving results to Hotel_Reviews_NLP.csv\n"
+ ]
+ }
+ ],
+ "source": [
+ "print(\"Saving results to Hotel_Reviews_NLP.csv\")\n",
+ "df.to_csv(r\"../../data/Hotel_Reviews_NLP.csv\", index = False)\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": []
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "\n---\n\n**إخلاء المسؤولية**: \nتم ترجمة هذا المستند باستخدام خدمة الترجمة بالذكاء الاصطناعي [Co-op Translator](https://github.com/Azure/co-op-translator). بينما نسعى لتحقيق الدقة، يرجى العلم أن الترجمات الآلية قد تحتوي على أخطاء أو معلومات غير دقيقة. يجب اعتبار المستند الأصلي بلغته الأصلية المصدر الموثوق. للحصول على معلومات حاسمة، يُوصى بالاستعانة بترجمة بشرية احترافية. نحن غير مسؤولين عن أي سوء فهم أو تفسيرات خاطئة تنشأ عن استخدام هذه الترجمة.\n"
+ ]
+ }
+ ]
+}
\ No newline at end of file
diff --git a/translations/ar/6-NLP/5-Hotel-Reviews-2/solution/Julia/README.md b/translations/ar/6-NLP/5-Hotel-Reviews-2/solution/Julia/README.md
new file mode 100644
index 000000000..1b1a37abb
--- /dev/null
+++ b/translations/ar/6-NLP/5-Hotel-Reviews-2/solution/Julia/README.md
@@ -0,0 +1,15 @@
+
+هذا مكان مؤقت
+
+---
+
+**إخلاء المسؤولية**:
+تمت ترجمة هذا المستند باستخدام خدمة الترجمة الآلية [Co-op Translator](https://github.com/Azure/co-op-translator). بينما نسعى لتحقيق الدقة، يرجى العلم أن الترجمات الآلية قد تحتوي على أخطاء أو معلومات غير دقيقة. يجب اعتبار المستند الأصلي بلغته الأصلية هو المصدر الموثوق. للحصول على معلومات حساسة أو هامة، يُوصى بالاستعانة بترجمة بشرية احترافية. نحن غير مسؤولين عن أي سوء فهم أو تفسيرات خاطئة تنشأ عن استخدام هذه الترجمة.
\ No newline at end of file
diff --git a/translations/ar/6-NLP/5-Hotel-Reviews-2/solution/R/README.md b/translations/ar/6-NLP/5-Hotel-Reviews-2/solution/R/README.md
new file mode 100644
index 000000000..1e7736927
--- /dev/null
+++ b/translations/ar/6-NLP/5-Hotel-Reviews-2/solution/R/README.md
@@ -0,0 +1,15 @@
+
+هذا مجرد عنصر نائب مؤقت
+
+---
+
+**إخلاء المسؤولية**:
+تم ترجمة هذا المستند باستخدام خدمة الترجمة بالذكاء الاصطناعي [Co-op Translator](https://github.com/Azure/co-op-translator). بينما نسعى لتحقيق الدقة، يرجى العلم أن الترجمات الآلية قد تحتوي على أخطاء أو معلومات غير دقيقة. يجب اعتبار المستند الأصلي بلغته الأصلية المصدر الرسمي. للحصول على معلومات حاسمة، يُوصى بالاستعانة بترجمة بشرية احترافية. نحن غير مسؤولين عن أي سوء فهم أو تفسيرات خاطئة تنشأ عن استخدام هذه الترجمة.
\ No newline at end of file
diff --git a/translations/ar/6-NLP/README.md b/translations/ar/6-NLP/README.md
new file mode 100644
index 000000000..9b913387e
--- /dev/null
+++ b/translations/ar/6-NLP/README.md
@@ -0,0 +1,38 @@
+
+# البدء في معالجة اللغة الطبيعية
+
+معالجة اللغة الطبيعية (NLP) هي قدرة برنامج الكمبيوتر على فهم اللغة البشرية كما يتم التحدث بها وكتابتها - والتي تُعرف باسم اللغة الطبيعية. وهي جزء من الذكاء الاصطناعي (AI). لقد وُجدت معالجة اللغة الطبيعية لأكثر من 50 عامًا ولها جذور في مجال اللغويات. يهدف هذا المجال بأكمله إلى مساعدة الآلات على فهم ومعالجة اللغة البشرية. يمكن بعد ذلك استخدام هذه القدرة لأداء مهام مثل التدقيق الإملائي أو الترجمة الآلية. ولها تطبيقات متنوعة في العالم الحقيقي في عدد من المجالات، بما في ذلك الأبحاث الطبية، ومحركات البحث، وذكاء الأعمال.
+
+## موضوع إقليمي: اللغات الأوروبية والأدب والفنادق الرومانسية في أوروبا ❤️
+
+في هذا القسم من المنهج، ستتعرف على واحدة من أكثر استخدامات التعلم الآلي انتشارًا: معالجة اللغة الطبيعية (NLP). مستمدة من اللغويات الحاسوبية، تُعد هذه الفئة من الذكاء الاصطناعي الجسر بين البشر والآلات من خلال التواصل الصوتي أو النصي.
+
+في هذه الدروس، سنتعلم أساسيات معالجة اللغة الطبيعية من خلال بناء روبوتات محادثة صغيرة لفهم كيف يساعد التعلم الآلي في جعل هذه المحادثات أكثر "ذكاءً". ستعود بالزمن إلى الوراء، وتتحدث مع إليزابيث بينيت والسيد دارسي من رواية جين أوستن الكلاسيكية، **كبرياء وتحامل**، التي نُشرت عام 1813. بعد ذلك، ستُعمّق معرفتك من خلال تعلم تحليل المشاعر عبر مراجعات الفنادق في أوروبا.
+
+
+> صورة بواسطة Elaine Howlin على Unsplash
+
+## الدروس
+
+1. [مقدمة في معالجة اللغة الطبيعية](1-Introduction-to-NLP/README.md)
+2. [مهام وتقنيات معالجة اللغة الطبيعية الشائعة](2-Tasks/README.md)
+3. [الترجمة وتحليل المشاعر باستخدام التعلم الآلي](3-Translation-Sentiment/README.md)
+4. [تحضير بياناتك](4-Hotel-Reviews-1/README.md)
+5. [استخدام NLTK لتحليل المشاعر](5-Hotel-Reviews-2/README.md)
+
+## الشكر والتقدير
+
+تم كتابة هذه الدروس حول معالجة اللغة الطبيعية مع ☕ بواسطة [Stephen Howell](https://twitter.com/Howell_MSFT)
+
+---
+
+**إخلاء المسؤولية**:
+تمت ترجمة هذا المستند باستخدام خدمة الترجمة الآلية [Co-op Translator](https://github.com/Azure/co-op-translator). بينما نسعى لتحقيق الدقة، يرجى العلم أن الترجمات الآلية قد تحتوي على أخطاء أو عدم دقة. يجب اعتبار المستند الأصلي بلغته الأصلية هو المصدر الموثوق. للحصول على معلومات حساسة أو هامة، يُوصى بالاستعانة بترجمة بشرية احترافية. نحن غير مسؤولين عن أي سوء فهم أو تفسيرات خاطئة تنشأ عن استخدام هذه الترجمة.
\ No newline at end of file
diff --git a/translations/ar/6-NLP/data/README.md b/translations/ar/6-NLP/data/README.md
new file mode 100644
index 000000000..e973fb2b6
--- /dev/null
+++ b/translations/ar/6-NLP/data/README.md
@@ -0,0 +1,15 @@
+
+قم بتنزيل بيانات مراجعة الفندق إلى هذا المجلد.
+
+---
+
+**إخلاء المسؤولية**:
+تم ترجمة هذا المستند باستخدام خدمة الترجمة بالذكاء الاصطناعي [Co-op Translator](https://github.com/Azure/co-op-translator). بينما نسعى لتحقيق الدقة، يرجى العلم أن الترجمات الآلية قد تحتوي على أخطاء أو معلومات غير دقيقة. يجب اعتبار المستند الأصلي بلغته الأصلية المصدر الرسمي. للحصول على معلومات حاسمة، يُوصى بالاستعانة بترجمة بشرية احترافية. نحن غير مسؤولين عن أي سوء فهم أو تفسيرات خاطئة تنشأ عن استخدام هذه الترجمة.
\ No newline at end of file
diff --git a/translations/ar/7-TimeSeries/1-Introduction/README.md b/translations/ar/7-TimeSeries/1-Introduction/README.md
new file mode 100644
index 000000000..db38557c2
--- /dev/null
+++ b/translations/ar/7-TimeSeries/1-Introduction/README.md
@@ -0,0 +1,199 @@
+
+# مقدمة في التنبؤ بالسلاسل الزمنية
+
+
+
+> رسم توضيحي من [Tomomi Imura](https://www.twitter.com/girlie_mac)
+
+في هذا الدرس والدرس التالي، ستتعلم قليلاً عن التنبؤ بالسلاسل الزمنية، وهو جزء مثير وقيم من أدوات عالِم تعلم الآلة، ولكنه أقل شهرة مقارنة بمواضيع أخرى. التنبؤ بالسلاسل الزمنية يشبه "الكرة البلورية": بناءً على الأداء السابق لمتغير مثل السعر، يمكنك التنبؤ بقيمته المستقبلية المحتملة.
+
+[](https://youtu.be/cBojo1hsHiI "مقدمة في التنبؤ بالسلاسل الزمنية")
+
+> 🎥 انقر على الصورة أعلاه لمشاهدة فيديو عن التنبؤ بالسلاسل الزمنية
+
+## [اختبار ما قبل المحاضرة](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/41/)
+
+هذا المجال مفيد ومثير وله قيمة حقيقية للأعمال، نظرًا لتطبيقاته المباشرة على مشكلات التسعير والمخزون وسلاسل التوريد. على الرغم من أن تقنيات التعلم العميق بدأت تُستخدم للحصول على رؤى أعمق لتحسين التنبؤ بالأداء المستقبلي، إلا أن التنبؤ بالسلاسل الزمنية لا يزال مجالًا يعتمد بشكل كبير على تقنيات تعلم الآلة الكلاسيكية.
+
+> يمكن العثور على منهج مفيد للسلاسل الزمنية من جامعة Penn State [هنا](https://online.stat.psu.edu/stat510/lesson/1)
+
+## مقدمة
+
+افترض أنك تدير مجموعة من عدادات مواقف السيارات الذكية التي توفر بيانات حول مدى تكرار استخدامها ومدة استخدامها بمرور الوقت.
+
+> ماذا لو كان بإمكانك التنبؤ، بناءً على الأداء السابق للعداد، بقيمته المستقبلية وفقًا لقوانين العرض والطلب؟
+
+التنبؤ بدقة بالوقت المناسب لاتخاذ إجراء لتحقيق هدفك هو تحدٍ يمكن معالجته باستخدام التنبؤ بالسلاسل الزمنية. قد لا يكون من السار للناس أن يتم فرض رسوم أعلى في أوقات الذروة عندما يبحثون عن موقف للسيارات، ولكنه سيكون وسيلة مؤكدة لتوليد الإيرادات لتنظيف الشوارع!
+
+دعونا نستكشف بعض أنواع خوارزميات السلاسل الزمنية ونبدأ دفتر ملاحظات لتنظيف وإعداد بعض البيانات. البيانات التي ستقوم بتحليلها مأخوذة من مسابقة التنبؤ GEFCom2014. تتكون من 3 سنوات من بيانات الحمل الكهربائي ودرجات الحرارة على مدار الساعة بين عامي 2012 و2014. بناءً على الأنماط التاريخية للحمل الكهربائي ودرجات الحرارة، يمكنك التنبؤ بالقيم المستقبلية للحمل الكهربائي.
+
+في هذا المثال، ستتعلم كيفية التنبؤ بخطوة زمنية واحدة للأمام باستخدام بيانات الحمل التاريخية فقط. ومع ذلك، قبل البدء، من المفيد فهم ما يحدث وراء الكواليس.
+
+## بعض التعريفات
+
+عند مواجهة مصطلح "السلاسل الزمنية"، تحتاج إلى فهم استخدامه في سياقات مختلفة.
+
+🎓 **السلاسل الزمنية**
+
+في الرياضيات، "السلاسل الزمنية هي سلسلة من نقاط البيانات المفهرسة (أو المدرجة أو المرسومة) بترتيب زمني. الأكثر شيوعًا، السلاسل الزمنية هي تسلسل مأخوذ عند نقاط متتالية متساوية التباعد في الزمن." مثال على السلاسل الزمنية هو القيمة اليومية لإغلاق [مؤشر داو جونز الصناعي](https://wikipedia.org/wiki/Time_series). يتم استخدام الرسوم البيانية للسلاسل الزمنية والنمذجة الإحصائية بشكل متكرر في معالجة الإشارات، التنبؤ بالطقس، التنبؤ بالزلازل، وغيرها من المجالات حيث تحدث الأحداث ويمكن رسم نقاط البيانات بمرور الوقت.
+
+🎓 **تحليل السلاسل الزمنية**
+
+تحليل السلاسل الزمنية هو تحليل البيانات المذكورة أعلاه. يمكن أن تأخذ بيانات السلاسل الزمنية أشكالًا مختلفة، بما في ذلك "السلاسل الزمنية المتقطعة" التي تكتشف الأنماط في تطور السلاسل الزمنية قبل وبعد حدث مقاطع. يعتمد نوع التحليل المطلوب للسلاسل الزمنية على طبيعة البيانات. يمكن أن تأخذ بيانات السلاسل الزمنية نفسها شكل سلسلة من الأرقام أو الأحرف.
+
+يتم إجراء التحليل باستخدام مجموعة متنوعة من الطرق، بما في ذلك المجال الترددي والمجال الزمني، الخطي وغير الخطي، والمزيد. [تعرف على المزيد](https://www.itl.nist.gov/div898/handbook/pmc/section4/pmc4.htm) حول الطرق المختلفة لتحليل هذا النوع من البيانات.
+
+🎓 **التنبؤ بالسلاسل الزمنية**
+
+التنبؤ بالسلاسل الزمنية هو استخدام نموذج للتنبؤ بالقيم المستقبلية بناءً على الأنماط التي أظهرتها البيانات التي تم جمعها سابقًا كما حدثت في الماضي. على الرغم من أنه من الممكن استخدام نماذج الانحدار لاستكشاف بيانات السلاسل الزمنية، إلا أن مثل هذه البيانات يتم تحليلها بشكل أفضل باستخدام أنواع خاصة من النماذج.
+
+بيانات السلاسل الزمنية هي قائمة من الملاحظات المرتبة، على عكس البيانات التي يمكن تحليلها باستخدام الانحدار الخطي. النموذج الأكثر شيوعًا هو ARIMA، وهو اختصار لـ "Autoregressive Integrated Moving Average".
+
+[نماذج ARIMA](https://online.stat.psu.edu/stat510/lesson/1/1.1) "تربط القيمة الحالية لسلسلة بالقيم السابقة وأخطاء التنبؤ السابقة." وهي الأنسب لتحليل بيانات المجال الزمني، حيث يتم ترتيب البيانات بمرور الوقت.
+
+> هناك عدة أنواع من نماذج ARIMA، يمكنك التعرف عليها [هنا](https://people.duke.edu/~rnau/411arim.htm) وستتعرف عليها في الدرس التالي.
+
+في الدرس التالي، ستقوم ببناء نموذج ARIMA باستخدام [السلاسل الزمنية أحادية المتغير](https://itl.nist.gov/div898/handbook/pmc/section4/pmc44.htm)، التي تركز على متغير واحد يتغير قيمته بمرور الوقت. مثال على هذا النوع من البيانات هو [مجموعة البيانات هذه](https://itl.nist.gov/div898/handbook/pmc/section4/pmc4411.htm) التي تسجل تركيز ثاني أكسيد الكربون الشهري في مرصد ماونا لوا:
+
+| CO2 | YearMonth | Year | Month |
+| :----: | :-------: | :---: | :---: |
+| 330.62 | 1975.04 | 1975 | 1 |
+| 331.40 | 1975.13 | 1975 | 2 |
+| 331.87 | 1975.21 | 1975 | 3 |
+| 333.18 | 1975.29 | 1975 | 4 |
+| 333.92 | 1975.38 | 1975 | 5 |
+| 333.43 | 1975.46 | 1975 | 6 |
+| 331.85 | 1975.54 | 1975 | 7 |
+| 330.01 | 1975.63 | 1975 | 8 |
+| 328.51 | 1975.71 | 1975 | 9 |
+| 328.41 | 1975.79 | 1975 | 10 |
+| 329.25 | 1975.88 | 1975 | 11 |
+| 330.97 | 1975.96 | 1975 | 12 |
+
+✅ حدد المتغير الذي يتغير بمرور الوقت في هذه المجموعة من البيانات
+
+## خصائص بيانات السلاسل الزمنية التي يجب أخذها في الاعتبار
+
+عند النظر إلى بيانات السلاسل الزمنية، قد تلاحظ أنها تحتوي على [خصائص معينة](https://online.stat.psu.edu/stat510/lesson/1/1.1) تحتاج إلى أخذها في الاعتبار ومعالجتها لفهم أنماطها بشكل أفضل. إذا اعتبرت بيانات السلاسل الزمنية كإشارة محتملة تريد تحليلها، يمكن اعتبار هذه الخصائص كضوضاء. غالبًا ما تحتاج إلى تقليل هذه "الضوضاء" من خلال تعويض بعض هذه الخصائص باستخدام تقنيات إحصائية.
+
+فيما يلي بعض المفاهيم التي يجب أن تعرفها للعمل مع السلاسل الزمنية:
+
+🎓 **الاتجاهات**
+
+الاتجاهات تُعرف بأنها زيادات ونقصانات قابلة للقياس بمرور الوقت. [اقرأ المزيد](https://machinelearningmastery.com/time-series-trends-in-python). في سياق السلاسل الزمنية، يتعلق الأمر بكيفية استخدام الاتجاهات وإذا لزم الأمر، إزالتها من السلاسل الزمنية.
+
+🎓 **[الموسمية](https://machinelearningmastery.com/time-series-seasonality-with-python/)**
+
+الموسمية تُعرف بأنها التقلبات الدورية، مثل الاندفاعات الموسمية التي قد تؤثر على المبيعات، على سبيل المثال. [اطلع على](https://itl.nist.gov/div898/handbook/pmc/section4/pmc443.htm) كيفية عرض أنواع مختلفة من الرسوم البيانية للموسمية في البيانات.
+
+🎓 **القيم الشاذة**
+
+القيم الشاذة هي تلك التي تكون بعيدة عن التباين القياسي للبيانات.
+
+🎓 **الدورة طويلة الأمد**
+
+بغض النظر عن الموسمية، قد تعرض البيانات دورة طويلة الأمد مثل الركود الاقتصادي الذي يستمر لأكثر من عام.
+
+🎓 **التباين الثابت**
+
+بمرور الوقت، تعرض بعض البيانات تقلبات ثابتة، مثل استخدام الطاقة يوميًا وليلاً.
+
+🎓 **التغيرات المفاجئة**
+
+قد تعرض البيانات تغيرًا مفاجئًا قد يحتاج إلى مزيد من التحليل. على سبيل المثال، الإغلاق المفاجئ للأعمال بسبب COVID تسبب في تغييرات في البيانات.
+
+✅ هنا [مثال على رسم بياني للسلاسل الزمنية](https://www.kaggle.com/kashnitsky/topic-9-part-1-time-series-analysis-in-python) يظهر الإنفاق اليومي على العملة داخل اللعبة على مدار بضع سنوات. هل يمكنك تحديد أي من الخصائص المذكورة أعلاه في هذه البيانات؟
+
+
+
+## تمرين - البدء ببيانات استخدام الطاقة
+
+لنبدأ بإنشاء نموذج للسلاسل الزمنية للتنبؤ باستخدام الطاقة المستقبلي بناءً على الاستخدام السابق.
+
+> البيانات في هذا المثال مأخوذة من مسابقة التنبؤ GEFCom2014. تتكون من 3 سنوات من بيانات الحمل الكهربائي ودرجات الحرارة على مدار الساعة بين عامي 2012 و2014.
+>
+> Tao Hong, Pierre Pinson, Shu Fan, Hamidreza Zareipour, Alberto Troccoli and Rob J. Hyndman, "Probabilistic energy forecasting: Global Energy Forecasting Competition 2014 and beyond", International Journal of Forecasting, vol.32, no.3, pp 896-913, July-September, 2016.
+
+1. في مجلد `working` لهذا الدرس، افتح ملف _notebook.ipynb_. ابدأ بإضافة المكتبات التي ستساعدك على تحميل البيانات وتصويرها:
+
+ ```python
+ import os
+ import matplotlib.pyplot as plt
+ from common.utils import load_data
+ %matplotlib inline
+ ```
+
+ لاحظ أنك تستخدم الملفات من مجلد `common` المرفق الذي يقوم بإعداد بيئتك وتحميل البيانات.
+
+2. بعد ذلك، قم بفحص البيانات كإطار بيانات باستخدام `load_data()` و `head()`:
+
+ ```python
+ data_dir = './data'
+ energy = load_data(data_dir)[['load']]
+ energy.head()
+ ```
+
+ يمكنك أن ترى أن هناك عمودين يمثلان التاريخ والحمل:
+
+ | | load |
+ | :-----------------: | :----: |
+ | 2012-01-01 00:00:00 | 2698.0 |
+ | 2012-01-01 01:00:00 | 2558.0 |
+ | 2012-01-01 02:00:00 | 2444.0 |
+ | 2012-01-01 03:00:00 | 2402.0 |
+ | 2012-01-01 04:00:00 | 2403.0 |
+
+3. الآن، قم برسم البيانات باستخدام `plot()`:
+
+ ```python
+ energy.plot(y='load', subplots=True, figsize=(15, 8), fontsize=12)
+ plt.xlabel('timestamp', fontsize=12)
+ plt.ylabel('load', fontsize=12)
+ plt.show()
+ ```
+
+ 
+
+4. الآن، قم برسم الأسبوع الأول من يوليو 2014، عن طريق توفيره كمدخل إلى `energy` بالنمط `[من التاريخ]: [إلى التاريخ]`:
+
+ ```python
+ energy['2014-07-01':'2014-07-07'].plot(y='load', subplots=True, figsize=(15, 8), fontsize=12)
+ plt.xlabel('timestamp', fontsize=12)
+ plt.ylabel('load', fontsize=12)
+ plt.show()
+ ```
+
+ 
+
+ رسم جميل! ألقِ نظرة على هذه الرسوم البيانية وحاول تحديد أي من الخصائص المذكورة أعلاه. ماذا يمكننا أن نستنتج من خلال تصور البيانات؟
+
+في الدرس التالي، ستقوم بإنشاء نموذج ARIMA لإجراء بعض التنبؤات.
+
+---
+
+## 🚀تحدي
+
+قم بعمل قائمة بجميع الصناعات ومجالات البحث التي يمكنك التفكير فيها والتي ستستفيد من التنبؤ بالسلاسل الزمنية. هل يمكنك التفكير في تطبيق لهذه التقنيات في الفنون؟ في الاقتصاد القياسي؟ في البيئة؟ في البيع بالتجزئة؟ في الصناعة؟ في التمويل؟ أين أيضًا؟
+
+## [اختبار ما بعد المحاضرة](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/42/)
+
+## المراجعة والدراسة الذاتية
+
+على الرغم من أننا لن نغطيها هنا، إلا أن الشبكات العصبية تُستخدم أحيانًا لتعزيز الطرق الكلاسيكية للتنبؤ بالسلاسل الزمنية. اقرأ المزيد عنها [في هذه المقالة](https://medium.com/microsoftazure/neural-networks-for-forecasting-financial-and-economic-time-series-6aca370ff412)
+
+## الواجب
+
+[قم بتصور المزيد من السلاسل الزمنية](assignment.md)
+
+---
+
+**إخلاء المسؤولية**:
+تمت ترجمة هذا المستند باستخدام خدمة الترجمة الآلية [Co-op Translator](https://github.com/Azure/co-op-translator). بينما نسعى لتحقيق الدقة، يرجى العلم أن الترجمات الآلية قد تحتوي على أخطاء أو معلومات غير دقيقة. يجب اعتبار المستند الأصلي بلغته الأصلية هو المصدر الموثوق. للحصول على معلومات حساسة أو هامة، يُوصى بالاستعانة بترجمة بشرية احترافية. نحن غير مسؤولين عن أي سوء فهم أو تفسيرات خاطئة تنشأ عن استخدام هذه الترجمة.
\ No newline at end of file
diff --git a/translations/ar/7-TimeSeries/1-Introduction/assignment.md b/translations/ar/7-TimeSeries/1-Introduction/assignment.md
new file mode 100644
index 000000000..2c066ea5e
--- /dev/null
+++ b/translations/ar/7-TimeSeries/1-Introduction/assignment.md
@@ -0,0 +1,25 @@
+
+# تصور المزيد من السلاسل الزمنية
+
+## التعليمات
+
+لقد بدأت في تعلم التنبؤ بالسلاسل الزمنية من خلال النظر في نوع البيانات التي تتطلب هذا النوع الخاص من النمذجة. لقد قمت بتصور بعض البيانات المتعلقة بالطاقة. الآن، ابحث عن بعض البيانات الأخرى التي يمكن أن تستفيد من التنبؤ بالسلاسل الزمنية. ابحث عن ثلاثة أمثلة (جرب [Kaggle](https://kaggle.com) و [Azure Open Datasets](https://azure.microsoft.com/en-us/services/open-datasets/catalog/?WT.mc_id=academic-77952-leestott)) وقم بإنشاء دفتر ملاحظات لتصورها. قم بتدوين أي خصائص خاصة تمتلكها (مثل الموسمية، التغيرات المفاجئة، أو الاتجاهات الأخرى) في دفتر الملاحظات.
+
+## المعيار
+
+| المعايير | مثالي | كافٍ | يحتاج إلى تحسين |
+| -------- | ------------------------------------------------------ | -------------------------------------------------- | --------------------------------------------------------------------------------------- |
+| | تم رسم وتفسير ثلاث مجموعات بيانات في دفتر الملاحظات | تم رسم وتفسير مجموعتي بيانات في دفتر الملاحظات | تم رسم أو تفسير عدد قليل من مجموعات البيانات في دفتر الملاحظات أو أن البيانات المقدمة غير كافية |
+
+---
+
+**إخلاء المسؤولية**:
+تمت ترجمة هذا المستند باستخدام خدمة الترجمة الآلية [Co-op Translator](https://github.com/Azure/co-op-translator). بينما نسعى لتحقيق الدقة، يرجى العلم أن الترجمات الآلية قد تحتوي على أخطاء أو معلومات غير دقيقة. يجب اعتبار المستند الأصلي بلغته الأصلية هو المصدر الموثوق. للحصول على معلومات حساسة أو هامة، يُوصى بالاستعانة بترجمة بشرية احترافية. نحن غير مسؤولين عن أي سوء فهم أو تفسيرات خاطئة تنشأ عن استخدام هذه الترجمة.
\ No newline at end of file
diff --git a/translations/ar/7-TimeSeries/1-Introduction/solution/Julia/README.md b/translations/ar/7-TimeSeries/1-Introduction/solution/Julia/README.md
new file mode 100644
index 000000000..424700f36
--- /dev/null
+++ b/translations/ar/7-TimeSeries/1-Introduction/solution/Julia/README.md
@@ -0,0 +1,15 @@
+
+هذا عنصر نائب مؤقت
+
+---
+
+**إخلاء المسؤولية**:
+تم ترجمة هذا المستند باستخدام خدمة الترجمة الآلية [Co-op Translator](https://github.com/Azure/co-op-translator). بينما نسعى لتحقيق الدقة، يرجى العلم أن الترجمات الآلية قد تحتوي على أخطاء أو عدم دقة. يجب اعتبار المستند الأصلي بلغته الأصلية هو المصدر الموثوق. للحصول على معلومات حساسة أو هامة، يُوصى بالاستعانة بترجمة بشرية احترافية. نحن غير مسؤولين عن أي سوء فهم أو تفسيرات خاطئة تنشأ عن استخدام هذه الترجمة.
\ No newline at end of file
diff --git a/translations/ar/7-TimeSeries/1-Introduction/solution/R/README.md b/translations/ar/7-TimeSeries/1-Introduction/solution/R/README.md
new file mode 100644
index 000000000..288095c74
--- /dev/null
+++ b/translations/ar/7-TimeSeries/1-Introduction/solution/R/README.md
@@ -0,0 +1,15 @@
+
+هذا مجرد عنصر نائب مؤقت
+
+---
+
+**إخلاء المسؤولية**:
+تمت ترجمة هذا المستند باستخدام خدمة الترجمة الآلية [Co-op Translator](https://github.com/Azure/co-op-translator). بينما نسعى لتحقيق الدقة، يرجى العلم أن الترجمات الآلية قد تحتوي على أخطاء أو معلومات غير دقيقة. يجب اعتبار المستند الأصلي بلغته الأصلية هو المصدر الموثوق. للحصول على معلومات حساسة أو هامة، يُوصى بالاستعانة بترجمة بشرية احترافية. نحن غير مسؤولين عن أي سوء فهم أو تفسيرات خاطئة تنشأ عن استخدام هذه الترجمة.
\ No newline at end of file
diff --git a/translations/ar/7-TimeSeries/1-Introduction/solution/notebook.ipynb b/translations/ar/7-TimeSeries/1-Introduction/solution/notebook.ipynb
new file mode 100644
index 000000000..3d88adfd9
--- /dev/null
+++ b/translations/ar/7-TimeSeries/1-Introduction/solution/notebook.ipynb
@@ -0,0 +1,173 @@
+{
+ "cells": [
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "# إعداد البيانات\n",
+ "\n",
+ "في هذا الدفتر، سنوضح كيفية:\n",
+ "- إعداد بيانات السلاسل الزمنية لهذا النموذج\n",
+ "- تصور البيانات\n",
+ "\n",
+ "البيانات في هذا المثال مأخوذة من مسابقة التنبؤ GEFCom2014. \n",
+ "تتكون من 3 سنوات من بيانات الحمل الكهربائي ودرجات الحرارة على مدار الساعة بين عامي 2012 و2014. \n",
+ "\n",
+ "تاو هونغ، بيير بينسون، شو فان، حميد رضا زاريبور، ألبرتو تروكولي وروب جي. هايندمان، \"التنبؤ الاحتمالي بالطاقة: مسابقة التنبؤ بالطاقة العالمية 2014 وما بعدها\"، المجلة الدولية للتنبؤ، المجلد 32، العدد 3، الصفحات 896-913، يوليو-سبتمبر، 2016.\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 6,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "import os\n",
+ "import matplotlib.pyplot as plt\n",
+ "from common.utils import load_data\n",
+ "%matplotlib inline"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "قم بتحميل البيانات من ملف csv إلى إطار بيانات Pandas\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 7,
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "execute_result",
+ "data": {
+ "text/plain": [
+ " load\n",
+ "2012-01-01 00:00:00 2698.0\n",
+ "2012-01-01 01:00:00 2558.0\n",
+ "2012-01-01 02:00:00 2444.0\n",
+ "2012-01-01 03:00:00 2402.0\n",
+ "2012-01-01 04:00:00 2403.0"
+ ],
+ "text/html": "
",
+ "image/svg+xml": "\n\n\n\n",
+ "image/png": "iVBORw0KGgoAAAANSUhEUgAAA4kAAAHiCAYAAABFgonlAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjAsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+17YcXAAAgAElEQVR4nOzdeXhb5ZU/8O+r3bYkO7bl3YljZ3dCnJBASCCQFkqBgUDpBrRMZ6YLMJ2l26/TTjtDmelMp09nOtNOaUt31tKFtRToQAkpSUhIiJPY2Z14X+VFkiVL1vL+/pBkjHESL5Ku7r3fz/P4IbF07z1Gsa1z3/OeI6SUICIiIiIiIgIAg9IBEBERERERUfZgkkhEREREREQTmCQSERERERHRBCaJRERERERENIFJIhEREREREU1gkkhEREREREQTTEoHoITi4mJZU1OjdBhERERERESKOHDggFtK6ZruMV0miTU1Ndi/f7/SYRARERERESlCCNF2rsdYbkpEREREREQTmCQSERERERHRBCaJRERERERENEGXexKJiIiIiIgAIBwOo7OzE8FgUOlQ0sJms6Gqqgpms3nGxzBJJCIiIiIi3ers7ITD4UBNTQ2EEEqHk1JSSgwODqKzsxOLFy+e8XEsNyUiIiIiIt0KBoMoKirSXIIIAEIIFBUVzXqVlEkiERERERHpmhYTxKS5fG1MEomIiIiIiBRkt9tTcp57770X3/rWt+Z9HiaJRERERERENIFJIhERERERURaQUuILX/gCVq9ejTVr1uDxxx8HAIyOjuLd73431q9fjzVr1uDpp5+eOObrX/86li1bhssvvxwnTpxISRzsbkpERERERATga88242i3N6XnXFXhxD/fWD+j5z7xxBNobGzEoUOH4Ha7sXHjRmzduhUulwtPPvkknE4n3G43Nm3ahJtuuglvvvkmfvnLX6KxsRGRSATr16/HxRdfPO+YuZJIRERERESUBV577TXcdtttMBqNKC0txZVXXok33ngDUkp8+ctfxkUXXYSrr74aXV1d6Ovrw5/+9CfccsstyM3NhdPpxE033ZSSOLiSSEREREREBMx4xS/THnnkEQwMDODAgQMwm82oqamZ9ViL2eBKIhERERERURa44oor8PjjjyMajWJgYAA7d+7EJZdcAo/Hg5KSEpjNZrzy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\n"
+ },
+ "metadata": {
+ "needs_background": "light"
+ }
+ }
+ ],
+ "source": [
+ "energy['2014-07-01':'2014-07-07'].plot(y='load', subplots=True, figsize=(15, 8), fontsize=12)\n",
+ "plt.xlabel('timestamp', fontsize=12)\n",
+ "plt.ylabel('load', fontsize=12)\n",
+ "plt.show()"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "\n---\n\n**إخلاء المسؤولية**: \nتمت ترجمة هذه الوثيقة باستخدام خدمة الترجمة الآلية [Co-op Translator](https://github.com/Azure/co-op-translator). بينما نسعى لتحقيق الدقة، يرجى العلم أن الترجمات الآلية قد تحتوي على أخطاء أو معلومات غير دقيقة. يجب اعتبار الوثيقة الأصلية بلغتها الأصلية المصدر الموثوق. للحصول على معلومات حساسة أو هامة، يُوصى بالاستعانة بترجمة بشرية احترافية. نحن غير مسؤولين عن أي سوء فهم أو تفسيرات خاطئة تنشأ عن استخدام هذه الترجمة.\n"
+ ]
+ }
+ ],
+ "metadata": {
+ "kernel_info": {
+ "name": "python3"
+ },
+ "kernelspec": {
+ "name": "python37364bit8d3b438fb5fc4430a93ac2cb74d693a7",
+ "display_name": "Python 3.7.0 64-bit ('3.7')"
+ },
+ "language_info": {
+ "codemirror_mode": {
+ "name": "ipython",
+ "version": 3
+ },
+ "file_extension": ".py",
+ "mimetype": "text/x-python",
+ "name": "python",
+ "nbconvert_exporter": "python",
+ "pygments_lexer": "ipython3",
+ "version": "3.7.0"
+ },
+ "nteract": {
+ "version": "nteract-front-end@1.0.0"
+ },
+ "metadata": {
+ "interpreter": {
+ "hash": "70b38d7a306a849643e446cd70466270a13445e5987dfa1344ef2b127438fa4d"
+ }
+ },
+ "coopTranslator": {
+ "original_hash": "dddca9ad9e34435494e0933c218e1579",
+ "translation_date": "2025-08-29T15:05:12+00:00",
+ "source_file": "7-TimeSeries/1-Introduction/solution/notebook.ipynb",
+ "language_code": "ar"
+ }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 2
+}
\ No newline at end of file
diff --git a/translations/ar/7-TimeSeries/1-Introduction/working/notebook.ipynb b/translations/ar/7-TimeSeries/1-Introduction/working/notebook.ipynb
new file mode 100644
index 000000000..f86587e27
--- /dev/null
+++ b/translations/ar/7-TimeSeries/1-Introduction/working/notebook.ipynb
@@ -0,0 +1,63 @@
+{
+ "cells": [
+ {
+ "source": [
+ "# إعداد البيانات\n",
+ "\n",
+ "في هذا الدفتر، نستعرض كيفية:\n",
+ "\n",
+ "إعداد بيانات السلاسل الزمنية لهذا الوحدة \n",
+ "تصور البيانات \n",
+ "البيانات المستخدمة في هذا المثال مأخوذة من مسابقة التنبؤ GEFCom2014. تتكون من 3 سنوات من بيانات الحمل الكهربائي ودرجات الحرارة على أساس الساعة بين عامي 2012 و2014.\n",
+ "\n",
+ "1تاو هونغ، بيير بينسون، شو فان، حميد رضا زاريبور، ألبرتو تروكولي وروب جي. هايندمان، \"التنبؤ بالطاقة الاحتمالية: مسابقة التنبؤ بالطاقة العالمية 2014 وما بعدها\"، المجلة الدولية للتنبؤ، المجلد 32، العدد 3، الصفحات 896-913، يوليو-سبتمبر، 2016.\n"
+ ],
+ "cell_type": "markdown",
+ "metadata": {}
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "\n---\n\n**إخلاء المسؤولية**: \nتمت ترجمة هذا المستند باستخدام خدمة الترجمة بالذكاء الاصطناعي [Co-op Translator](https://github.com/Azure/co-op-translator). بينما نسعى لتحقيق الدقة، يرجى العلم أن الترجمات الآلية قد تحتوي على أخطاء أو معلومات غير دقيقة. يجب اعتبار المستند الأصلي بلغته الأصلية هو المصدر الموثوق. للحصول على معلومات حساسة، يُوصى بالاستعانة بترجمة بشرية احترافية. نحن غير مسؤولين عن أي سوء فهم أو تفسيرات خاطئة تنشأ عن استخدام هذه الترجمة.\n"
+ ]
+ }
+ ],
+ "metadata": {
+ "kernel_info": {
+ "name": "python3"
+ },
+ "kernelspec": {
+ "name": "python37364bit8d3b438fb5fc4430a93ac2cb74d693a7",
+ "display_name": "Python 3.7.0 64-bit ('3.7')"
+ },
+ "language_info": {
+ "codemirror_mode": {
+ "name": "ipython",
+ "version": 3
+ },
+ "file_extension": ".py",
+ "mimetype": "text/x-python",
+ "name": "python",
+ "nbconvert_exporter": "python",
+ "pygments_lexer": "ipython3",
+ "version": "3.7.0"
+ },
+ "nteract": {
+ "version": "nteract-front-end@1.0.0"
+ },
+ "metadata": {
+ "interpreter": {
+ "hash": "70b38d7a306a849643e446cd70466270a13445e5987dfa1344ef2b127438fa4d"
+ }
+ },
+ "coopTranslator": {
+ "original_hash": "5e2bbe594906dce3aaaa736d6dac6683",
+ "translation_date": "2025-08-29T15:05:45+00:00",
+ "source_file": "7-TimeSeries/1-Introduction/working/notebook.ipynb",
+ "language_code": "ar"
+ }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 2
+}
\ No newline at end of file
diff --git a/translations/ar/7-TimeSeries/2-ARIMA/README.md b/translations/ar/7-TimeSeries/2-ARIMA/README.md
new file mode 100644
index 000000000..17936615a
--- /dev/null
+++ b/translations/ar/7-TimeSeries/2-ARIMA/README.md
@@ -0,0 +1,407 @@
+
+# التنبؤ بالسلاسل الزمنية باستخدام ARIMA
+
+في الدرس السابق، تعلمت قليلاً عن التنبؤ بالسلاسل الزمنية وقمت بتحميل مجموعة بيانات تظهر تقلبات الحمل الكهربائي على مدى فترة زمنية.
+
+[](https://youtu.be/IUSk-YDau10 "Introduction to ARIMA")
+
+> 🎥 انقر على الصورة أعلاه لمشاهدة الفيديو: مقدمة قصيرة عن نماذج ARIMA. المثال مقدم باستخدام لغة R، لكن المفاهيم عامة.
+
+## [اختبار ما قبل المحاضرة](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/43/)
+
+## المقدمة
+
+في هذا الدرس، ستتعرف على طريقة محددة لبناء نماذج باستخدام [ARIMA: *التكامل التلقائي* *المتوسط المتحرك*](https://wikipedia.org/wiki/Autoregressive_integrated_moving_average). نماذج ARIMA مناسبة بشكل خاص لتحليل البيانات التي تظهر [عدم الثبات](https://wikipedia.org/wiki/Stationary_process).
+
+## المفاهيم العامة
+
+للتعامل مع ARIMA، هناك بعض المفاهيم التي تحتاج إلى معرفتها:
+
+- 🎓 **الثبات**. من منظور إحصائي، يشير الثبات إلى البيانات التي لا يتغير توزيعها عند تحريكها عبر الزمن. البيانات غير الثابتة تظهر تقلبات بسبب الاتجاهات التي يجب تحويلها لتحليلها. على سبيل المثال، يمكن أن تؤدي الموسمية إلى تقلبات في البيانات ويمكن التخلص منها من خلال عملية "التفريق الموسمي".
+
+- 🎓 **[التفريق](https://wikipedia.org/wiki/Autoregressive_integrated_moving_average#Differencing)**. يشير التفريق، مرة أخرى من منظور إحصائي، إلى عملية تحويل البيانات غير الثابتة لجعلها ثابتة عن طريق إزالة الاتجاه غير الثابت. "التفريق يزيل التغيرات في مستوى السلسلة الزمنية، مما يلغي الاتجاه والموسمية وبالتالي يثبت المتوسط للسلسلة الزمنية." [ورقة بحثية بواسطة Shixiong وآخرين](https://arxiv.org/abs/1904.07632)
+
+## ARIMA في سياق السلاسل الزمنية
+
+دعونا نفكك أجزاء ARIMA لفهم كيفية مساعدتها في نمذجة السلاسل الزمنية ومساعدتنا في التنبؤ بها.
+
+- **AR - الانحدار التلقائي**. كما يشير الاسم، تقوم نماذج الانحدار التلقائي بالنظر إلى الوراء في الزمن لتحليل القيم السابقة في بياناتك وتكوين افتراضات حولها. تُعرف هذه القيم السابقة بـ "التأخيرات". مثال على ذلك هو البيانات التي تظهر مبيعات الأقلام الشهرية. إجمالي مبيعات كل شهر يُعتبر "متغير متطور" في مجموعة البيانات. يتم بناء هذا النموذج حيث يتم "انحدار المتغير المتطور محل الاهتمام على قيمه السابقة (أي التأخيرات)." [ويكيبيديا](https://wikipedia.org/wiki/Autoregressive_integrated_moving_average)
+
+- **I - التكامل**. على عكس نماذج ARMA المشابهة، يشير الحرف "I" في ARIMA إلى الجانب *[المتكامل](https://wikipedia.org/wiki/Order_of_integration)*. يتم تكامل البيانات عندما يتم تطبيق خطوات التفريق للتخلص من عدم الثبات.
+
+- **MA - المتوسط المتحرك**. يشير جانب [المتوسط المتحرك](https://wikipedia.org/wiki/Moving-average_model) في هذا النموذج إلى المتغير الناتج الذي يتم تحديده من خلال مراقبة القيم الحالية والسابقة للتأخيرات.
+
+الخلاصة: يتم استخدام ARIMA لجعل النموذج يتناسب مع الشكل الخاص لبيانات السلاسل الزمنية بأكبر قدر ممكن من الدقة.
+
+## تمرين - بناء نموذج ARIMA
+
+افتح المجلد [_/working_](https://github.com/microsoft/ML-For-Beginners/tree/main/7-TimeSeries/2-ARIMA/working) في هذا الدرس وابحث عن الملف [_notebook.ipynb_](https://github.com/microsoft/ML-For-Beginners/blob/main/7-TimeSeries/2-ARIMA/working/notebook.ipynb).
+
+1. قم بتشغيل الدفتر لتحميل مكتبة Python `statsmodels`؛ ستحتاجها لنماذج ARIMA.
+
+1. قم بتحميل المكتبات الضرورية.
+
+1. الآن، قم بتحميل المزيد من المكتبات المفيدة لرسم البيانات:
+
+ ```python
+ import os
+ import warnings
+ import matplotlib.pyplot as plt
+ import numpy as np
+ import pandas as pd
+ import datetime as dt
+ import math
+
+ from pandas.plotting import autocorrelation_plot
+ from statsmodels.tsa.statespace.sarimax import SARIMAX
+ from sklearn.preprocessing import MinMaxScaler
+ from common.utils import load_data, mape
+ from IPython.display import Image
+
+ %matplotlib inline
+ pd.options.display.float_format = '{:,.2f}'.format
+ np.set_printoptions(precision=2)
+ warnings.filterwarnings("ignore") # specify to ignore warning messages
+ ```
+
+1. قم بتحميل البيانات من ملف `/data/energy.csv` إلى إطار بيانات Pandas وألقِ نظرة:
+
+ ```python
+ energy = load_data('./data')[['load']]
+ energy.head(10)
+ ```
+
+1. قم برسم جميع بيانات الطاقة المتاحة من يناير 2012 إلى ديسمبر 2014. لا ينبغي أن تكون هناك مفاجآت حيث رأينا هذه البيانات في الدرس السابق:
+
+ ```python
+ energy.plot(y='load', subplots=True, figsize=(15, 8), fontsize=12)
+ plt.xlabel('timestamp', fontsize=12)
+ plt.ylabel('load', fontsize=12)
+ plt.show()
+ ```
+
+ الآن، دعونا نبني نموذجًا!
+
+### إنشاء مجموعات بيانات التدريب والاختبار
+
+الآن تم تحميل بياناتك، يمكنك فصلها إلى مجموعات تدريب واختبار. ستقوم بتدريب النموذج على مجموعة التدريب. كما هو الحال دائمًا، بعد انتهاء النموذج من التدريب، ستقوم بتقييم دقته باستخدام مجموعة الاختبار. تحتاج إلى التأكد من أن مجموعة الاختبار تغطي فترة زمنية لاحقة لمجموعة التدريب لضمان أن النموذج لا يحصل على معلومات من الفترات الزمنية المستقبلية.
+
+1. خصص فترة شهرين من 1 سبتمبر إلى 31 أكتوبر 2014 لمجموعة التدريب. ستتضمن مجموعة الاختبار فترة شهرين من 1 نوفمبر إلى 31 ديسمبر 2014:
+
+ ```python
+ train_start_dt = '2014-11-01 00:00:00'
+ test_start_dt = '2014-12-30 00:00:00'
+ ```
+
+ نظرًا لأن هذه البيانات تعكس استهلاك الطاقة اليومي، هناك نمط موسمي قوي، لكن الاستهلاك يشبه إلى حد كبير الاستهلاك في الأيام الأخيرة.
+
+1. قم بتصور الفروقات:
+
+ ```python
+ energy[(energy.index < test_start_dt) & (energy.index >= train_start_dt)][['load']].rename(columns={'load':'train'}) \
+ .join(energy[test_start_dt:][['load']].rename(columns={'load':'test'}), how='outer') \
+ .plot(y=['train', 'test'], figsize=(15, 8), fontsize=12)
+ plt.xlabel('timestamp', fontsize=12)
+ plt.ylabel('load', fontsize=12)
+ plt.show()
+ ```
+
+ 
+
+ لذلك، استخدام نافذة زمنية صغيرة نسبيًا لتدريب البيانات يجب أن يكون كافيًا.
+
+ > ملاحظة: نظرًا لأن الوظيفة التي نستخدمها لتناسب نموذج ARIMA تستخدم التحقق داخل العينة أثناء التناسب، سنقوم بتجاهل بيانات التحقق.
+
+### تحضير البيانات للتدريب
+
+الآن، تحتاج إلى تحضير البيانات للتدريب عن طريق تصفية البيانات وتوسيع نطاقها. قم بتصفية مجموعة البيانات لتشمل فقط الفترات الزمنية والأعمدة التي تحتاجها، وقم بتوسيع النطاق لضمان عرض البيانات في النطاق 0,1.
+
+1. قم بتصفية مجموعة البيانات الأصلية لتشمل فقط الفترات الزمنية المذكورة لكل مجموعة وتضمين العمود المطلوب "load" بالإضافة إلى التاريخ:
+
+ ```python
+ train = energy.copy()[(energy.index >= train_start_dt) & (energy.index < test_start_dt)][['load']]
+ test = energy.copy()[energy.index >= test_start_dt][['load']]
+
+ print('Training data shape: ', train.shape)
+ print('Test data shape: ', test.shape)
+ ```
+
+ يمكنك رؤية شكل البيانات:
+
+ ```output
+ Training data shape: (1416, 1)
+ Test data shape: (48, 1)
+ ```
+
+1. قم بتوسيع نطاق البيانات لتكون في النطاق (0, 1).
+
+ ```python
+ scaler = MinMaxScaler()
+ train['load'] = scaler.fit_transform(train)
+ train.head(10)
+ ```
+
+1. قم بتصور البيانات الأصلية مقابل البيانات الموسعة:
+
+ ```python
+ energy[(energy.index >= train_start_dt) & (energy.index < test_start_dt)][['load']].rename(columns={'load':'original load'}).plot.hist(bins=100, fontsize=12)
+ train.rename(columns={'load':'scaled load'}).plot.hist(bins=100, fontsize=12)
+ plt.show()
+ ```
+
+ 
+
+ > البيانات الأصلية
+
+ 
+
+ > البيانات الموسعة
+
+1. الآن بعد أن قمت بمعايرة البيانات الموسعة، يمكنك توسيع نطاق بيانات الاختبار:
+
+ ```python
+ test['load'] = scaler.transform(test)
+ test.head()
+ ```
+
+### تنفيذ ARIMA
+
+حان الوقت لتنفيذ ARIMA! ستستخدم الآن مكتبة `statsmodels` التي قمت بتثبيتها سابقًا.
+
+الآن تحتاج إلى اتباع عدة خطوات:
+
+ 1. قم بتعريف النموذج عن طريق استدعاء `SARIMAX()` وتمرير معلمات النموذج: المعلمات p، d، و q، بالإضافة إلى المعلمات P، D، و Q.
+ 2. قم بتحضير النموذج لمجموعة بيانات التدريب عن طريق استدعاء وظيفة fit().
+ 3. قم بعمل توقعات عن طريق استدعاء وظيفة `forecast()` وتحديد عدد الخطوات (الأفق) للتنبؤ.
+
+> 🎓 ما هي كل هذه المعلمات؟ في نموذج ARIMA، هناك 3 معلمات تُستخدم للمساعدة في نمذجة الجوانب الرئيسية للسلسلة الزمنية: الموسمية، الاتجاه، والضوضاء. هذه المعلمات هي:
+
+`p`: المعلمة المرتبطة بجانب الانحدار التلقائي للنموذج، والذي يدمج القيم *السابقة*.
+`d`: المعلمة المرتبطة بالجزء المتكامل للنموذج، والذي يؤثر على مقدار *التفريق* (🎓 تذكر التفريق 👆؟) الذي يتم تطبيقه على السلسلة الزمنية.
+`q`: المعلمة المرتبطة بجانب المتوسط المتحرك للنموذج.
+
+> ملاحظة: إذا كانت بياناتك تحتوي على جانب موسمي - كما هو الحال هنا -، نستخدم نموذج ARIMA الموسمي (SARIMA). في هذه الحالة تحتاج إلى استخدام مجموعة أخرى من المعلمات: `P`، `D`، و `Q` التي تصف نفس الارتباطات مثل `p`، `d`، و `q`، ولكنها تتعلق بالجوانب الموسمية للنموذج.
+
+1. ابدأ بتحديد قيمة الأفق المفضلة لديك. لنحاول 3 ساعات:
+
+ ```python
+ # Specify the number of steps to forecast ahead
+ HORIZON = 3
+ print('Forecasting horizon:', HORIZON, 'hours')
+ ```
+
+ اختيار أفضل القيم لمعلمات نموذج ARIMA يمكن أن يكون تحديًا لأنه يعتمد إلى حد كبير على التقدير الشخصي ويستغرق وقتًا. قد تفكر في استخدام وظيفة `auto_arima()` من مكتبة [`pyramid`](https://alkaline-ml.com/pmdarima/0.9.0/modules/generated/pyramid.arima.auto_arima.html).
+
+1. في الوقت الحالي، جرب بعض الاختيارات اليدوية للعثور على نموذج جيد.
+
+ ```python
+ order = (4, 1, 0)
+ seasonal_order = (1, 1, 0, 24)
+
+ model = SARIMAX(endog=train, order=order, seasonal_order=seasonal_order)
+ results = model.fit()
+
+ print(results.summary())
+ ```
+
+ يتم طباعة جدول النتائج.
+
+لقد قمت ببناء نموذجك الأول! الآن نحتاج إلى إيجاد طريقة لتقييمه.
+
+### تقييم النموذج الخاص بك
+
+لتقييم النموذج الخاص بك، يمكنك تنفيذ ما يسمى بـ `التحقق التدريجي`. في الممارسة العملية، يتم إعادة تدريب نماذج السلاسل الزمنية في كل مرة تصبح فيها بيانات جديدة متاحة. يتيح ذلك للنموذج تقديم أفضل توقع عند كل خطوة زمنية.
+
+ابدأ من بداية السلسلة الزمنية باستخدام هذه التقنية، قم بتدريب النموذج على مجموعة بيانات التدريب. ثم قم بعمل توقع للخطوة الزمنية التالية. يتم تقييم التوقع مقابل القيمة المعروفة. يتم توسيع مجموعة التدريب لتشمل القيمة المعروفة ويتم تكرار العملية.
+
+> ملاحظة: يجب أن تحافظ على نافذة مجموعة التدريب ثابتة لتحقيق تدريب أكثر كفاءة بحيث في كل مرة تضيف ملاحظة جديدة إلى مجموعة التدريب، تقوم بإزالة الملاحظة من بداية المجموعة.
+
+تقدم هذه العملية تقديرًا أكثر قوة لكيفية أداء النموذج في الممارسة العملية. ومع ذلك، يأتي ذلك بتكلفة حسابية لإنشاء العديد من النماذج. هذا مقبول إذا كانت البيانات صغيرة أو إذا كان النموذج بسيطًا، ولكن قد يكون مشكلة على نطاق واسع.
+
+التحقق التدريجي هو المعيار الذهبي لتقييم نماذج السلاسل الزمنية ويوصى به لمشاريعك الخاصة.
+
+1. أولاً، قم بإنشاء نقطة بيانات اختبار لكل خطوة أفق.
+
+ ```python
+ test_shifted = test.copy()
+
+ for t in range(1, HORIZON+1):
+ test_shifted['load+'+str(t)] = test_shifted['load'].shift(-t, freq='H')
+
+ test_shifted = test_shifted.dropna(how='any')
+ test_shifted.head(5)
+ ```
+
+ | | | load | load+1 | load+2 |
+ | ---------- | -------- | ---- | ------ | ------ |
+ | 2014-12-30 | 00:00:00 | 0.33 | 0.29 | 0.27 |
+ | 2014-12-30 | 01:00:00 | 0.29 | 0.27 | 0.27 |
+ | 2014-12-30 | 02:00:00 | 0.27 | 0.27 | 0.30 |
+ | 2014-12-30 | 03:00:00 | 0.27 | 0.30 | 0.41 |
+ | 2014-12-30 | 04:00:00 | 0.30 | 0.41 | 0.57 |
+
+ يتم تحريك البيانات أفقيًا وفقًا لنقطة الأفق الخاصة بها.
+
+1. قم بعمل توقعات على بيانات الاختبار باستخدام هذا النهج في نافذة متحركة في حلقة بحجم طول بيانات الاختبار:
+
+ ```python
+ %%time
+ training_window = 720 # dedicate 30 days (720 hours) for training
+
+ train_ts = train['load']
+ test_ts = test_shifted
+
+ history = [x for x in train_ts]
+ history = history[(-training_window):]
+
+ predictions = list()
+
+ order = (2, 1, 0)
+ seasonal_order = (1, 1, 0, 24)
+
+ for t in range(test_ts.shape[0]):
+ model = SARIMAX(endog=history, order=order, seasonal_order=seasonal_order)
+ model_fit = model.fit()
+ yhat = model_fit.forecast(steps = HORIZON)
+ predictions.append(yhat)
+ obs = list(test_ts.iloc[t])
+ # move the training window
+ history.append(obs[0])
+ history.pop(0)
+ print(test_ts.index[t])
+ print(t+1, ': predicted =', yhat, 'expected =', obs)
+ ```
+
+ يمكنك مشاهدة عملية التدريب:
+
+ ```output
+ 2014-12-30 00:00:00
+ 1 : predicted = [0.32 0.29 0.28] expected = [0.32945389435989236, 0.2900626678603402, 0.2739480752014323]
+
+ 2014-12-30 01:00:00
+ 2 : predicted = [0.3 0.29 0.3 ] expected = [0.2900626678603402, 0.2739480752014323, 0.26812891674127126]
+
+ 2014-12-30 02:00:00
+ 3 : predicted = [0.27 0.28 0.32] expected = [0.2739480752014323, 0.26812891674127126, 0.3025962399283795]
+ ```
+
+1. قارن التوقعات بالحمل الفعلي:
+
+ ```python
+ eval_df = pd.DataFrame(predictions, columns=['t+'+str(t) for t in range(1, HORIZON+1)])
+ eval_df['timestamp'] = test.index[0:len(test.index)-HORIZON+1]
+ eval_df = pd.melt(eval_df, id_vars='timestamp', value_name='prediction', var_name='h')
+ eval_df['actual'] = np.array(np.transpose(test_ts)).ravel()
+ eval_df[['prediction', 'actual']] = scaler.inverse_transform(eval_df[['prediction', 'actual']])
+ eval_df.head()
+ ```
+
+ المخرجات
+ | | | timestamp | h | prediction | actual |
+ | --- | ---------- | --------- | --- | ---------- | -------- |
+ | 0 | 2014-12-30 | 00:00:00 | t+1 | 3,008.74 | 3,023.00 |
+ | 1 | 2014-12-30 | 01:00:00 | t+1 | 2,955.53 | 2,935.00 |
+ | 2 | 2014-12-30 | 02:00:00 | t+1 | 2,900.17 | 2,899.00 |
+ | 3 | 2014-12-30 | 03:00:00 | t+1 | 2,917.69 | 2,886.00 |
+ | 4 | 2014-12-30 | 04:00:00 | t+1 | 2,946.99 | 2,963.00 |
+
+ لاحظ توقعات البيانات لكل ساعة، مقارنة بالحمل الفعلي. ما مدى دقة ذلك؟
+
+### تحقق من دقة النموذج
+
+تحقق من دقة النموذج الخاص بك عن طريق اختبار متوسط الخطأ النسبي المطلق (MAPE) لجميع التوقعات.
+> **🧮 أظهر لي الرياضيات**
+>
+> 
+>
+> [MAPE](https://www.linkedin.com/pulse/what-mape-mad-msd-time-series-allameh-statistics/) تُستخدم لعرض دقة التنبؤ كنسبة تُعرّفها الصيغة أعلاه. يتم تقسيم الفرق بين القيم الفعلية والمتوقعة على القيم الفعلية.
+
+"يتم جمع القيمة المطلقة في هذه العملية لكل نقطة متوقعة في الزمن، ثم يتم تقسيمها على عدد النقاط الملائمة n." [wikipedia](https://wikipedia.org/wiki/Mean_absolute_percentage_error)
+1. عبر عن المعادلة في الكود:
+
+ ```python
+ if(HORIZON > 1):
+ eval_df['APE'] = (eval_df['prediction'] - eval_df['actual']).abs() / eval_df['actual']
+ print(eval_df.groupby('h')['APE'].mean())
+ ```
+
+1. احسب MAPE لخطوة واحدة:
+
+ ```python
+ print('One step forecast MAPE: ', (mape(eval_df[eval_df['h'] == 't+1']['prediction'], eval_df[eval_df['h'] == 't+1']['actual']))*100, '%')
+ ```
+
+ MAPE لتوقع خطوة واحدة: 0.5570581332313952 %
+
+1. اطبع MAPE لتوقع متعدد الخطوات:
+
+ ```python
+ print('Multi-step forecast MAPE: ', mape(eval_df['prediction'], eval_df['actual'])*100, '%')
+ ```
+
+ ```output
+ Multi-step forecast MAPE: 1.1460048657704118 %
+ ```
+
+ رقم منخفض جميل هو الأفضل: ضع في اعتبارك أن التوقع الذي يحتوي على MAPE بقيمة 10 يعني أنه خاطئ بنسبة 10%.
+
+1. ولكن كما هو الحال دائمًا، من الأسهل رؤية هذا النوع من قياس الدقة بصريًا، لذا دعنا نرسمه:
+
+ ```python
+ if(HORIZON == 1):
+ ## Plotting single step forecast
+ eval_df.plot(x='timestamp', y=['actual', 'prediction'], style=['r', 'b'], figsize=(15, 8))
+
+ else:
+ ## Plotting multi step forecast
+ plot_df = eval_df[(eval_df.h=='t+1')][['timestamp', 'actual']]
+ for t in range(1, HORIZON+1):
+ plot_df['t+'+str(t)] = eval_df[(eval_df.h=='t+'+str(t))]['prediction'].values
+
+ fig = plt.figure(figsize=(15, 8))
+ ax = plt.plot(plot_df['timestamp'], plot_df['actual'], color='red', linewidth=4.0)
+ ax = fig.add_subplot(111)
+ for t in range(1, HORIZON+1):
+ x = plot_df['timestamp'][(t-1):]
+ y = plot_df['t+'+str(t)][0:len(x)]
+ ax.plot(x, y, color='blue', linewidth=4*math.pow(.9,t), alpha=math.pow(0.8,t))
+
+ ax.legend(loc='best')
+
+ plt.xlabel('timestamp', fontsize=12)
+ plt.ylabel('load', fontsize=12)
+ plt.show()
+ ```
+
+ 
+
+🏆 رسم جميل جدًا، يظهر نموذجًا بدقة جيدة. عمل رائع!
+
+---
+
+## 🚀التحدي
+
+استكشف الطرق المختلفة لاختبار دقة نموذج السلاسل الزمنية. لقد تناولنا MAPE في هذا الدرس، ولكن هل هناك طرق أخرى يمكنك استخدامها؟ قم بالبحث عنها وقم بتوضيحها. يمكن العثور على وثيقة مفيدة [هنا](https://otexts.com/fpp2/accuracy.html)
+
+## [اختبار ما بعد المحاضرة](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/44/)
+
+## المراجعة والدراسة الذاتية
+
+يتناول هذا الدرس فقط أساسيات التنبؤ بالسلاسل الزمنية باستخدام ARIMA. خذ بعض الوقت لتعميق معرفتك من خلال استكشاف [هذا المستودع](https://microsoft.github.io/forecasting/) وأنواع النماذج المختلفة فيه لتتعلم طرقًا أخرى لبناء نماذج السلاسل الزمنية.
+
+## الواجب
+
+[نموذج ARIMA جديد](assignment.md)
+
+---
+
+**إخلاء المسؤولية**:
+تم ترجمة هذا المستند باستخدام خدمة الترجمة الآلية [Co-op Translator](https://github.com/Azure/co-op-translator). بينما نسعى لتحقيق الدقة، يرجى العلم أن الترجمات الآلية قد تحتوي على أخطاء أو عدم دقة. يجب اعتبار المستند الأصلي بلغته الأصلية هو المصدر الموثوق. للحصول على معلومات حساسة أو هامة، يُوصى بالاستعانة بترجمة بشرية احترافية. نحن غير مسؤولين عن أي سوء فهم أو تفسيرات خاطئة تنشأ عن استخدام هذه الترجمة.
\ No newline at end of file
diff --git a/translations/ar/7-TimeSeries/2-ARIMA/assignment.md b/translations/ar/7-TimeSeries/2-ARIMA/assignment.md
new file mode 100644
index 000000000..8d03072a9
--- /dev/null
+++ b/translations/ar/7-TimeSeries/2-ARIMA/assignment.md
@@ -0,0 +1,25 @@
+
+# نموذج ARIMA جديد
+
+## التعليمات
+
+الآن بعد أن قمت ببناء نموذج ARIMA، قم ببناء نموذج جديد باستخدام بيانات جديدة (جرّب أحد [هذه المجموعات البيانية من Duke](http://www2.stat.duke.edu/~mw/ts_data_sets.html)). قم بتوضيح عملك في دفتر ملاحظات، وقم بتصور البيانات والنموذج الخاص بك، واختبر دقته باستخدام MAPE.
+
+## المعايير
+
+| المعايير | ممتاز | مقبول | يحتاج إلى تحسين |
+| -------- | ------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------ | ----------------------------------- |
+| | يتم تقديم دفتر ملاحظات يحتوي على نموذج ARIMA جديد تم بناؤه واختباره وشرحه مع التصورات وذكر الدقة. | يتم تقديم دفتر ملاحظات غير مشروح أو يحتوي على أخطاء. | يتم تقديم دفتر ملاحظات غير مكتمل. |
+
+---
+
+**إخلاء المسؤولية**:
+تم ترجمة هذا المستند باستخدام خدمة الترجمة الآلية [Co-op Translator](https://github.com/Azure/co-op-translator). بينما نسعى لتحقيق الدقة، يرجى العلم أن الترجمات الآلية قد تحتوي على أخطاء أو معلومات غير دقيقة. يجب اعتبار المستند الأصلي بلغته الأصلية المصدر الموثوق. للحصول على معلومات حساسة أو هامة، يُوصى بالاستعانة بترجمة بشرية احترافية. نحن غير مسؤولين عن أي سوء فهم أو تفسيرات خاطئة ناتجة عن استخدام هذه الترجمة.
\ No newline at end of file
diff --git a/translations/ar/7-TimeSeries/2-ARIMA/solution/Julia/README.md b/translations/ar/7-TimeSeries/2-ARIMA/solution/Julia/README.md
new file mode 100644
index 000000000..951a3dba4
--- /dev/null
+++ b/translations/ar/7-TimeSeries/2-ARIMA/solution/Julia/README.md
@@ -0,0 +1,15 @@
+
+هذا مجرد عنصر نائب مؤقت
+
+---
+
+**إخلاء المسؤولية**:
+تمت ترجمة هذا المستند باستخدام خدمة الترجمة الآلية [Co-op Translator](https://github.com/Azure/co-op-translator). بينما نسعى لتحقيق الدقة، يرجى العلم أن الترجمات الآلية قد تحتوي على أخطاء أو معلومات غير دقيقة. يجب اعتبار المستند الأصلي بلغته الأصلية هو المصدر الموثوق. للحصول على معلومات حساسة أو هامة، يُوصى بالاستعانة بترجمة بشرية احترافية. نحن غير مسؤولين عن أي سوء فهم أو تفسيرات خاطئة تنشأ عن استخدام هذه الترجمة.
\ No newline at end of file
diff --git a/translations/ar/7-TimeSeries/2-ARIMA/solution/R/README.md b/translations/ar/7-TimeSeries/2-ARIMA/solution/R/README.md
new file mode 100644
index 000000000..582874c18
--- /dev/null
+++ b/translations/ar/7-TimeSeries/2-ARIMA/solution/R/README.md
@@ -0,0 +1,15 @@
+
+هذا عنصر نائب مؤقت
+
+---
+
+**إخلاء المسؤولية**:
+تمت ترجمة هذا المستند باستخدام خدمة الترجمة الآلية [Co-op Translator](https://github.com/Azure/co-op-translator). بينما نسعى لتحقيق الدقة، يرجى العلم أن الترجمات الآلية قد تحتوي على أخطاء أو معلومات غير دقيقة. يجب اعتبار المستند الأصلي بلغته الأصلية هو المصدر الموثوق. للحصول على معلومات حساسة أو هامة، يُوصى بالاستعانة بترجمة بشرية احترافية. نحن غير مسؤولين عن أي سوء فهم أو تفسيرات خاطئة تنشأ عن استخدام هذه الترجمة.
\ No newline at end of file
diff --git a/translations/ar/7-TimeSeries/2-ARIMA/solution/notebook.ipynb b/translations/ar/7-TimeSeries/2-ARIMA/solution/notebook.ipynb
new file mode 100644
index 000000000..ad90e6c3f
--- /dev/null
+++ b/translations/ar/7-TimeSeries/2-ARIMA/solution/notebook.ipynb
@@ -0,0 +1,1127 @@
+{
+ "cells": [
+ {
+ "cell_type": "markdown",
+ "source": [
+ "# التنبؤ بالسلاسل الزمنية باستخدام ARIMA\n",
+ "\n",
+ "في هذا الدفتر، نوضح كيفية:\n",
+ "- إعداد بيانات السلاسل الزمنية لتدريب نموذج التنبؤ بالسلاسل الزمنية ARIMA\n",
+ "- تنفيذ نموذج ARIMA بسيط للتنبؤ بالخطوات المستقبلية HORIZON (من الزمن *t+1* إلى *t+HORIZON*) في السلاسل الزمنية\n",
+ "- تقييم النموذج\n",
+ "\n",
+ "البيانات في هذا المثال مأخوذة من مسابقة التنبؤ GEFCom2014. \n",
+ "\n",
+ "تتكون من 3 سنوات من بيانات الحمل الكهربائي ودرجات الحرارة لكل ساعة بين عامي 2012 و2014. المهمة هي التنبؤ بالقيم المستقبلية للحمل الكهربائي. في هذا المثال، نوضح كيفية التنبؤ بخطوة زمنية واحدة إلى الأمام باستخدام بيانات الحمل التاريخية فقط.\n",
+ "\n",
+ "تاو هونغ، بيير بينسون، شو فان، حميد رضا زاريبور، ألبرتو تروكولي وروب جي. هايندمان، \"التنبؤ بالطاقة الاحتمالية: مسابقة التنبؤ بالطاقة العالمية 2014 وما بعدها\"، المجلة الدولية للتنبؤ، المجلد 32، العدد 3، الصفحات 896-913، يوليو-سبتمبر، 2016.\n"
+ ],
+ "metadata": {}
+ },
+ {
+ "cell_type": "markdown",
+ "source": [
+ "## تثبيت التبعيات\n",
+ "ابدأ بتثبيت بعض التبعيات المطلوبة. هذه المكتبات مع الإصدارات المقابلة لها معروفة بأنها تعمل مع هذا الحل:\n",
+ "\n",
+ "* `statsmodels == 0.12.2`\n",
+ "* `matplotlib == 3.4.2`\n",
+ "* `scikit-learn == 0.24.2`\n"
+ ],
+ "metadata": {}
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 16,
+ "source": [
+ "!pip install statsmodels"
+ ],
+ "outputs": [
+ {
+ "output_type": "stream",
+ "name": "stdout",
+ "text": [
+ "/bin/sh: pip: command not found\n"
+ ]
+ }
+ ],
+ "metadata": {}
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 17,
+ "source": [
+ "import os\n",
+ "import warnings\n",
+ "import matplotlib.pyplot as plt\n",
+ "import numpy as np\n",
+ "import pandas as pd\n",
+ "import datetime as dt\n",
+ "import math\n",
+ "\n",
+ "from pandas.plotting import autocorrelation_plot\n",
+ "from statsmodels.tsa.statespace.sarimax import SARIMAX\n",
+ "from sklearn.preprocessing import MinMaxScaler\n",
+ "from common.utils import load_data, mape\n",
+ "from IPython.display import Image\n",
+ "\n",
+ "%matplotlib inline\n",
+ "pd.options.display.float_format = '{:,.2f}'.format\n",
+ "np.set_printoptions(precision=2)\n",
+ "warnings.filterwarnings(\"ignore\") # specify to ignore warning messages\n"
+ ],
+ "outputs": [],
+ "metadata": {}
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 18,
+ "source": [
+ "energy = load_data('./data')[['load']]\n",
+ "energy.head(10)"
+ ],
+ "outputs": [
+ {
+ "output_type": "execute_result",
+ "data": {
+ "text/html": [
+ "
"
+ ]
+ },
+ "metadata": {
+ "needs_background": "light"
+ }
+ }
+ ],
+ "metadata": {}
+ },
+ {
+ "cell_type": "markdown",
+ "source": [
+ "## إنشاء مجموعات بيانات التدريب والاختبار\n",
+ "\n",
+ "### تقسيم البيانات\n",
+ "لتحقيق نتائج دقيقة عند تدريب النموذج، من المهم تقسيم البيانات إلى مجموعات تدريب واختبار. يتيح ذلك تقييم أداء النموذج على بيانات لم يسبق له رؤيتها.\n",
+ "\n",
+ "### نسبة التقسيم\n",
+ "عادةً ما يتم تقسيم البيانات بنسبة 80-20 أو 70-30، حيث يتم تخصيص الجزء الأكبر للتدريب والباقي للاختبار. يمكن تعديل هذه النسبة بناءً على حجم البيانات المتاحة.\n",
+ "\n",
+ "### أمثلة على تقسيم البيانات\n",
+ "- إذا كان لديك 1000 عينة، يمكنك تخصيص 800 للتدريب و200 للاختبار بنسبة 80-20.\n",
+ "- إذا كان لديك 5000 عينة، يمكنك تخصيص 3500 للتدريب و1500 للاختبار بنسبة 70-30.\n",
+ "\n",
+ "### نصائح لتقسيم البيانات\n",
+ "- تأكد من أن البيانات موزعة بشكل متساوٍ بين المجموعات، خاصة إذا كانت تحتوي على فئات متعددة.\n",
+ "- إذا كانت البيانات مرتبة زمنيًا، قم بتقسيمها بحيث تعكس الترتيب الزمني.\n",
+ "\n",
+ "### أدوات لتقسيم البيانات\n",
+ "يمكنك استخدام مكتبات مثل @@INLINE_CODE_1@@ لتقسيم البيانات بسهولة. على سبيل المثال:\n",
+ "\n",
+ "```python\n",
+ "from sklearn.model_selection import train_test_split\n",
+ "\n",
+ "X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)\n",
+ "```\n",
+ "\n",
+ "### [!TIP]\n",
+ "حاول دائمًا استخدام @@INLINE_CODE_2@@ لتحديد العشوائية عند تقسيم البيانات، مما يضمن إمكانية إعادة إنتاج النتائج.\n"
+ ],
+ "metadata": {}
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 20,
+ "source": [
+ "train_start_dt = '2014-11-01 00:00:00'\n",
+ "test_start_dt = '2014-12-30 00:00:00' "
+ ],
+ "outputs": [],
+ "metadata": {}
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 21,
+ "source": [
+ "energy[(energy.index < test_start_dt) & (energy.index >= train_start_dt)][['load']].rename(columns={'load':'train'}) \\\n",
+ " .join(energy[test_start_dt:][['load']].rename(columns={'load':'test'}), how='outer') \\\n",
+ " .plot(y=['train', 'test'], figsize=(15, 8), fontsize=12)\n",
+ "plt.xlabel('timestamp', fontsize=12)\n",
+ "plt.ylabel('load', fontsize=12)\n",
+ "plt.show()"
+ ],
+ "outputs": [
+ {
+ "output_type": "display_data",
+ "data": {
+ "image/png": "iVBORw0KGgoAAAANSUhEUgAAA4kAAAITCAYAAACqpFnEAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjAsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+17YcXAAAgAElEQVR4nOy9e5wtV1Xv+5tVtR792u8kEoMkIGAUJEjwwEE9IHh5eHzCiYr40XPPJSjnw8XrkQN6RRHPOXJ8AKLyFHzw1vBSQQnEhMBNQtgJeZNkJ+wk+5Gd/eze/V6rqub9Y9aomlVdtXqO2btXr+4e388nn97pXnNVrVr1mGOO3/gNpbWGIAiCIAiCIAiCIABAsNE7IAiCIAiCIAiCIIwOEiQKgiAIgiAIgiAIORIkCoIgCIIgCIIgCDkSJAqCIAiCIAiCIAg5EiQKgiAIgiAIgiAIORIkCoIgCIIgCIIgCDnRRu/ARrBv3z598cUXb/RuCIIgCIIgCIIgbAi33HLLSa31eXV/25ZB4sUXX4z9+/dv9G4IgiAIgiAIgiBsCEqph5v+JnJTQRAEQRAEQRAEIUeCREEQBEEQBEEQBCFHgkRBEARBEARBEAQhZ1vWJAqCIAiCIAiCsL3p9/s4fPgwlpaWNnpX1pVut4uLLroIrVbLeYwEiYIgCIIgCIIgbDsOHz6MqakpXHzxxVBKbfTurAtaa5w6dQqHDx/GJZdc4jxO5KaCIAiCIAiCIGw7lpaWsHfv3i0bIAKAUgp79+5lZ0slSBQEQRAEQRAEYVuylQNEwuczSpAoCIIgCIIgCIIwZKanp/Hud7+bPe5lL3sZpqen12GPCiRIFARBEARBEARBGDJNQWIcxwPHfeELX8CuXbvWa7cAiHGNIAiCIAiCIAjC0HnTm96EBx98EJdddhlarRa63S52796Ne++9F/fffz9++qd/GocOHcLS0hJe//rX48orrwQAXHzxxdi/fz/m5ubw0pe+FD/0Qz+EG264Ad/5nd+Jz33ucxgbG1vzvkmQKAiCIAiCIAjCtub3/+lu3HP07Dl9z++9cAd+7ye+r/Hvb3vb23DXXXfhtttuw3XXXYcf//Efx1133ZW7kH7oQx/Cnj17sLi4iGc/+9l4+ctfjr1795be48CBA/j4xz+OD3zgA7jiiivwqU99Cq961avWvO8SJAqCIAiCIAiCIGwwP/iDP1hqU/Gud70Ln/nMZwAAhw4dwoEDB1YEiZdccgkuu+wyAMCznvUsPPTQQ+dkXyRIFARBEARBEARhWzMo4zcsJiYm8n9fd911+PKXv4wbb7wR4+PjeP7zn1/bxqLT6eT/DsMQi4uL52RfxLhGEARBEARBEARhyExNTWF2drb2bzMzM9i9ezfGx8dx77334qabbhrqvkkmURAEQRAEQRAEYcjs3bsXz3ve8/C0pz0NY2NjuOCCC/K/veQlL8F73/teXHrppXjqU5+K5zznOUPdN6W1HuoGR4HLL79c79+/f6N3QxAEQRAEQRCEDeJb3/oWLr300o3ejaFQ91mVUrdorS+ve73ITQVBEARBEARBEIQcCRIFQRAEQdi2/Je/+Qae/pYvbvRuCIIgjBRDDxKVUk9WSi0ppT6S/f/zlVKpUmrO+u+XrdfvUUp9Rik1r5R6WCn1ysr7vTL7/bxS6rNKqT3D/kyCIAiCIGxOrrn3OGaX4o3eDUEQhJFiIzKJfwngG5XfHdVaT1r//W3l9T0AFwD4RQDvUUp9HwBkP98H4Jeyvy8AePd6fwBBEARBELYW29GjQRAEoYmhBolKqZ8HMA3gGsfXTwB4OYA3a63ntNZfA/CPMEEhYILGf9JaX6+1ngPwZgA/q5SaOvd7LwiCIAjCVmWpn270LgiCIIwMQwsSlVI7ALwVwG/U/Pl8pdRjSqmDSql3ZMEhADwFQKy1vt967e0AqNvl92X/DwDQWj8Ik3V8Ss32r1RK7VdK7T9x4sQ5+ESCIAiCIGwVphd7G70LgiAII8MwM4l/AOCDWuvDld/fC+AyAI8D8KMAngXg7dnfJgGcrbx+BsCU9feZAX/P0Vq/X2t9udb68vPOO8/7QwiCIAiCsPU4M9/f6F0QBGGbMT09jXe/269S7p3vfCcWFhbO8R4VDCVIVEpdBuBFAN5R/ZvW+pjW+h6tdaq1Pgjgv8NITAFgDsCOypAdAGYd/y4IgiAIgrAqkkkUBGHYjHKQGK3bO5d5PoCLATyilAJMBjBUSn2v1voHKq/VKILX+wFESqkna60PZL97BoC7s3/fnf0/AEAp9UQAnWycIAiCIAjCQAIFpBqYWZBMoiAIw+VNb3oTHnzwQVx22WX4sR/7MZx//vn4+7//eywvL+NnfuZn8Pu///uYn5/HFVdcgcOHDyNJErz5zW/GY489hqNHj+IFL3gB9u3bh2uvvfac79uwgsT3A/iE9f+/CRM0/ppS6gUAvg3gEQAXAXgbgM8BgNZ6Xin1aQBvVUr9XzCy1J8C8O+z9/kogBuVUj8M4FaYmsdPa60lkygIgiAIwqpMtCPMLseYXpQgURC2Nf/yJuDYnef2Pb/j6cBL39b457e97W246667cNttt+Hqq6/GVVddhZtvvhlaa/zkT/4krr/+epw4cQIXXnghPv/5zwMAZmZmsHPnTrz97W/Htddei3379p3bfc4YitxUa72QyUqPaa2PwchEl7TWJwA8E8ANAOazn3cC+L+t4a8FMAbgOICPA/g1rfXd2fveDeBXYYLF4zC1iK8dxmcSBEEQBGHzE4UKALDUTzZ4TwRB2M5cffXVuPrqq/HMZz4TP/ADP4B7770XBw4cwNOf/nR86Utfwhvf+EZ89atfxc6dO4eyP8PKJJbQWr/F+vfbURjV1L32NICfHvD3jwH42LncP0EQBEEQtgdZGQx6sbTAEIRtzYCM3zDQWuO3fuu38JrXvGbF32699VZ84QtfwO/8zu/ghS98IX73d3933fdnqH0SBUEQBEEQRonAxIhYliBREIQhMzU1hdlZUyX34he/GB/60IcwNzcHADhy5AiOHz+Oo0ePYnx8HK961avwhje8AbfeeuuKsevBhmQSBUEQBEEQRoFUm5+SSRQEYdjs3bsXz3ve8/C0pz0NL33pS/HKV74Sz33ucwEAk5OT+MhHPoIHHngAb3jDGxAEAVqtFt7znvcAAK688kq85CUvwYUXXripjWsEQRAEQRBGjn5igsNeIkGiIAjD52MfK1fNvf71ry/9/5Oe9CS8+MUvXjHuda97HV73utet236J3FQQBEEQhG1LHiRKJlEQBCFHgkRBEARBELYtcWL0plKTKAiCUCBBoiAIgiAI2xKtNeKsKFEyiYIgCAUSJAqCIAiCsC3pZ1lEAFiOpU+iIGxHtNarv2iT4/MZJUgUBEEQBGFb0rfMaiSTKAjbj263i1OnTm3pQFFrjVOnTqHb7bLGibupIAiCIAjbktjKJIq7qSBsPy666CIcPnwYJ06c2Ohd4bF0FujPA1OPc3p5t9vFRRddxNqEBImCIAiCIGxL+qlkEgVhO9NqtXDJJZds9G7wectO8/P3pgGl1mUTIjcVBEEQBGFbInJTQRA2Ncuz6/bWEiQKgiAIgrAtEbmpIAibmvn1k8lKkCgIgiAIwrakJ5lEQRA2I91d5ufCqXXbhASJgiAIgiBsSyiTGAUKyxIkCoKwWRjLgsT5k+u2CQkSBUEQBEHYllBN4ng7lEyiIAibh7Hd5ueCBImCIAiCIAjnFAoSJzuRZBIFQdg8UJAomURBEARBEIRzS5wauel4J0IvTlhjj04vYn45Xo/dEgRBGEzYNj/7i+u2CQkSBUEQBEHYllBN4ng7ZLub/vu3/Rt+4QM3rcduCYIgDCbNFrXipXXbhASJgiAIgiBsS1JtgsRu5FeTeMfhmXO9S4IgCKujKUhcXrdNSJAoCIIgCMK2JMnkpp1WgFQDaapXGVEeJwiCsCGkmdRdMomCIAiCIAjnliTLJHaiEADQT92yieKEKgjChkL3KskkCoIgCIIgnFtSK5MIFDWKq7HU55ncCIIg1LHUT3DVLYehNVOdMIRMYrRu7ywIgiAIgjDC5HLTiBkkMp1QBUEQ6nj3dQ/iXdccwHg7xMue/jj3gVKTKAiCIAiCsD6knnLT5b7ITQVBWDvLmSrh4Ml53kCpSRQEQRAEoY5/vesYzsz3Nno3NjXU9UIyiYIgbAT7JjsAgJNzzIxg6plJnH4EWDjt9FIJEgVBEARhk3F2qY9f/cgt+JW/vnmjd2VTkxvXZDWJfcdeiUuSSRQE4Rywa7wFADg5x1zw8+2T+M6nA+/8fqeXSpAoCIIgCJsMynjdeUT69K2F3Lgmk5vGjq0tlsW4RhCEc8jJWWZGkGoSEw81SW/W6WUSJAqCIAjCJiPOMl7Srq+gn6S4/zG3yQ+x0rjGMZMoLTAEQTgHUF00X24qNYmCIAiCIFToOQYz24m3f+l+/B/vuJ5lAFENEvvSAkMQhCFCt/JF7j3FtyaRgQSJgiAIgrDJcDVY2U7cc/QsAODgyTnnMVST2G2R3NTR3VQyiYIgnAPoHpRwZSG+NYkMJEgUBEEQhE2GazCzndgz0QYAnJ7vO4+RTKIgCBsJ1UW71kPnSJ9EQRAEQRCq9OJiQsFegd6i7B43QeL0gruRQ94nkTKJjjJe27gmleMvCIIndP/mZxKlJlEQBEEQhAp2JnFZevYBAHZnVvKnGb0jVxjXOE7U7BYYUh8qCIIv6VrlpkkPWCdliQSJgiAIgrDJsPv5LUvPPgBAKwv0zjAyiTQxo5pE1z6JdmAux18QBF+8M4naWhxMHCWnzGBSgkRBEARB2GTYtXOSyTLQJIuTSczlpnkLDLeJWi+WTK4gCGuHjGvYdeapdd9xlZym7vXagASJgiAIgrDpsDNePXHaBFDUBi4xMnt0GAu5qdtYW5bK2Z4gCIJN6l2TmADRmPl34hj8ub4uQ4JEQRAEQdhk2BkvyWQZKHBzlYwCdiaR5KZuEzV7QtcXp1lBEDyh25WXcU2LgkRH9QSZ3TgiQaIgCIIgbDJsian07DNQwMfJrObGNS3/TKL0rBQEwReSm6aa6ZSsE6A1bv7t2gZDgkRBEARB2NrYgckw5KZxkmKxN9oZSwr4lhiZVRrTDnl9EkuZRKkJFQTBEzswZNWXlzKJjjJSO0jUq9/rJEgUBEEQhE1Gf8iZxNd/4jZc+rv/uu7bWQu0Is+pEUy1hlJAm2lcYweJ7CbYgiAIGbFPkEiKB67c1A4mHbKKEiQKgiAIwiZj2MY1n7/zUQDAqTlHWdMGQCvynBrNJNUIlUIUKAC+clPJJAqC4EeqPVQhFOCxaxKtINFBoipBoiAIgiBsMvpDlpueP9UBANz/2Ny6b8uX2MfdVGsEgULElpsW23AdI9Rz6PQCrr33+EbvhiBsCLYqwfleTj0S2UGi3Vtx9TESJAqCsClZ7CV455fvF2dHYVtiZ7yGITd94nkTAIADx2fXfVu+FC0w3O8JaZZJbIVZJtExK1jKJIq76Zr4lb++Gf/5b77B+t6Gzen5Hv7y2gf4DpSCsApeQWKeScyMa3zkppJJFARhq/I3NzyEd375AP72hoc2elcEYejYk4lesv6T670TJpN4cs69Uf2woZpETtAcpxphoBAFQf7/LqTibnrOoMzvPY+e3eA9aeZPrr4Pf/zF+/Clex7b6F0Rthi23NTZBCutZBJjD7lpIkGiIAhbFDKaODq9tMF7IgjDJ/ZZfV7T9sw2RjnbQ/OrXpw6W8mnWZBImUTXSVos7qbnjEsftwMAcOfhmQ3ek2a6WR/Nh0/Nb/CeCFsNO5PovMBVDRJ9+iQ6BJYSJAqCsCnZN9kGAJxgGmn8fw+cxB/88z3rsUuCMDTiIbubUrZslNtgpB6TrUSbIFEphTBQ4m66AZyX1bsenV5kjbv67mO4+eDp9dilFVy4qwsAOMLcR0FYjZJxjeuCU16TSHJTx3lQYgWJkkkUBGGrQn3NTszygsRf/Kuv44NfOzjSGRFBWI3esPskZoHQ4ghfN3EpSHTbzyQFAmWyiFGgWJlEbvZRqKdwpeUdxys/fAuueN+N67FLKyD32yNnJEgUzi1rq0nk9km0axIlkygIwhaF6o9OMoPEnWMtAMDhITzse3GKV37gJtz6yJl135awvRh6JnETyE3tFXlXh1MjNzX/boUBqyaRJIhiZrI2fGpJhw2dF6fmeTW5n7rlMH77M3euxy4JWwR7jYlfk8g0rrHlpunqgaUEiYIgbEpoYnaSKTd93E4jGzp0ZuGc71OVgyfnccODp/DGq+5Y920J24t+kqLbMo/wYUyuqc3DKAeJiU8mURt3UwBQqhxoDiJONTotEySKcc3aSPJM4uieW3T+a8fzg/hv/3A7Pvb1R9Zjl4QtglefxGoLDAenUgAVuakEiYIgbFFoYsHtUZYHiafXP0ikDEXCnFgIwmr0E412GKAdBkORmyabQG6aeGYSg0xKGAbK2fAmSXUepPelBcaaiD3lpsOEMve+SeNRXlwRNhY/uWk1k+gqN43r/92ABImCIGxK6MbKlXrtHjeGN4/OrL8rKu2a68RTEFzpJylaYYB2NJwgkSbJXOOaWx4+jW+fmFuPXVqBfZ25TsrJuAYAQqWcg4A4TdGVTOI5Ia9J9AykuNk9H/qezxuCq3gZJp++9TAuftPnMb+8etAgnHvsxa2+6/lFQWLUzd7E8fyyJaYSJAqCsFUhiQa3kTWtWg/jgUiTd8kkCueaONFohQE6UTAUmV4hN+Vdby9/z4340T/9ynrs0gpinyAxteWmyvlaTVOgk7XhEeOatUH3cN9M4jCy27RI4uw+mUELEMeZtfPD5P3XfxsA8JC099gQ0lQX95L1Nq6xXydyU0EQtio0IeQu7CZ5kLj+EwuavIsaTTjX9NM06+8XDCVIoetmlGVzdibRVYaealtu6p6VKmUSmTehmQXHCd02gU7fZeYCBDE9hONJ3zE3a7973BilcV24fZhZ7OMFf3Id7j7K6zdJZm5yXm4MiRUkOi96U01i1AFUwDCuse7fkkkUBGGr4ivhpAn1Qm/9M4m0Mi7uh8K5hprAR6F7b7+1QHV3m6Um0TVwtjOJgVLO16pdkxgzgvTbD03jGW+9Gp+/41HnMVudJM8kup9bdjA/s7j+wQ2dT9wgcVdW3jCMTOI3Dp7GwZPz+JMv3scaRyUY00M4jsJKUq3zBaee672cArwgAsK2u3FNSW4qmURBELYovoFXLjcdQlPwZZGbCutEolFkEoewCEGBKCdIHHYtbpLqvH+qqywwSZFnEgNWTaJGJ2uBwTHPuvfYWQDAtfcddx6z1aHDx5Gb2vf/YQSJdP5zpd0TbXOODKO8YaobAQBml3jb2pVlO08z23sI54Yk1ei0uHLT7HUqBMKOp9xUMomCIGxRfJMnvjWJj5xawPGzPLMbWnUehrGCsL1ItUaggFaoWJksX2gbHLnp0pBbGpgVeV6dYKqLPolB4B7YJqlGFCiEgWLVRbczWdkwzIY2C4lHTaIdmA+zTyj3e6MFCF8pLYdWdm5xg8Qdmdx0lM11tjKJRt5z1flekmcSQyBsefZJlCBREIQtSmLdTDlZRZrscoPEH/nja/GD/+sa1hiRmwrrRZpqBEohCoZTkxjnNYmpcyA1jLpfmzgpZFs+clPjbsoIEkOFKODJfVuhn9nNLQ+fxus+/s0t6ZScZ+kYCxB2ptjXFZUDBaVc45rcuXUICyb0nJld8susSpC4MaR2JtH1XkI1iUFo5KbO7qZ2kChyU0EQtij2s5qzukuT3YUhyE17EiQK60SS1SS2QsWSOx6fXcJv/sPt7FYWJedQxwkvdxtrxa7t8TGuCZRyViiY4x9kxkHuxz/KtsXNSL3mw7fgn24/uiUn8hSYczKC9vHjBm4+0OJiP9GsQL2f8D+bL7TwwM0k0riZRWmBsREkJek6N5MYAWHk1ydR3E0FQdiq2Cv+rCBxqMY1mbupxIjCOcbITRWiMGDJHd/xpQO46pbD+OxtR1jbsycvrtfbQn+4k85Sg3sf45rAPZMYpxqhgjEOYhz/nmdGigxQTm3BurE45QdSPucjMbccs0sA7EUSzncXe5jy+JJnEpkqGcrk9oYsDxcMiS6k6+5BYvZdqdAEiqnjdyfupoIgbAdsiddy4v5wW2sLDE5NFtWhSCZRONeUMomx+/k1lmXa5pjZhiTVGM9MOJyDxCFnEhONIpPouI9xdhwBIFC8msQwCDK5r/vxp2PHzSztGhteK4Vh4yPJ9A0Spxd6eNrvfRHvuuYB9x1E5XnjoVwZRk2ir8uxb72lcG5IrXu583dIwV4QmUBRuwaJUpMoCMI2IPHMJPYtl0af4O3RGXfzGlpxFndT4VyTaJP5Mu6m7uf/JDkgemQbKEh0nSTbctNhmDel6epy05mFfqkeOS0FicyaxHxix5dJsvvtTZhMIjdIvPngadz07VOsMcOGAql+op3vyXaQyAna5rLv/sM3PczYw7KhCE+5Mny5KX+c3z7e8vAZfO3ASa9tCgWJzoLEIHDPUuc1iYF/JlHkpoIgbFXsFX/OQ9uehPhITh9jOJzS6vFWNJsQNhatM7kj0zhlqmOCRG4msZ+mGG+bsa6TUTuTOJS6sdTuN7Zye8txgme89Wr8n3/zjfx3NEEDqE+i+7bCMOtTybi+SdLn25Sd22/vivfdiJ9//02sMcPGvie7ZhN7sd/9n9YATs/zjqO96MCSmybDl5v6juMGiS9/zw141Qe/7rVNoYBMyFpRwMgkZvdvFRrzGtcgUYvcVBCEbUApk8h4aNtZFx9jDc6YXiaDjVP3FXJBcCGhiUXIczfNyu8wt+zugJimGlqjkJs6B4nFJGSpt/5BYppqdKPmmsQv3fMYAODrB0+XxgTkbhoo54xnkqYIPdxle7kBCu94kCvq8VleG57NQClIdJRlluSmnPt/9lru7dg3k9j3DMB88O2XSsdE5KYbA0neI5+axCACVMCUmyrr34ORIFEQhE1Jcg4yiT7ZDU4zcXvCM4yVZGH7kKS6kJsyzmOarM4x5Ka0sDLGrEm0F1SG0TMx0UVbirpjctZyb6TG4eVMors03J7YcRaAcrkp895Dn4ebAd4M+NyTfeWmnKxveXtre95waxJnFvus+ncAJdkzR71SSGLlGbURFPXljPpmuwUGV24aROY/kZsKgrBV8Q0S40R729ADPOOaci8vWaUVzh2pNq6cfLkj3yafJpETTLmpvaAyjHYYaSm7uvKY2L1V7zl6Nvsd8kyicTd131YUGHdZH+MaV2MdYpi1bcPGDsxdzy373sqrSfc7fnHit+DX95SbPuP3r8YV77uRNWbtDqx+x2YY9cZbGbqXm3ZGHpnEIHTKCppxcTamJX0SBUHYungHiWmaZ0RcJ3f2Q9A3kziMTIqwfbBXnzk1iTR55ARtNPkcYxrX2Nfo0DKJmZlM3T3Bvt7vPjoDwDRip7YZgVLOGRiqSWwxW2Ask9yUmdGi13OzS5sBe+HO9Z7cL7mNMs5laxwnuIlTv8XFtQT3dxyeYb2+5MDKWJSk69tXbroVFy6GSele7novyVtgBEx308QElWHLKfsoQaIgCJuSUh0Ly0igcGl0XbWzJyRLjIevPXnhjBOE1SjcTRUra5BnsjzMN7gtMOxrdBiZxDgxEtx2VC/Bpf2Z6ka451GTSVzqJ3lbkJDpbhoq09vMR27KzWhR5nHJc0I+yvVmqS4Mh1ydYu1MLHeRkOD1ZeS3gLG3N4zjX/5s/MDZN9ibZzolC2XS7F4ehUHJkGnwoOyYk3TUNbjUWZAYhCI3FQRh6+LbAiNOde7S6Dq5th++nJX8cnC59TIAwsZRuJsGrBYMNHnsMbKPlGko3E0dAynPa9SXQrZVHyTS5/j+i3bi3kdnARhlAAUoSrk7RFJmybcmkS03JUmg533Ex8l5WBhXWjMd9alJ9GmBBPDuyXGSYiJzBmYtSg7RuMa3l2MuifU8tzj1zcJKzIIT0OaoEko1iUGz3HTuBHD7JwtbX5GbCoKwHfBtgREnKbvhtu/EoiS3kyBROIeQu2nEacAMv0xW3zOTaF+jw5gkk2wrCtXAmsQnnTeJQ2cWoLXGUr+Qnxt309W3Q58rDAIEilcTSseSU8dov943kzg/hEyuL2mq0Ykok+h2XEo1iUwlCcFRd5jFRX4mnc6nYZjCeGcSSW7qWa/JqW8WVkImZBHHhMzOJA6Sm978fuAzVwI3vTsbl5jXhy1xNxUEYfTRWuNPr74Pdx3h1V/41iT27Ye9aybReh1r9Tn1m5AI24s/+eJ9+B//fA9rDE0s2iGjATP8gsQkzyTyZNqx5zXqS6oLx9e6Y0L78117xrHQS3B6vmcyiVFRk+jibkrvE2V9EjlOkra7Ka8mbm3ZnlGWBMapRqfV3LqkDgqax1ohq/6u760KSTFJmUTnxUU/aauvEYxvWQSdz/3Er1XTKJ9bm4GScY2z3JRqEsndtOE76M2Zn49kJkh5JjEEEgkSBUEYcZbjFH/+bw/gP72X5+SWpBqtMDMSYE541zLZ5RjX2PVNYlwjNPEX1z6Av/raQZzJ2jK44O1uSpksD4ketwXGRmQSoyxwrvt8JvsKPH7POADg2yfnAQDd7HMZd9PVjyVNpAOl2JlE+17FykDGfNmiHWyM8kTe9LfkmYnRvXuiE3lnElmtMxKrTMFxnP39cgJZ3566vu2dYk/pLiFy07VRaoHBNa6h+sImE5o50xsWi9PFuCAUuakgCJsDWs3lSl0Sy+zA9cGmtVkpHcvH8SYkAH+FtpNlKXwzAML24dZHzji/NpdWBkEma3OU6eWZLPeJKE0+qQWGa01WqSYxGYbczm6BUZ9JjIIAF+0eAwA8cNysslOAEii3/nKU1aOaRFezG6B8r2JJfj0yiXaQMr88uvefONWW4zTPFGm8HbLLDQieKiTFRIf3vKFtTbRDLMeJ8zXq28ux1KaD85zydIolJEhcG7YCwvmeUO2TqBvGzR03PxdOF+PI3VSMawRBGHU4mTmbcrDHW9nlTkjshygrk5jq3OxA5KZCE1mbPtY5Qo547Yhkem4Ty+U1yE3JXMQ1Czl0uWm+Il+f3TZb/koAACAASURBVIuTFGGg8LidJkh8iDKJJXdTl+2Yn2Fg3E05NaF29spZWobiHsSpSbSP+ShP5BPLuMbVuMM3SLRbj3BNyMbyTKLbuNzwqRMh1e7BX6m/LqcnY+oX7NnZK86CKyH19muDnJJbnPryUk3iIOMayiSeKcbljqjSAkMQhBGHrPG5dRip9qkt9KutKtWWeK4+y4NUaIL6r3Emdmnubkr95dzOZZ+aRMqU5Zl7x7FDl5vqQrZVN9mNU40oVNg11kKggCPTiwCAsbaZCinl5lRKk+oo9G+BAfDUEz4OlH3PrJkvWmvcd2yWPS7RhdzUVd1RLFyEzHYP1jFhnJNpqjHOPP/pecOtZbQDBU4GOPG83nwkuL01SlSFgsJwi1FfXqpJHCA3na0JEvM6RskkCoIw4vhmEuOkkJu6TpxolXqsxast8TUESFNLoicPUqGBKMgkyYxzpHA3zTIwTFdIn0wiN3OfpEWWdDjGNWZ7g/okRoFCECjsHm/jaBYkUoASBnCSjtLCVrcVGrkvR25q7ZePw6xvJtH3PsvhM988ghe/83pce+9x5zFUApD3SXTMJNL3NNYKvdo9AHwTMlKguEo5i7pJ5nPK2sc5hnOor1FOkupckeAacNvnljzb1kaqTX1zOwwYmUSSm2ZZwTp30zQBlmeAqAvEi0B/MatJjERuKgjC5oAe1Ipmk46k2kyS21HgXCPlm0m0Jy6cyZbJJJLcVDKJQj2UDeScI2lKdSxZJtFxcl1kEt3rGCkIakUBAuV+3aS6kIQPYyKpS30Sa+SmqUaYBeR7Jto4Or0EwDKuUW71hTSR7rZCBMxMov1aTpBIUsUk1c59Me1jvjiEFhgHshrPex496zyGDgfX3dSWQPOCbc92RtrUlyvF6a9bqeV1XZS0a0kZ/S1LGcF1d271M8kRVmIyieY54FWTqMJ6uWmSGaFNfYf5uThdMa4Rd1NBEEacxZ65KXLlpiTR6DRIy+qo1iS6mnfQA7EVKubEoghIpSbR8PCpeQmYK4QhyU0Zq/9WQATw5aZmjNv5n/cFVM1SzjriNC2Mm4bkbhoo1TjZShKdB+S7J9o4djYLEsm4xjHgo3vWWCtExAwS7Yk8K0i0gxsPSeAwMom0IMA1hAEKKbPrOZlYEmiO0YuvuQvVu7YZ5z/15eTLTf2ydLGv3NRy/HaWm9qyackkrolE230SGTWJKjDSiSAsCqVLb5wFiZMXmJ+LpwvjmqAhsKwgQaIgCBuKt9yUHtoRb9IKFJMZd+Makg1FvCAxTdEKA7TDQFpgwEy0/sMfX4fXfPiWjd6VkSKvSWTZ5Jughsa6ypRKxinMrA1db64TySQFojBgXaNrgcx8muoE6Z4BAHsn2vnvx6xMosta1VKeSQxMb0VmJrGQ4PrJVF3vQcOuSSTzGU7Wkua2RQsMXr1rJ2JI9FANpHiZRO75TxP+8TxIdP3e/DKCcZJighnsme2leZDoLFuXIPGckWbGNa5ydzMoMRlEoDngIzlpHiSeKYxrRlVuqpR6slJqSSn1Eet3r1RKPayUmldKfVYptcf62x6l1Geyvz2slHpl5f0axwqCMPr4Bomp9ggSK/3euC6NE21eT64kNRPrTiuQ7BmKie5X7j+xwXsyWtC8gG1cE4CdSbRf5xwk6qIvYLvBpn16oZe3lMj3MZv8dMLAy1qfg873McsI1ky2kjRFlGVt91hBIgU3oYJTfSEFQV6ZxDRlL1IBJgDgZmV7Q5ab5plEjpFMnknk1dbSoetEIdMAiF9frrWGzurGOpG7uUhhXMN14fYzN4pTzQ5IgbJTuLMiQYxrzhm0ABFyFpx0VlsImGCxriZxRSbxjGVcM7py078E8A36H6XU9wF4H4BfAnABgAUA7668vpf97RcBvCcb4zJWEIQRZ4ncTZnjyDa6zXho0ypdO+TVltgGBJwHYpKmCJVCtxWK3BRicNAELUJwjk+ayU0p6HGV3PnUEtktH5oWZa78u1vword/pfQ3mvx0WuufSaSPHygz2arrd2hnEi/ZN5H/vuiT6FaTSAtbVJPIkjt6TMgBE3BMMuubh21c08k+F8lxXbBdSgFOdjvNthk412gCfn0S7Ux6JwqdM/5Jbq7j727K6ndoyUa57VW4x9/XpVcoYy9ABEH9fasWqi0EmttZ1AaJqdUCY8SCRKXUzwOYBnCN9etfBPBPWuvrtdZzAN4M4GeVUlNKqQkALwfwZq31nNb6awD+ESYoHDh2WJ9JEIS14Z1JzLJ0vBqR4mHfYthNF4Y3ETNI1AhDhW4rYMmGtiqbZcX50OkFPP0tX1yRGVsv6LzkSZk1VBYQ2e+xGmlmwAG4139RZsPYtNcHRd8+aY7VNx85U9rHIDCLMuu9QJBamcSwIZMYJxqtzLjmPz3r8ZjqRHjy+ZO4aLfpm2gmaatva8kKEqPALbC094HbSoReO9nNgg3HwGHYQSKdi5xM4ooenIyaRLqPO9dxoTCFiQLlvJ90LuWLJEyZ9rinKyrAbWWRoh3yzKUAY3pVmLm5LjZJJvFcYM9JQlV/36qlFCQ2tMDI5abnm5+53DQEwmi05KZKqR0A3grgNyp/+j4At9P/aK0fhMkcPiX7L9Za32+9/vZszGpjBUHYBPjXJKZsuWk+kcwMb1xXW/0ziZncLgqlJhH+9v/D5ot3H8PsUoyPfv3hoWwv74HH7NsWZu0cAPcgMU5Sttw61ZWJTM22Ln+CqfT4xkOn89+ZlhMBOi3edeMD7aNSymQEazZnZxJ3jrdw3Ruejy+8/ofzNiKBGlwTdHR6EX/wz/fkjenH2iHCQLEyWYmd7WHW0o0x20T41DGuBZrgLjGkrf6ZROSZdK5sNwp46g463CS37rkGlxWjNFcJqG/dZD/RiMLAGKC4thJJTSYrb0EictOhYi9AhA0LcLWQbBRolpvGy+bn2C4jL12wjWtaI9cn8Q8AfFBrfbjy+0kAM5XfzQCYyv5W9VKmv602toRS6kql1H6l1P4TJ6QeRhBGBaqV0ZrncJpkJhW8lV3zM1QKrYZeanXQ6jO7JlHrbEISiNwU5cnELKP/17CZyjI2w9pHmkyy3U2DIpPoms1KUs02CbGvm6Z6P5oIn5zrlfYxUGBl+32hXQoyA4i6QNauSQSAvZOdvKYTQKPhDfHaj96KD37tIG552GRLu1Gw6pgqdr891yCdeglyW/fQMVdqODWJeUacaQgDFCUArkFKqk2WuhUEbLlvFJrWMa7bKibyYC1KJvlzg2cmY58X3PKGKFBoBcq5tjN3/GZmt0t9Ekd4wW/UsRcgmmTyOUduBW77uPm3XZPYmEnM7sVhBxjfUzauGSW5qVLqMgAvAvCOmj/PAdhR+d0OALOr/G21sSW01u/XWl+utb78vPPO430AQRDWDXuFm51JUTwpWyHtMO0sfNxN+4l2rhtIEmNt3Y3CdTfu2AyU2y+M7sRistMCAMwurb7Sula01kVNIqtPIgVEzEyiFaRwZXNBgIH1fgBwZsEKEhPbEZJ3/p+YXWYtGjnJTa1MYh1KKQw6jLcdmgZgMoqACYyjhm01kaQpO2tGGccJZisF+t6mOtFQ5Ka0PU5ASsFMECi0gsC5LRGpNFphgCR1vyf3kxStwGTbONsCkPfl5dbAj7eZ7qZraGURhbwFUNrHDlPuW5LEygKoN/YCRNN9K+cDLwA++6vm3yQbBVZ3Nw1bwNjuirtpBCQjEiQCeD6AiwE8opQ6BuA3AbxcKXUrgLsBPINeqJR6IoAOgPuz/yKl1JOt93pGNgarjBUEAcCdh2fYPQiHiT154fXXMo2xfVZ2wyDg9XuruKI6T67zTKIY1wCbxzad4ohhZBLtua1r/zuAMonI2yk4q5S0ZvekK8lNm9pLZNfEmYUisDaZRJ4jJGBqQp/9P7+M91//becxtnFN0BDIGvlrc5AYDjCuse+hD59aAGAMb1x7KxK2bNS9Kbt53Rjze6PAfbITse8/X7rnMRyfXWKNKWpreQZMAPXgZGT3UuotZ75PV3llnJhAqsmlt3YfS8Y1/OfNGLMmsdwnkRdwR4FCFLjXadI+diKe3NSupRPjGn+SpFiAoBY8qy54mBetLjfNM4ltK0hMTX/FEZObvh/AkwBclv33XgCfB/BiAB8F8BNKqR/OjGreCuDTWutZrfU8gE8DeKtSakIp9TwAPwXgw9n7No4d0ucShJHmhgdO4if+4mv42xse2uhdaaRsyc/IHKRmksx6aNuyoTBwlskULTD4GZggl5tKJrGXJNa/R3diQSv5wwgS7foyTiaRMimUGXOVm5oghdc2I58QUgDWkKUDTCsMIs0yG9w+iYfOmCDs2vuOO48pahL9M4mDahKnreD30ZkltKMg71PJChIT7R3s+daSTnZ5/V37SYpX/91+/ML7b3IeA/gZMNGhC/Nm4u6fzRjXZEEiw4QpCgNPuSmzT2jubsqUm9oOxMyFo4AbbGu/mlA6J8dboXONprAS+9yiBaxVlQn9hUomMQJ0ihVNXmuDRKtP4qjITbXWC1rrY/QfjEx0SWt9Qmt9N4BfhQn4jsPUE77WGv5aAGPZ3z4O4NeyMXAYKwjbmqMzZiX4jsPV0t3RwW4o7WrIAJSbG7Nlc5nhQeK82lpeyeesJEeBQqcVSpAIv0buGwFNwochN7UDDNdJpM4DIp67adWkghtsDGxUn32fp+fLNYnUpoblbuohfEita3twJrF52jMoK3h8drn0/3QvCDKJqqtaI7FrEpmZLG7rjNiSqXLkpvT+D56Ydx4DFOcgp0aQxihlen72HcfG2b2Vakpdg6J+otHKA1LHTLotN2UoUGjcONu4xs/dVFuOr67fAT0D2e6y1sLFKKtCRh06jtFqJmR2zeHybGFAAxQ/q3WJJblpVpNItYyBm9w0Yn2ac4TW+i2V//8YgI81vPY0gJ8e8F6NYwVhu9NmNl/eCEqZREZvpzSTm4bKPWizZXOuPdEA+4FobpnuTZHNym43ErkpsHnkpjRJOzuUTCI/SLSlXjSxcKnJ8jWpKGUSA4W6eWSRSeyXxgVMiZ4vhdy0CNxW7GOSIuw0T3tI7lVHVXo5s2g+Z2RN7GxTnCbiNGUHiXRsua0zKCMx2Ylw5Myi0xiAdx+u2x4ns2rfk1uhcl+4yO6t5EzrnElMKJPIWFystsBYd7mpX01ikmp0IrMAyv1s3pnEdjjSqpBRp7oAZ/+uxOyx4t9LZ4uMIGDko0AmObXub6VM4i7jbjp1QeZuGo2U3FQQhDXywj+9Du+65gBrTCcPEkc3i2WvmrrWlZhxmXGNT03iANlc07aAYkWYs5JM7qaj/B0Mi81iXEOGFq4T1rVgZ7Nd5aYl23RXiRKKyUeX2YKh3MurPiClie3ccpx/zySJbUchLyPi/MqCct1kfaASpzqXJ9YxyKn0+FmTSXzXLzwTAPLG9hSku2Ru0lQj1cjdZbkZKTIX4d7vuq2Qdb35TvppeyyXauuezMqAZdLhVkByU8dMIkmgmfWP9j46t5cgU5goRKA4clNPCbouDICcXWLpHIm4EnTzuu4Q2ttsZexza6AqZO6x4t/LsyZrqCy5KbBSPmoHieN7gHgRWJ4bPbmpIAhr58ET83j7l3ieTO1w9DOJJbkpoyaRshQst7ncpbFZNte0LYCfgaEaKDGuMdjHbZTPSQoOOa6VvvhkEm3b9IAhN61mErkOiIOuG/t304u9/Hdcsw/AL0gp9UlsqEmk/WlCDahJJLnpC7/nfNzwph/FVb/2XADlTOJqFFmbTCLpev/R1e+Nd98yQaL7uey7gEPb41w39rnFzYAFypabussrI7bcFPk+NvXgrN1W9jpzDbg7XNvnBeda0NosnLYi9xYYeQuSiFknm1iZxBG+l486SWVOAqD+/Fo8U/x7ecYEiXYLDGB1uSkALJzMjGuyFhirXKsSJArCFoYewCM9IfdssJ7qwgLdNeNjZ2CaZHODxo1xM4lajGuI47NLeOT0Qv7/nEnrsKHsNkc250viMSG0DZgo5nGZl6+sP3LNGpiflIGvCwLs7MqZeTM5IXMRbk0iyfIUVpdvEqU+iQPadAyqSRzkbnpybhljrRATnQgX7hrD93yH6b7FyeRWG8e7Zntyd2V2w/kiS8QJNtYcJHLkptaCRxS414mnWcBPEl9+cMmXZJo2Be6fzx7XablfA3RejLVCVnuJhCS4Ab9OP8qMU7jn1ng7kiBxDdjuvmGuSqg5nqUgkWoSs3sZBYtVh9OqcQ0RRMbdFFg1m7ghNYmCIAwHmogPK0j85DceQT/ReNVznuA8piQ35TSqz2RDYcOktWkMQBNJtzouoJhcjzObItvmCnGq83qY7ciL33F9qT3CKE8s6LpxlSOvBbu9AXeCxu2TWM1IcV2Bg6yXV924JNW59Jt6JcapRrelsl6m7osk9FrlHiM69UlcLZPYVMsIAGfme9gz0V7x+/z4OwQ3lCGiMgDXTGIuE/YMEsfaoXNACvhfm7Q9zgJQecGDUSeusxpByiS6SkDTwtxlftmt5rh6vbk+b2zDmxYjc1n0xeTJtFOSm4bumUQ7S9piuMvaC6dSk+hPXX157fllB4krahKbMokVuSlBfRKBItvYwPacrQjCJsO3zyE9OIc1IX/jp+7E73z2LtYY2ySBNbnIVk2b5G9aa9x88HTp2Ln0e6vdlsfkmpwkA6XyzA2nD95Www4QgRGvSbRq6tabYkU+dM6Ia11MPnO5qcM9wrffXt4nbsAkOU40zpvsACjaYJC5SKfFk5v6LGoVxjVFv7HqfTNO04F9Ege5m55e6GHv5Mog0dm2HkWGqBUGCBRDIukpd7eDy1S7n8/eNYmagkTeYh9gudIyArBAIV9048grw4AXtK0wPGOWKVB7g8S1l2P2uolOxFpcoWNiFiX5WdJWqNhS5vE2L5AVypSk/MpVblqtScxCuYFyUzuTGDbXMVaQIFEQNgH2M8n1AQUUN/JRNk3pJWmxss6ZXGQP+yCon1h8+tYjuOJ9N+Ifbz9ajHGQzdVuK3v45sYRDvtJ7x1lNYkAz4RgK1EntR3lIJEmWKle//20nSvZbqOlOhaG3NHTXTMKgsZJcpym2DdlgkRaEEh01gImNFI718UuryAx2yfqkwisDIqSZPU+iUD9otzp+R52j68MEgfa1lfIj2OY1cS5TuQ9jWuqmUtncxdPKXiRSeTV0QHFuez6eDMBf8CXm6aF3NSnTygnk5hYizlhoJwzx3kmsR3x3E01SXCD3Hxr1THZORgGASuTaEugOV4CQhl7TjJwwWnhNNAaB6CApWkgXgYic791k5tWMomOclMJEgVhE2CvCp5l9G7L5aYjbJoSp2ku43TtkQUU0rGo4eF7Ys4YTdxp9YgsisTNpMR10koGNO3QPZNoF6STm+F2zSQePrOw4nejvPpsT5LXez9tSWA/0U7nZGKvPrMyWVSj5tenj66bpkb1lEkkuWmSIjeXMttzDBI9FlNKNYkNxyROB7epGOQueHq+h701clOWcY0VbLcCvrlIKwwQetSNcWWqa61JdD2P7TEmk8io96Nzi5lJTK1MIru/LilQuBn4PJPIG8fN0qVUbxlwnFvNz9xd1ssUaXTv5aNOseBnLTjVfQeLZ4DxfUB3pwkYe3NAe9L8LZebVt1NKZNYlZuGIjcVhK2EfeOuyvYGjzM375GekMca41n/QU7LAbLXb5KW7R43K2VnKn3bgCIjwnloh9ZklxMkRoFCK8oK0rfpw/S+Y3MrfjfKEwv7+11vwyHbJRBwC6RSa2LHcTeljHtuwOTRJ85cNytfEycak50Q3VaAM/MUJKYIlXF25GzPT25aBLJBg2yLFnuayHtO1hzK0/M97K4JEn3cZSNPd2WqwfNxNwXcg3Tf1i9rMWEKVLMqpA4T7BVBOqedBTcgKpmLcBQoFaM0tpstN0hMC8dXbrAXBibD7dO7M041S+EkFKSlbLP5XWNN4vhuE+wtngZ680B7wvyt0d20B0CZv7fGgKhrfq9EbioIWwr74cKZtFJmrjfCctN+UjSXdq2jAIpMYpO0jAJPqo8CKiYJDHdTckXMg8Rk5fH8i387gN/69B24+eDpyrYUwoBpVJFqPHB8ZWC1WbnuvuPY0S37pI2ycY19HnImaV89cAKv/8Q3WduqTuQ5UuYwKKSVLvPWYmKXZfYcm6bb2Z6m2ipjJBVg93i7kJtWFldcM4R0zDnGQS6TrThJB7qb5sFlZdxSP8FCL6k1rqHMpMu1TRmCoiaOL3dshfXGQYPGceWm9jno0/PQbMv1Xmd+hllNlrNxTRbsUU0iJysYBp5yU2Zwn1avG+eg1PzstkJWVj3VyB1f2e1tlFmAcD+OabaP2bnFeHYLBSXjmkELTr05oD1lZKML1SCR5KaV7yDpmSwiOYCR5LQkN5VMoiBseuybBmfSSquro9xuoJekrCwKQe0lmqVl5rOftoJE+6HNcjfNahIHZRL/5Or78fGbD+GK992IfpKWJoQcSRoA/OW1D+BFb/8K7j121un1o843HjqN5z5pb+l3o5xJtIMnzqLML33wZnzutqOsjDGdp/k14GiKBBQSPYAnd+TKFlOHSXI/MaYwO7otzC5RCwyUM/CumcTsmHMWEkp9EhuCvSTVA41rKLisjiP5bL27aZC/92rQd21qEhlyUzuTGPGCS/u+5VOTyHre2EEio00QULibOgdg2f2fKzfNyxQYQbptLsLJdpaDy4C1SBgoE9xzTISSVENlxjXceldauHA9jnYmEeD1OBYK6koHas+veAmI2sD4XiuTSHJTunHVyE1D657VGjM/o7YxswGARDKJgrDpsSednJVFegAMw8rflzjR7P5fQDHha5KW0UR/ukZuynY3zbIkrSxrsFowe9O3T1UyiSSJctve/oeNk9mjM0tOrx915pYT7J3s4KcuuzD/3ShnEvul642/nwse1yjHudJe/We5myaWBJqTSbHkdkGDuQi1pJnsRpjLWgvEaZo1EqdMIk9uypkg0z4FypabVoLELLBoomkl/9ScCRLrjGsG1TFWia37T8QJGnR5Is9pXRIFQR5IubdgKN5/scdz16x7j9X2EciC+6DB2bFuXJ5JpHuy6/aKWkZ32a75mctNnWWjxbiIE1za/UUZ95+idzC/3jVgZiATK5AFRnvRb5SxnaOjQfOEuGfkouN7gPlTWWaxkkmsk5uGloJn/qT5ufe7RW4qCFsJezLBWdmlh+AIx4joW5lE1web1tr0hBrgCEYrqTOLVpBYmVy7PrTjrNYjbMhQAMDFe8fxI085DwBwx+GZFfbngHsmMWdI35tp17F+G1vqJxhrhXjnz12Gg3/4MgBwdt9bK4fPLLAmukDZQInjDEyqnoVl9zFxNUhk1Lty3U2LYCNgGXcUxjUmA9+cSQww2YkwtxRn4zIZGzeTmB1z7gQZKDelru5nqgf3XiwykOXfUyaxrgUGp0+lHaRHoXKW18drkKkGAdiBlP06TqBuP6e45xZ9b5wsHfUEBNxNz9JUI1TwkpsGWZlCqt1kuFXDJ86iQJDV8nKNa9hZ0pKUOXA+jlSCwZX7CmXq5Ka110CyXLiUnj0MQAOdLJMYNBjX2L0UAWA5M/E7/3utIFHkpoKw6Vmr3NS10J745zuO4rl/eI230QqrcXOS5vWDPi0AmhzBSO5kZ15dZHP120tzswl7+6XtJRr7Jts4f6qDgyfnV9imA7yay2HyxN/+Al79d7esy3trrbGYBYlKKSiqfRlSJvGH/ve1+JW/vpk1pl8yrnHfT1pEWOi5NekGyu6mgNtEPq2RKLn1SSyClDazcTZtp6mXIGX2J7sRZrNMopH2oTCucfzOKTjkmXaYn0o1N6XW2eS7CUoyVgPu0/MDMoke7qZhEBhXZm62R5HclKGAyBYEAEZNonXcfSS/Zlt8SSanLVGRNeO1T1qL3DQsLRQ6bMvKAHP6JOb9RaOA5SeQpOb8bwX8fod5nSaj3tUYKbmpa7YD/STFc/7XNfjCnY86j6m2SQEa7iXU8mLc6ndImURyN622wKgGia3s9XueaMlNJUgUzhHfevQs2+lvqZ/g7/cfWtcsxXbAfpj5GNckzEzR737ubjw6s8RyUrVhrT4nujCu8XBbJEf7Ort7oNx2ouo2594nsZy1qbuJx2mKVhDg4r0TePjUPMqZRPe6pY3iy996bF3et59oJGnxHQO8Vfy1QOf81zMzIVdKclPGJI2CkwVG5nJFJtHFuKbG3dStT2Ka72crDBjGNUUA3GQu0k81wlBhysokmuCyMHxyPZYUHLIaieeTrWJfq3NyrYtAsI6mmiAKEge2wHAK0ouaRE5GkD4HjeP1BISH3NRzUdJDblrIhHmN6qmdScQMgPM2EZnc1KnlTGlxsfw7m8NnFvCK99yAB0/MlV6T90lkyFvDQKHTCljHX5PjaxiwgmaAn6WOE53J1vk9jrcqZxf7OHZ2Cb/9mTudx9jGTU2LWwBMkBi2gZ3fVfyuXckkVo1rdFoEkADw6muAV3zIBIjSJ3HzsBwnePuX7mdLoobJ3HKMl/7ZV/Hrn7iNNe7PrjmA/37VHfji3eszAd0u+GYS7ZVLzkofTVg5Aan9sOXIxPpJionc3ZS/+tkUuNFEyg6Qy8Y1ylmGm2S1VQODxMRMWp6wdxwPnVqoZDvB+nz5e45wUOkK3dfI4AAAy3xjLfgev36q88DGL5PIWf2vGtes3GetNQ48Npufx7ZtfRHYrL6tUk1ixHNApHO4KQOfpBotkptWMokUpLjeu3K5KWuCbH4OcjdNtYZCc5SoGuo7z8z3EChg51hrxZh8YueQJbLb4nCUDBRcGgdKnkwyCoO1yU2ZLRi44+zWJWFDvWvTtuxyA86zw86AObnSljL3zQt+f/gv92L/w2fwtzc8lO8jUDiOskx5FNAJTZDo3HOyEgC7jin20V1umqQpwlCxs9TbAc68yXaqF4ndvAAAIABJREFUHliWkiybmsS93138Ls8kknFN5TtIkyKABIDzLwWe9nLz7yaJagUJEkeAq245jHddcwB//m8HNnpXGqFVomvvO84aR/2yaCVW8KNck8jIUlgPCk52j2ytZ5fcZXM+9Shaa8Spxpiv3NSSllVX/+Oa1fCytKn+Znzw5Dw+d9uR8ntVTHLqVvr6SYpWGOBxu8ZwYnY5f2iuJZM4DEnmemf5F7MH5ljLziQOR27qO3HpxymmOuac5FxvFLDNM+SmeYP7vHfhyu296VN34sfecT2uu+8EgKpxjXmNk9yxaoDC7C0HoNbdUWudT76nui0s9BIkqc7HdVru/UWB4l7iU5NY7pNY2U+4ZRKrl8Sp+R52j7drTW+Kid3q+1gyrmFMyNdiXBMo/kTetybRq0+ifS9vuCfXjssk0JxMOo0LAl4GMneqXqWX3R2HpwEY4zLA+r4V0900+2wdhroAoMxxJhtlupuyHb+1zg2wAKDnqErYytCx5CwsVheu7fcpEfeM3HTvE4vfVYPEWrlpiFpEbrp5oMnT0enFDd6TZmhVitvkmGu9LdRTCnhYWTr+yi5Q1EdRRsBtW5ZEz3Efaf/GmDba9PwzRhr1N1Z7f/LMRvYSCi7rbsav+quv4/WfuK20GkgP7UEmIfkkOQsuzmZtAErupswgkROg+OKbbZtfjnHF+27Etx4d3KYjDxLbxeOmHQ0pSPScuPSTFJNZX0fO9UYxBEcVssLdtGafb88mn7dkrrd0bnZbYeMiyaBtsWsS08IVtM7dkc6hVuZuCphrLk3LbQpcnx/0/pwaXrsFRl3GX2sNrYtsYR1NAffMYr82iwjAurY5mcQArUAxJIHIximWAUpSkQS6Zpd6npnEtbTACAKemViSOtRx1W0vLdcyuhyTUplCw/NmOU5w5IyZwx3LXKntzxaxauCLmkTA/TvQuliU1NrtmNgLEFzH79A6t0a13n6Y+DxL6/wVagP13LjGrklcTW6alOWmNtIncfOwO6tzODXC2TbfGwDdQEbZ7n4z4Nvc2x7HChKzCSv1O3PBnpC7Bjc0Se22AijFr0kcZCZjP/wLt0VL2tQwIaHj+/Cphfx3caLzZs9A/cOgnxYtAIDCVTUKbHdTt89H81jOiqQv3IUf4u6jZ3HzwdN406fuGPg6CpjsTGLEmOiuBV/HvX6qMbmWTCJjcYWOw/gA4xp637uOGnc6krOOt0OvFgx5TaJzc+/CuKZuIlm4bwb5IsnccpxnG7iTXXp/15oxs4/mZylwsMbSP93cTcvbTFKdP8uqcIKUkrogZAR7ltw0DNzr9ijbljuAOh5/+16+3sY1tikMJ0hMMylzfv473k5IFdJmSHBL2Z6Gifyh0wtINXDJvgmcXYoRJ2lu5gR4uJta1w1ncSVQQCsa/NkOnV7I72vV+mZnx++kGmzLHM+nV2StcU31O0gTkxWMOub/f+6jwFNfZuSjgCU3rWYSk7JxjU1T24zqy5w+hbCu0DPr5NwIB4mezlV5kCg3kDVhT0BYxjWemUSqH+NkEu3veLWH2kIvxs0HT+cPllYYoBUEzm0RYsuAo2mSFtdmEldfNf2uPabhLJkPAMUkOQgUVIMkJ07SvCYLKIJE++bPvY6GkUnk9N20oaDmW8dmB75usb+yJpFjGrQW7IkLx1ihH6f598iqScy+50WPPondAS0w6Ly568gMtNZ5kDjWDlnupoldk8iobYutya6ZSFb/TtexlUlcik3rmMBqgcEMEgH3YEPnk616uSn9a7C7ab3hDX2OQWOcatusTG4UcMxFzM/8vsVoE2Fne5zdTS3Jc538uQkf4xp6Gd0n2XLTvBzLPbhky01pUTJsnsgfPGkWFZ/5+F0AgOnFfqkvJ8/d1ARtbWaQSMFlK2j+bEv9BD/8R9fijVeZxT27vQc7kxgWfSpFbuqXTKk6rgM1C07xsvlJQeKl/xH4hY8DnSnz/6ohk1itSbSh/okiNx19aOXm5NzyBu9JM76rRNzJwUZxz9GzI+3O5es2l5QykO4Pe8r6nGXUJPYZQeJrPnwLrnjfjTiSSaxbkTFXcP0OckewAatv9v5QbWVV2lG3avr4PeMAgG9bQaI9SQ5rbNrT1PRttDOJ05kzbGQ9SLk1ib5ZPt9tuE60gOK+tdq1vVRTkxgFakXLkvXAPgc4Tr2JZyaRAob5NfRJrLvX0uTj5FwPj51dxmLfnM/j7YjnbupZ20YmIWZs3YJM8b6TeSaxn0v7OIEsUH5/14nXaplE2/20iab9tDNCTWNcMp55C5KQmUmsyB2dM4nVINFxnO/iYppqlksvjQGKHoSua0d0TjY50jaRZK0zBjYur46xMolN19vcsrm/XLzP1IlNL/Ty8x/gZRITMq7JWse4LuSRc2shW1z5Glr8/OxtR/MxtH+cxTvqk9iWTGKOj3u5XafcqApJstgg7NS/SVNNok6Kv1URuenmga6tUyMcJPpKw0jSMcqZxIdOzuNl7/oq3vYv9270rjRSdjf1M67hBByUJZrzDBIHTSzSVOOrB04CAG7NaqxaAbNJtOUI1vTQtidEttsiUPS7qrup00Pv2NmlYnt2TVbNw76fZ1IKuZ2dSeTY5AOFNI5TD+eLfV6wDFcc7wmLVtaL4PRDWwv2+XSWIZ1OtXE3DZSf5JfTJ5HO2+6AyXWcaly022S47zoyU5ab5pPk1bdl18RxHGYp2ADqs8BF8BPkiySzS3Ge7eEaN9nv796mw7xOWZlEe3t2zWIT9KcVJljW56/S1G5j0D5GQYAo4PQ7LGSqfplEntzUvn9zyxu6TJOicgDsfo90MROr3V46WIFSR7Vur2579KzdO2nKh84s9PNWFgBYNYmU7cxl2kyDqaa2UADwwPG50v/bvVPDNSxASE2i3zzZNiFrziRmKsNoZQseM7gpkxg3y03JuEbkpqMPnRBDKNHxxneViO5Rrg+njYAmXBS4jCK+NYl2oMQJ1EmKw6lJLE8smm88C9aqKBlxtMIgc2RzfEBZNVCNmURrf+hzVFtn1Pc7NL+zHXmrtSXVB6n9vhNZkEjOvu0wGGibXvv5stcNRW5qbYMjL3adTNS5m3LqqtaCLYGioN0Fkol1opD1HdA1xmqBkZ23FEQ3yU2fduFOACYTYAfeTWYrdRSr1mDb5OeZxJqJZN7/L1ClRRKtzXa4xk2px31LW5MtOib2LcGlJrGp3iwdkElsCizrKGoSefLDct2YW0BqxvnVjfnWsqfp4Ix47RirJrFp4a4OWrjjupumWS9BTgbSPv5N2R56n32TJttzer6Xt7IAzLPKuU9itriSy00dF6pSvXoAbAeJcZKuqLd0D9LTkimSyE09axJtdVNDTbRzJnG1Fhg29HuRm44+rjKJKtfddxyv/rv953hv6ilnpDg1ceakXRrCZNcXuhFzMg2AWdG/4n03smoEfbGPP2d7sWN2rwrduDgtMFxrEhesQOTmrMl5txWixWkAXJNJrHNc3D1uVstOZfW+qdZQymQTlFppdQ8U56wdJNqZBDORqY4pVmNJbndk2mQid4y1WNImwK9PnC/2BMS35ckgqV1dTWK0ATWJZxlBIsnEuq2AlUmka9PnWutGNLleeVz6SYpd4y20QoXpxX5Rk9gK83PZ5TlS1L8ErJrENK0Y1zRkUaKgkFsfzc7/yU5UZNIZNZAEtyl7U20P7bJTTWJ1IT/rkzp4zOrHn2TIE50ok9fzguYwZJqLeMpN7UPOWVyM0zRv5cI5twBzT2bJTXVFyswMnBXjeysZnjXVwKflIHF6oVfKwLMyido8Z3K5qcP9pAj2it6ddZ/txGyhWDs13ysFKWqVBYhvPXoW33zELOyuyFKPsFpsWPhkU0t1ymHDuZzXJHbr32SQ3LTRuMZNbtowWhgmvlLO//w334DWZmJiT8DWA/sG0E80Oo5nDhmRLDBqdIYN3Ug5k0gAeMs/3o39D5/BnUdm8OyL9ziPO3R6AbNLMb73wh3OY8p9EjkPbWtF3mPcepjkULYqChSOZlbh5+/oIAoVQ35VrH7SBLR6f+4lKXZPtLEcp3g0247d762uthAoJrzVTGIrk1EFNRkACm5bYYCpfJJs6i13jrXYNu30HQ8nk1h8FlYT4NJEXqMd1U+i6T3H2xXjmiFkEu37FjeTGDIziVrr/FhyJkx0/6EWIb2a7cWpcc7dOdbKP0fLamS9WgbmzHzPuAdbExJWn0RdTI4DZSbyWut8om3X2tEiCZ3/U90IIaNxOVA9t3gZKXuSXFeTOCCR2LjglKQ6X0yswpH70ne3c6xlMrmOk8pyvz1eU3bTOD4LEhk1qJ3INHJnLXhoq5UL814+qHdt0zgaY7bNk3IWGUGHbdXJTWuyzQCwN3Orn8mMa2yZNieTrhTy/qIu9yA7IzuoKbt9jz8xu1x211xlAeKlf/ZVAMBDb/vxXO4r7qYFSWW+1XTPsKm2gAFqgs08SGyQm+ZBYk0msakFhvRJ3Dz4yq7oYTzNMGTwxZ68s1wCs9dyap2GDV3Y8wyJGFBkRjg90QDgh//oWrzsXV9ljbFXmzh1ar6ZRBrHkra6ZhKz4/WcJ+7Nf3fBVBetwL1Gim6sUWBL2VYGbu0wwHfs7OKxrL7Qdpvjyk1JMlqXBbMnyRN5JtFMknd0rUyia5CYfcfDqEm0Jw0+GTBg8CSmriaRIytbC3YQxDFhSlMzaeJkEntJmmdBfBqQU9ag7hyJkxRREGDHWAszC30s9pKSfHeQ4cRiL8Ez/+BL+Pn331S0Ugh4fRKNSYj5d90k2V60mWib858WZqa6LVabjurruPcEZUkC+e6m5fci4lQ3juPIfWcW+2iFCmOtkGXelE/kA54zMEkyI2a2J9F6oPy5eXtp/lx0DUjt3rUcuSM5eapcgsuQcioF6mjC6S9K/XXrxtF1S5n0hV5SMnziyYtpkcq9vjOpCTbqzknbefnUfG+Fu6bLeZykusgkZvvo64C/lXBVQDw6s4g3XnUHTs0tl6XMTRng1eSmJB2tbYHRZFwjLTA2Db6TpTxIXFz/1hmlGgWfIHGEM4m+x58ehkORm2bHf7zNq5GKU42JtrtkxR5nxjAyibFbQEo95J77pCJIPH9HJ5ObOsqo8prEZmlNPzHZl8ft7OLRGROw2W5zTe6mdKzPLPTzB6jJQCIft1JummUSgwCtMEC3FWBmsQ+lTCYlz2w4ThJ85ab7HzqNf9h/iDVmuVRL6hskNo/L5aZRuSZxOJnEYhssuanlLuh6DdjHwDUjDhTHkVbkmxYuoqDIJC70Yoy3CznHIMOJq+85BgC499jsykwioyWFLTcFqpmbIkgMMsk1XXM7uhG7JjHROpexudY62XLSukC2CCKb36NpkjbI3XSQtI948MQc/vBfvoX3fuVB7BxrQSkTuLnKP9P8ewvY5iKRR5BYcill3RP4NYnaDoCVapSuL8dJ6W8lVQgzcA6DQm7KMa4ZlIGk92lHATpRgMVesuK6YfVJtGpJ3eSm5udAAxQAi/00L8M4aWUSBzl+m/cvfn90ehFxYtxNWyNuTviV+0/gtR+9ZSjbsucvg87/6+47gU/uP4TXfvTW0gJQY3Z7NeOaphYYA+WmFCRKJnHk8a3NGWYmMS5lEt33ly4UTt+wYeMr9yUXt2F8NjrmY+2QffzHs/OE1e8q+944E4RyTeIA45oss/SsJ+xGGCjsHm+h2wozuSlXWtb80O4nKVphgAt2dPHY2eX8NeXawma5aZLqvE41tjKJZlx5Y7ZkCgCecoHpXzTVMQEiO5PoKTd9xXtvxBuuGtzcfuW21p5JHLRQsthP0ImCUp+5oQWJ1ufhBIk0uWNlEu0g0aMBOU22miTQURhgVx4kJiX5bhis7F0IAP9272N4/SduW7Ffud29ax2XZVxT10uQtk1/M0FiVpPYjQbK32q3l+p8Ec69BYYlN61xvKT50yB308aaxKS4/pvGDHqMv/pv9+N9X/m2eS8r4HNV5ayQm3ICIlX0zeN83+0ogFLcrHjhbspxzgWK9hJ158hDJ+fxg//zGvzyX38jb01Uctxl1GnSuDzbzMwkUgayTpJMrxlvh5jvxaXrJgrcg/siSHR/bhQOrM2tXABgqZfgot2mzdOp+eWycc0AhccpS1lz8OR8lqXGwJ6Mo8Avf+hmfOHOY0NdzAcGXzekUpq2FqJNltr8fcV5EmdO69yaxDQWuelWwD4hOFLOiaHKTYv94gQptAo8yn0S15pJ9JUEcmTGtI9jrZBVHB0nRSbRpyaRJzd1yyxRTeLeiTaefP4kLthhbnxRGDCMFezVz/Lviv0xze3Pn+ri+OwStNYlt7kgm1hXV67tc52uLdvdMKzNJGYTv+yh/qwn7AaAPNuzWk3ib3zyNnz06w/n/0/Hz6f9Ahf7/OVmqYtxzfu51EtKUlOAt/K/FnxrEknKxskk2tczZ8JELyXZVt19oZ+maGU1iYfPLOCf73g0zzIAJjtWd2792TUPlP7/WLZYEgVmsus6sS4b12T7XVfvl11bk90onwhNdfk1uXaQyDWuKfXOs4bqPNvZ/B5Bw34OzCQ6yE3tY0WLFT7GNZRtY7mbZgsC5hxhZI6VkSRzF45INu3TAqNp8eiT+w9hZrGP6+8/gZf+2Vdxer63MkjkyE0DW9rnMCY//s0OlPbnGG9Hudw0v244fTHTausYhtxUDXZ8XYoT7J1soxMFODnXK7fAGLB4R8oAwGQSE51lEkdcbkrJFK7nhA/VOv0mjmflL3GaluYy9H2vOE+SLEBfTW5avZ8PdDelTOLgMgwJEkcA+wHCWbUjg4wZptz0riMzuPfYWdaYkgGKh9x0VFeZAP8gkWQ1vpnEBY4pTPaQ6LZCZ0MAwHxvY1mg4pMl8qljXG0c9ZCb6ET47Zddije8+KkATE9N9zoWa2LR8NCOM7np7vEW+onGfFX+05A1sM+HIpOYWpPklavWFLjTxP3fXWKMjKjXYuPNP+PT3zyC//czd+X/P8zr5pzITQcEs4v9cv0cMMQWGNnxCxS3T6IZ02FkEn3v43QutcP6bE+aamhtjtnOsRbOZAsX9z02m7+m7pwEgGdctLP0/4dOLwAoZHPOQZu2g8RsP637UCH1ND8nLWezqW5k6gQ5hisluaN79gUwgWp9IGt+DjauMT+rC0eJ1rn5zsoxq2ekOlGAx+8ZK+1HKwycgwY7+xgGjGDb+t4irtwxMC0YuPcEqnd1fU7Zmawmx2m6vzzniXuwHKe4/dB05Zx0y4prba4l2hbt86r76GBcU7RlUhhrh0Zuqv36JCa63MrCRb5ebWVh3mfluMVMhbBvsoOTc8srAuCmXTx+tnBFnVnsW865oy03naz0LV5PSjWJA66b45nD7NxyXDauqblvmV9QkNiqf8O8BUZdTeJq7qYSJI48pZ5QjBsyGQRwT/7/+Odfw0veyTNOKWUSGZksGjfKmUT78wyy8q9CshpfGcM8oyddbpPfClnZ5lTrXJbGqklM+JlE+8Y2KPuS28C3I/zIU87DCy+9AEAmv2KsdAPZ6ltY/9Amuenu8ay58XyvMrFA/bi0yL6eXYzz15QnJCsDUvMZzGue9937Sn93zaQcs1xY6TP4wBlnf1fr8X0v9GqCROU+YV0LNLnaMdZiZfwpk2Iyibxz0myXH2xHDRO7vrUAsXO8qEn59Rc9Of93U8BH991PXPkcAMBDp+bz1wcDAnWtNZb6CU7OkUzb7pOIFftZbVS/Y6yYzNBiJqcmK041W7ZY7pNYY1xjTcaaaDLYsevfqrjUJJ6a6+HyJ5QdsM3xYEppA14WPl7lvtVEcf67O+Ca/TTncTvimJAh378mx+lUa+wca+GPX/EMAMaVczlO0c2yWIFiykaDASYhteOyfbSMa5rMy0huWhjX0OcziwIucwytTQ183qjeJUi0FmryGuCacYv9BN0oNPXNC/1KANz8jJpdLuaZ04t9JNQnccTlphMd8+wZSpDoWJOYB4lLcVnK3JQBpuCvKSvY5G6qk+JvVYLA/E3kpqNP1TbXFbLXHe2aRH6wMWzs5zRn4kqyGt9MIqdxeV6T2ApZN+M4KYJEbr8rwL9GzcW4ZrxTvuG1IkZzb1vH3zCx6yfG/GJXVqQ/vdBHkhSTpqY+WXGSYs9kYWMOIJPWNE+2cuOa7KE+1W3hZ5/5nXjjS74HQBEA1F07dtBvT8oBdxv5Kpxm7v6ZRLdxdS16ht0CY7ITsXq1kk1+txVg2fH6tu8jPsY1ZOe/olG9tQDxuJ1FTcqvv+gp+b+bDCfmlmM8cd8ELnv8LgQKuPvoWShl7iNNE/K7jszgkt/6Ar7nzf+Ky//Hl/N9oIzBoB6EFEa94Knn5X+j+yTH3THVhWxxLXLTsnFNto8DahKLe0L599Q4vI4mRQKRpBpnFnq4aLfJJP7c5Y8HALQC0/LHJWiw73dqgLlLFVvuGAXumcskLRxwOc8A6kPL6cFZ1CQ2Z8Tp+O/N7suPnF6A1oWT6GoB8D/sP2T6FtYpUBiZxCBAY30tffYgMEFi1bgmb9Xk8BXQokyxAOogN01rPltdTWI/Qbcd5iZY1QC4aQGCFkyVMs/SOCmkzIEaYblp1zz/h5NJdKtJpF6V870kv74GZanzbF9TVrCxJnFAJhEw2UTJJI4+9rXlI/fiBBs2HPmVffJzgpQ8kziiq0yA/2ejuQZnQm7DySTGudzU3QEUKNf2cDMpAK9GzX4gDTqP53sJ2lFQqqkCaNLkOCG0JDLNzY2zTGLWt+pMNkmwHfGq+w2Yh92eLGND10iSWK0zarI2VeMaAHj7z12GX3v+k/L9bKoJsq8NamafZxI9F1c4bVl826TYX9VqxjUrahIZRhNrwQ4SOec/NepmZRKtz8Ptk6gUCklmzfkImJrdJ+wdr32Ppkzi/HKMiU6EbivExfsmABRmSk0T8ruPzpT+f6mfYCkuAv26zJntLAoAL3/WRbjs8bvww08uMurcTCLXJdMONmqNayjbOeA9Gt1NrcWlKvTrpvN5eqGHVJsa7IN/+DL871d8PwDzfdr7PYi4EgC4LrD4ZhJNf0WzEM0KEtPClZNjQkbnv2qotyQZ63g7wng7xMEsIz6VBQCDsqsPHJ/DG666A//t728vOYCqmnOkibpsz8rnTbGQON6OsNAvG9c0tWoCjJHJV+4/seLz0vu5LDrZmfJBypWlfoqxVhEklrLUA2o7Z7Nn4eN3j2Nm0dSERtbC0TBqzH2YzBajh5FMca1JnLXm3o/NLqEVmqx9Y3Y7d91qqi9saoERN2cfARNASpA4+pTkph4BmK/c8aGT84xtuZ38K8eNvtzUviB9zF18g3ROWxDa1lg7dG7ADGQudaGxqeadW1kmyzNoWC2TONFeeePiGDnYxfZ1E0J6TRCo3O77zEIvzxABzdKyOE2xd9IUiJ+tySTWrbZWjWvqaKoJsoMXenjQ+/tKeDjZ7bLhkPs410xitacfwDNxWAt0Hk51I7aUljKJrvdXX0WILWWsM+Ao6l0VLt47UfseTe6m88tJLrd6aua4uzO7Hpom5NWs77GZJSz2iiCx7rqxJ5qA6Q362f/6PHz4v/y7/DWsmqxU543EnWvbaibJ57JPYtO1nWcfGz4buULuneyUspgc4xSSLfrUdtL3FTHlraFS/CBRm/PDtFdx/66Lhbv6oM02Dto72c7nLlRvNsi45vAZU4d777FZK5NoHX+Hj1c2Sqv/vu2eiGPtEAvLSSWT2xy4vfajt+CXP3Rznu3S2XGkhQSX761kXNMQbGit8xrxnWOtTDZqBcADgr3ZpRidKMD5Ux2cmaeaxCA/LsOoMfdhw2oSBzy7l/opdmRZ8Eenl7Cj28qv7er7ALDkpg0h26AWGE2BJQCEkchNNwOJZ5BCF7evA+JjViHyatjZBk5N3GYwrrEDE+6qKcDLCNqwahKzfey2QvQdH75AxUjA49zykR+GgVrV3ZRkQjatMHAOgJNVJoRA8aDdlWUFpxf6pZrEoGGSEKcaU5ltf55JTMu1jHWBJX2GJpomd/axml2Kc6MSwP+6IXMgF3yDG1d308V+uiLw4PR6WwsUAE92Il5WPDWTLU4m0ZYAsmoStbVwUVfvak1Qv2NHvQW6qpGpAtm1lk2SSO441aHsS/2EvLpQc3RmEctxmgf6dQ6geU3igDxdyJI7WplE5+NvfpZqEq3N2S0ymhjkbtqUSVwt2Ds1lwWJE+UeZ6ohIK2jdN8aYC5SJU7T3HCHW5NYGNcwFo60aYvQbqhlPDK9iFe85wbcdaTIVqcapYW7erlpEYDtm+zg7qPGeM+WmzYdx4dPmSBxoVfUfwVWKwuX478UJ1lLkGZTmFImsWVqEqvmOvS6KofPGOdQkiHSceS0TqrPdpZf0090pi4KsGuc5KZWAKwUtK73Zji71MdUt4Vd4ya4NPeWYuFoGIt+Pvh6d/hQqklsuG9RoL5vyixEH51Zyuu2m0pn/OWmqchNtwK+kzRqF+CbSfSdELq2KQCKVeBRziQmjpPdKnRMvOWmjIk8bavLbIFBK7DcFWEK1nhBovk53hrcNmB2qZ9PVG1YEqXK6iew8qFNMqZdY0UmsbRqXWPAASBvErxjrJXXYZRlW8GqxjV1NNUE2d/L3HJckS36PXhZctNUZ/LfwcF9FTsoGVS3t1QnNx2SPCmXm3Zb7ExiGBh3U9dJMn2eDqO2Fihne+rqBPN618D0mvyjl38/Pvdfn1d6TdPxnO/Feauk86e6+WvzbdWcj3R/+dirTRbw6PRSKRtcV+9EbzMgSWcyiYya47X0SRzobjooSMz+uMJcUOvcoXjlmPL2q5yaNxN/UicQTUqGOlZbpGqCMntAlklkZGXzFhiMBQ+ti/5+dZPk+46dxf6Hz+An/+JrpW3RMVQNQUpqZXL3ThTHcYc1uW7aTTJrml2K8wXuMODJTRetvqRNE3n7O5roRHlQavdJBFB7DVA/Wj7xAAAgAElEQVTd/PHZwrgsUGpgLXsVbZ3fTXJTUph0WyF2jLXQi1Ms9OKS3L1uHACcXYqxoxth51gbMws98xzP5L7DqjH3gfaKSjnWk8ShJpGeQ/uy+8HR6cXc6IuO/4ognYK/1eSm1XFp3Jx9BDK5qWQSRx5fuSmdkEueARinuXrfYYWkdlz22jjVIytH8K0lWqsDJUemmmRyI5+MYOgRJPq0wKDjONYOB46bXarPJHImMXUuddWHlNbIiv8DTHUj07i2krWpG2dcURV2dKPCuMaepKmVE8KqcU0dzZnE4jqcXeqXF428M4m8msQoyLJmDFWCcyaxl2CsVT4uISNgWAv9JEWgsoULj5rEFqOOznYg5sq07ex2o3FNNkm+4tmPxzMev6v0mtVqEgHgvGzlms63Jtkc3esfnzXcfuzsUqmutP66KTI0TXBqElNttcBwDmyQ78Mgd9NBxjWN7qaJbvxsTdlHgjKJeyqZRJ67piVJHrDAshwn+Mw3D+P+rD2KLdMMQ2Ym0VNuOqgmkXY71cU9syw3ba73o9e85Se/N//9ZIeClObjSJnEONWYph6VAc+4Zn45yTNSjXWr1jNirB1isZ9ktZ10/JvbIO3MggRqM0HjBmUfq7g8EymhMJYZ1wDA6fl+yZQNqA+cZ5diTI21sG+yjRNzy1jqp5jqrJ7J3WiKns9+i/k+2wKaF3jpOUT345nFfk0msTIol5uukkms1iSuKjdtAYlkEkceX7kpnYTcTCKt2nFkiyW5qUcLDGB0zWt8J+VrDRJZRjLZSjan1xWQyY3oYc90RQXM8XAN7ul14+3BEr3ZbEWySothm17n5NbkNgcAu8fbKzKJTXUbVJC/d7JTyH/SsrtpNZitM66p0lSTVZWblnqS+hrXMO4JJJMy5winJtExSKzrk9jgrHmu6SUpojBgZQSpl5pZWQ+gtaMDYnYIui338xgoZ1JqjWuyN44GLEAMcjedXBEkZtmUplrebN+N4U2AmcU+FvtJXiNYd93YAVoTUejublpqgeF4DZT7JK68J1TNdepokoAOqklsyj4Sp+Z7UAp5bXSxLV5NXEmS2XA+/uNtR/H/fPJ2/PKHbobWujSO426apshko9wFj2wxs+F5Y2//geNzKz9bg3TXDrYu2l2YN+Vy0wFmPpRJBICT2f28VKbQcEg+dcth/M5n78RiL8FiPy4WSRom8kZ9QO7WEfqJxtxSXMrk0uetkgeJWSaRFqlUlk10KfGptrKgfbLJg8SWHSQu5+dwMOCcPPv/s/feQbdlV33g74R775df6he6X7ekDpJaCSGU0BiQhMCWisIYCxFcDBhmbMAe12AzpgjWmMwUEpjgGRMNA7YZwxQYDLKEJIJQtpAsulupWy11fvm9L990zp4/9ll773POWjvc773PUs1bVV3f63vvvmffE/Zea/1+67f2Z9hYKnH3yTXje1Jwk1JvfNhGa85hsNnawjX88WhvPr1uSwc2CJGVWAmLtsCo5wG66U0k8fPCWrStJOGIxYJEos1MUmoLIzIk7LjPgyBx0ZpEWoBTFx9yRFID0jxPC6T0OJ1BHhZptSWxUs7dOQIaSfEGiRNLU3GNJOGjjtXaEP1IIqAdtKt7Wu67K1zDoYJlnuPs0WU8cW0fSilM57Vx0jlHnp6PgUe4JhcCfPe6bI3dupn0BAS1xQnRTX/yv3wcb3vgHAAKinOMynwhBVwgrG661KGbanpS9KEWtnmlMMi1clxqv0O3B2dUJl85SGLis+3Wm3WHuiJNknFO8ryqMZ7VBgGhIJGulYSAmeMVGdaXdC+1qVOTyDnJtIf5qJyxSCLV5I4S1U25PolsL0fPd8SgRF2jl6Wkx+WdCY6tDHtBvkR356ybpJLGvO/hywCApzbHuO+JTUyaWjqaZzSS2ARlet9ITHjkMpLoHv89D10C0PQEbH6bGKQL6rIGgRHOSVUrPHZlz4g2kYiQDsD6cyJ7+8fO43t+96P4d+9/FL/+3s80SCLV5PLjtAKu/vfZo7r+95Ere+bzPnVT8snObVJS0iYRSo/I19XdKV7z03+OX3jng61epRySDlhfZVDkZj14anPcojIDEpKoEa+7T62Z1wzdNKC4+6o3/Rl+5V0Pi+/fSDOsqEPYcNoCj/zxaP2986QVIaP7OGvuy766KdFNJeEaX03iTXXTz3tbFEmk7FIykpgvfiwgtQXGwVGRG20L000N2paWQaMFfBEFxJTeWnpcbaT8F+15GOsk0MIWQhJ3xhbdcG1Q5NGiSK4AgYQI1koZh/DoyhDX9qa6Po4QkYCU+W1Hl/HU5j7GsxrzWpk5c0puNG+pbkm/xyMpbSTR0k1Te2ICmo4M+OmmO5M5fukvHsZ3/NZf6bnXtaUkJ/XSDD83Va0D7JVB+3qXh0RPIpRiaVBgPKvietJFJCCkYwHAUpl23driFn3HLqbeVSOJ7dfoviJEjmpgjjVCTlJARPfAINc07YtN704TJDJOMv0rWJOYGGwDB+uT2KabNu/7SnQYwRvA3ycxF5JNZFd2pz2qqZ5HAt20I1wjiYv81SNXce8ZHRA9dGGnhSRrJDF+fdXCTWlrAil8Dgu+LpfWjJPrI/zqX37G/DbTJiKi3s81QwEV0NUnr+1jVim86Gmank19aNtIYn/c+x++jOVBgXvPrOPdD15qahLteeTGuXWrdxzXaOe1vZl5zYckUqKQyhu0KirM8aQyjIcv7eDTF3fx02//lEnatOr0pQRQnuFpzRw/c2m3pa4szVG3zihxTytIDPepnFU1Pnt5Dz/+lo+z799oW6R0ZvFjOcl14XjUr/fE6tCwCzacpDmLiofoplILDBXok1gMcFPd9PPA3DU4JWtn6aZpNz8tWklN2Z2bNqVP3zziobme9rsfegzv/fSlpDGLCtcsgiQqpczmkkzjaTK09P8xRoIrwwQkxR2XMk8T3AwLUchEKaVrG7iaRMGx8B3LrS3p3s59JHGKHadGS1Q3rTSydvbYMmaVwsOXNC3KrRvoZnZdBUrJJCTFvS47k3nrPKYkBACLZPrUTf/68WvtubtoW0rdXkSQaGtg+jWJKSrJixrR1EZljlrFIYIuLdGqC4bnqkxwky5c4zrJonCNj26aMcFl5548vjrET3ztC/Cr3/oSMwZgAqLKouIbSwNDgVvuCHe06aaq9R5nseqmdP+PygVbYLh00+Q5tucA0JotP9tBuunOtKds6o6LozL3++11hyml8OS1fbzoacfMcV0kOb1PYhMkprbAyBvhGhZJ1K+95t5TOLc1xu5krtkdvd/GBWD2/P/I1zwP955ZbymHcr+NVEO/4PYmSGzopkVLAbc/7uruFCfWhjh7dBmb+zPsTudGuIbuke69TGwfwNbzAu1AihsH2D2AFM9deq1GEvlr4Pb+u9KgpNL9T3ME9N53ZmPJIMU9uq8wx9Egx5HlAU41KGQLSRQegD2n1VfKXna9jM73YfifMTWJxPJZHhRGzMplVnEJP6tuugDdVEIfgZtI4ueLLdqnb1G6aarzD7SdwKQ+fbUyi+thPKT//P/9a/y9X/lA0phF1WUXqUmsatveIClD22waRFmKdULrejF103llr1uquuPyoBR/G6FyLN20yOJbYDgOcC5QZDT1Sf/76MoQ13Zn2JvOHaeJHzevtXDN7Q1liEQgXGeL6z9F70km1iQ2gdmxlQG2HbrpqCQkJX5jpeP7xjzwhJaPp0xyVSsURYM2L5A48ql57js1MK6lyPgfxAiBp3MZkyhx6b6LIImjQYGqVkkiIV7hGof+KRlHQaTvcZ3rv/fyp5maLhFJdxQg15dKI6axVMrCNUZZ0fM7Y1U56dkqc0Kk0pBEiW4XczkyJnComPPomqGbCge4tDsxKK5rPpGQrrntFaTjXd2bYVYp3H1yFVmm200AMH0yfbTFrtFzkyx41tSBDwSBNUpAUDuWpzbHLdRMqtN06xYB4Fte8Qy89bu/zPy/tJ5s7uvA6a6G2nexERGidg/03V27sqfRX2o4vz+tsDJqi4t0n1NNCSbUfmjWvCMd5UrfHkCK5/o8hmtJ3SDxsaYfpIuScnX6QBMk5xluP66vg2UJyPfkZF6ZxM0zT2s00Q2ApWTHjpOwvNSc/8M0OgcpSfKDHgvwJU7166NBjqtNYP+Ku0+Y93Mv3VQKEov258jqyk83LW62wPi8sEWFU8ihPpQWGI4TmIYkuip18cd76MIO3v6x89GfP4i1H+y036bH3Hj6raGbNo5ibDBFiGAqbWhe2wx07DxbwjUCIkXN4qU+iUqlOZJ5npmNuer8Pv01hCQOsT2ZY3N/ZpFExkmoa4sa3NYEiZ88t9OaMxfsuVQ3yWQkUT+/t6yNNN2Ugu1hGt1OGwWJ8pjzWxoZoqnOGucmtScaCa4MPXWylDXt9kksE5QWD2JUI0WiK75WHWQu3TSpT9mCNMkW3Y4J9mi99SUguJqgELotoQazWmFQaNEMjSQ2QaKpyeo7kpbKeXAk0Z231EqBM1uTeAAFViZIpPlIvy2kUirSTQUklzO3rleiqRLie+bIEo4sD0yQ6NLkk9RNF6Cgq0ZwZSCMo+MTHfPc5tiItAC2TpMVE/PSrfnzT/TNs0eXUeYZSzflLtvV3SmOrQxxZEXX5O5O51jpBlIckthMMcsynN7QiYEjDaXQ1/KEKIgGSaxVS/BGYl1cc3r/PXZlzxzHR9t1fwMhnsea+9OHbk/mtalvveekDhKJJukT1NtzVNx3JnP81SNX8HPveJD97I2ww6SbRtUkzu2e+K++4QvxPV/5LLzszuPmfZ5u2nxXiG7KBZch4ZqbdNPPfXNviJQAzCCJiTc/LQCpQYNRm0us21teAEn8ip/5C/yD3/xQ9OcPYouqSdYLLD5ucJfWg1A1TlO64h8JEKQGpRZJjA9IAX9N4nazYXDqpoSUxNxf9JEW3bT36NhN+8Sa3gTPb01MZp1z7uj6DIoctx3V6mOEJK45waWUofX4MSjznG37QNflxNpQI4kVBRvpzxs5wj4qJ9GSKAtdNfVW2iFPS5KUee5Fe1zJdddCQgfXyyyS2ASJEfcyPdd5o25K3xMep/8ulWnXrXaQRFaAxrknJePQbat2yI8Tm4I3wk0AsLFsn9Nen8QWShdz/8epm7rnf1DGK3K6dcrcmmCRRvk7OHXHEJJo0cf+e7OqxrW9mVl/+GOFf9/eZN6qv3PnRUaI76n1JRxdHhiq5epITm5J1uqTuEALjJGwJtC1JCTxyc39FmrGJSBoXCi4534bBYlHVwY4e2wZn720az7vQ4AvN4H90WWdXNwez7Ey6vRJZBgobk06JRUJSfS1SjFIYkPNdGtQy0JuDbW5Z5E5ChLz3K/cDdhnn2ijRIeW1gQSbyNGxkvvPI71UYlb1ofmt0lJErfV1950jtf/m/fhX73jUwurwqeaaYFxCMermvp+QPavxw7d9MuedRL/5DXPbL2vUfFukBhJN3VrEpXS9FNfC4z8JpL4eWEu/zypTtBpVJ/Sg3ARjvasUqZwOwVtq9RiSOJhWrtPZboCaBKS6JzzRfodpqgt0ueIbhob7Cml9PUepQWJdB6HZS46g9TQlqtJHCTUytL3a+Ga9vHNfJTd0J9/9oh5nZwmztlyRULWlwbYWCrxyXPtIJHLyJv/9TigoZrEW9ZG2BnPzX21yHNjKNCe+4MU/rYakRxSDhwUeTKVPM918CIFlxLdtMjjaHYHNepBmEI3tagwDogkRgY3qtMnUUASk9VNjUPIj5GClFll2z24tPAeJY0JEn0PQAySNa/qFr22zOORLHPdcn5NcGtNJeOo6/Y8BoJ05rcRneyEh24aI1yz6zRzlxx5QnxPrY9wZGWIJxr6obtuxfephBWzWqAFhrQm0PU/e1QjWE9dG7eSJNI9WddyCxJADlI292co8gxroxJ33bKKB5u2G0UuB3uAgyQ2SZI95vz36aZttJlExI4uNwGYpwaSGBw7Bkm08xsUHrpp02MvyyyVs5UkCSCJpHAaQjtp3aRk21e94FZ86I1fYXxCXwsSV0Rtb1qZdYzaS91oWySZDwDX9qYmyRBr81rZJKGwJ7pIImdcyYGmkWZyhivL9PtuTWJI7AYAips1iZ8XVrk31oKiMAsJriQFpFYCPUVwYl4frCbxMAqdF0US6TQk0XYXpBYTJY3QhJhjkpR8nqcJENAUVxLpppT95PoIkhm66YivSQTingGXkiY5TW7/uefdtmE+t9qlzblBonFQ9Xk+e2zF0rZcJbcercOiGJIVApLSChKntk9iarAB2IDChzQTkqiU7n01rxUGRdODM5HJUOY5BiUvUgG0i/RdK/K8qc+9sc831aVaJDGCbsrdWxHnpTbXLQ1JrOra9klknK0Y4Zos6zONavM7EpHEujbHWndUiJe6qsAu3bT5G0YS+fOolMI3/vL78Dd/9l0tJHF4ULopK1wjf4cVobHjQkgifSfn/FNCxidcE4Pu7TtBihRIXW6olCfWhji6PMBWk5CjcWXzzMVY7dBN57WKSkKb859n4ppAa9vysMCxlQEu7oxbSRJJlEeXTXiCdCFIubY3w5HlAbIsw90nrSpnkecO3bQ9bjyrsDutcHx1gKMr9rqtDNsCNH1RmLYCLu0hR1fCNYlUp0aCY93eqT7hmuOrQ6wNS2w1e6ur7tsLEjv7FCGJNGtJzI18FVpHM6fOm8ZJy10bSawMtfVcU/Zwo82CImllWV/4I2/HC3/4T5LGVLXCsNT3VqgmkdbTrmlWSOfFOkAbBTSa6NYkGvQxIFxzk256uPYb7/kMPv7UVtKYWinTEyopAHMcl5S6xMVoksrU9aQKtSxCNyU7jGLjlnBQkpNcN2Pi5zhtIYlp14xqdIA0ZCNVuIau72qqcE2Npm5SRqR2PEgibaoxzwAttMuDQnS26trSmAZFbihOXSTR3ettKwuq2Vg27/laYFj0KRAkMpdt4khiU+AGOEHiAkkI3/1xeWdinIire1NTt1omiIQAbQq09AzsNetSt0+izapHH24hM3TTZu2KUYJu1bua5y1+HF23FFVgF0nsNel2kDXJOIpSCEmUUIN5Zeu/nnvbhnmdxFcKxpFUkUkS6b585PIe3v/wFTx8cddQ0ss8S+oL66qX+hRYQ2gngNY1oGvvqwnNBHXHyzueIDEJSZwb4RQpAJgZR74wgQngrHcJSGKlFIrM9l2N2eNcuq+EANOeWeYZTqyNcGl72gqIDAWUoUl6bv/mueGRRKJ7un3pWkhiZ5pUF7i+NDAIG6DFaOj3AQySqNr3CCGJlCDzXW+rblrZ30t0U0/y7lrz+9aWSoN6ucmtHgW9hvkMYGsRbd0z/ZYOkmjEVnj0y9fSyFXa3pvMcbwJvM9vHk6QaGoSD6lPYpHnorov4NTplwKSmDHodj33C9AA+n0XSQyJ3QAN3fRmkHio9kP/+WN43c/9ZdKYeaXMguKjifXGNVkLwELYMUY3YBq1tcaAbv7IOSqlFf6WE4UcXAs1Bb8e5i7AaUpu+u8iYjeLHMutSYwJpFy56xQBAhqXiiQSauPb1Hx005RngGiMozJ3nNb2OIU2O4PEI2wLDP06Ry0jh/yL77KqY2tOcNl1tmJQCglJtDWJ2gm/2tQKHoRuKo1RSuHy7hR33qIdJq2mamsSY51IOlaRZxjknppEEUlsz/dGWUXCNUQ3jUimuQqAC6mbJtYktlsA9B07E+wFArDuFC0iym/z5LR2/ZFZpcw68+pnn8LL7zyO/+lL7sQzmnuGcySNroJnjj4k0UUbnmhq6WxT9kj0y0nUcI68pZvK30HT59RNve1tsowVQLm8a9E9bow7b5/tTysjnOKr2wP0eb71SD+5FVsTCjjCNUVCLW8zHQpSOPTRZYDcsjbEpZ1Jq72HTzk0hCRKdNONJkg8sWopv26ZgtQmoiwynG3Ey77iOafxd150Vr8uUNDdejTAqsq664n+XH/+lCicVrUuH1L2OvtUaccNwrw2Kk1y0UUSe3NU7XvZ+BNOgO+eg+78aG3rWu5JQOw4LTB2pxWOrerrcf6QkMTDFK6pGmV0X+I0SDfNOLppoLYQ0EiiW5MYSzet/HTTAH5501IspS7QNaLp+VSsOJtXNdZGJa7Mp9H9zZRyWjAkqptSjUjsHOl0HARJ3J9VOJY8Ks1iGqD6xpHcvc+JIHMdxzTnv27ukfjMrus0DIsiiTYK2OsWi+YSalM2NRTKESQgI0rMOkM3NcI1EcebzCosDXK9kTYf725SSrWdVsrm0+LMbYjGIWzee81zTuFH/uhjACxti6sZoP/t/l7XJEoU1QRSxvtaI0ZAdJRFhJGkZ3Q8qzGZ13ja8RU8dGEHW+OZqUFLebYBq5yrqWX82ie2wEhAUQ5ipBKYVFvYQkTiKdD0WyhxF1//5ReucZFNyTKG7ti9l7tmUJsukljX5lnM8wz/zz/84tZ9bZ8be6/QsX2iMIWnKbhbt0SCK2UApe6aOwcOEYypSeTqxmKCxDzj93+LJPZrEqXzz9mu09/VCge1P1PVuv1Enmf4wjuYGuwEOjk9N6ZXZVSQ2D7/HLJKtO0yz3DL2gj3P7GJ46tDhm7KBYnysYs8A5dP3tqf4UiDXNH6CujgyDJJ5KTMs06v4wM/8BqcWh/1xHW4pIx7j/zw334+TqyN8CXPvKUZZz/Xtcms1n1q5zX2pvMWulp6knCzusbaoMTaUolPX9T1lnnmC7bbqPgLmlr913/R2dbr3fPfrUnsWiHc/4BFZgFgfzo3pSYXdw6nJvEwW2CQwJJPzI1qFYdSwM0K18TQTTtIYkjsBkBMn8SbQeJ1tBTRB9cslTCN7jWrFY4STTWxvxyQTjctC4LR4zYaK8DRIFILIImLtveYV7WhL4aMejsplU6lJZtVNYoQHQBdumkitS/LMCwbZzfiGrhIQgrd1G1lkTJPyj6XxkHriw0QYsC1wDB004h7eX9WtWg8nJNcK9Uilh1rnAWqi+Q2xK5D/vQTq3jT130BPvLYNadvVd8BUlFOMl9bQsEWnROiDaUi8FSDCsj3B53/W49o5VbqyzgcFCgTnm2gSVxk/nVrX1A3TQnaDmJW8Cke3TOoWJ6mbkpfTahlrEPuyvtzAhxRgiuZD0nkx8nqpu12A93Eh2k54wZg5rPiFL1I4q5DSXu8EVzRqswybatr7nniaIsxgawvceRvwSDQTXcnrQRQd0z3WJK1hVOaeTHBDc3xRU+zqVVSqE1pO0M18Cl00y7dl1vG20jiCJd2prj7ZB9J5GrpSg+SmGVC8DWvjd6Dew2OrQzlY3Wem9MbS6336Tbw9UkEdCuSn/jaF5j/l4Rr6lphWtW47cgSntwcY2cyN/s9oGv1petGz+raqOwhufxva8/ljuMr+Oz/8VW9OfaQxFkgSPQ8224LjN1pZZ7nw0D2AOtPLHq8WVV768Fdc3156XjTqmpdo64VTMmBppsG5tCjmzb/vkk3/dyxFAfLNaISpjtpyhFJiF/8yVKFawaJgaylLaYhUq7tLxgk7iWMI+GOIs+SAzey2HPZFq5JudZo9QSMUwCljCgM3TQG7aZxy4k1iYSI+BRYt8dzrA4LdoEcJgjX7E+rFjrF0Y1ItIfsNc85DcD2eOI2RPoKd3ZveMkdrc2eq3+JQimEjZTonkTBpdYUS6ZPYmxSJnw/En2bHJ/t8cwignkenWzS80YwuSX1SUwR7TiI1UbwKYE2aihZbjAb8bw140ZlfLLDzDECSfTxFDgkKxQkyuqmfqeIQ0SiahILWYBjn0ESc2IlJKBfepwObLvnhP7lVzfto0ShfpP0nRwofqVRyeRQYK4mumsXtsbY3Ju1BOAy4bq5SNbpjSX84jd/Ef7kn36ZSVoUCcI1tN8Mk5BE+7sk9WKaY5ZlOLk+ws5kjsu7U9teyIMk+ntw8nRT95wc7dQXSkH6oskVLinKjuscj9bq4w0leW9aGeEgGic9A7MmGe6Wb2SZ3BbKlqDwc5TOiaWb8gGHhBwDOjBcHhTIMh0w0l6xqL+cavRTFg0SUxRO68aX97FrNJ3ftwYxgo2qiqCbZgLd1DOuGATppjeDxOtoKVQt1zQnn6SO42mjrihMStaabCG6qadnj3SsReimVAsRIzTBWUotY9Vk43zFxuy4Bc4lff/SILX/lKbblJ5A6r9+9gq+8Ef+xEhLm82uyE0AliJ4s7yIAEeWeVtZbI9nLIoIICoAJkl5t7k0gKbvXvuzdYMQk732+WfwwR98DV7e1BlaJbd+kJjakyu6JpE5/RSkkRNIaF8qkuiuHdIzSojNmQ2LJM4rXUdRJDa4rxpa4tBTNzYWW2Dwju71NnISbYuh8PFcRCSlJpF+yyhRqdpFDbhEQmwCoudYO8JV0hj3c2TzSGe3jcDrvwsjiQ7aQHV8tCYnt8Bwz2Uykth8lkUSPYGzgGRd2pkawZPeGAERJDu/NcbLfuKd+Mf/4cMA0Go3ADC1q1UbyXrt82/Fs06vm//3NTzvGu03wyJ+D6Dfn2Uear0TtFEf2o89uWWCHKlO00XbOZOO5waJLSTRobh2T3+3bq9rnCgSHSsmAdG93rS+U6uMncnc9KkE4BWCm1U1hkVugmyad1Hw62ut/PeydG9NQ3RTz7M9q2qMBjlWBgX2ppX5rpSE5EGMjhOr0tu1a04vypARK81Hk5/Oa+PfcpZzIlj/HemmN4PE62iLqicZSlRCzYCRyS/TxC0WQb8ATaUdFPlCSOLSAsI1lGlZlG66lxIkKpfum4bkkkU78s33rw7LJHVTQzf10OYeeGIT1/ZmuP+Jzdb8ykTaHK3dqQhw1yHnjrUzmbd6r7kWcsh/5u2fwot+9O148Pw2xrOqpQ7GZd+6NYmAbjTdOx5LN+V/I43rB4nNPIJIYv9ckgNEgRSJ+ywlCtfMI+5Hei5OboyQZcBWQzfVSGIik0GRmq1HyW1WwVXlJTs0ukjtVbgAACAASURBVKmyAij6eDF0UxskpvQltTWJaUrVLkrCBXsxwU3G0k318SUERkJzZ1XtDYh8CPyi6qZ0Xw7LHFd3Z2beKftN9zx1BSAsJTwtALbKj+lI1pXdKStaQ/MD5PXudz/0GADg3Q9dAoB+n0QmAAjN0efIP+eNb8XvNMe05Q3xSKJygisuAae/17aJeO6tuh5uWtUmcWhowh6UlDNJ3dRtSr/iJBUHRe5VUqXfwR5LQnJVOJBlxzX/T7TgvUllBLdoHiLdtEnouHtq4SCJ3ectqHgsIolNkCi0bciFIB2wzITlYdmim6a0WzqIue2LFvHRSUguxqiWd1jkorbCrKrFekRASHjUVVjdtNsCQ0UI1+TlTbrpYdridFPbAy/aIazaKF20mIzzsWQkkTbtSMeOFqRF+iQOSLV1gdYeQDszHTLjJKe2AHCpu5G/jZzUlVGRtGCRA+ALpKj/3YMXtlvHcoU7YhqYd5HE1CDR1+9wezxvZT1d84mZKKXw8+98EADw0IUdXZPYQxL7TpOfotc/ly6KJBkfJMagFHwvKeoBRud7Z9KpSYw9/875lp5RkiNfG5VYG5bYHs8MZUlT+1KQ9NrU+0n3//60bqhG7RNzWMI1um7SBqVpdNPMqb+LGNdBEpNQmwgkMYSAcc29gTCS2I2b50E6FIckhpF0H5JIQeKZjSWTudeCW2lBYpbZILB7Lm0gK38H1wMyRriGC9IB3W7mOCNa436f1Cv0yU6LgJUAJXPe6dPXNY0k8ufywfN6Tf2pt35Sf3eTuDDMlRi6tZNcKZjzqOdog7a7T66aZ6VLN+XElLzqvpzYB9oofW8NCtQkBp+bzuHmVZgS6zveRhPo7UzmqGs7Py1cIwSJDXrcRRIpx8PVPwLy/ibdW1a4RqabSmv5rFHvXx0V2JvOzXfd6AQhmXsPLlLytJVAN43xJadzP52f9DFaFkM37dYkEkLoG3eTbnq4ltLPzDW3B148kki0RRKuiRvnPjBJIjnkSObxCqzdmsSkILF5iFJqEtuLQRpKtwjd1L1W8ZTA5pwMyuQgPRQkXmqCxIcuaJUztyeSGZfQFHyUGiQ2yQ6fAI0vi+aTCH/0yp7597mtsVCT2B6jEBL7aD7njIt5jLj6C4NSeMLSMudl4YnuTPRZ6pVl6aZxz/asRTf1I4nLgwLrS6URrikbhzCpBU9zT/oc+fG8YilKkkDC9TYSk7BU5vhgzyclz1lX3TSFcUHH0VSj9vsK4cQF3yex9o6TBVDSkcS4HoS5B0mcI8uAk+sjk7k3SOI8Pth2f2uRdemm+m/oPALtNSFE26Vjcc/2tf0ZjjKiNe6xpGfgwtYY955Zx0ufcQzroxLPOt2tpW5/PoS2+RApYp+c3tABLSUuBikMFDq/DpLIBUR0Hssix11NfbhFEgUKaA1DoUz5bbXnnEhBuvv8cyahnXUASfTRVAGYVh27RDdtHkEtXCOjUoMiM2MB4Jb1obi+hlFS+i3t18mf8u3dfiQxM/uNRRIPh266aInVImPcGni5JjGAJHL3ckyfxF4LjGbeQbqpPwi+qW56HW2RPoCApUSUCTWJBklMpHIuXJNY6+xymUDJdDPrWZYG9S9Sk9j+bfHOJ9US+DJ20jh6oGOPR9dtZVTgwnYaaun2/+IbN+taHgoS3SbQKU3B3UzqsMzjhWsc2jTA00mqWolZNJ9E+Hs/fdn8+9zWGPuzGsdX7eKXZby6qQ814APuSIe8cxpjUIqQuqmhmzYo+GiQHmyQyXRT/d2roxLrS4O+cM0C6LZvQ5wLG2JKrd9BrK71fWXu/4jfR9fSvZdj+stZddN4xxqwlFg6ptReJVTvJDmfUn2h5LROK4WlQToior9THBaoSaywOixxZHlgEoNFlmFQpiCJaKFN3VY1sQJAQPu3hWi7NI5Fsiq5vtO3lgPAhe0JTm8s4de+9SWolXXQpR6jXVXarvlqEj/21BYAm9Aln6TwrOVds+JFcisFYk2QHW965hGKJiUuqgCSmOe8cJCLXALA97/uXiNgk3uCbUB+brKMV9Oe134kUaKu0/9vNIHy3nRu9nvAL1xDdNMzjgLridWRTNsNMGVuhLopAQzHVoa4ujc1fmBKQvIgNq+1wON4Vi9EN01jfFkxN2mc24eWM7kFRihI7KqbNn5b5qudGQDVzSDx0OwgNYnUkysVNSB102gFuBaSmIIa6OxyiiS5zVrlGHooaZzRhpiCJLq/LUm5tcluDhMcEkAvuMuDAjuTeUJNaEM3Hcb3LQR0ADb0NI4HbE+uBy/sGGEjwC+Jzc7RoduNElpnuCq9AI++6AXbv0H1VUoVfuqtn8Dzz27g6u4M5zbHmHTophzdRSl4OXqckxbjkHPKfXHjeEoaCcAMmhYzO+M23TSaylyFn21CEleGBTaWS2ztzzW9MM9RFnp+dcDZMcerLQVdCr6kDfGwgsRK2d8GxDkmFklAkpNs1E0TEWBdx4LmmH1HPpbK3EdfQogIv5bMq4Cwgpdu6r//pftkfzbH8rBoqTSmC9e0haq6iL+l7YYDYE6UxxekSHRTX52aJJxCdr5BErutnHyIlB9ty0UmCZVnkOiZTq7YtTxl32jRTbtBSieQJTEeQzf1/bZAkM4F265yMAB8xyvvbo1x503WbSzPGUdvDYnrhOitJKyzPZm36ulDwjVlnuPWo/1aey6QDSaOBP8ihm4q3SPTud4DjiwP8PjVfStcc4hI4sqwxHg2xWQBjYvYHuR0rDzT/uuOUPI0CdBN2SBRRQjX5DnfAsOLJN5sgXGotmhNImXkh2V8Jp8eyOUD9ElMUZcyDbdT0E4XkUqotwSscE3KQ91CUhIDsKLIvDUb0vFSRXnoHlkZlknno5vZ5TZEqkncHs9xcXvSokmlCIW4dQvU4DfGSKWXqGrcvezbSKXAYVYpXN2b4W899wzOHl3GU5vjpk+iXb66NYluVlsyLuCOUillFvG4ZuJ+JBHQ9HHaXG6IcM3EBom3rI1wcWeij19YcZfYfq8kuDIoc7Gdy7ShGnXNdx9fT3NZAgBQxbSOMeJFaU5yV900ZU2m81HknCKh/huqSZQEOFKft7kH/QJ4uiP91FAgK51GjSQWBlECGrqpp5F41+q6TTftHi+ml6lBidw1oY5bSzgk0YcuSWgPAPzOf30M57cmvR59dCxunE7ayC5dWchIIq3xF0gZu6GbGlXgGMEnJ5i2wUb7M11kj5BLSvjJTeADVFqB7ujWJHaN2qR06aYhBVCa5yJ0X/f73XGA9gnyzAqX0efLPBODe6IuUt9b1zjk3iSORQo6vy5PA3RTqU8ooNfBYZEZJJF8oEMTrqmVTbguEJhOEtk1IcEtrUjrv09Y4ZpgC4wu3TQSSQzYzSBRsKpW+Nd/+iAuNRS+GHOdYqkYXToWiYtE90RrPreUmLV2KaApWfx5XeuMfMIcTSa7CYAXqklMUCltifIkIonUFDyVpmr6VCaIuwB6c5xV8ZLM5AD5EJire1PcdXIVgEYT6R5JbgreQhLjEc8Y4RqqY+NMkggnZ3tQ5rj92DIev7LXBIlFa6z702KRve7xYpzdrEFt3Gc8RjlRajDtBs7LgwI7jZOwPEylkrs1iSEkscTpjSWc3xyDFAd9NGH+eCooLjITsqY+RPx6Wkzvzt4Yx5FKSa7Qs0WOVAq7Q2rbAMBATYsgG/SdnEl0x1ld99Cr1jiGEhiHJMrrz950juVhaRQegQZJLOPr9CfzuqW+mHeCPWVe96Pk3eDSBunpdFNSO2THeBIlb7n/KQDAq559KnrcQWoSaY3fm1bYbZq5U5AOIKmWPctgkHGONuomILoK2qK4S6jej6FpA/2gtDeOCS7tvikOQ54LaGfgGdWfa79ukrlFhtVGTAxwgkRPrThRjF3VbjNH5rdZ9e7AmsAkINw5cb9NWstJ3fTYygCb+zMjRniYdNNFdDHIUntnG8VvwZcM1SR2fRkADd00EK6JdNNATWLAbgaJgv3Fpy7gzX/yKfzUWz8RPcYNTFJUlGzdTHzW1LTAWLAmcVSm1d9RdjmFktmtbUt52GitXVRtNLXfYZGn1b/QOHP+Ixc8+n6zaCVc7zKXaTyAvkbPuXUDgK5LtBnRxZzdPKOaxEThmlxGUnyOjCQRTottmWd4+olVPLk5xrW9WadPYjoiyG2IJBISQ0lrj/Mfi+bPXrfa1umsDAvsTrvCNenIvZT535vOMWpoy6c3lrA9mWNzf6bFXYq04MbUMnoo6FJjdkmi/Xqb2bQDwjUfefQqvud3PorN/VkrwZDUOkbZtVUfazHhmkVqEjMmAREKEr3qpgHURo/rB2BeJNGDNkwrTad3pfyPrw6TFL+n87pVM9UNimLWBKAveBPDSpBaANC6LR3H/X7Xnry2j7/53NN48dOPRY87iLqpW3d+rVFzdJHEFOEmX3lDN2gjpJR+k6Wbtr87CkmUgvRAcCkj8H7xJg7t9CHwRnFUQvfyDCujwiCJ9CxxawKgr7+uSbRlKM8/u2HneAAkUWLKSOfSV+86m+vzcnRlCKVsovKw6Kb1AkGi+2yliiCGkMSQuimbcIqhm/ZaYETQTSOQxJs1iYI9fHEXgOXMx5jrgIxnlQkgQkZ1MwXihVrmnWAjOvuvKNtdYH8a3yaCnL20Xo42Ozgs0+im9FGJxsaPcR/sBYLEBeimhlqWrPiq76tpVUfdJ7T4+JDEea1w25ElrC+VeOjCDl5wu+5D1R4XQRtqPmJrEtOEawpvTaKsnCg5CBTwDMscJ9etnPwtjrR8F0mx9M80+o8VoIkZZ1/rKitylgsbqYskuvdCKkvAZRf4+iTSmnHmCCkZ6my1TSTE0/sGg9yb3CLBq65J6ofX2/rPDT/Pb/jl92M6r/G655/BqpHjT+vn2A0SUxSnWz3RJCqz5zs42lxIlVMWCWmLi/THMUmSWLRTRERqDPIMx1dsT8Fb1kdJLTAm87pVM9VtSm0RQf/3dGu5TJAeCDZ6WhMOk4YdIyBLSik8fnUfX3LPyaRxMUhirfiaY3e/pBYkhSP4FMVAcZKLUiuFbrnBd77ybozKAl/34tubsWDHBRHBnG8v5PZJZMdljJKqCYjEYb17C7DUdskkKiet22WeYXVU4lqj7kuJLZZdALu+UELnw2/8yp7it9gDUghmJbTTJqr43yYhuYD2cdYHJY6ttgOSw2iBQYH0cmKQ6E4tBdxQSu8bvvKqWVWbPYYztp1LPV+gBQbRonx0U76Ha+trg5/4/6k91kjuc1xvyVzKYVLrhtoiMLHBRg9JTHDsAO3IpDyklBFNQTtdJDG5B2Hze1LGtEV5EummeZ4kt67nqJIdeUIcUzNbJEnu6y9Hzt09p9bw4IXt1vlPQhKdTTIFSTRCJrmMSPkcGUndlK7loMjx9BOr5vWvf8kd5t9ZL/tPr8vzZWurIlCDjHFkahWmsRUMRQloO0CuGA9RmVPovjROSuS4ySu33olaYNB8Yqz13FSKRUSkrGnpuY+vpxkpfw8FGrBJniu7U5s1z9KSK1bdNNyW6ONPbeHTF6lVjdMnkUGkYhIXktMKhIOUPnKp/A4yc+1iAjBWkKExYqrcfmzZvLY+Ks29FWOTTruVrlJsDCWcGxfHSuADG0AO0qX17ureDHvTCmedcxEzzodauvPgAo5pK0i0LUgskhhfk5h7GC9dddOlQYHvetXdjnJrf1xdKyglo1h6nET3DScu+mgbJbcDlEDmuQkdS3+/hNLpfoeXd3WJE63/Ek3YBJfNw3p8ddjuHczMMYQkSvdWSARLQnIBqknMcXSlHZAcBpJIP8P0fI72r+3nkuimjr6IiCQ2rAnJWFZClLpppyaRAsabdNMbY49f3QcQzjq65t4UKUW5VkpeFoDoWrcFRiqSmBwkVprWkJLZbdUkJqqb0ti05t7296T2trF94tIWhGSRCoMAl0nzpODK10uQ6Eb3nFzDQxd2WzSWJJVGZ0MYlXm0uhcVbfvaDcSo/fWcLSfT+pxb1/FNL7sDf/CP/waOrAxaY91hMY61FOy577HzZDb7rrIiZ2XO1wFXDk1sxdnkyzxP6t1pkSwZSXSD9FMOKusG9ynHKzKYInxuPZHqL/JcHnM9jX5v1gR80nNK6+il3UmLWnUgJNFzHn/g9+/DD/3hA3qODtohOZ+APyHM1bEsKlxTK+Xt98nd/1GBbDNHLpkwq3Uy4fZjK+a1rKkTr2rFPjddm8zaNYkagbHvx8yR3u+yBGg+vjGp9V9W3bQ97tzmGICcoJZUoMNIokydnsxrHF/VTjwFia2a3MQWGDF9EjnjEhAmaZlYkwuEKbh86xj7neLxmOetDgSyUoLX1vvp9Z9UyimZJ4nykK/CMTWAprxBYBcEKehdNkPtHychuYCmmw6KvLXfAIeDJPaYW4kJVyCdlZZnmTe5NQuqR/dLAKDqCLqpVJPoc2ZuCtcsbIQEpgQbLrycXBPXZLvjkUT9uUV7qQ0b4ZpYgR29iWdehTTpWLbfXkrgpv8uSjdNRRIpkE26bpVFElPquIBFkEQ0TYqbYzOLOG1Szzy9hks7E7PZtBGReGdXO8nxAkfufQzwdZqVR7hGyrTSczUsc4zKAj/5d78AL7zjaOszedYP2gA/RY8TT4kVoHGPoceFE0pi3ZJzTlp0oUQE3g1SpA3KDUiOu3Rdp01E9L1cWSQR4O/lmdC7Tao/vd5Gzw3gr5uh6315Z2quUZb43Nh67/CacHlnahKRLtrBZeQNKu45Nkc3DUn5S+0GiDIlGSv4ZJ4bzziBTg5YAY4zncBoUBICHH4GJvO285VnfJ1yKO/bXUtikdzu7woiiZJwUPNblwb8RfCq0nppwu15uTaZV7hlrQkS96dmfoRSpQieuS0wkmmjzLgQRRJomCQ9BF61nn/peH20rS2iw49j9uCALxVucN8gid0gUUASibkmI9VM4iICEWTnGAjUSybYNvOsagzKHLceWe68fnhB4nJHIClk7jOSCjiYfVsYp9k1oQRENwMx92cJAb34LtICI2A3g0TB6CKlBCnuTZ+SJaEMoG4vkRZs2BYYceMoQzFKGFc1dI8yzxtKrDxmazzDL7zzQcyquqWIlSpcQw/34nTTlPNfW0psCt3UQRJTxUXShWvqlnBNb2Nz6o/uObUGAPjk+W39WpEmQOBSUnRSID4B0VZS7Y+j5r+ciZlWgySGFMEcx45eT6wRMZSpACICtLN9KqImsSxkmXY6J0tskBj5bDcf81FdXAU+6stFczPCNQnXu8z995YoXJMQfB3E9O/V/5bqqZVS2Gvqs1t009wRYUpA4Ak59bEStsYzPHlt3/QzpVPEZeRJTCk1SKE1ItTMvS9SEZkk4ZIrPgRSoLIBlobYRZ1T0O1ppyax61xHI4l51gq4o+imOVMTGhmkc5RMPX+53QAg1ZKGrxt3/qfzGres6aSRSzdNa51kjyOqlAaQPY4pE6JIAn2KMGDXw9C4/nm070nGismouH3DJybjtsZadoJEqUwB0KrfnPFUWv3XF1gCMpLoQ8UlgGPa1BsfW+nUJB4C3ZT2stSew66a70LqpqXc3zWobspRd2PopnmBG9EC46ZwjWDkmCUhUgsiieRIDfJ4ahl9zsjkJyhQApYSVdUKId0UOpZWN/XP8f/804fwS+96GGePLeNMU/NU5jlGnuai7DwXCBIPKlyTSjed1ypdpGJB+gOhDfLma7Ot95xcBwB88tyWfq0J7oG4GjB3Q/DJpvfGKdUkEij7zwdEqUiirUkMOclpyIbP2fU5hDSN1JpEnwLiSnN93GbiFCRGq8sSkjUoxKDGbS7tXoelQWEEEKJb3Kh2704OFZw2WeSuHWaQaJDEgq/5nla1cSgv7UxadLMiQbiD7p1BAJFVSmGrUVG9tjdrobtcbVVU4iLzBBsSapD3HXKaXwwC746zSRl5nK+eeu700/zNb38ZTjSoVqiW1LXJvMKxVVv31BeuCa8JQB/NpdMaouBy7A7AhyTqv93TEaQJC4nCeV1jNPAIYnie00krSCQGinutY2oS7drpS/j5gi+uBCBEkaT3RJXS4L7Rfm0ehSTyvXK9+4ZwTtyyEFfQxEUSpQQcYBMp3PH64kb6BTHY8yCJ4fPBv0f+rZt4kn7T9Ta6bVdGiUGic41S1E0pweZtCyUkTsnYcxmlbtqlm96sSbyhRjdTShZh1goSU5AsjSQMCj9K1x0DILkFAy0SKQiYyVgVOrPuG0PzeuLqfotrny5ckx4kLipcQ9mfZLpprRxqWVpw3+0PFTXHPFzXUOYZzh5bRpFneOSyFl9qSZnHICKdmqyUvpgU2EjH8jV8lgIHV7hGMq2caP/fMC1ikMQWJU3/9TmEXCY/piaxyPvZfzo+OYRuM/EizzBcqCYxx6yuWSr5XKB/Pu34SnILDFMnKyAb9F1c/YVvzPU0Eq4B9PrFOSbjqT2/l3cskpiqbtoNmqUxO5O5uc+e3NxvNYHnsv9RCQ8GbQjJ1kvqpgrhgLQ7LkRjA2QHFCCGgZ7Qlz3rJJ53m1ZmtvdkHN3UJ1xjnu3Ac5p1nDQVcf67YwC0mDScyW0iGkc+GNz3g41QIAXwz9xkXmNjucSgyLC5b/v0+RJ+XWu1wBBq513WhG+O7nWrDJMkhOz1j0XvyeN44SZ3LtI8OQVQH7XVd04AHcyujaxDvzzMzfyVYujklR3HGYtuB4I9Trmb/t+PyMqJtHmlDG2c7DX3nkpSkl/U+khiXMDX0rdI8UEbP21Q5KgVf04mMS0wehcgQt201wLj+iCJN4NEwcgxSwkaXGpqCpQ+qxwkK5Z+6CycpQfq75pV4IuvNaDvLpu6JZ8TSV/32NW9Ftc+WbiG6L5JaqP23ynHIgpk6Le5RjSxJVMTGu9Y55k9/ymZrfbmK2Ujdc+kU+sjPNHUPNG9xY2T5gjAKO5G1yQ2m6RVyWSEazyOjBQA07n1LaxZtniNVFvcwmbDJeMRyDCSWOR8HbBbp7PhUkDztN6dtfNsK2GDkhT4nnFixVy3WDSdKNCSSiZAWdP+8XzUt+tp7v1WCHRTV4l6azxrBTyp6qZFpkVyfGvy1tgyKs5tjjXa2tzbnHCNqUkM3JNd359+q/i8CdctlPDIsoyp9wvP0RekzBpKWtd8ipxd67bA6KNL4aBBj+N/WyjhJAcboZY/aQiYNC6kbupF/Jtzt7E0wFVG3TR135CoxV11U3GOzrBQsK3fY+i35vzLc+aYMvOYoJQJwOoAAm/6JPaum00KuC3X6F4uhWtA40rhB/KKx/5gzyC53Xu59q8JRZ57eqDa9e3X//5L8eY3vBBHlgdJ4o6LGs1pkb7UZLHCfXQ8N1HO7d0huinL3qrrOLop1wLjZk3ijTFy3lNpo/bf8Q/AvK4xMFLyaTexCdwS6Y60AMXM0zrpDdrmcZgubGtltocv7rbQrcOoSVxUuIYy+WkiIfqvre2MRRI1kkaLROyiRXOUHK0uRenWI7pROoAOuhFPGypyTbdL6ZtXZA76wiKJck2KlGk1SYpABtrdtOlf/hoRO2/zG4yzm5ZtjUISBeEOt05no0M3TUG3Y/r0SUH6HcdXkpQMgWbfCiCJErXmMFtgWOEafu2iesSjKwNsj+ctJJ2uWay6Kd1TvjV5q0FqAOCRy3vYHs+NsiQvXBOJiCQjibzzGZPwKPN2/Tz9K7WWkUy6L/OEe3Iyq1rOV5feHRPs0fttUarm/Hv75snsDilI8fUS1ONkhEiPa78eRBI99zK1D1lfKrHpqJsaVkjU/a//Zpk/APYjgs3nmISfN7hk6+9inhtOpZSut38ch8B79w0hMUbHK/MMawzdVFKCNn6ZZz/lflscktg/l8EgXbhH3D3g1feewte9+PamldqNDxJpuT9QTeJCvmQmjp0J7BoytlWQim2BkUg3LW7STRc2urgptW1uXWAKlE49onzqe/0x1nEeBCigrtHNN0xBEp2MlUY75TEXtnWPnyt709Zmt2iQmHIe3QcrGUlssj/JPekMbTc2SK+b2s7FkETJ0erWUbhKYm6j9LiMsP5LEuixaA9liX0CKF4kkbKYnQWSnsUQj59TN/UhglxwE4ckghkXh1AAUnZdj1136aYZ3ZOR95YJEuWsKaG9ZF/xnNMAtENiRFoSkUQfjVDqk5hCfz6IuUI9A0E4iJDEU+sjbI9nLecyzzO23i94LM+a7AaJ9z+xCQCmHozLIhvn23Nsrt41hMBI6poxCY+8UzuZ8txwp3JWKRYRCSUT/vNHn8SzfvC/YGcyx7Rq003zrF3vF1uTqM+lO86+LlnG1ag57A7OgvTDQDKNRxL94l7u97vznDW929aXBlbdNE9D0pWy95tMpY1UN3XG2edRPjb9tpbgUOA86nH+0g3J+H6mcTWJEnJZ5JmpnQOs3oQUuHX7JHYtyxg/IVATKq0JlUPb50xq0wHoZ7vLJhkkJJ8PYpXj72ZZvL/lzi1Nld/2SQT6WiFVrRodkMQgMZpu6gaJES0wbiKJi5tFEv3OwcXtCX7t3Z+BUqqDJKYFKYMiT2pU36oTTKBJWiQxoSaxRW31t8642ASJ1/ZmrSAxpQckYBe31Ob2ZCnZH1tLtwAim9gCg6jFyUFi1an/CjgWbo+tk+ujYJ0U9115nlZgbvj4zbG4Z8dHiQqpm3qFa3K+t5lvgeSy3TFIIufIhEQLAOsschlvgyQu28xenkg3Var9bHP3JKG9ZL/0P74Yn/yx1wIIC650rWqQRE7tlYxzEAAZabjeFkM3HTdB4umNJdQK2G7ooHQ9u6iZ71hWJEdekx94csv8+z4TJGokkastpP8NKSd2T2UIkaLXu2u5Uv6aXKDvFNqkTBil4GsSeVpyaN363373o5hWNR69vKf7JEapm4pT1O93qIRRCSemJi6MJLa/vztOOpeZeXbar8ciiVISblQW2FguDd20yNKQ9G5yBeAYLwF1U2YPiEX2uIBD1gAAIABJREFU3Dm4cw6dEy5odr+TPR7zvNUqXLeaBRD/FpLYrONSgtcmT+XnO1VcJxfurdpZ29hxZg/on0suKAqp5F8vc6/lsMgxSWwVBySKICrLSgP6PpDRVyj9z0DvcYtRN+3VJEbQTW+qmy5u9ACGVEP/yW9/GO9/+Ape+ayTrSAoiW5a1aZIPB61IeQojabqZlaAuAy5Kxziqs0NmRv9yq7OQl7bm5px9NtSHEJa4JOCvQWRRFdwJfk8FjpDFZNppWMNitzQDaZVZCF1k8njUCygX390+zGLJK6PSpNhjrne3WbivsX8rx65gloBL33GcYN2Sr216lq3Ugln1oWFNVTs3UH26HV5TH9js+0G5HG8I+MPLPU4/Ze7dnROXOEaAEnCNabeeCCLfXQdSZ14aGpfkltgNEii8Lvou1i6qamRjTrUwlYre52l53tvqp/Bk02zZ1e4g/76ar5//p0P4hV3n2i1QdHtjPgxP/uOTwEAVocFHrywAwC4pTn2wsI1jPNpgkRhoHWs26+HEBEAvR5sLtXQN0Z/lrlPhB5/oZo4cuAu7050TaLTW1BSNw11Suyrm9L59yNS3T3frRNnxyxck9jMi2GTxARg3XNJNVejMsf6aGDpprlF0mMcehdxlRVYA8EGsweYfJ/n2C4rhJzaqOCS8UtikESOXRDTBol7vt1gdtWpSSQkUWyVEtgXOXZBKJEg3VtBwRsHgcydK0X0/u4cBwn72kGsy2aLrS9cuE9ijU6Q2B5rwB0P4s8hwFHqpou0wLiJJC5uFByGgpSHL+4C0Nlo15FIyZLMak037aIhXdufVnjksj7ezEH3knqpdZDEGIdw7mxavoJcpRS2xzOsDAvUCrjaSGlTL7UUMR/apA+jJpEWTuLJSyhpa0xlN6BBnkery87rukNHiEVt9Bw50Qh6H7COxZ0n18x7blPw1D6JRQBFef2/eR/e8IvvA9Cvm5QWyFCNTi9IdFBzyYpeHVHznVHIhn0tBUlsOzJ+0QJ9vBgkcdAcQ7+XVidLz7aPbio7MilKhoCljklOjGZX8NQaGnOjKUdVbXsQSnWC+1Oim2r0nYJEozia95UMyR66sIOfefun8L/+9kdajpSUXNmdzLE1nuO7XnU3XnrncfP6yYZuSntAq742JkhhKEqxtW19umlEm4h8gefNQ0ueNzT8rsXS5EkAyKduShYMgLOuuql93TdGqhMXW5AI5yNINxWCbWKbiHMUxpHE/7CpSaR1w63lja3JBfT5ldcEv3AKN8fY8w+02Qyh80/jpOcmtSYxJlGY5577pEM3XSrbdFMpuJRbrPT9yVh10/49GXi2BWG8mcACSmEoHcTc+vJRWUSDDvQ7dJlUfAsM2m+kmkTXb5SsL7gFHfAF6aYFjyR6axJvBokLm0ESAzfV1lg7FFv7s9Zn02oStXCNlMUBgMev7uFVb/4zvPJNf254zQA1wY7nd9ODmSZc09QkuvVmnAM0rVArLacP6J5jgEWkUpQMDd104SAx/li0cA6NKmdEIOUUm2tqWeT5b1oQUJAYS3/o9rfroVGdrPWdJ1Zb71tnK164Js+zpo6LH+P2vdwa235vA+E8hjLrkvNDCZvrXZPIobJxjbN5RyacRW6Ox2z2tMmSChvVlKbQtGtnYwP4Z7SqZQn6FAVcOp7bXkVSpeWU3KQx19uq1nPDO7v7hm6qAzViQ9D9poNE/hl42wPnAAC3H1tpOVJSQPrUphb2evbpdbz5DS80r5uaRIbupRAObKgFgxtcVrVGBCXHVUJ7FNIRkdg2HTSvrkmtWaTESve1J65pJWefumkMJZbm2aWS63GeMZxDHpkUk8eFEMj263PPsw3INZCExo7KvKWuvDIghoF8/7vmMlAkcZ1gL0Hmt7ktacRxTMIjlCSh46UG6fSdbCJHnqL5zkpAnLvCNd1+tt093/avFu4Tpt5y0URCsN5SYgEJe3dZ+MuWrpe5dNNRgi4Grd0rwyKZbupTNzVBa+Bc9msSK/8DAGiksXZ6kd9sgXHjjDLgQBhqHjfw9eb+rOXMxTdJV6iVXohdyL5rr37zn+P8ViMKszttt6UIUAK7xwPSWmAQHWt1VFi6KbNpkCDD0080QeJ205SXkMSEIJE+mxLsuRt7knBN1aZJxvWOtNnWlF6CtJGPClltq6oVfvSPPoaHGioavUb3h+4J5d/Yzjp0UyBNKKSNJMrX7b7HN1v/pjnKmU+6Z0OZ9fbrIalvgDZE+//GafVs2xwqG4fa0DHaxws58nKW1tLEbjuyjG99xdPxG9/2UgBIElOir/XVG1e1HAD4kB7OKLgN0YS5622TFlGHWthq57kZCGwGqkkkuun5LR3IUVafzew2RomwQZmZmlx9LB4BfmpTBzO3HlnCLWsjvOufvxo/9XVf4IhU6M91A7CYoA1oC7VUyi9kIt2PsYgIJ1wTajivv7/vgLp9Ettz1H99zcQBmHY/XXXTVrBHifUgksjXKYfUZXs96YLBHs1LSPiJNYn8uGBNoiCcRU4wIYlk7v2fpm6aiddaiyKF11Y2AeHrXcusQTFBIsfectEn3/H4eteI5IqnBvVuhwFkxkj7aaBWnws2QgI0Pgp0FALZDWQlumkCs+kg5l7LFPFEOtcrgyLJl1TN/S0h6eae9Lbz6tc3Q9VhJDEv2lC6uSkP1gLjZk0iYy5EHAtPbzZIIhXLR6uUOs595txYg851dYOQi9uT1riD1CTGjKPgb2Np4G2UToIPT29QrIsOksgVUUvmbn5JSKKD7iXJFiurbqqPGbEhNl9P41KQ3FYLDGYBuv+JTfzauz+Dt3/sPN71va+GUjqR4FLZpADMraP6qdd/AZ5z60br9ZgAwN1cfQjw5d2J+ffjV/dMcbso9d381LC0ezfY8G+GgN7c3ADA1LFEBG5dlVL9fZ4xzO+LcazJWeRqYOic5HmGH/6a55v3hmVCTaKhm8r3sU8C3Vczxhk1qhdpwp6aGTvmxkaJ7rmVxGRoLaU2FOcatI+QFB/ddKdZ867tzXDrEeuAScciJJGQ4qedWMHTmqQawF8DfW/5f6dNXNiaIC2k4xnjQQ2Cz43oJHvGBGhznJS/D0l099jHru4BQI9u2nq2QXMMBMALoKScKm2oT5/kWNMzUUjOv3DdQuqm0rmcO468q65MqFYsC8iiNvK1VoF7mWVpNH9D59+dAxAb7DHBdqC/KM3Tfbxj0GYax4m7AHrNWB31XXJpP7VJV0ndlBfl8VIdBZTaV6YA8PX9gLx3u4y0rq97Pc20CsyQ1KvbBImj0iQCY8eRKrx7/O73epViGQRYB4kBTK8rXBNTkxjRAuNmkMiY61z5HLSJw1W+1gSJK4MC25N5PP3QQUnovgj5aBe2x478cSZSmzhzudbu//uMgr+N5YFTt8QgiQ319nm36cDkU+e39RwJ7Yydo4o7/71xzfcvJWZ/yJG0ojzxSGKRparL1i26KTfPDz1yFQDw6JU9jGeVOeduIBHqkwgAX//SO8y/TQ+8qIywdYp8NYnuebq4PcF4XmNpkIeRRE/mkxtngo0AKsIHe2GHMLVxNk839Tvkeo76L0fDldDVlASQVTeVe3e6iHRvfgsgiW4LDDG45+imAmp8Pa2rUljmOfbm897n6PdSkPjktX2MSkut1wERP9HdqQ0SXQdM13H1x5xvgsTTR0bs93HXQEUkIFw1SdrUJTEY37HoeDGoeGqbiJB6sa8FBk9RtRN49LIOEl0krN/KIhzs0Tj3cDF9KrOMo5tS4i5VuEb/9dWaAVxwGYkkSjV4Wdbq00qN3Ys8TvPApZvSp/s9PyPRZobdEVNf3kquRCCJHEvAUgJ98+wq4Oq/qUlJoI8cv+OffRmeuDZujQG4gKP9Pnesri8Zqkmk+XPBpW9cKZSYuIw311xG2jJuXJToUsyHZR4NHtDavTIsosVuAPsMWg0IgW7qS94xwX1UkNgVromhm95EEhcz13H3CYvsTuwFISRxeaiDxFj6oStAQzd0dxHpBhJtJDEPiou45gZS7vG7n/kPH3wUUAp/+okLeOWzTgLQG7BPuMbSTVdx9ugyHm8oQPqh0UFwKJPlzlGan2R0/pYG8cgeHc99sOOypvqvRtvihYOoBQb9x6mbPvCEpXF+4DNX8MV3HTfHor8+hTTOUmrAqtZvk+st3Wfj0s4U+9MKy4NClPoO0X+CtBom2CDrOmmxDmEX4Y5Tkuxv2rVSwbYBco9Lq27atRSpcDpvpPAo0k0Tzz9nrlKtNI6OP2SSAhKKcj3NZRYAcp0gnd+TayNkma6tpoCR5ir5FtsGSZy2aKHSsSbz2ogocMadlxi1UbpfVecZWIQiFnUvd7LdsQqs+rPt1300dJ/AkevwPdkE3yQ+BDQZeSbYCCP+3TUBzTh5TJ5xdNPm+4SB0npQdVgh4jjmPPoVOfnn1GXFuDWJqw3dVCOJ4f3UDTbpke+hZoF72QbA7pj2e5xlTOAcou3SuH5wr5H0oHANizbHoNT94wH2et9zah33nFo374cDDuk+4emOMWtC715W/mDbtmXh/ZJuYtgkrQ+hTy6QXvJE45YH8WI3AIyatpQQsyi1r3SGYd2pKgJJFIRrDtgC42ZNImOuc+W7QXYd4Y7N/Rmmc2WEJ+Jl660jIy3iVCPzL77qOQA0jdNkaAq9IHNiN5zRQ7I0kJHEjzx6FW/8T/fjjX/wAP7skxdNsLe+VJqHnQuKDOK4VOIFZ4+Y13W9XzyS1QoSk1pZ6L/DQnasdyZz/NAfPoBv+/UP4uGLO+Z4ZZ4nISkuvTNFOEhTiXMzTw5J3JtWeNrxFQzLHO956JJDmWiCRG+xvRxsAJE1iU4mVTtM/P1Fz8b6qMT5rTH2ZxWWKfvMzDGkxkbBZXeDmlayE0nWfQaiRSo6m3ZUbRWTkVcIoy/SM+BDEjUCv2hNYv+aEUWUsxS6qZsRlcb56KYmQLmBUGJXpVBK5riJs+MrOjikdZzmKp0T2gN2pxXGs9qi/Vw2GIs1E48J2jg0l5SUJeMCSyDuXu7RTc13hlEiKQnEqpsWPIrijnONxIeAxajk9D7bpy+AZIn1R8GkTPv1UHCTm+u2WADQd+TtXnZsxSZHCEmMZSq5wZyPbupHm+lzaQkIi0Da17rPPz+Or+307TX0ndzzHaxJzPnjAfLeLQYcEckEtrYwgjbavSe1crk4jD3/dDxujpZuemPLDej5J+2IVD95dVTq8rEEf77I5SA4BkksmMQFVO0P9oC+cE1UC4ybdNOFzHXcfbTFnU6QOK9rs7BG1yQ6ClUK+t/dxf9C06D+7lNrWBuVuLg9MbUD1F4iliJmHCJSN2V2X1KKI3vkyh5GZY5RWXjpP0Q3XV8a4M6TVl1zWORiAMzOccHaQoukFOL5f/eDl/Ab7/0sAOBLn3kRd51cA4l5+NT3pGNZtC3u/FPdKkABQH/crKqxvlRiWK7gsSt7vYWF7e0UqKOQJKo5q53NlWgh3f5HNE8AuM1BjZcbhNov9R1QKRV+m0/dtOvIW6dVHNIcr0sbbV4P0EGAft1YTEAKdKmEyuvcaWXBuHur2wJDQhLFeySBAupeS2nczHNPWpGu8LEWNZf+BkB0ElwU/uT6CJd3p61+Zb4MtLsHnNsamwBdCixDzcQ5hdkY+ieHLlV1gGon3I+x9NZUtFNucSMLU0koCmDXhfWl0iQoT21YJHERKjnNk6u39A3LBIfc/Q294xhkVRgn9kkUgu1AcCPWijvPiYugU6IkuibROOQAaj6w0cI18nf4+iR6gxQmcWd+VyC4587/ouq+UckVie4r7DmSyFcMUt1DH4NJquZzzHWLoTKLVPJukNj8f2zrsEXNUI4zQhIjg71m3iQoNq1qr3CeOV7DJvFRwoGQD8T4aUpF0k3djDcpdX2eIIlZlv27LMueyrJsK8uyT2VZ9j83rz8jyzKVZdmO898bnXGjLMv+bTPuXJZl/6zzva/JsuwTWZbtZVn2Z1mWPf2gcyW1r7VR6UUEXSRxZzw3dFMgHkl0e8BJiz8FqktlgSPLutlt1WSJSUkplrZlkUQ9z64cMwDj8P/iN38RAODtHztvaj2kOgrAIonrSyVuPbLUfF7XP5qFLmKetTPHlJpE6yTnYubn4rbl+lPwTT26pNoqzlyqR5JwUK1M4MUVsQN6QRoUOW49soQnr+23aDxAAEmU2hsYZyt+s6c+ie73u2aDxCU8ekXXBJFjUWT93xbTpLhg6Dizqm6JIXDWLdKPqWMB+ghAjCMpoj0hJJERruFqSdtj4ikyvR6oAmoWEg6KeUZbDAhBNdGXITciRTfQSeiKBBQC4l85dEdSOHX7leUM2kC2M56b831ha2xVSjNGoQ7xSGLb2Q3fx1wtUTD7zwRtMQER0H++Q6qVNIY+65pJAvmSCdz605xgah+yNMhbLQS6SKJVyfRbF4GJqonjaIsBOmCIli/WJBpkyb7m0r8lM+MEJLfIM5xwgkS3BUxan0QXSWx/RiGANjN+QgyVk1uTQ8E2fSe3boWRxP4zqr/PO4zd821S3F+72l27bDKXPxaxgFpjlD8AJsVvDqWOovuKaHq/BQbA+5/X07p005R6e8CKl8UrjOtyDokBESNcw9JN6xi6aUe45jrVJB4m3fQnATxDKbUB4G8D+LEsy17svH9UKbXW/Pejzus/BOCZAJ4O4NUAvjfLstcCQJZltwD4PQBvBHAcwIcA/MeDTpSc39WRn49MWeSVYYGdyRyzucKw0DU6sciSW9ibMwsk4KqPZTi6MtCopdNXShcoxx2P6F3GkRSQxGMrA5w9alX3Lu3YdhYAv2mPZxWyTH83qfe5dXT6+OF5upTYWsWhX+6chqVco3lhe4I8A85sLOFCQ+Otaz9Fhp2js7GmCAdRuw0ayznk80rfR2ePLuPJzbFzjzjjehQlP/XE/raE2pI88waXhBSdObJsGpAvexQhQ/QYfUyGtljXXhQR0Ituux5L/w06u4Ijme5cR2SfSbjGeQbmAUemSKhJpOlQTSK3dvmEC6S+eZzNnXtEcv7tBt0fb+jPNzBINDRtem48FFBAX1eqaXORREmEBtB7ACXELmxPzP2fZXywHXJAOZGKWqlgZMPVEvmoxXqO/SCF/pWaXIlBO6X11Ye4+dZk2qdvWdOBzXJHJrEX7DV/Y4LZ9vm33ydZl5Gg5xxe73y0/BAC6V5rqfardSzBv6ic4O7Ict9p1HXR4X3DPU+SSE4IcaZz7A5TEeefu09iHHKuTcS8DusmLJJIoHmmIomicE0guMwYRKqq/b00AZ4qHwouxQSQUG/sa6V2Pc29txepSSS12RRV1MJBEjkkF/DTTbkWZ4sJ1yj7umSfS0iiUuoBpRRpyarmv7sjhn4rgB9VSl1VSn0cwK8A+PvNe38XwANKqd9VSo2hA8oXZll270HmSjfE6qj01sSRcM2ZjSXsjOcaAWpQs1hkyV3cuV5XQLtp6pHlAa7tz1rUEqn+xXe80aBo/b9rT1zdx9ljyzi+Nuy9JwWyAFrCJRZJzMzv08eL2Gw6aGfsuWwjiUKQuDXBibURbj261EYS80ThGocSWwo90TibOwEPV8QO6N9bFhluPbKMi9sT09ybKMZsk9zAhliYRSv+t7XEfJjzSYg7oS+ApWdwTlM8ktgJEucqGCR2M7sxjgW9z9Uy+rxyjtpX13Gqie1jRCCJKfWuHbop9wxQQoSzlPvfnbc0zt5HHiQxMrm1iHUbF0uoLKGrWZaZmrZWvz0m4QFox3BnMsdtR3VCbF6rVpJEorb60B6pV24sldk9ZBWJ7rECHN5RfSe5VvEKrAvVrnLnsrm/CUm84/hK6/28E+xZR947zV6AH5M44uu/9F+vmAyD9oTWcl9PwNRAyv3/ssjY4MhHed+dzPGrf/kwZlXdaoEhifLo+0ScoqU7Jt6TXAAcovvSexzaFkQSBSpz6vPmzlPWE5DAg3Bw2QUP5gFEUH8ff0/G1bv2x7nvk6VoJBzE2gKDKTWJeiD5M5OIIJFalbnJdY5urecTr9SuvzwiSOwK10TVJBYIrfaHKlyTZdn/lWXZHoBPAHgKwFuctx/JsuzxLMt+vUEIkWXZMQC3Avio87mPAnhe8+/nue8ppXYBfNp53z32P8yy7ENZln3o4sWL3nnSpqXppvJNRXTT0xtLGkmsagyLDMMiXu3ScrZzdoHU89H/30YSLUe627PHezwHpXOP79r2eIajy0Mj4gAA3/HKuwD40Yb9WWWcpDNNkHiqcbqSHFC1WJBoahLLQnSsL2yPcWp9hNPrSzi/NW71IExRXHSRlEGgBca8qs294tLNuCJ2QP/eQZHj1qP6HD54QQvskPLcQtnnPOO57o198tw2fvYdn2pq5GCOU3oyfnqeGY6v2GxUy0kWaGV+JJHbRP0CHADntMY5hBIFxe8Qto8BAArhzZerN7PXTXYQYhNAtgWGzBKgwnrOkoRrnPtfZkDIWdPUdhsp9kd//SSe8X1/jKt7bfaDP3DTn3n2Ga0qSP0MgbbytGvjWY1a2Z6HALA0dJB0Dkms/A4oRwkMKUICwj2p/LW1dDw2uRI4YB9JDM9Rql31oWB+JgPV8Ov/f+kzjnfm2KffAnHqpnx7g0CwJzAnUhHIeKVq+5pCeL2TnrlQgOmjvH//792HH/vjj+O9n77MJxc740KMCx8FOqZO3L1uLookGYe2hSjhNM9uTS4QkVzh9sXaf+2knrJuvR07jilDikH8WVRc+dcEju4OyIlhK4B4OEhikTesnMj9xijllylBov5L9Y9A37/27Ylk3RY8+ssj6KZd4RpTkxjqzeVHEw81SFRK/SMA6wC+FJomOgFwCcBLoemkL27e//fNkLXm76bzNZvNZ+h9973u++6xf1kp9RKl1EtOnjzpnadBEoclplUtUjmJbnrmyBK2xzPj3Kdk/y1KKAunuMIdR5YHuLbXRhJT1E2NcI0HSSRKwrKj8Pf9r9PKqr5gb39Wme89sTrE97722fi/v+1lzRzjkSz6vUtGyj/tt4XopqfWRzi1McL5rXEr05UirlM7i5+PjgYAb/yDB/C8f/k2fODhy5jOa5NF44rYAWBaaeSMlOYeaXqAERXI2yfRQyUpPYvkV//rd+Nn3/EgLu9OWwIEXrrXXN/vxxixAw7djpkjF1xSEO+zRRBBM082uExzZKKQFOYZuJ41iW6SBOApMj66qa/eWDpWq09igvOZkjRKtTe97ZMAgPubVjJG3VSghbsUUOrx+tlLu+b9XLgG1CPRVdQ0wk0cZQhhB9TQ9Dr3cujeyphrEKKIAXxtYYxxzcRj2mYAXBLUllz05udJXNA1+dovOovveOVd+Kdf+aze2K4CMRDjJEv1zb4xHLtD//Wudxy1z0G2OaOXuTYdiyCJLitGGic9p39831MAdGLZfd4l4Y5ahYK2vsJ1Sk2iG3MsvN9EBIl9lJpe9w4TkMTae72l5EoIKe3OEQgL0NDxeghwreBjqUrPqb0GfJ/EG1luADh1mw0FOr50Sf8lfyaGblo560TofISEa1i6aVDdtCtcE4EkAsG6xENXN1VKVQDenWXZNwP4LqXUz0PXEgLA+SzL/hcAT2VZtg5gp3l9A8DY+fd28++d5v9dc99fyCamJlGfnlmlMCz7T0gXSZzOKUhMQBJrCgDl2h6X131keYgtqkksbIY8mm5akSMpSxDPa1vL8tUvvA0vv9NmaKXFHwAmMyvck2UZ/tGr7jHvLULlXPKoNPrG+eimu5M51k+u4ejyoNXP0s1+xsT3rkx5WWTYn8m/66OPXQMAvPWBc9ibVlgbWQVQ1pGsagxLjRoDMKIwG8u2vYQso+3fELnzX9fKLIKPXdlr0Z0GntoxSoocdRBnQlJ8GdMQ3Y5zYkIZ2i5tKHbTzvNObzmqYws4MjQve7wwksIJ14RrSXV/0RDdR3+v/jss5WumxUzSnBHOXFGOMN20fzwSSLgRQSI1P/7Ueb0N0O8S21I4dcJ33qLzkq96tk0kSkk4WpdOrPWDRBFJbESyJOPW15jsP4cu1cpfj0Xj+Ocm5Ei2z0kcQtFHewB7DwyY8yJl5AHbHmljaWCSmN3jsZTAYDDL91wNBWDSvu1v+cCvkzHiRlxw76dyCv5Fh+Hx3u/78tZz4uvVOmioqJe2J0bZPc/tGeb6JIasn7jTf31XjUuuRFFwGZqw6//Ic+wG6c2xQsFlztXqhymx+nNSwCEFiTzdMaqXI/OMhmpr6ftdk1BxSze9sUiiuwf5kuS9cc3nLN2038+6ay67xqxb0jVLXEvi6KYd4Rqim4aCywCS+N+zBUYJvibRJPyUUlezLHsKwAsBvL15/YUAHmj+/QB0zSIAIMuy1eY76f2FbDzVJ5ec8llVt2pUyHamcwzLHMdWBqiVVvccFDkGeXxNoi1uz9mNXh+fNtEcR1cGmFY1ticz86Bx9RBkv/yuT+OeU2v48ntPA9AbV5ZZR5KTIHYXhF/4phe13vMFUhpJFGhzCS0YumhnfNGw/jss5RrBWRNcbywPoJRt26Gd3eZ7Ijay2ln8BoUfSbzQKKre9/gmdidzk3yQCqlnlUYbCTl87EobSeSCvZgMldSqg2h5APDY1f3W5uOrSZxWCsMyx1FH7MBVN5VrL9KcJoUwStelDcU7u1JTZM8YJkuokUTvoQyS4l6DmJpEgHre+Rf7rrop2wLDhyQm1AmapsAOapDaAkAKpA5iu5M5rjT384cf0ckZWkdKX+BGrIw8wwd/4DWtpuJlnntr4taXSvNMLreQ9P78wkgiFwDEoNT02fa9HLone89NBG2R5tlF0mNEO4D++uptleJjMjSvcQlcM0eOEhhKrPcCAHrdnzjq9ZbzJEnssbiEn79NinXI7WuGWRaFJPrnSTW27jhpf1sblRjPpri0M8Xtx2w9uphMjrlPeucyHOzxbYnC55+9brXyKqLSd3bvfyBMNy3G0Ln8AAAgAElEQVRYPYE6GDToz3XGBX6fxMoJJ04ZJDEQXMrqprxwjWmBcUjqpiRcE824a87bcoIPGkO3DokUAdROR69XmYbVmzdShWsiWmAAnxt00yzLTmVZ9o1Zlq1lWVZkWfa3AHwTgHdmWfbyLMuenWVZnmXZCQA/D+DPlVJEI/1NAP8iy7JjjSDNPwDwG817vw/g+VmWvT7LsiUA/zuAv1ZKfeIg8x03WYONRihEukGm8xpLZY61pj3Elb0phmWGgacFQ9dMAJhnIq/bpaQea9Clt9x3LogkKqXwE2/5BL79Nz6ET57TWfV5rTDIcxNgcs2sfVkjXyBFwjX8uHg1QxskpikgWuEO3qmj7y7zzFxbEoUp8zS6qZsh8/VJ3J9WRhn2/ic3cXVvamTaJbrprKGbUlD4aCdI5JICMaIwOovZv97UugTQASk5l5lTk8g5CboGN281YPapm8Zk1rnWAbH1ThxFKbkmq/nrDRJNJr87x7Dz484NCNdp+vqSds0g6R6adlWF1U3j7n+7JknOZ1BMKWHTjrW3PXAO03mN244s4X0PXwZgs8FFnrPJjq6YzKmNJRNYAvoeYoNEBwGjZ3ppYB1lrkzBpbZyxgnXqAgkXUa3Y5BExtmNQAV7NO1IJLFfTiEL15h9iqObemiqZo4LJo64YMOP0vWvt9QjrnUsJnERQrKMn9Bat8LBvbR3h2ogyyITnXl6/eL2pFUDKAvXxPTT7NJNYb5XMs4pjxEO4nQBopDEznND538x4ZrwHIH+dQshpRxzIn5NaL8WUkqWwANpfzMtMG4Ak8S1bluW1NINt09i7Jgiy8S91FK7w+JlZmiMAA3QF665TnTTw6pJVAC+C8DjAK4CeDOA71ZK/SGAuwC8FZoiej90neI3OWP/JbQYzSMA/gLAm5RSbwUApdRFAK8H8OPN974cwDcedLL7U6KxWCSRM0IYyUFQSl/8Ms+8TUI/+JkrpubFbCSFiyTym2iZ5/jK554xr/salwM2AAKAX3/PZwDYAFCCw93PcCYt/kC7JrFrKQ7oosI1FkkpMK8V66Tpnoi56fvoilv46l+kOdI46Xc9cU0HeK97/hkjdOEiiVKfxGGZtYLEMs86ARifsfNlTaX6NjdIfKLpy2h6y3mCFE2vznBs1RGuMXRTX32CLyPM1LFEKofyPdEiHMKWIxnOWnNOWgzaw6HpoXNC5z8m49pXNxWQRE/Q1p2fZO3Nt318c6wQkpjFb9qx9sCTW1geFPg5hwFB7SyK3FODnejIA+11mdBb3zMKhNVNubp0TeUMIYl9J82nZEvWdVpjpfw5xctYJDElwWXQd5ZxEX52WEqmd5Z9dCkmuOQSfjEURE6kIoRkcb3sYgIpae8OBRss/a0x2psv7Uxac5Ap6JFruXvdzPw8YxiUOkY4iEfbYltg2P+PTUBwTJmqrr3Ho/WCqxME/P00u5ctBvHn9uAg3VRgoUj7m08Q73qaEeEL+Gldo99h6Kaz+BYwWSbvpTHCNb1zGStA0xOuoZsyhCT6CaWHEiQqpS4qpV6plDqqlNpQSr1AKfUrzXu/rZS6Uym1qpS6VSn1LUqpc87YiVLq25txp5VSP9P57ncope5VSi0rpV6llPrsInO8vDPBM77vj/GnnziP8Yzopg2SKAWJc4UytwEHoLOhg0JGEt9y31P4+l96H17903+OT53fNg+Jr5k7bYbDIsfx1SG+5gtvA6Az3gBfowYA57cm5t8ff2oLAEx/RZ9DWCnZafKNG898SKKMSPWOb5DEVLppc55KOUtFgj90ba/tOXTTlEDWyZBJQTqg6ZsA8IaX3G5ec4NEnsama/2WBoX5LUeWByYI4dRso9pLCJs9UW4BTdernE3SRwuhmkRqzQHA1KX46KZe+hUTOMcoh3briOifIYdEog3FZK3TFSj791eoTnOQkHGlS+ulm3o2e6m5N9lkXuE/feQJjGdV634Tnc+Ak8wp2R7UZlWNpUFumAIAsDJykEQxcPM7aSzd0VGdHpog0VWcXiAg5YK9GCSdcdJi6KZdpzX2cvQc+Ui0H+gjzn51U5nxQvf3UPC4ZOGaUDDbCcAigpSMpY3Sb/AnxTgkK6oFQyLaac6lsC77xLOk57QVJDrnySLi7c/HrOXdgNsc2oeSMmuQGyBIljHBfQQojiJD7/4HImjazL4Yut6S6F9MP00ucRETpPfqhpU/2WHoppEJIKN1cKPppiaZT0nyNF/S0E1j+oQ610NMkgT2e4Ch7kYHiQUdpPn7+YUkfs7bx5og6hf/4mHsz+LoprOqxqDMsDayJ3lQZl56xrsfugRAL0Rvvf+cCTbKPBN53S61CwBONkIJp9ZtewnOITnfNIu/++QqzjX/ruoahROQSs3cRcfOM248q1qKqK6ZvjExohgmSJSdXc5c4RpAQA0qHdjTtXWRRE5+XpyjiyQKQTqge04CwHNvPWJeW2+CRKmWdNbMEYBBqd1ehJyQRkwAVuQ8LXbbCRL3plWjZEZIohykUJAIAB/8gdfgF77pRWa+PgXWEG0lVREP6DtbsYjIIs4WVzscg/bwlCi/g7ZIcsXUG3N9EgNZcqnhPAD84O/fj+/+j/8Nv/W+R/i61e49GaDbSa0lDmKzpjXQmpO4ozpZuSbR32C66xC64wD9jJB4zbJTk7uYumn/eseg1HxNVjqSSJFUOk01QhBDUDd16/K54wD9YANw90WZbtoNtoEFkKzmn6F6v+6tFYtkcUGb7x6xc7T/H6UAKp7/ULAhl7PQGnNpZ2r8pGGZ2/pmBkkMRWBZ1hYTUxE1idya7AYI4jjmOY1PSnL3iHcYmxgLKY5K180tC+GME+WJXUu44MarbhpAqbvPtiljudHCNQ5KzpXASNYNEqOEaxyfMNTbMoq6a5DEBLqp+3lVA8giMuU3g8QoI0SpqhUmswpZ1lY35WzaOMnkGAM6q+lrrn7f45v4G/ecwAvOHsF7HrrkKJc6dNPO0C6thhwSOm6W8cEXBYkvvOOorhmoFWa1DkDomeV8tDoCSQz1SeyN89S2dc0EiUbdNM6R7DvJTPa5URck9JeuewtdZU7KY1f28IO/fx++//fuw7yqe06yhCQ+fnUfgyLDqfWRcVZDSOK0ST4AljL83V9h5d05IQ2336ZknGoZAGw1dNNT6yPsTyu4amu+mkQSrgE0qv3VL7zNvOdTYPU6ydwGFRFILFpb1b0GKmIcTb9Lbw1mn5n7K6RuavrERTwDrpR9mfPiWS6VmDMfKv7hR68C0HV/7rWUas1CfcpSakRibVYpDDtrsqWb6mvNNZheCEl0kne3NqwOSppIa0JIlITrVakQI0DDJS5UsCa36zgtiojoJEn4WO4xyHyIm01AcEhiOAnhrlsxzzYg15v5fp9E0fPNT4/r003jauI6NZAmuJfHSPtbSOBFah3j7ssXtyfYawT/lgeFvJdGJtNSa0lNCYAb3EegNmz9XQRNuys4ZESRIpIynLqsv0ykr4oNhNfyrJMkaSYa9Zx2z0mYbtpffwAPkmjoptd3/e9az0+LRBLpXKe0wHADUqmdXYxwTY/RRkhisAUGZWYoSIzorQgEkUQvGTXLst+CZWmIppT6lvBMPrftyWsa8alqhfG8xlJZeIMNen1Y9Ommw0KWjP70xR1840ufhiu7E3zksWstypLE66bjE0TffeC4hQfQCzcAvODsEfzeh5/ApZ2Jaebso1b66mZ8gdT+VK5JXESAI7UmsVuTJWX/XbopBWGt3k7MuH/7ns/g33/gUQDAd77yrh7dTlp7Hr+6h9uOLiPPM6wMS+xNK6yO3FrS/ph5c18BwPe97l4oBbz2+bYWNc899V++PolMHRFgaxLPHFnC3nTeoo75rttsXvupXlwWGYEAjEOXVIQAjVjHEs4Iu9cgBoHk6JU3GkmMem5q66hwjp1SSqNLgSCdSwBVtcLjV/Qa+dePb5pnsoUkdp3PCITiegvXzCudBFp1GA0rToN7oI8cBtUkJeEaIzqW48wRHSRe3rHrCbcmhBxCjpIZV5Oo/3bRvfD93x8DRKANeR9ti3GQARlJ5OZq15/+97n9g9nj5W2VwDR2gf3/GCTRJybmrUlkardj1DX7DAj7umTS+Q/RFos8F2vnAc1yubg9wfntsU6SF7bVAJfwiwtSuHvSM4ZB0mNQmyyTETrvHDsJ15hAFtB78HjeT6bF1Ptx7RRC43h1U/8cNejAXbe0IF3/P58EPawWGG6iMk24Rv9NKXlikUQh4e1N5nfBoli6KYckhgJL4MA1iQ9Bi8Z8GrpJ/d8BUEAL0OQAvgbAtfAsPveNgsSre9Mm2MlNkDgR6aaqhyTqPoky93kyr7EyLLAyKrE7qVqUGZHXXemFlW4e+ku0SgmRmsx1k9bbj60AAM5tjk3W3FuTWCuRouGvSayDwjUxDylt/sl005qCRJ5uR/SYMs96wjVlIT/YQHuRuLY3i27S+vjVfZxtJMUpOLTqpjw9o1bW8fnOV96N73pVu1MMJ3gTVZMo0Ia29jWaenJthL1p1dp8fAJHMwfx7FqW9bORMVLmEpIY49gxifUIatniSnqp9V/c/RVy0Og+iHluamW/Z1D02Qz0FeFemv3Xz2+NMa1qPP/sBqZVjccbGjUJdXV/F2DXsUVqnRY1er5dCqKL3LvzItOBmx9tYGn5jgP05feeAgDcc3qteY1HwEPUVo5aFuu00mftuDhqWRs1o9fDx+srqfrHcAqsgL92zI8kkiqqfH/psao5rn49qgdk4m/TtdTt1+rA/a+PxQeXPicS8NBNA3N0P2vGhoLETFj/mz2RWmY8dmXPURLuJ9Lo2CExsUwMgOUxnF9i9ugQ3bRzPhTikiTtREL4/AN8YiwU7PkEh0LjFg3SObQ5JgERK0pl/IobXJPo3tsp+00XqJBigPYY/df11RcSrqGAm85ldG1hE4eQeE19CEiiUuqH6d9Zlr0NwFcppf7See1LALwxPIvPfXtqU1Mzn7o2NrRJA4l7kMRBkRknBNAbVlnk2J32Ocx1rVDVOrBcHRbYncxbMtkSr3vWKHKSfcNL78AnntrCd75SBw8s+gJLo6LaRU051Zl2n0hF5dmk5GywwrSqg8I1UaIwPSQxLfsjCdfQ/xZ5bnpOUnLAp8gG6ACY7Ore1Fn8ci/d9OL2BC+78zgAK+oy9AT3brsTyfhmt2F1U0m4Zns8x+qwwNpSif1Z1cpsSmIHNFe39qt9LD6LSfOXjGs2HJP97NK9XPVNn4l9Er3H6t8nSvnPvTSucu4jdn4eJ7lrleMAcEFiiNqq58ivCY9c1iq9X/rMk7j/iS18+qJWZ85z2fm01BoBSbwhQWLdQ5YoaSQGs3VI3ZRHUuYOC+QVd5/EB3/wNTi1rhFFqY5rXiusRMmft++tcPa/k31GpEMo3P+hqLQv+BR2/iW6qe++9CUX7Vop1CQ6Ca6ySHPk+6I84fVHcpBTHfm4msQuJdl+n2RBJFGkhUvCTfr8nz26hI8+plW43T65QD8ho7AIlbm5boF9o3u82FrGXpAYkxToJHgNkhhD706ku4uCQypcOrBITWLBJHjj6ab8HtAdm5L8PIi1Vejl1mi9cc3nfCKIXXOBAxFJrCPuya5YnVmTY4VrHCQx1CMRuK41iV8M4P2d1z4A4BUJ3/E5a0S5m1Y1zm2OtbJkc7G8wjWFRRwBfVMN8oyF0d0altWRdshJSXVU5mKQMm/qbMjWRiXe9IYX4tiq7k8nIUREoyJHfnc6x8xFicRx8qYozZEKe91z4Ron/y8ZOTqL0k0lmnA3AHv68RV8pmlFUuY5K/5ANm7qVAFgc3/WylK6VKauXdmd4nhznf6Hu08AgFED5YI9ovBINE6ADy5jC6K5zN3OZIa1pRIrQ41u1871p+vNXYPJvO+Qm2MJWUwgJArDBZdx9X5dxxqIcAjzrkPSvB7hkPSofREOAtBBEiP7JMYkSlxnlqX7UmlD4B7hnlGqb37FXfoefvjiTjO/3Js4AnzOp5xcWdS4IDHr3MucSqCfAso7M13hFAoQATlxFw5IGUQkAkmkr0wNLnvzdLLh4XHOMBXn/AN96qivJi7PM5b+BrT7VHJWdp7TyPi31zogLknFOOQxQSJzn8wDzdW5cZZq7h8D+Oqk5PMo1c4DwK1HNJL46JW9Vlsud16ADr5UTJDC3FtAXADcVpwOj+u2O6FxQeS+s3bFJiW7CDDN2V+nrP+yYjKBdlLdyxaH+HMIsJ82LYouCloJPq2D62mxjK+u0ed8IojSGLdOX1KkjemT2KtJjKab1vZvFJJ4/VpgfATAT2RZtgwAzd8fB/DfEr7jc9ZI0RQAHrmyi9EgpiZR9RySMqcWGFzmrQliityIKVxsalhWR6UTpLTHUZ2NZJJjR84PqWluj+eoKmVqGyWRinktH09CDUIbtk8lkzs+sFifxDyzc+A4/IB1Hu44vmLahLQpuP3vHs+q/4+9d421LcvKw7611t7nnHvuvdX16mr65Wrc3XQDbTcCxLOJTUMEthTkOIEIS8QojuNECkqIHVsxWIqFJVs4TqQosWKTOH+sOAgpOCFxlETmkcSY4E4cFAgY6AYaupuuoqpuVd17z2PvvVZ+zDVfY445xzf3PdWpNndKV/uevffcc+6155pzjPF94xtBnOKVBwJJrDjbD6/3uNgd8Mwd5yT+e3/og/jvv+cj+MJnb4cxC9qokWcD1Bww99iut1RXUz3ZjDg/mXBxvc8kuZs5iYd6TqJm/MTDvjpF9bstsA9tmaS/ENfDj6fmvzR2xmiQx+d6kJS8lte6jmqGbkcJjMy51xCKYIy356jtCS+tubsfeudbMA6OWuY/yzI+6zS2m0cS9/PS2IPWeR7KeVpiMq2cRFVwpYEkWk4DgCLfiUG/AC0nsd2vRBLzz6v3k44sQ9Fb31usE/fYFqDRrn8UfVPnKIICy9JWgwzzLL4bVzZgXnLqOhW4G0qaaioc1h6vL7hVQ3ssWuxYuf7ennn7mo+7LMjUzeVewjrp0klhEOBacAWwaKr69egVrmG3sWks1/++EZR3fco9wfez1tYxqRuanXCYDXVTC0kUnb0NyrLEjm1xP3M2aK1+tmz+PUwJqlcf7vAPP/5SUTsbUJztBFyotaLuMF0CQwjXzAcb2gZuFEn8bgBfD+DVYRg+C5ej+BEAn/eiNYBzAp5djfnffPkCt7ZjWCAW3TRtT98+cSUwlAjJPkGyfO2uF193Efpb20mNBgNORdJSrdTWcKC2rk7ig6t9ZqTURCrmxiFVjQYbBuFGHNitFvngbSRXNk+TjPQMQbcLKrHu9eefOQ+vuRs7fo5sl/sD3rYehvcudsWGoG0iXsTimRVJ3EwjPvTOWApDM8hjnk07sbkYjzBkaonbPgfm/GTCw90BF7sDznzZgIrD7ea6VJHjNpLYjkjq9B/rYCsNZIBAN45AEjXkjHFkVSSRVTel7pv4OVpuYUAMWihpZU94+cEVpnHAk7e2ePr2aRJcGU3jsy6I8cbQTWv0w7os+WzQvep0fkB38GvfzRTJURERzrBz743POefGRqR6c9tiv/S+4fYfoLz+Qbim5qRUHO7rhO7bHG9930w4275fNyK7vi4RSMBCYPTr0QoK+/Hkb+0/r9Zqe4lFi62tf38uP/fEWdhnz1MnUaBm/hModdNOB1gLsIf/N4bTEGAG7SxtLntvBfQzf56NEjyV382xV/rOUhYV1wJ+luAZgCLgUctJ/FyVwEgDlRtlj6z2W21JP+3W+fvtf+On8Z0/9DP47TVlbRxi6lgBVISATNueB5Iz4FFKYFB005Pmy7STuCzLry/L8nUA3gfg2wC8b1mWrzu2eP2brT28PuD5Z26Hv8+2UzDUa0mr1wrd7v1vu6PmAwGRnpGK3bzw2hXOTyaMYz0nbq84o2mrqu+tDuH5yYRhAO5f7bMDqCZS0aK7jBVHyhJOiflYTAkM93hMCYyUDy77xXIj7nUv6OOfqyWIA0659fbJBnfPNrj3cBeKO3tqgbaHeOXUp2+fli9CN8j9wduu23bc5m8ZrrdOJiwLcO/hdaANWTmJrehzgQiS0e6StkXWNlOcRMsslOqmPQIQUvCGyX8EajmJbUOXOUwPczTUa6qJ6WfWxqsFPJ46P8E4Dnj2zkmouzoNQzVwZKsmvjHCNX6vTINAbrxKbg9hpNWCK4B+4Nf2BLZOogxcMIqEgAyUMEGS/tw2oNyDFrIPoF1/99grcLRf95+aQS+DAkz9O0ARTpkZsY/1vZlzQyp5Kk4blZM49/1utfPNFK4ZK+kz63NnmzGccalwXU05l0G3ex3gsXL93Xjta3KcuEt5r1lj+dfV37uTSgt4dM84S5XvxqLiaVsWq9zGOqdKAEiurVbw+SZbWHMN+1prh9ld92Hwgjf6+fvgao9f/qxLvfj7v/iCG2sYIk2+Yie3AL4iNYsugeGFa3pLYNwc3dSNuyyfBPCzAH5rGIZxGJhZvPnbxe6QGRW3kpzEmpPi1B3zr//80+eOHmPQTb2IyQuvX4X/t6icbUW8Sk2uVelvGAbcOdngvkASR2URe5l8C0lki6b61rMp+M/yBw7LW/e0MY8kyN9AUvve9kR03qxNxCm3jnjq/AT3Hl4Hx8IjkFof7yR6uqlsLSSxNyfxGGqZb16W/3y93i/dvy7KBlQRyEZOYg1Zak1Tp5vy6qbeMGCorW68440tiaQwBqHsx0Tx0/e12rK0841T9LvWtDxZwNFNPSL+1rvxvrlztlENNMBO0tei+I/a9klO4v/yvX8Av/QD3xpeq0nJM3QvXbgmDzrlffQ9waS2VmijjGEHlDlg3cJN/v/EWi7FXYw5Vilp9RIYfqz6/tP63fKgwLzYwSZAc1IYJz13SF0/G8mtU/v6+nH53kYwp3H9WzmJJ5sx7AklkqjN0Q549OYWquwOMigptyCW3q1/t3Y/FUlc+gNH7m9rL9dyEpk8ZeUeNfaSGr2ytrYi3fRzhCQOfU5iqjFQ238AhNqgAPCx33h5fb/7W6PJz8a9BiT2RTfd1AvX7GM/qgTGDdFNh2F4xzAMPzoMw0sA9gB2yb/P+3Z5fcCTt05CuYKzEy4n0RvzT527C72ZRmw3o+pYpnRTX8frxdevYt08xUDw428NeFrjWacO4Z2zDe5fOjVV/1na5s8iGzXhlJuo9+bfc+ukk266UiKiYS2Ea8QcU6GJFEms0U3PthOevn2Clx5cZxGympMekMRz3UnUkthjbmebbiovozOACNSsZrhOQwhWvPzgOjjoMSex/A2c4pk+lra2KNrQWFJWqO8m6EaMsp02T8rYCusknSNnEAI1JLEWXOFzEtODXFuTLJKo002vQ7Dj2TvRSXzmzoktXFNzgCt1Ox+lpdT8k82YIRveadACXBYFVM+Jy4NOaasqThPlNtyc4nPHrH///27hGvF5bD9mjtY6aZ0dteBWUwBCBAWYexQ4PicRyOmmziBv9xuGslYuhyRKcRd7v/MfWdsXmsI1yhrxJTBOpjGk6vgzxH+e5rRRjpQIdlj9amJiQPs3kL81QAYl5foPomDNbmrwzl7HtfumTZNXz4Ajg8mHuU2b1ujufs7jUPb1SNsbXQJDq13IgA5poGYzDkUeu2/XyUb9mYRu6h/rpco6fm+2BIYUrrmhEhg9KODfAHAN4JsA3Afw5QD+OwD/esdnvCnbsix4uDvg1kksivzFX3A30Jba6qbuPT/xZ/4gfvbPfxMAYDsOqmOZ5pv5PMEX70cksUrbUgRy0lYXSYh0wNunm5VumtfAq9FGW7L1gBJpIlUaa0bhJ168Hw4DP6fTTrqpj8jVUEs/R3+DPpcgIq1kY8AFEc62E567e4oXXrvKKFK13E5PU67WjlSS2P1aa9KLtYNtsRVAa7klTvF2DHmyv3P/KtBN/TWpBT1qm52kcQJ8tLuQTSe+m6R7MUqebi79AhD+Ky+iH4skpuMxlMz0fa2WOgXammSENLToM5Cr9HqD8GQz4u7ppm7ELPl3KMfiixuzbX+YcVKp3VnNyTIct7GGJDYCOjWU1HRIVTo/g9K5x2MQyGMpgb05iVVhNuPMmcZRdVIsg1cGBTyzxmrSAViM3C83lnvsFfPRauXOhJNYQ9taww3DUNBUAZ+T3nYA9HSDdf1vRrz1Tkk31XI7AZgCX4UoT/J8dY5KACJek05Hambp1vFvH5Sk6isqQZK2kIkevD4sRsBPAQ8oUR7FTnC2VaNPJQDRqvm5XYVk3ogW2AN+b+lEEtMczBaSeJUIXr74usvT97a9RpNna3dm8wxIokU3lSUwFjIn8ebopl8H4F9ZluX/BrAsy/JzAP4EgD/d8RlvyrY7uPqFt7ZT2L6+4vmnA5W0LVzj3vPk+QmeW9UvN9NY4fB7o2II6OFhXgKqWKNttdRGXb9SWc31S5DEU083jZ+lRTospbN6raV2Ll3L2P0nv/06PvrXfgr/2U99ws1hfU93CYw1+uM3JRml2ok5PpMgIre2U3UzBoDLvaObPvfEKV54/TKjSGmOjZtPW5TkJoVrFnComXb9Q6mUdXObl0gbapUumRuH1DSU65GJJGs5IsvS3lTdZ+bzpOk/0kieiah1xSBhkcT0NziIPFnZgmND3ANp7lSLJdAyeGuo+MPrfVgfb1v3OZ+zUau5yqz/G6ebNoySqMKaX0vLcashKVZ9v2qeuFEDFSgdAFY4pcxJtI1d3bBudlPQHo7GBihOkXHm1CL5acCz1g+I95tVV843GWCZl+PUZemcxE76odaPCW75fqWzYYiSVM6N64MzRrfTiPc+dweAU/72rUbJNAMeRwQu9FxeIihZcaSsH1wikPT1H/TrzwiZaA6HmTpQ9AHx3fop0LV819Y9upn0XNdHbf/x3/8VvPfP/z3sDnMI5qcgACue6N+/mer1FT2S+OR5ROP8/zVVYEq4Rq7lYDhZRpCPXvfmJHTY2G4AACAASURBVN4ckniAo5kCwL1hGN4K4AGAd3Z8xpuy+fIXt042+Ev//Ifw7V/xLnzle56KdRI7SmAAWNVNtchbiSQCMfJQu9GuD/XcLyDJExRDHhIaw92zCpJYQxsMZKNMUI4Rm2Y/5bq8dN9FYH7s5z6dzeF0M2IYOkpgrIddrQaPpPal3/FD73yLkZN4wK3thOfunuGVhztc7qJxL/PhfGPEfGoGk6UkpuV/UQaJZriuEXZfvxGIUubB4TaQatlUZ+/I4sY96o6Bxr8+323sJvO3xjp0GoTaYW/WSezI5U0PNu2gD2qjRkReWyPpvvFFb7sLIC8bVKMotcZ7I4RrNDEx3yKbIX9+P89tx61iJIegnyZcUwncmeqmyh7Ul5MYn6PW5Fj2ST+vNV56SWYK7dfPDubMUYNbhjMlgwLzbCOCvp9EiXgnPT7H7FuDZsgTAaeauinlgCnOhrUml0VjvazrfxrwbR9+B4B8nzoGEfTj5d/NPfbSTSlWiHpOEdfRjyeDku1uhZowsOZEE8EOLTDfdNzEdQT4POUi5cOYo8aSAaJtobVaaZtHbX/nZz8JAPjHn7wX9ppxqOdNai11it3+o9ugV6sd+K6nboXnnlrTizTmVgzU1seW9V2juqm1KIVwzQ2VwGjjjHn7PwD8YQA/CuB/AvDDAC4AfKzjM96U7WJNPr21nfDBL3gCf/XbPwwAGAf3IzF007SdVJHEWHz5C544w+9962184sUHAVWsHqKHGdvmDeoeZdQmRRJvn2zw2dcusRnHYPhrIhUWbbTmyD5KTuJrly728JlXL7LPHscB22msOumyRSTRoy/5WP76p9/t3/zG9+EdT95ykaZKxG5ZFlcWYjuFBP3APx9zGkOKpIacrAa6WuYMrK8ZTopmWDCbv44kLjjdjrh7FreDIidR+Q0OjYNDQztn4tCu1YBkapsB8d6hjd3CILGNLS3/iDEIN8ohJcWUyj4dOYkJTaqFJFo5iTUEzM//S97xRPF6Lf+lNZ5bjzcbSd7PdSXoGEnuQxLrjnOdPZEG7tKXzTqJfg8Sxq6NUmMdL3cuGYM8DcKxNpsU5qGQxAYikr6uzVFDnNO6oFpTkUTGSRTnYs/+04sAa/cAQ68fhlIkZ32l2U+jwLHqmodlwZh8vl83p5sR7376HH/ru78SH3pHWuIpD0Cw7I4SpfP97Dl27+VJMGcI+/qC0TCu43jumgSH1LDJ1bqMhJMO6MI1TVZIsiaDIjfa1wOolGUxUPjavX1oBOBqVQAetX3pO96Cz7x6iZ/++O+E4LlXKQX4gKu/ZjUhSiACSO9+6hw//6nXAEQkUQtupUI6tTbKeT6KcM3nGEn8LgA/tf7/3wbwEwB+HsAf6/iMN2WLSGJ+OTxEzdBN07YZR8xLecOkdNNhGPAdX/luAMC9h077p3aj7Q+2uimg0718v+eeOMWn711mZQs0ZCnC4Zazlz9vilQ0jN17Dx1F5ZX1OoRk42FYHW7OcvFqXzX0SxNI+DPf8gH8sa/+PQAUmH9t14cZy4KQkwg4hza9jum8W+OlTXWIZvZgKw3yXtTMN5+TmDqJQd20gWS1jOuWuqn13Uon0TaaJN2LcUjdPI/IY/EOqejHXH8gv5Yscs8cps64Wec41nNC24ZFJZcuydvzwjVf9u4n4zwVR8pCSd8IJHHX2CvrEXmbtqgKdzS+n5aj5v9mDMKyTmK1C4C4XqWYBoNI5XPkgyulkmd7jrVIvhVgrCEOFt1UGtdpEKXVxkHmGx+n3MpekwLtgW3IS5pkRM3seWqKiy0kfaqkHMjUiI9+8G0h5cbPUat3SOXtdSOCKObIBiXTMXw/Zv0D8cxnlVtV4Roj2FGj81t5gpO2J5CBI42Cy6D2qjJ/7b6e6s7XozQ/3AuvX2WBoVoJJK1lwjUNgTWPJL7n2Vg+L9VzqFcBIAIe0km0lEqLOomHz21O4rIs95ZleXn9/8WyLD+wLMufW5blM+xnvFnbw2vned/alhdrUugBgDs4WnRToDTsZHmDb/7i5wAAv/Dp18JY7rPzz9vNdQoV0MoTjDfIh975Fty/2uNXX7wfNv1JMSStvCWJ2Mh+x+QkeucQcNc1NZy3U91Jl83LFtcKtbaKX6dzlBudp5aebka8Y1W//eTLDzNqH4CComE5AFoSO+OkqGUiFk5dU9vsPAUuo5sW6qalYTEvfQ5A+LPlJA7l+vfPt5pEuOmotZhnV1Hwol+7o3bYSwq0bNuKgaa1VN1UE8Sw6J+AgSQm983Hvv+b8V/9ya8W/cr5APXfTtt/HrXVAneAEqFdm+W4jaNOt9uHoJ9ONwV0o4lSN5VIYrXHOl4V3W73kygdH1wp8/aYPkB5dljqmu4eVZgMhsEr9y6Xw9WcopunuAcYIRONbsqgq8Og7K2EIS+de8aRAnRU1kISa2eAlT8vz7fF2A/CHAe5JrngYvpe+f9qP8WeOYbeHc5tazzVcWhT0AE9UHIw9hLpyPp59geO7IBTQC0Ve7IFHOxumEkCAK+vzLQHV3vMczyXayWQtJaWF9k0BHZ8Xu6XvD2ya8J4CnPrkCCbtVbYF91I4hz7MSUwbgpJHIZhOwzDXxyG4deGYbgchuET69+6vv/nUbsMSGJ5QZ1BXhehOdmUl3BbQV9SuikAvPetd/BHv/yd+I/+JU9vde9TkUQmYqo4bj5f5ve909FAliVu+qNiSFpR3ZZCmpuLlQ9UXst7FzHZ/XI3Z1L9PZQEH/2pXf8gWV+ZY01d1q+Ps+2Ed67c89965SIgKnGDrDjOjfE0Jc/0M9V+FQeMiSKrAhzr+jpPlOluecXdmmGdoL21sYp9laCA6hRcPifRXxc2sl4UBacMO2+Q9/UDysP+ptVN0zyKOt20/hkaAunGz+XWn71zmsvda5Fu40CcKsb/o7SWErRG9wUIx63i3BzmGcOg/3a1ckbHIIlcTlz8/NCPdNw0cREmULLPxiIM68b1N4WDlPVvCneIe4cVrnGKx8k4DJJYQW04JLHPIAcaNHmL7qg5AEs738x/N7kHRSXuyvlWoM3ukQl4qOyORs9aoDydvzqWGvA7ht5tn21+npqd1kJy/eeqojDNgGsZOGJR8QI8IFFLDaiol3e6eSYJALx+5UCH+5d7h4CGM7GNJP7FH/sFfOff/Bk8vN4HwMH1q8/T3wNfmCCJvk2TztRridb48fx7AYAvgSGEa9gSGDeYk/iDAL4KwJ8C8BsAngfwFwA8AeB7Oz7nTdcurt0PfUspVVCjusQoWnnH+U1TIlkp3RRwG9F/+B1fFl6v1ekzI0YSnl6bL5IOOIc0fqd6ncTooLWj3d3Uyoaxe+9BRBJfu9xlvO3tNIYEeat5lbYp0E0lkthWYK2py/qN4GQz4omzLZ442+C1yz3e8eRZ9t2q5UQqm7KWxE4hiSpFicuJ05FEhxKlhkJEEnWlWDPfUo2Qu0dLSKAUVuAQQeAI+k+BpNiHqO8no89MP/n9bHVT/fprzUVN4zi1HME2/arcR4DjZPIZ1b6bTkmp5YkDjYCH9d0SNDc9InaNfnpx78WmSCr9epCsYk0SqsAS/XKf1+6XOrPjOFDqyr7fMeqa6r61tGlbMijACtekdC/vjL1hOaEKvZtDsvIgVRROYZzLviB0Lbgi7RnZtDIpfg7tOeasnJ46ifl9wwVc3Rj5eGxQIJ43+fOt8bTgnRW8qPZrOvfxfb5xiL8muGXkJFaYE20kkWeJ9bT7K5LohBpTRLAeSACA//If/DoA4Kd/9aWcbjo2hGtW27AGMKlIopm36u+39Qm6BIYQrlkWjm46tt3AHifx2wF8eFmWl9a//8kwDP8XgJ/D57mT6CFjDRXUogFAm2rhkUIpuGLRM+KGpSEp9fnXoP79PON0pdCebEY8sxaCj0hivU5iuyaOVoPNlrsHdAP0lYcRSXztYpc5IF100/XG9je3NKwjksgbdunfvt+7njrH//uZ1/D2tzhUsS7/7GgkdSSl3FSjAmjtW9aRxGPyIdw8yyCEz8+dxmGlRNWUYmsOtx6xBtqRZM2IXGBTOTdiY/UfYZmEg3BUmOsIeOMu78ciiel1odWEK4fUqw93eO1yh3c/fZ7ljUzjUAhuMZS0WuBoMQzyWuDIUnFjlObY5qnqNlNA7gvtotStfla5jfRns+6ZtN8hW1sLJVsPlI4D49zI/EfX7L3EzdMJd/BBkvKcYoQ7aqV7mJzEfuGadV6LFyXhnG03pxyRsoaT+4+cQ32OuiqziVwqZ4BF25180Lt2LrbophqSSDhEaYA97FsMAt9JnQ6OlKRkNmeopDfMtiML6E66C6YR16T3d1OvCecA9zr3LUHD2ne7dTKFVJ6bbIFu6hHBdfiacJls96/2WYCnhSR6J/FkGvE/f+8/k/0etTPRCghE5F4aM73CNQd7QQLA1CaD9gjX1EYjZvHmbruG81BDEq8FdTRtXom05qRUOfwVuqOjP9TnX1e/yg/FUN8syUmsJ9YaSKLhSBV9KpQVIN7UwIokJlTGbrrpOITvV6V/Gk66doimr7/n2XMAUcCj1s8SxKgpeQIW/1+nqTLRfzXgoeRE3DmNFATtHrDoxVqEnHJSKtfE/G5iY2XKbQClo84oCwJaMWuunxSOOBiBi23Ib9YPqW/8az+Jb/jBn3CfNYuDrYYkGgGgWuCoWbuzSoeyjP+bMxIsZKNW85OlgKqFohtIuuwT7pmWSIgSTFvAI3uHDIEhkQ1BmwYxnkRu5gWUQaIHGO11Ug1uGXtJOkfGQAN0VgKL5KZLhEUgtTJIvarMrJqzljs8N9Yx0KYSpq9r/TRng3HANOXWZnBRsZ0Y6rQmFthD7/bdWCddzS082Ai3Rks+GL9bELNKr8lsB45KKvP6PHOvidu0Fcg5P9kEPZCbbN6evH8pSr41KMnpc8FJTBDIWrqHdxJPtyO+6G138b7nImNvGsv6rhb66/sBiV2ysHRTKVxD5iQadNMeJ/FHAPzYMAzfMgzDFw/D8K0A/u76/Od1awoQVNCXWCNLcSwD3TTvd92gqALReNOQFIZXbylLPXPHRQzONlF9qZc26vvVnYbad3O5jLUb1NMbX7vYh/eMo5dJ1m9Q2fzhWsstDDmhlTnWi4L7a+J+oG/7sCsNemdVA9USxAGsdSrbv1u1TmIzKKAYFgQlrRqRT2jJ7183uY+879msXzW/rTKkjnauh7aREye/m3PcyI3VCwl4QbBOdHUh+gAlIsjksfh5zprj0LhvAF2E4TAveHktXr0/zBmaqdJ2CUra0YpslTXSjD6PJW36UZp3OOtMDT0nxQzm+PtbCfr1lPyh9laFNkrVNlPODhY1mMU69s+3x8vXJRtcqSHVTce5yoBooxsyKGDl3vmmiZKw118GnKjAXRHMYejF/ahZbTxauKYSdGrtXVnQIszddrilKJLVT0sViY6bfW9nCDyREyrvb4bK719flnw8i8oPVBDg2UASgyOb39/U2lLYBa0p+utf1Io+1PfW2ycTHl4f1NeObZe7Q7Cz718dcnXThgjcvYTN9sDXEyeQRM/WOZ0Uuuk4VlLH2te/qOcb1E07hWvYnMS3f1nz5R666Z8F8P0A/lMA7wDwKQD/NYAf6PiMN2Vr5apV87g8AqAhiT76L6LkJt1UoQwB9qHRokmmC/JT91wdwq/6wqcA6A6wvxYWjaFwpAy5e/9arSj707dP8Kl7F3j1QuQkbvqRxJqzHZHEPoNESvl/y5e+Df/5v/yV+Jr3PhP6AHnEzn0vI9emgggCBNp2RB6L9rv5efo1+8N/6msxIOfYa+pekRKsr2WZ6wR0IIkKAsny+P367VE3zQ7Emc9JlMIdTD+5n/g1WzNKWnkUv/LC6+H/L7x+VSbbF8Em1yxWQomYtYMrQD0Hsu0Q1fNDfGuplZbvre/JQFk3zzcrIl9HEucm1Q5AJSDQUiSMc/LNIVLVLq6fQvfinJsKamPtJeLMsSTy034aImsjzuU6MUsAiKAAiyRKh69H7TL/3WznfqjcNwy9OC93Qv5uyrW0frtWkARo6RCUVEc3d3uOGUpKpGBo678rt1CyQohzw4/hHvPPq7XUudwkjCcGXdKCroxwU2/gSMvTB2x2E2DboGk7P9ngky8/bE+msz24ciji2XYM6qZ+bq2z9JXCSUSCJNbLsF3tnZN7ulVS1UbleixtfRFAuZasuumxJTCe/9rmy00ncRiGj4qnfnL9NyDaHB8B8OP2TN68LaKCek6injTvD/zy87xRI50bnm7a5wDU6vvJ/JyPfuA5fOLFX8NH3v/Wde66shpgR7ur1JNOtMHP2zuJmXDNOOCkIyfxsLhrUdSZWduOiORrCqASARiGAd/8JW9LvpcfXzE+O68Hg4Clkvx5kVz7oLHqjT19u+SnyxwR3wfgDQSAow3pYj68uuksDm3G2JX5KLQAR6dBDpSBGba4uva73U9o2p++d5FdJ00UhglA1GijgH1v66qhrT5j00n81L0LfP1f+XH84L/4+0NN2VaLJYYqyEbYX9N8p4UuS6EJg2lMEiAJHCmGfJMlUDV2+5ANPza1/gWS7uZooA0Cue+hcmoId1OAZhpCPbK0sXTTkJNoII9hjgLNZdCXWKcyPkc56cr9Brpf1mWdR7NbgRIBbbQHKANwvvn7qHZNS+Vcfo56PyJQXjhE3DqWlGvauUwCCW6O7X5pwMkb39Y+6fv10uR1xV37HpCBCyq4WwmktfKAz98AJNGjiM/cPsWn7l3gOsk3lznKaXs5EU+8f3XIAlCttIjrJCdRNu18c6yt9nco6aa9JTASdVNDlIZp1if8F5Xnw560/v/3PvJM/n9s+0MdSdQUioC4iWk3TohYi+jDrjEOUHf2rENKM0j856Q36J/7Qx/Ev/EH34s7p5vQr4YkWhGqmgPQUjPcVIzC/bzgmTW/77WLXYh2DUNfTqITrtENJve3/26tOZY88nBNDOOzV1q/Ke5CGJJeNML3Y6LdOnW6LsABOGS8pBfP2Vy0ORbrOJlHrenOJU//8fPkcxKVEgC2HYlJoKvM9dfGs2pk1ZQFgZgPAQCffvVS5CRquU7u0RSuWeS+ZQdXXL/8uTSKq/dpI4mfePE+AODv/uNPUU7i3kISA90omeM6PEMB1Sj21p5QrC3YzjYgjd1++htAUsskkh6iK81uRc7lPNtov59ngSQaTspYOYMt+qhGCWRA6ZBfGOimNpW2VricctrkfUOgPcNQQ+n6nQ3LmdIEUACYgivSTogqpcaaHGr9Gn2UfZJB4CN7Kz7H5CRKJD06Uu3xJJXZfwblJCr2nRXwk2OxgaNuuqlyHV3f+pq8fbrpchL3hxk//LHfxHd85burQIs/A95ya4tP3bvA65f7eCZWQBgAIW0DKOmmm2nAZUVh/3rv1LS1fUhXeOdTB8Kex5bAkMI184HLSTRa00lcluULH3mEz4MWECbNSaygX60Dv4YkhtqKhnCK5oA1o89VJDE3QLfTGJwxAIXUdPoZvYIrj4ok3tqOmMbB1UlMok+bacQDciOJdFP9Olr0GECnQ9momX79TdU+jVq5PrLIsZfkZwzCVgmMY/LN/Gu1OVZz4ozDphS8IYw0EZhhHKIwTzEem5MoxUXYnMQeJLEV/fRUFwD4zZcfZhFwzahgKGkaAhl/65ZwTemUUutKoT8f26ycYw0RYYNiQHl/t4Irmropg4iEvGiBJLLrv5tadgRqkI2XOGAaE0c2dX1ZSGJr32rMU+Yk0mindIAZRGp9uTv/S3XauNy2fYaIu0fr22m0cItuXaNp9wqz9cxRXkf/fKvJ/WQhgivht+5khUS6qe/DOcAa64hZl7UzuL2/5nPz82Xy+yUiDlgMlDintLXSNxySyAvX/J+/8Qq+70d/Hs8/fRsfef+z6nv8GfDkuRNjefVil9iS9bPU01S304D716VwTS2YebWfm/b8Mfe2P2fDGcCWwJB003kPbE7r7ydbj3DNP7XNI4naIVdDv9K8uaJPRZGQzUnUI4u2EaM5RVauzbHCNaUhaect1erNeGPr1nbCxe6QbX4n04DdnkMSvSS0pcbWuiaac0OXKZDXnzCSl0UWZbcjwlowgc01qCG5bSOhnpNYV3fUcwsBxkkpHWfG2AXyPCJrLN8vPxDf2JxEec9ZlKFhGAqRCt9SCt7HX7if3TcabZQJQGgIJJOTeJwR0y6B0es/BrqpUsoI0CPJzH5Xy2Vp0SQ1Y5BVdywcN/Drvzcnbhzz8ybuP+3x5JljyfGHeSrry14n9TOYKwIf85SpOoniuzlno91HDwqQqI0SFGaCAvnvls+j2U853xj7oqiVayHAo+4kHsXuAHcP5Oq+XOH4dIzwf6ufcIp6HOC0n/9/S7gJ0APzVn1RtSwLOJRau/7tc6N/j7x9usHusBSlmmrt4c45P69e7Krv8WfyU+cubea1xEmsMb6A1Lk8UYRr6jmJ1/u5ft7UUHuLbip/N5puKuokzvsbQRIfO4lIaUrlYm7lcQH6phwKYCvCNcNQdzYGsfH4Ns9o7j41NU+T7qhtPI3vFfoplEAp7qL3ayNZZ9sxOonrd9pOIy2TP6+f03LagDYltuU416J9tc3nMM+cIIaIYqafqfZTDcL+wvFxnkcUSicc55I2zTnAx0jCTyJKyDikbi79hrWfZ5rbxkQIY784nnWP+j46kujGf+eTt/CrL95fjdIh9KmWwDAoSlV131ZwRUMoDISoRuX37WI1ClhnMdJi+RI3LAMCUPaThrqpLq2fv1ZrMi+3J7dK5h9R1D5l/zHRBvH9LGpxNp6yvtrCNTpFbF5IVc5OJHEQ+zmL7Pk5+UYhiSpzwv7daoY8FShU9gULyU3H8I25v1VKrGXrrsHT2M892qUbtMAp+bulJgbxu8k9oSe9wY3HBwp9v1I/wmYqAWVZFoZKmwWuCZ0Ez4CQoouHuV5y43wVx2PRRB8UvX9VdxK9s/eWFUm89zA6iTVHNu331Pk2OIkcknjA6UZ3xKr3GrGOgeS86c5JTOok3kBO4mMnEVGFVEP4pDHoW6CbNpBE2W13aFNyagIJgJ3Hlc7JN8b41zZ+oF+4hjEkN+OgRmS8BPTZdsLl7pBFyHpKYPhDq+a0McIRGh3KQiBj5Lns159/RMxRiVovTNRacTYY4Y7NWIoHWTWy9LzV9TXDSSxpklz9Kfdeb9hxh7bMZZkJ1MCPJwueU0iiuHesMilAHXG7XJ2oD73zCfzqC/ezA0jNCSWi3ZpwE+tI9dZJ1FD7tHnjYQF3/0emhj6mVifRqlMJ1PfllhFaQ/sBDhHJBW/61UYBvgSDhnayCExwwAyHIfSr0B3bTkopJc/0k0ahhTzKfiGQT0T//cd25ySO5XnD/m6LsraYoEDBsKGFa/rtCxWRMgIQ41BB4Jn7RgZO211UxJ/Zy2MOng+S5M/XxyvPfEvd1/cr6m6b+yuKsdjv1muTaP0Ad+bU5nj7xDkwbDqRT69I62rL5q/Rk7eck/jC65e4fRJLvgFlsA8Arn2/85MoXOPP0qkuXNNi60ndAoClm4rzhi2B4esdHlYn+oaEax47iWjnqmmCDEAbSZE0F9+sw6ZNN63302gFgKPRvhG5hY9iSNYO+82UOInJ4bOdRpqO4KPZ0TgQry/MHOvOZc2RktST7Hu1rqMSxYxR02o3tVA3E7X29FYZxQSOoxL61/Q5NkR5GnN0yEb+3AICJQ33XDQI0+etfqmSIZ9bmCCJjYhp2U8YCJaTWEHcPJL4nmdu4+H1wSXpr0u0WYPTiv7XAkCdCDyDULRyEh9c9Snf+WtUr5NYGruxwH3juw1lP6DtpNTQfqCfbsesfy1vkkXAtDnawjW5E8zUaQUawYTO/Yfpp9VJfMNyEpVAIbcn95e8cnPU6abWt9NQkXmxnT1AT9+w7YRkjusj4+wdQ1OVTgqL5AIKAt+eYsIU8H04R1YGsC3bIu2nIYkM3TrSphcuT3MsUzD8860m6b6Ap8Tq7/dlti46kcSmkzh7RNDRTefF0VoBDkl88lZEEkMuYwNJbNW4nAY9sMgG/MJ5QyOJq5M4eyfxMd30xprPSdQ2vI2BJOp003Lj8X+3IXv3qBlbx6qbmuUe5IHN1DtsGJIW/aeWEzetOYmXuznPSdz0lMDwSGL8O20MbaVWx8vPX2vaQZN+r+pYrbwlA20DNJpktYvrJxwiP8f0M7W2mfpzEv1Bs4jDF7Bz4rTakUxkHcgRQT+PVpPGdU9uYRrZdYY81y9dJxYl2ffR7hsfWX3mjjsQX3pwHagvrZzQ1vfTnD2KSn4EQjEqyHbaLq576aZczndvTmJNuMaX3Gn1yRFBzpIfh+MQwWI8sl8uwLSeaywikjhg7H1TqOBatMVRj+QzdEcgDxyxaCcg2QWcs9G7J2voC6uKKnPN0nlU+yl7Cc14UYKn7eufG8lMuoGfY06R9P2a3VSl3l6nDSDVTUU9U9oBFmhWPH/b/TZKKTZTXVZ8N97ZRoHIAhzdV6Ob1tVN3VnFBgMZJNGzzjzd1I0T1fz9nIp+a8D1Lbe2LuUp2dtr6R5Aew/Scql7yhmFvZxVNw1Iolc33XN1Eo322EmEUzfdjHpBaw3mB2IESXOKQsT6IDd/m9ctb1Dfr9dpANoS7X7uNbppb2SXzfer5Xc6uumIi+tD5hRvRr4ExmGNZteuIyulreUW+vnXvpf/Htr3qo6lUsTy12pzBPrzLyaNbhfQlz7n3ioMruVDYD20TSddi74RimzpvBhqcdovFbw5JreQiVr7fhLJMpHEmpO4izWhAODF169CdLZWbxKwiyLXFI97qetMcKtFN33g6aadTmLN6fZ7U47k2uqm1aBf4/7WWAKskSavJbX+BbLh/m+j2yXd1D1aK7kQrqEdsHJfZpwUje11MNBLeW+3nPp8jtqe0O4T97u+Pbkm1NVbJoKmO2pnvuns1e0Lk12gOhvNKSp54ms/LBHg8QAAIABJREFU4gyQAVdGyAcQlMyZDwqkKF36fHU8cS0ju8lGErVALVMCxnc7Nm+VpqBra7nhRJ1tfU4i6yTaOYmSbgog0E1rAo9A1Au5c7ZxNui8BMZWC0lsiTdpudQM46KwJ1l1U08tPazlPB7TTW+uebqj1lpUF0CnCWtRXf83E2kqE9nbh1Rt8T+KIElr869RHwC0ndKxrEEIuBt0Gle66f6QCUL05CS6yGYyVhVJMebYiyQqB43vx0Roe2sStahsrab1s5w9P88aklgX81nfJ5DE3hxBYHXAyAK0h2AQ2sEOQDu0qTKJBVWSUST085FOup2TWCK5gDs0p3HAU7fjgXhr6/Mvyv2AcQC0g83nbFsBJ20veRS6qTceLvecEeH3iVrAoxUkYZBErVZotU6oxhKAfW+7vkoAwhT7cI9HCadojix937i/LaXF0K9y5ljrREMS0/1e77cKyPmyOInhZ80RiHsqdx3do9yTGSdd3gKUKuego22MfdEbzKyVDnBOSnuOcj365805KvcNgwrKGqhmsEMN5vA5iTGQAG6OYz4eiyRqdqGZ8y3W5Eze2zUxK8YB1sTLav1ON3qpuLT9xksP8IufeQ1AdBKbSOIcVUp980hiTaUacDmJ22kMZTlSBHQa6zZoiy2m5VKzecrZPFm66bR+5/lxTuKNt91hrgrK1PLoWsI1tURv5rAZVPqJ4dgoUWRGkERyz91nEE5KE0lsOUW6sRuRxAkX10K4ZjPgmkQS93PMwdRKALAO2DH5d0AZIT/MRk6oFsUkHdl0XgCfkyjH81RrqwSApFxb10TPkeKLUhcOGPvd1s08rmPWKXV/L4Rh58eTzgaDpMj1xamblmsL8MpqI+6cRifRK8ZNwxB+W98YSpq233GOFEoEcjEoqmOZI5s2L1xz/4rLWdmTdFM1J5FAUspc5brzptMP89dqrUCJiPUvHSLfzzY+S0aCm4PdD0gMUMNg9a0qXGMwJ9RArUE3HcUc2XvUT6WHShsUUZNpcs6GgjZQwTT93GAMUGnvtiiBQAwgaikmfUgit7acA3yMc1kGXFnnvlQFbs9RnsE9cwSSYGag8tsK173BFQ0RBzhnOx2qh+4rTeUWclarJ+7bZ169wB/4qz+J7/yhnwEAXK1Cba3zwO9/5ydTKE1xZ3USR2X/9213cPUOz082mBcXmMzVTfU5tvZYvQYqwfiSZwftJCp008c5iTfTWgpFrTw6oF42A9A2f4620pvsKg/D9P9tlVJ9ju4zjUO7OGg42pYG9Xta7K3thKv9nOU6nExjYezWWnq4apsqY6RpqpxR2IiX1vf9qE1cOUhbv7eGVDMKfBpyaTl7/jUZSbNyEtU5osNp60REpAM8E98LKI0E5joCa+1IYZBTVLYjkEStTiXgIqvOSYzRQo8kagEghpKmBVes9Q/ozmWrkDKgBwTS9nDNVXlI5qywJTDynFD7u9WKibfzUcqxjkV7loVBROKc0vF6xT7ifO1+6fvd3mtMEp462mfs1s5gq+xGoBd3UmL9e4JyZUeQSuZgc05b33kPaGweLiimiWlYdXKPEW4Cyu/Ws7Yy55IIXPt5yvqidHAxvd+InEQpVNTjAKfjMWryQC0Nwz6307l1OdvavsWo0nbYvJaT+I9+/RUArowFAFyuSOJrTXXTmHJwtjqJUrhGC0ruDzO2qw0KAA+u9mHdb6Z6TmIbSez/zdJ59pfA8HUSHwvX3HjbzzM2DUU8LScxblyKk1jh8FNRhFGTxOaQxPTGZgvHlxzy9bXmePpBk85F7TfWcxK34xhyElOa5nYaMS86RUD7HN9Poz4wRppWpiM4UjWRloqxy9B9Zb9HE67hNh8NSWnmJCpJ857+VRuzVtybMX6AHJWiEEhxTQLdtNe5JK4jsEbyJZJI9JOBEjYnUQuuXO1mnG4m3D1LnMQVSaypGAJ2AKKKJFp1EpXxmkaMQv9Mm89JfECq33lj42RTD/gBOdrG1ncFdCSlZ/0z9zZQ5h8xwRUtD9s5KfZYyxLntoTnm93K+20mgySFc0PkxNXODWt9KXsClzcp9wTG+I9z8o0SqRComevH0oTz3zqde3U8bV8w2Ax1zYM63RooA97RtmhOUUEg3SOnyimvf3us4+uL+vcu2SPrlPr3h3OUOAPU60/sWyFPv8ORlUEqgAxuKTZXbY7eSbyuUDl/7cUHAIAnVxGagCRe1nMSrwMzagy/xTlZAmOz0k3dGPvw/lZOopWXfhRQJM+bUALDcPiGwTmKvgTG4zqJN9dc/cJ6RLiVk6jdAHUkkUva7s1l1MbjkERdbAKw8pZ06sM4tDc7DbZfliUYCbfWnMR5iQa3FW1algX/z2+9GuYQ6KZKxDoYaY1vpxkxFpU23tT586z6nrYhtzaSqmw3e0CpSGILSWmom9Y2SOWaLMT613O57INN5huEII6JJObXZF7YnMSYb7AsizMkSZRin13/maqTqCOJB5xucyTxPBWuKe5t99hkJSgHGyPuUsuZsUSK/Pu0drEK87AlcPw8a6hgpEDHz2P2ybC2OoJAtdxagDOSS9pcu4/vVzopdh8gpc2RjqwSXKHopqPCQiH2ydoZbAUlgTwnkQoAiUDVstjCQVoJDNZJ1wxJzk7I+wCcIa+qcDf6afVF3d/2nqCKIpkBj1ysis3lLRxnQiREO0upmsPi3Ajfrd2tzIFf1xhzBhSqwJZwU3G2+etor+VFWVvMtexRNw05iZX9/dd+5z6AeE2ZnMR9kpfuh5V0Uw1J9HRTH2R9cB3pprU0KaAdKKkhiWw5r2DyBiSROATGrUASHzuJN9L2hzqSWC3k27hxak7iwhwayiZuRRa1aBgrSHIMkqjllVhKZ36eNZQuy0nMkET3WMtL/KH/7RP45/6T/x0f+/WXM0OlLVxTn6PuABuomeLY+O/GCGJodRK5nMS0H5/vpyGJN52TqNVyZIw0PZervx9D6wDK6OIC+zD0/fbCQGBzstJDyqIk+7H0nERHN72t0E115VD7sK/RAQE74KTtJYwRX6Ob+sgxq26826/zNJR68/Vvi/LUhGtaCFg0PuNzXWiPMNKYPFkNXeqladOOrKTNEYi466cjshbiXKWbtvZXsQfxSOL6+SmSaDG91MAdh2TNS05TpZDEUeat5nOvNS3gdDCQxJjLJc+AdvkeKYpE57sK+4JFEvX7xh4LyM9Sd/3b/UJt6nBu8A6YG8+9P+w/FAIsrv9iCTeVZyLTxkEi4n7uVj/dKardoxFJrDiJLz0EEJ3DqG5q10ncTCPe88xtADm7xr1HdxJTuikQbZg2kli3M7QSTz3odvgN2BIYADBtk5zEx0jijbXd3K9u2sp5qi1GKrJ7BEStHlCzvSFrDilLSes96AGjlMI04HTNSUwN54AkVqJNP/Kx3wIAvC4KoEqlM/fdEF6rNS3STddJlN/t0F8nkbn+miPFHGxa8KJVIzTtV3XujZzEPNeDN1plRNjygGV5gwOLvhTOpW1YuPHioX0gjZ/QL/m9D429J52jpu7onMSYoA8At05i/kUNSTxW3dfMP9L2LUP9ENAju0A0HuYFVF6yV7Y7aVhO8vuxDrA2z1bwonVv24hIiUAya1ITCmHQFyAGqlhHVjNAjxF88p9hB6n0QG3LuB6GIb9PDeQxnSOQ5nJ1CKAUezKHGkjkxpqlDAj0UJn1s7vep1YCZm8E/aRSsv8fcwb00kbd54rrT4ylqQL3pG6E+4YsQVIyXvLPq85T2DORgdUWJkzHAnlvSxuURRK1VCkXuNff7wGAWhDQ00qjk7jmqF8fqudBULgeB3z9+54J7weU65H1m1d10+hUpXUSD/NSoKRAm/KraXCw6SxZYJ4tgQE4pzBFEhnH0prLI3/CPwVtb6ib1gr5+te1PoBOG+UihPlzVj8tGjY35pf2qyGJlpNYyMGTiEirvERIGr6OfPBIN9UNyV95wVESQn3FcGPrRp353SqRbqCONtSQYxNJVJ09e0PW1hdXAFhxEhkkUc1JXK9JZcxaLUeGDgWU6BJ72Kd0Uy63MD/sGYPQ9/OOsx+TFa7JcuLmBeeUsl35vFc3TVsQrhlirllUXuQCEPU6iQ3na+g/EGvS+r75OpCAcxhrbA/fgsBO432bMS/DQ6mbNu5vE0lUjC0r4iEdKcbZAHIEZlkWirkinVkt91Vrkk7LKKkCOgulRUkDfJBEcRLnNgIM5AEuC3lM5+jnBfC0Uf9e3zgn3T0elgUjosPIlCBR0R4KbSv3ciYnsaz7TJTYUoIklgc8KAjkMQGIvhz4tB9BGxXOJa0cKs63iHzZzqWWg9rD1OhRKQXi2cEiueOIwpFq3dvb9eyqpRPskvN1d5iz8+DB1QFvOS/XbBSuGfE9H30/zjYT/siXvRNA3S53c3AlMDzqCCBjpfl5yN+ppeDt9p78uzEUaMAHXdc/WOEaYEUSH5fAuPHWUjd1qFn5fDAMG3TTclNleN2ac2MUwFbUTWdiP1bppiwlrdgM2knUgB4RTiWgb5+6G/T1y30YvxVtSj/r9ctdFinWhGtYURjNGPTz15qG5AJrlMmoGyn7cWhPPi+A23w0Bywigi0joeTkW0GIWr4lEyEHSuPaOtiOVzJE1s8VUja7ZVFCJiCj9fPzpPJRNCRxNwcU0Y9dJOmL6w9YdOvSQd+RaHNx31j7loEkXiX1ET2VtNX8PFsiTJICRDnANSexQV889vq714+rwZnmYbNOg3SIepwNQNxvpCHfTTetlmBoC6cAOb3YQh59k/mFPXXzSifFDgrr/aw5lg4pwOXEaYg/JbDWGRgu0c74fHOOYg9iWDL+c8t+/WfiQvxuJd3UP9+eo2QltOxIOc8UrIjpHu0+6XuDk0iglmm/GLhudlMDQK2Ax4kBAKQ239V+DogiALxWEa9JBRvPthO+55veHxw/DUxJx9puonANEK9fKy2iZfdOCuBzIJlKWdB16aCbjluHIAKPcxJvsjm6aV3GVi3keySSyGwimnNjIXtyPMYhGgcNtYyvNeeoGExUUXCxIfhru52GkGD8yoPrYOidNAqufubVi/D/1y8F3VQxRhYct9FZaEPNSbQcgJoCKNA+7DU11S6UrhdJVO4BqyxCTRCAUXEDlO9mCkes8+o1COWBCHssP8+9OOhZA1TmhHIIfPn8bl4C0v7WO6cAgLNtXcmNUeBr1Qm18mtLVoJRAqNx+AJ5rsrVwS6DEahGBpKo527zEXnfGCTxWLSnl7bo+3WjBoHumBuELAKTIfdUUKaCJBpMBqC/BIPrOyZ5kyTav74lzUk0g1vrkpMlMKzh/PzTS8I6N3oAwnZKy7SIdoC3JdxkBo4Um8S8JkOZb8kiiTK4SCOJvddfOHsMA8jPEcjTIgBbuEYyzKL92WZ3pGOxiGC0J5E99tJU/di1r2aJEmZO4u6Ay108A2p5iZFuWl6XFpLohGvynMSUbuq/i2wt8SaNhcgylbL7m1U3BYBpVTedZwAL18doj51EeLpp5bBXjB8gRiM0wzAgiYXRRG7iWjSmZWxpqI3/PAOR0qKKgEFJq6BttrGrU7bca9FJ/O3XLsP/W3TT33w5dxJTpFajxLK5BnXhDqtOYv685QBoUWTmsK+hFOzB1puTKCl66WdUi4n7DVmI8hwzRxeNbHYLv02gv5FGqzSSWUMyRcXDIdrZz43HqZtqSGLa9613nZPogysy1wwgRanC76YEEpq11Eoj0lK8bB2+gENK/aVhFE4jksij4v66HoOktNAzNbd2ad8zad+i3iHDNDpiTcrvxpwbab8UTT9GuAlw66Z2/qZzUUUxCCTRrwuWEisdAIuOmfXJnA0iuLW+3Isc1/LGjglCz8uRdOsGkg6sAddsju7RuibDIMqykEh6mcvIMbeAfuZKzZGigyvrPH2w1bpP5bkRg1v2HHsRQf8dJFPGDDiNuSqq79tyoqZxqO7t1/s5OG0eSfSgQU3hNK2TqI3n3lOeN/uDE148V+imMo80bS02g8ZCtO61tG90Ev3iYpHEXUQTHzuJN9NadFOphudblNgv+9Q2VVZIoEcgwc2hjJAwN7Ymk78Qm52Wf2TllQC6UmyKZN1Z673NC3DnbBueB3Qj8TdfeRj+H5HEdY7Kd6OcFKWfn2PtWh6rbqrVtwyHfWvzr1Kb6n3cPBUnkUESlWKysV/NcXaPvcZPzIeIzzGRZKncyioZankbVG7VmOc6ARwlaiPQdBpJVPaglO71de91SfqnG48kuveoSGJrLAUB4yiZY3kgzjZqmX6+bFf7OQSLapSktO0PM4bBMniR5yQSdRKrdW8bgQhpRLr/e0PeMlw145pYy0PqJHJOg1bKws3BHguIgbEDwRLwnyt/bkvgq41ktcfbTHnuMOPISirhTIwj+wDreUOqosoAby8iGAJABCJVBjPbgaqacc3k3GviOqwDlgYuGPRlGI5QN1XORHfeWGMhnyMRgEvHi0JR9vnrPzcPLi7h+VafdIweRDDvx+5bus3b6redhiqSeH2Yg014tZ9xvZ/x9PkJAOD+lU433TXsGS0gk461FUrhPthYC1L556paFUOJJLLCeCqS2JOT6Cmqj+mmN9N281yNPtcMtKZwzSNEPjVqmWUk606De7Roo7VagqYCovLdjjF2I5KY13vz/w81mpQb+9WHbqO4e7rB/atdZqho321eFtPW0tXf3CFa+w2q6qZGBLqdt0QEBToNC208LidRpxenn1nMsWL8sEWK82tCRNan/Joc2ARxMU/WkExpi9a1SJs8FKmcRIXGE/qu3/vf/ZYP4O/8ya/B73vXWwBUrn/P2uqmZPYHxSwk8Xo/4+4aLKKQxHmpCpD5Jmt+xvVvG8kqklLdE+J7fItISruVOd8ddRKDAJOfB2kQCnVT27l0j5Fu2kGJ1RBZBhGRTgrhmG7GMaje9lBigXgNmYBT7JPvW+yenNNUSRX0zgAQUC9n1LouNZqelZM4FXmT7rGb7jizStUoHGc2J/dYEbhe4RoZvGP2Vt8v1yCw+0madi8FvdcB1lJ15kVn2/m2ncZqCYzdYcHd4CQesJ9nPHXbOYktJNHVSCzHHIZB1fxwYzm6aYokPnErKoUDDSexdgaMZXkbxgcAxLUMJTCIm2DcOBQxIImPncQbaQ5q1n+Amvx26+ZuIYm2kyI3OvvGVqNhhEVSQ9uMblUFVmsNa7lt3mDejINwEqNKI6DfoH5zeebOiaObJjes6twvXBRTV387wog0jJ9jEeBq3h4bNe10AKRhDQCHQ5umV8uTpaPIhdHEGbuxdiFvWAN5ZJczJOM1iUgi4VwKVNZCUXyf6gG19t1MI752RRPd/MpAAqtu6vol4xi/tR9Po5v2qvT6tiwLrvaHYCRc72e88uA6y0OWbbefm6I1fkzNAT6ObopqFFkPHHHrRO5dh5mLPjsxkz6DUBqtbCkF+dtZNdvCHBUWCq2uKaPyREBnmyKJDac+Hy/Oy4/D0hZLRIpzUlJK4OKiacYcRU6i+Dy2nx+bQhIVe8ZKp9ByElmULkXAjglAUMwVlc3DM1dmcd/QTmkSlPRzb44nWFhMLmOp0svd2zJVhN9LBlXdtPXdTqaxKkp4mBfcXW3Cq92Mw7zgqXMXNKw6iXO7Xnet7rkvgTEMQ1h/PkDZyp3fN+4djabK2yXJ2dFTAsMjid5JZPoY7bGTCLdAakiKVhATSCI5jYiF7qT0GTEMIqg5G+E1g46wLGX00+o3Kd+NidpNYz23bRoj3RQA7pzmN6j23bza1VO3T3D/ap9FfDVjhM1JLGg1hIobUG4i+8Nslg0A8lxG6veuIMfHIYmcAyClnAMFt+YkanMk0AbNuF7AU5SC0WocTrGfe+xXaUzQxw4kcTOO3UiipBr51jqgtIPN/7f19TSaalrLtDVHTZWZCa5o++t+XhztfDUSrg8zvv+//Xl87V/+cfzDj7+kft5+rguQ+SbTB1ImgzXPku7YzkdJPx/oo3vJXF5qTSp00977LawRYiwgN0BZdVMteEo56fL6EwjfZhqDc8nuCX7P9nseM44ugNJfODuiNna/3uCin6eco3V21IIklkEu2Ty0I6s5N0yQZJBOac+ZGJ+zhAKBhF4c5rg+b8xRXkveSdQZQD0IMM8uQNaP3be0c2o2AlzbaVSVq/0ZmdJNd4cFT523kURny7dsZR1w2B2Wgk34xJmNJM6NPeXYgDcAfOMHnsOXvOMJ90evuunhOqKPN4AkPq6TCDsaoMHT1s2toS9sTqKakN7s49+bj5W+prV08fsbi3VKj8m3nBSHO43k310dQyBuDq28pav9ASebEXfPtnj5wRWWJfLIa5RYykA7EknsNZL10iXl96yO14vSKddyR+RkaXm5Vi7FsdLu6sY625LkMm/mQG7GGt2UE6AZgxHpvyJjJKfIBrCuLaJGli6/Xf+OmrPNOA5aACLsdYYhqSGJDGqpsgT2uZFwvZ/xy7/9OgDgb/6vH89Q09DnUE8bCGOOOd2uB0nsKd2gKhAHxLk5RUzjkFGwaBGm5DcIRmtn4IgpgST7sTUZ5Rx9o9U1RUSecQI2SdCPZwnkwQsmcKSzQniHyHfrcaS0AARTF1NNNzCYJOl7076Wk6JRYhkbKH1/+lyrTWMugsKdN/ncAK7kRumA9d03vcrY8vdm+sX7BtlcewMXPfnNZapU+97ZbvScRP+ctwmv9gcc5gW3TydsxqGak7hXnL201VI3rvfx7PBL4YlbAkmsBDNNJ1EEypl98q/8C78//hEcPhJJnPd9fYz2GEmEd5JqOYnO2ZMwulVzJqX+pH2YaIwaIWxtxhVkyX9etV8l0gHYwinld+tHSdM5b6YRZ9s4qKebykLgabvezzjdjLh7usFnX7sCEOvE1TYsJtJ3Y5Hu2cjJanw3K5fUfX4+x16DMP1/K/qm0R0tmqr23RbwyIbMpTMPqPX1XGyCNwh7VRrdWkYYCyDrKybIBuDQKEb+XFVka/RVkUT/eQwFVNlLLDS9l12wCWOVr3mWQBSumcP1/Qe/+pIauPP5KK2mqcsCBuI55Iadb609r3UdzZSDsQwUskhiKclv9JHr36utG+Ol8vUsGiLn6JuFpvuzL70H2DFTejfLEvDfLRWmsmvLIbzXNy4ojDA33yd9vtpvzPOd6NIlwnHjWAL5e30zfzfBVIqOrD1HQKQAEHtr6ZTa61izL3rSG2QuLyPel47HnL+As0PnuW/9x0BtHszszdOkHeABhZ1s5Q2fTCOuVCfRfY4PEl7uZnfeTSPunG0adNP2eVqrVrA7zDjZ5P2e8HTTRjCzqd6q2uXcWs5ajwiNpJs+zkm8mdZaWMGQEevDiuRIFUP/GYwhn47FUMRauW1MJF+TyW/NsuZIWZu/hkilkfz02hR004oheboZcfdsgxdfv1r7eQSyjPxTzsZY5ltaOTM14Rorct3KJWURYN96op9pP0ul1PUrAyWeNmw6KUciidmaBHfYTwlKdFh4o9WNFw0ZjpI2ZDS2dO5Wv90hXktG3VTW9vOtlRPXqsFJra3OvWQadeOfGUurQ+sRgVS4xhsG14cZv/PgqujTUqlOx9TXP2NsKUZy7fqrTjpvbKW/N6scmn431iCURjKLGqSiGD1062rOdytIpZxv7Jie3h1olcw9OuXrksll1EpgMOe9XFts3pgcj6cSDrqz0egn99a0b0+uPp3v6h3uZE1SKLVCpTXPm0qA3RrPvyzRNisAVEMS7QB77qQzZ44MJtOI4JEOsEo3NRx1RzetI4nennPCNa5Uzt2zDe5X6aZtJLF2lu6U1CBGuIZBEmcRzGf2yawF4RoCFXxcAuONaa1cqZohYx1SGmpG5SgMpfHvnmc2g7JfUxVVyT9iDBm9liODZI1KTqIeyQ9000p5CcAZjidTrop6fhpv7BLZIIq5D4ox2BA2Sufei6RIWgfQhwB3J9sr4zE5iVqgxEISR6UP46TXSjewkeRcbMLuI6XreZGQuL56cxKBeF2onEQluOL61oNbtTqVAJqGjJoTSkSSa3TT1v3WyqW+2ruDMQjXHGa8drHD88+cAwA+fe+y6MPQTSXlnTG2NCfF961dE/+0FvDrFRdhlUNTFgotNiEMybBEzIBfzNtjv1eYo7AJLYRPy11lAzOe3h3QcGKO/veOpTNs51JDpLjzfljfi+yR3ic7EUh5n7J7l1uT+XP7Rk5u+pky39L6BUq6o/29APeeR1X8Do6sMVaNgm7NM1JA3cVkgrRAiQAzv1v1+hMOKZCyC7i1paYhGefwyUYXrolBwihc40Xe7pxu8VpD3dRSqlZz4BXdiSfObF2MVqBE8x0YdLto8wHAEPOTWm3aAofH6qY33hjaVlkDrG04TaNWI4WIxoz9Cel6UXai37E0VS1iNDMHVElZ2QtE6sPvfhKAVhRcdxJPt1NAGwDg9klURT2mTqK20Zk5icHRyJ+3nBuJYvk+ACkuIn5vGklMJsrkJOqbnRuvXhYkvi+fox2NBDQE0t5Y0yg5L1wjo6asuEXukKZzb/Zb17U/GJlC3bW86HYU0z1m9wDp7Ml+zJ6gGf8s3VRTQJd008vdAQ+uD/jA2+4CAD5zr1Q53R/sEhjSAduF/YdR1xRO4lJX9Gzd24zjcAxFKaVW0oiU2EtYtGcb1vGSoCH2HMdBcbaX/iAcm8vltAFSSqw9R596konymPUOEd7rm0tvIK+/MOSZcyodz18aezxHAQ37JLH/A/7MV5BEQ8wKiHsri6RrYkrU/i+DK4yTPupOOk/JjGMx/YrceTLYIc8A5syJ5737AVgKelWUx7wmeX1j17d9nm6nUa2BWyKJjm66nVYksVYn0QjoawJrgLv/ZKqCzEnUA7X1AFeNldPrI2Le84jguHFIoldEfewk3kxrRQpDVLHYIN1jK4ogjR9K3GWoOYn2ZtCtinq0k6KgdFRtodHMbfuh7/oKfNfXPI8v/z1PZc9XhWtioWzSAAAgAElEQVRWjrpv5ycRSVTpn53X343djk75/E0tb5X53dLNhzHSdNluvraTWiidoHtJwRVOuTVfk+wcpZAAs7FmjhtxPdx47rFf3TQaWwGlIKzk7ZT/5gyS6Iry6gdUFUl8hABQ2c82LqaxRPut+83Po003dffzyw+uAQAf/ALnJH5KcRJ3hxnbTftaVnMSiTqJqnCNZSAo15+hXEtqJbO2Uuey39iV/dpjeUdqP8/9dFNh7C4LmoESTbgm5E5axvXk6N1Mbr8cz9dXtFSqAf33XhY7+C+vfz8CLJx7Y7wY0FyyR2sP2ij2jLV3yb2VzXeNZ4D7my0bUOo5dNTl7bz+o/xu5L0d6j4n+z/AOekZkk78bjJ4zez/ab8yJ7HZrUCpGeXc7TSodRL9cx4AuNofAtp397Sek7gz2CSa7Qrkwdpv+/A7ACSpSw0btBUoqacFdXqJy4F39oqcxMd00xtpTdqWYjQB8Sat3Tha5I3btPpVy2pCJoCdWwgIuimx2Unuv5+n9d00lcZAt1hvtOeeOMMP/JEP4Wwr6iQqUP/1fl7VTeMNdHsVvNHpb4BFJNE2ERpJLJxSi+6rOencZizHmwlH6vicxNKZdcp29bFG9bvZUTSd7shtrNMUAwOskyjHsxT7fNsk904PkpLT9BYK8dQCHkAbhdQDR/Y8WzRVaw/S8pQ5kZzyNU839Qf179x3TuK7nj7HZhzw0uo0pm1nBC78mHt1/dv3d9ovRPJr54Ya7LADQL5vavzT6388gm4q9gTWkAyO1GHpQtIlU0bu/2ofZX8NjqlllK/XkkUefR8gEa4hrn9dzZl00iUCTJxTwPEIZOmkGPfNVNoz+7l9f8vfjc+Jc4+p42ZdD6A8u4/JSaQDOYEm3Hf9i5xEMsAiz1O/NpuaB5O+ttg9IaKk+Ryqc6zYrlZO4rWWk7iWxciFa1xQwiGJjTqJRsCvphTu7/v/4Ns/jH/0fd8crkNLuKY/UHiEcM184Osdjl7d9HGdxBttLUNNRn5881zr2iGgIYnMpjWOudHEcOT9/i7RF8BApBRDnss/0vLvOLrjYRYCKCEnrm3sSpQOcNEmr27q2+31/zqtgKOfaLlHveqmTPStJm5xnAKobZBoEXmmUPpW0K+AVSSks7bcshD5KEpQgFGlBfJoay/dNKOWkcau78dSjQCdpmciiWM/kthSPG4ZXDWaqr1vlXvJwZD7buUbX+1yJPGl+06o5omzDU43umHBqJtKQ5Kh26nfzYjkt/LEKXERaaCRdOteZ68qd2+Mlaqb9iDpVSn/Rt+NQN/Zfq6vy3k6Jm8430vafVQ1Z8K5LJy99Xk64HfIfzfeAVidjXAdjX4Km4E9FwNtdH2+N1C4EIFTAEXeHnP9I93Uz5EM5BzpAMtyIoy6suun36fNnFAR3GIp6P7l3nxXp2ZbBiVba6u2l18Huqlzci52Lmi4mVzJs2adRMMu0WzX1F442Yx4693TrA9QcRKX3jOYC15nbe5BEjcrknhzdRIfO4loG5S1BWJRgNxizBc/e2hoyF7T2TiWIhYOtvhcNCTrTat1xURbNSdlbxhpcTMuX7vazaFOom+3E7ppMUdCAEJDRNiIqSZ33zLIa5TAYymZxziXjAR6LSexaVhrRjJFSfbXMj63gDSSEwf/sHDUMumUss5lpKEvtMEK5DQ95tr7z9WEolpzbeUptyhpR69JxblflrZxPQWDqWUkuHvbI4dPnG1xUjEsLKqRH1Nd/50siIAeW+dGJ5Lr+0oDjcmlSwOMbFkWmTsZDXl7TY6D2797kHRppO1nO0g1jWWQiqWPbtc8zWPyhn0dVEZdVmNbcCUw8v1u6aRkFnRHC4GUzg2LJFaCp8y5EdFO7jeQ59u8kDmJIjDcc/27adqj7OeDK33rxNs1jHhZOh5z5kjwoBftjKVLOOdS2lyH2e63UVKQgJiTeLaZsJ0GPFiRw2kccPu0rm7q6iS2HefCljeupWZvAZEqX01VUwAmtk5iPtDe5q2HyZ4Ah+vHTuJNt5bDt1E2f8A2Jp1RkT/HbloqRYwwyDUk0UIEAZ1uauUtHZPvNyrX0sqJa6qbHkq66flpIlxzTE6ogtosREDAfZe8j5tHeyw/r3SOPG00Psd+N9evNJIZdVNp3FFR5CXfIO0Dyj0erW6a1DazqGjZPBMEhis3EA3XA3GP+pZS2R4FSTQPtqP3BH1Nsvd2T9RUo8n75n/HW6sQ1b2H1+Hv080U6Khp2x3q9W59K3MS3XczqVRjRRW18v1agSMmmCONQVq4o5d+KAKFbL09YEXp5rkr30+mKjB5aloQlKWPulJUfbUcJXLp9hI2uNUXXPHT6aUJF2gbuN9N0slZJHEzlrVarfztkkoLbo6F49ZObfDNObLxb4buW+btkcGV4Eghe7R+N6lu2oskytIZbRu0FGBi5igDpz17iVZOzbKdtJx07ySebEacbqbgJG6nwQUJ13QN2Zxd0ihXpgQ7zJrPyZmt9evTBbBZCUXryUncnAH7KzzOSbzhNs8MktW5QSpIIpujoCJSnbRRZrN7FOEarbD0MXRH9karqptuRrzlVkQSz7c+J7Hsw8xRF7xpb5B+6qoiZGuDVIzkLkRQjPcowjWMEyyLWfd+t2NyEn1OVq+R3Es39b8XrSSZrGV/WPUU6t4dEiSxU5ET4A82DX1pzfLYumG6c2ncN4pKr2/++51tRwwDQg7KyWZsIoknRmRgHMqcRCuPESgDYxZ9MRr/8TlNQl0dayydBmYtp85ldNyMPoW6afwsq21Xx6En30+mKgQkkUGkFCeRFa5h3w+kecPrXmIECYHj9zuN7g70lzOiUSJxVrE5iTXV7540jF6ULr0HmJzEYVD2LaOP/9plbqHRT1xHxk4DSiTR2sd9Cw5fhyqqfynSTf3zZOBI1FdkrokU3LL6aWcbEJ3E7TTidDOG/X8a3d+Arja6M2rlyiAhEOds1nwu2HPtPUVShH2ffrrpns8t3JwB+4vHTuJNt1a9n1pOomUka5E3ZzS151LSTbkbtOi3PlISyXM5Xq/gSlcJhmSe+xBJa+ckahvJ1X7GyWYKtdOASOfT6KYLuENb9vNoQ60Ng6NedTvpng6S0RF6Cs7n41lbj4okrmu0VTqglhPULkAe3+fbgg7jRxitzL6aHjgHcjOWh70V/An9wmE/B8Owi8o2dyCJCkXGOthU4RT/GhFwKvJdmzOsOJfGWo41I8t723/Odhpxtpnw2oU79E43zki4UnMSbYdvI4J3h3mm6cWZA+CdjsoX1PdWNPukfWVuIau4WyJSnHPTi2QBbq/dHzqRRBHJ78lJ1JxEKwd160tgGPdL2qZxwDC4e5sVDhrXPunaYvsBCSXQP2+dARXaqNlP5Jeze5CkWzM01VIUhpyjRLeJPr5ftpcw1786x75+jEMEJI7DIf/d7NzaeN7k49X7SbukVzgopftaYwGlw8dcy1SRPG3X+7j/n25GPLw+rH8PSV6/cgbM7ZQDKa7j+rR/g5oNagIcSnCdCbgWrScncXPmOOv7Vf37Md300ZuX6a0vED1qYeVk1fKIeiF7+gYV9EoWEQRQOJf0AdUZIZEbJFDWSZTNVDedRgzDgD/9z34RvuH9z2b9JCLIonRFTcyFy0nppu1Wrz9n2EkDtNcBc/+fMQwG4qnkjpmKr5qTwtAWJdVFPN9qKcI9k0hiQYkygj++hQLrc4pqmN2CE+OQRI5q5JQFOw+2CrIBGHvCUP5uzL2tq6JaRdLdo1rcOLk25ycTXr1wdbG2UwNJnGdsN4xKYxqkskuQACUzxFLlHAbnNGjqpkxZhJBbO3OGHZAHE3qRjaIfgdxspwG7eaFLG/j3qOqmTUQkN5DTfuZeuf7efr2ckFwvb7z20FSnYSjORKuXTBVhkUR5v9G/tzg7/DVlHABNFbh1Ocs5+v7WGYxsjgxLxs+xoLtbgjziDO69b0Le3twWMpT9CiSxs5+/pi3UzPc7Nie0V5SnqPFN3DsacwtI6aYDTrdTgiQOkY2zV84No06ihlweWBtUAYrcZ+qLLNgInTZQ0eYDZ1wAwPbMPV4/cI834CQ++id8njc2t6eXblqjZDI5Cr2y9YBbQ6pB0qRJ5gayH68naXtld64Jue05TlPpcNNJwxUk8XTrPvN7vun9Rb/eum2un04r4JzLvt+tJjhkb8Yo+lFIrjLejjCSt+KA8p/BCNf00A+B8vfuQTZOphG71RhkaR3yQDwYjo3st0uQFI5uGqOLj4IkmgebukbW1wgKaDqcC640p1jQ2PxnULnUyr2dXptbJ1MQrjlpIIm7wxzWaq1pOYmWcBBQ7idUMetBGq0w+4SxApLe4aQo/exzQwRlvEFIBjz2mXKo3aeubmrXSdTORQs53o6ObhqcRCOIEMeU3429/vFvJigpgzk82uweYzCN+71rtQuZvOjDoe93q+kJ0GsyPQOI/b9wUshzG8jTG4AOFe71+rG1TIdhyBkv/joSiDiQOpe8cy8DQN3odge6mm7lzHibSUcSJd304fWakziOWFabU6uvaImXOdHF/LkoIMc7e0CaF10fK/189xlcwCNr874PSQSAq/vrJB4jiY/crEMgRnDK/MI2+qJTxCi6o+JsMKplmkHSiyQ6ONyeYzo3wFM5+6KYgB2RlzljabvaH6qRYZ2ix0Vai34zF+nrpVrotdQ6In2dDphMZPf/N5EshTZhIYm1pG12bRWS/MTG6hPaXX+S/iaQy8PM9dsqtNGeHMj9vJjKvr616ovWDjYVESRQqUdV3O35vVtU8hQpvbWNeRUnDSRxb+SjACik/FkkUd7fjPMgVaCZnFAgp0QFlLoTSaEd0sJIBjVHYDXwMnVT4n4bnSG5LPn3a6vgKvsPe++slNirXicxqKKu86avf64AzeaElkii0a+gSWLt1+cU0WyGccxz2Qn67qNSOcNwpGGt2UD29YjvTce0GS/uMTrbfK5ZCiCw+bxhrxQlT5hcWUlJZtdWN9106M8btnISN9OI0+2EB1eH8P6TJK9fNrNO4lAGJa1gbU24Jjr4hnNZgDDV6emtR7hme8s9Xq9OIhPtM9pjJ9Ew8FJamexn1ajRnBQmiqMpEjJQfzdqcCxtsWpItucYFbrSnCB/g+pLcRCbcdq8cI3WRoXGwNWp1G9s07kpqEZ+/u01ApSGtX1AVfp1ilQAq2S0lcelSjmTNbKWvrVVO7SZ83e71kTz82PUTeV3Y9XH8jpx9mEo+6WKi5ZjM44DliVfk+zBJnNCAY4C3au4e0zAoyYIkM57M444P4lO4nZVu9PVTZkSGEKA5kAKHNUQMOP+npXrT4lnrW/uUc5NnVI6/0usE7ZOHOAc9usUSSevo5uf+5sRb9LWJBuY2ayU2G4ncXQOMFOiI8xzkCkf/U4b66TIa8KcbWm/AskynUThADDF3MUc/bFvBwrXMZK1zBjW0uGgcqk11BL2/ebz/dJgB7P+gTwvmhau8Xl4QRV1nT9hT5aBhPb85D3Ks9kqyvyNfptxrArQAI4JcLoZg7rpZhqw3bgPrAYKm6yEsQB8QqCkcmG0/QewzwBZp9L3OaoERo9wDQBc3HOP3ml8hPbYSbSMLZEwHPvZXGvpJFJOioDsefqJfoMykfxctpiXuy/7cdGwtB+bW6U5fL4ERq1fIVxDOOnH5ltKp5Shex1TNgDQKbgUSqoY5Yd5Jur0lTRhhyQyogXxuR4HuDSaSKN17w/RPnXTrHA2MVaaW8hGyF2/OB6rbqqppFkIgKQRAsdToBeDNVHrdzB+bxpJPCmRRJ1uuphOoqQ30eqmoxSuyb9DrU++l/OO20Gsf4oCnTilMZeRdFK8U0oan0BEEnvW/yQCVQzlWt6jAIdkAatwzWEO+8Ipm5M4jTmSyOwlU44kHiPmRqubivuNOdu08WjKuzDmqfqWco7r8zQFNHMSiSDJMCA98hfY95rMHQ6OlDlajvjPC3fPADmSOJPXX7KAekpnRFEk7j4NKOkRKLWWcmOlZWn7f+qsZ07iOGYBWtlcoLA+XlpLNoxl7OXa/gPYe5Bmp7H3aTHBXrrpxcv534/QHjuJBlWmlpNoITc1umkvZM9KmZdUC3tDqNWks6mtWj+C7qg43AfjsKkZkofZqc7VjMJRGHVujsfWe7M343HIKbHMYaOjNnykT6rg9kZNAY5uF2v75QhwW7TAPcoN8tjILrOtbjcjrhM6DifjH5E9P98uuulh6TSs4wHHGmjammSjmDdTToeRktcDHhbSJvv45n+PzTjg/CQekCdrjooeRW4bCEBu2LmxOXVTSSVkaHpDbS8njC1pxNNIinA27LWVz409b9xnr8qhxhmaj5fvecx11PYt1kj2jrpHnn0Ou9UckpjkJDLXv2CTdOTErd3YoJiWt8esERmEYyiBwOpsKE66RbeWc2RaISbGdcM49Ad3AWSqqD1IukTuWds/zYtmkcQ0Bx5IgjlEPz9G79oqcxKb3Yr1z+wLTiCq3MvT8+10M+HBdaSbeptPy0ncz+1AoaZVYZXhqQrXGGi65lyyTKWszXtuQwaicM3FK+vfj44kPhau8YZaZYFotf3832aEREWy2vORtFHWsBgqCGSrV41uSkc/xTxtGknZb2fklmg0NoDJJQW0OpU0StdJt5O/d1QyZIzk+BxFyRzX6Gf6u6EDJU2dRIJupxtpBpKoIFkLeKPpGHXTY5BEjW5KIYJBhCkxkimaanQu2XwgWUg5/b+Vy1vQr9h7tPN3kzmQTH3L2r2dznuaYk7idhowjkMTSdxYSOL4CDmJWRCIuL8lu6ODblcINxFzTJWZg/pnJwLM5kgBq7rpYaFQVWu81m+g1tclcxL9/XaxGpknE0fb8ohzT76xDEwygVP/sUWZAmOssnQJX0sWSJBEMpjgcnnLNJGmcy/m6DdzRik8HYNVqi50AWbS2Utowj3MlXGI7++hm6aorHfue2tMs2JRKbpH00aDkw7Rz7ZLNBv0mJzENHiRBna20xDmsZMKNHBOdCt9QwYJ07HMlLOKDWqVwHjkOok9OYmb1Sl8TDe9uWYiiTUn0aBg6UgiRyNZskXlHm0qYYnaAH05A3683kgT26/G0QYaSGItimP024yjev2tVqv31q9u6h7bRrJ/b27IU6iBGrU2+lSRREMh8Ig6ifp15GjT7r3CaCKuyclmiJFWgiIJpLTRePgyh32s1RTpdpRTOpbOpYn2aFRO42DT1GUZqktNuObY+paW+qccyze/1rbjGOimPkLschJzJ3FZFlcCwzRAxyK308oJdf0EkkKgx5LdwQY80nu7RzhlMw5ZTq41P6Dcy7vW8pTXIKTUTQsk0R5vbJwbjHANgIBEdKmbzkuXky5rcB4TOI3ndm8/m0mS9vNONh1MGPPSUIyTXs33Y50U74CRe7KWE8ecG6kyfI+adnp/s3ME1nWSXP+eYKakqTKpCr200ZoCLqXMr96j7flpOYnp2ZjqTqRIoipcY6QcbMQaAewyPHXhmlVh1nAuU1VgNpiTtaNyElckcfPYSXzkxvKKCz6yUY9FSq0DfJ04FZGyDhvFabD6HVuCoZq3dKSTkr5W7VO5sVtGstx7GCNZR0k5Woe8Hm4ejT6V68/StmRxb2vz8cn2krZl11oqVVH389w0QPVAQj+StXQYySmSyPzWQHL4BuOa66cJ1/SUwNgdFhNFD3OsILnpa7LFdRyf6wkk9AYu5O/NFJfWKKq+pU6AF67xBr6jmx6K9y9LnX7umxMykfU+iZzEKpJS71MTcrCWiRcqWpalywHbbhTVxE4kMSogsk7pknwvu49/T0ApiHn6e1SjO7JUeS+h3ydcEwM5zL2dIlKAp9dzQZnSSekMyhB9gBIVsUrphH5Tvv4ZOnMZgHDP29ckH4MJQANlUCb9LKufpLZyzmW8vx9F3bQruCic+z7hml4nvS9QK9lUXMrTWIiyATlT7HSTCJdNYzxDK2WQrPzmqkpp5RyoC9e4x54a38fXSWTVTRMncRiBads5WNl+1zuJe5JXrCKJLSNZ2bBYARRJWQGIjXXUk4Z7848cJY2LPvc6N5pK5mF2N3VtzEIO2/czDGypxuY+o6O4rjDIe517351SdxQOaW8eBdDhFAkpcyaSqdEdrcNNDyR0yG8fgSSm6qaODm738d9tl0WE+X5pCQDKsE5oqmztNi+xrSOJtYNtfZ9Yk0wpHff58TkKARb9GASmRuUH4r68GSPd9GSKTqJEEiP91lY3ldfxqBIYRCS/QBJZByC5d3pEYeT69/NujiV+gx5EZLuWl2BRS6BUuGaQRI2BwuZy+aCBl9DnS2CMGd2UEq4Z5Z7cIdQlHalOJ9EXc7earN3G1oGU9kzP7xaonHQtx+O/27wkBe7ZgGtydi+E3ZTOM6VN00hiInDk9h97TUo9h1CnlbBn5Hej82QLdNvup9eKtgNARU3xOfYtkMSNnpO4LMtaAqNRJ3GoI4m1bjWgyKpVqQW3WPsua/MBGI9AEje3OMPJaL/rnUQrIqbVlgNsnrxWJJRZINMYb2agb2M9CKcB4IRT8vwjDrUEBEpE8P/rKpktZ9s9ak460OaDS/SRddLTz/f9KNl6dYOs95HKanGs5lBhvF4EGHCHisztYQopu/fmSEqT+x+ib/E5KrdNiZADJJK4yXMSGcMuFjdOnUvOIAcEkkhFhFen9LAEg75W69O3Zn1RI4qZ560ypSxQjMUhkHk/im5aYQm4z5kxDG4debqpf7+vh5nuk7H4sh3w6Nl/Qj+xnzMI31QJ+LF7kFPXPNJJZI1/iSwRNWF9OyZvr8iJC+u4swQGXSfRve7VEa17LfRbkcQeloBcW/PC0TiBxJHyTooxlkQpWOOzyG0jfztZq5XpJ/cS1gEu1yRfpiYdh70maYCd2bd8S39vCzTI5imQRMa3rOck2usrOtvuOZbNE68jZ4NK9pZf0xaY4t4r7Lskz/ksqZO7GdM6ibqz10o50NLAoghWRQRROUvTOVupUlK4phtJXDqcRJ+DePFKRBUfsf2udxJZuqMmf9vm44/FomIM+QKRCje2HX3O819s40LPP+o35H0/67uptDnDSakiuRaSIqJabo4dggCCNsQUu9WELbp/t4WkugwCpUN/HgXA0e2OQRL9S71RtKjc6vtwBxTgjGQfXbSUNdPma6LF6CznNABYjeR87tYcAeecs0iiVgLDUnfUhWt4GlupuEtGnwvaHNFHQxIThM/TTf13Od04ilJqJIS6WqZwjesbjeQ2PSn205HE1vUchjzg10Pb8u/3Q7J5sh6BZeYH6AgwLaS30rsjtbjfSaEQqQS19401kj1V7fXLHYAeJPE44Zru+roiL50NisXc7aQ/GVwESieRCRRm15/op4lZAf3F3FkHTF7LnmsiHSLm5JjGmFvIiusA+V5yMJCvdCwAxf3N0MmlY2mLICIbgw1uSfZWDJ7W+2i1s93YHqUDbiclkDZTvQRGYJ90qptatNGWeCWAagkxeZYyYm5qOyYncTncSD4i8NhJNHMiWk5KW5ShdCwZI03SOugozqgr6TGR/NIgtMeS/ag5DuWGYEXyNbTN9wPaOVmFuiz6k7b9/81C9YOk7frn7ahpyVlnDsQy34ntJ+m+Jvqi0B33BuKmoUSM0TSs1zmlDLkX7O92uulXNwU8ApPkf/UiiST1B8hpQ96htQzXgG4nRtreyCXS8iEY2pZKEyYQyFKkIp9Hu0/5Wvr73Tl1eRWyIHpKNwolM8y1nO9BjLov4JzL1Chh0OMqu6PjN4jOnjlFR/9c0UcW3Q7BHH+/GedaPp5zpPz36kESo7FL1NvTgosEAgkAd05dLs/LD52TeNqVk9gnXKMF/BhVcqAvuALo5xSbbgBoSGI/Tdvqp9FGASLgKgMX5F4+yL2LuP7AGnANhvz6HF0Cxjtg3PoH3DXz/fbk/RaCi/J3Y4LX8vqT6LY8gxm7MEP7Z9+v794GIggzDAPOT2M+3mYckrz+/ODwueYte0ZDEtmawwVQZPwGcq/rCfhlrScnMa2L+BhJvJlmJQDXKFEzgSTqOYnt+UyjKAjLRnEqzmWr27ElGOqF0jkDLVNJm2c7j2hQKAJGLuk4RPEH37pyRI5AV9Xr3x6uQDxZikw5Xn8eBfDG5SRqKHXf2ooHvfu8ZjcAOd3OISJkZHfNEenJP/L1FVPhDuZ380bq1S7JSSTKNgASSeSCW0W9w06qF0AGt8Qco4HQ6OMj1grddHeIuTrP3DkBENEgjw5d7aJ4zXWgm5KoeBKRZ9RN3RrRnPSbz0mMueJcXo9vIXAxz2YQoRgrQW14BH7MxF2Y203mpTP13oJjs+T7luvXHs87ia88uAbQQzd1yq1WMDJtKY0QIM97sd+xzCEtd5tikoi9nBVAkQEP5voXewJpy/iXszXZEYBIHW7mmuhlIrg9IeQIEgHQ0G8csrq87NoCYlCFRRLTHDxW7EkGGHtyGeW5AbTXlqZT4f6O/e6cTtn7fZCwyEsn9jzVljTu8WoJDAKoAFJKOL9PZq0nJ3F7K6KON1D+AnjsJJo320bcnGm/NpJSLnwmt20cdMjeRLLGiuBNy0hT8o84ldKyH+PcxANK5LYRhkxBETA2vBol9hgqLY0AC0TWzb3ZTclbInMLiw2ZNRLGwtlgcxIP8nczInaARFc7FHDDxuqeZ3MS5wXBcO2hm+4SRKRXFZWlvgEI+RWXuwPt2IzK9T9GFZhCBKsUdK5fzO2xr4lX29XopmmR+2dXJ9G/TUbVgWggsKh4qhJIqZuOQ0ZvDQaCkZcrWRqAvb7SoEBPvmtag5NWySyclL7gSorAc+IuEhGxa4WqebIkAnZ7NTBfenCNzTh0fbdMuOYNYnfIcg+9lOSI3Nu2Rd5PlEohcnm7kUTpyJKMC3l2sOh2sZaPCLgqW1G1pTmJc8d5kwYT6Jzo9T27Q/y9/Wc1+02l4jEjQJO+nwOUT14AACAASURBVN23pAPGnIs1JDGlvZ+f5EjiSZVu6tkkDeGasUxDOjrlzLie2j0KHEE37clJHAbg/Gn3/8d005tpbEReyubOc3uzk8Y4QKo7jtLZ4BaWFLwBkZOo002Xbtnu0M/4brWiyEwh3zJpmMzJEhRc+vAVjhTj3EiHCGCcy37Uxo9XIolmNxe8ELTF45FE20CQjnOvslpPjkikgLpcLj5HZBTOHtHHU17mfnGRaRxwuT8EJNGiwMX7Jj5n7VuqcE1HIOfYAFCvYZFSttK2n5fg9Dxz+zTvsz5/nUSSd6TDvRV0UyZI4j83R+Bt56bK7jDGStWje5yUWPNzphA6ORbAozaAQ9P383HqpjInsV1OSqe7W/2AHElk8xH957o8Zfc3m5MohWts5H59r7gH2H0ypUlSSK7YS3pKKfTmJJbOBufYlMIp/PUH8jxNZiXngit995t3THrSG/KcxJnqJ1M+WHXfNH2ph6IKRCSwL+Up/s0EPDTbAvB2ofvOt1MkcUxyEgWS6BXKW4FCKcAEwBTBqgrXdAIVPUHorPXkJALA+bPu8THd9GaaFe2wONO1ppdg4KIxalH2Zq8GktVyEiuUQBbt2Rf9uM2ncDbMOn1lzUNe3TE+55CUPicF4KiLko4TkVyinxiLPdhymjAXbS1LYMxmXo8WKHE5iY35KUgi891knprvzSKJgHMeXN1IswuANdp66DPIPd00q6VGGglnmxGXO74EhpbLa+Vk1ZB0Jkjl39vVTxitvGFR0nj8vAOSeDd3Ek8UJHFH0D8BnW7HUtl2WQ4kYSSP8h5dnyfRvVS4hqJAJ7maPeqHfiz3yBsx241DEtl1nI7XU6rDv5SfG+1C1r7d9jmJvU6iL4HREzgahwJJp/e7zvumQNsIhzQbzwdJWERKoKSW/D+QOMBrN1Y4xU8lpa4zW+sk+jHpDX6esgRJPwJ5pLrpwlGZN0fcN/71VCWW6ROuvwj4MSw4oESOrbSsdCzfUvbK7QRJnMZYAqNQN/VIYuMMSOtGhn7GPLUgbdqviiRWgiSkmRBbT04iAJw/4x4fI4k302i6qcJHbtZ/eYScxNxoYjfWfsEb3SDsr9HkP4M92GRE2DLshqHcROz6lu6xRLLIOXaie8OQO7JLx2EvkePjqE38gShpQ6bYh1K6xEIS/RzldWQPmmA0zXY00rcTjzCtRnKXummCCFLUvk2C2qxfkR3vbDtldFNW3TTP5TWCW8Fpi8+xQSoARQCC3RNkkfRedV/f0n0hVbcDEhQ3ddpmfy3b420TtA1wxjKHJOp14tqlGyrqpibdDuvcli7D4iShmzI0TqD8vdmadIDLDb1K1jEjClMgiYRz78vUzOr155zE68NM5yP6z83zLYk9eShpizzdtK+fPKcWMrgokZtDMKzt8TKU1CtCMikHYi8/hk3CnolAitywzmV/wXkgCjf5MWkkccqRRLYGpx8HSJgTHYJDrAiTXJO0LVMECvPP01oNSUyv5+1EuOb8ZApIoayTGAKFrTWpnDf+e9b2IC3dA4jrky2f1xOAyAfa83RTINJNHyOJN9NYuqm2sCzhDt1J5JyN5YhDQ8t/aXXTkUReybA3/0ItgUFsrqXjnN7Yel9dOIXPEZFztDdIiZrln9caT1ICOdrokB2G7rPsfjJ4kZYaqPaZyk2SymUcynxLa44yT62HopGqXvYd2o4215NbmOaILKTx75tzEudAl7EokrVcXjf3yvpXaGzM9Q/R4CJI0u4ngzJ+WIbuqDmJ6e8nHU1NAn1HRJHT+aS0LQ5JHIsgCWDkJA5lkMQ/32rpHsRSxIAK3ZSlOyZoA3vf3NpOuNzPuFwFhE63tiGzEShwuOcINknupHD36p3EwOxBEk83I672fTVQ0wAcuyfX6PWWxyfPKfZ309a/m7t9/Y+hW6djsXuCtC/Y7+a/Q2o7UeqmiX3B1hL08wwCWAuH9rt+Y+ZcUkiiKDq/P7i93PzdMrppfK7VJHjA5jdr9S2tfhLZ9i1l6p0nQcKnb58UgT7f/JpsnadyHbt+9j2u0VT3xveTudT+kfIRf+l/AH7grcBnfwFY5j4k8daT7vHsLXyfRvucOYnDMPztYRg+MwzDa8Mw/PIwDP9q8to3DcPwS8MwPByG4SeGYXg+ee10GIa/tfb77WEY/h3xudW+TLMO4VpOonVzSzU8gETpQhRn7RMWYrNbVUmvV354QQ/akEcWbbShpBbsDnYkX4v+sMnGpbpjcyjVkbUCAn68XiRX70cebMNxEaq0H8A76YAQCpltCq6kEnY5wOKAYvqluQpd6qajo8315hYCyGiqLJJ4uh1dTuLBFYxnhYM0uldXTi6x/9TopsfmkvYzJ1yTwYu//Se+Gv/jv/UNAJBIoKf7iO20pa/799M5ieOAvHQPIbhSYXdYo6W/d08JhpSGRYuEiN+tpyj42dYFnB5cOSeRQeqqxdwpxLkUbmLunVur89rjJN462eBid+h20gsUhb633d80JVka5J1oW5Tl566jDC4y16XuNLTnWDjA5F6uUd6ZpZyKwPn60gwrxwcXAazCNfZYgNtLUpXSnnxjT6ncEarwbo5DEZCh9wRvg3YGt7LanWj/3lUkMdFKSAM9w+DEp9yZfYS66VimLjFleGS+MZAgiZUfXqoyM2JuccAtcLgGdpdrTmKHq3bvk+7x+Y/wfVpTuZFP4dpfBvCeZVmeAPBtAP7SMAxfMQzDswD+GwB/AcDTAD4G4IeTfv8+gPcDeB7ANwL4s8MwfCsAEH3NZkWENQPN92vy8RXHpkc5VNJPmAR4WQDez6Pep2YQtueo5ZsxCOQxpRT8eHX5YSMnq9PYredy2RvkMYJDcp0sC1fMWqORMGeUdEqdk04Kp2TCBbZzX6Ck4A7EtJ/vTdFNJZJIGrtelKQHSZxGV7+zF4EEEpre3lHgWCpnj3BEDUk3HRQtAMQEt8R9Qwtu1eimh1zQ4SPvfxZf/PYnAJQGk/u/+wxbuEYIQBx4ddPuYuLjceqm6bVk6t36tg3odlyT1r1dGNYdSKJX6n31Yi1NsuVzEkOdShIRdGIf8e/gcBBz9XS1J29tzff6dms74eL6kDjbxL6l7cmmQ+QeexFImSfF/m7yXDxGACWdbx+S6GyE7r2E3MvleAvIPM0hZeW45zjHLUESO+6bdC/Zz3wJHv9+wO1bW/L3Ds42ybaQa5JX3F37iQBvOyexPNv8Z/jfM62T6Nt2GjPhMoATL5tEsC8d21rLVVVUEknsCeYHquj+oj8n8QN/2D2+96N8n0b7nDmJy7L8wrIsV/7P9d97AfxRAL+wLMuPLMtyCecUfngYhg+u7/3jAH5gWZZXlmX5RQA/BOC719esvmazIHEtH8v3s+BpuRgZlEgWhH2U3Darn17vsGMTT1EiYo41Kf9j6iTGnMTKWCJCDpA5carjTCIiYqx0Hq1+x+Qkpk5pD9qglsAgqF5Av3M/FY4zi3aWyfY96N7F9QHzwhfOntaoZC8iuJ1GXB/mLgQScAjM5W7G1X7uEvvQ65S1g1sHsSZZylBJ027PUVNbTJ+vNY3+A7RpoP53TnNSGGQvfT0VgODoXmOBpFvjFeyOgFK0x8qcxGBomVPMaLiRRtjuIwN+88IHOwon8YicRDYnbhxzJJFx0n3zddbe9dS5+V7fbp2MDknsCRwN6HY2SmpfX78oQMPS5EWeFOukT7k9w9CttcBRjwJuioD10E39NNmcxFSVszfguk++G7v/5zmJfSUwYnCLRBLHMaPEAv10016afHF2t+zkSp3EtBTPuUJjl0EjIGEXGCkAwiyn1rI2nhUoKXMSOVvedV5FZ3YX/TmJX/WvAd/3WeDOW/k+jfY5zUkchuGvD8PwEMAvAfgMgL8H4EsB/Jx/z7IsDwB8HMCXDsPwFIC3p6+v///S9f/VvuycaERKOokGBcLD2lK4gHE2/Hvdo3ueSTaW0X8AzXIWo4j8ABwiqKEUPTmJ0tlgKEPyBrWSjVVHlrn+quNsH241J93aD2T9qXnhDqjNlCrpuec4Kmf+uzE5WV444pj6loW6KTXH+Hv35AR5h+v1yz0ADtkAVgGCw9J1HYGVgnhYYq4Ha1xvnHDNjhTT0PYgc9+q3qPcWGWQpC/6z1LLak7iYV6qEeG0HmCcI+c0bGVEfrbVlf3nashlW0mvn93h5liqlDKIiEY3pRCYZO86kPcogEDj9E5iz1ouirkzdfo6giRpe+uqjvuup3i1v1vbCYd5weXOVvH0bUoomTTdWhjWNCVZnFOs4FD1+hP3tyqc1UU3JRG6QOX3VE72+rvHlPLLpmAUOfBkUCb9vXl10zHbJ9l7FIjXfTcvzVIPvqVgxbEUdDblSQbmmf1O1k31LQ0M+HX0x7/2+dhvOhIRHHObMB3bWstarXSgIXgz5J/fVSdxmzqJnUjiMNyYaA0AdIz86O3/Y+9dY23LsvKwb67H3udx3/fWs6u6u6qrmqYbKN79wNAQwGDAsUgHuR0S4SQGYhsbh6AkljAgISRH+EcUJYpC4jwcxxa2ZAs7kZFCTKxEUaTwAz+IiSPLEBv6XVX3cR57r1d+zDXWHGuudfb6xrr3nLvPuXtIpXtqnz3PmnvtueYcY3zf+EbTNH/COfenAHwcwLcCWAG4BuAL0VvvA7je/k7+P/4dJsb2zDn3IwB+BADe+973dq9PZVzPgsOnKBDaaZIMhZfln9iMB3xw8tBIhs3VAU64Zm4vtbmqqH2Vuuk+Qc7FPSAN6o5RADadocVgXEV8b2MCNPrvnX296HuDgSJjzPQB/QMK4JGUWDiCCS7jwJlBcoH20I6ykcxBupfFyAaXfcvafm8Mhao3LvV9sqzS1nt5goerwtNNLUjiCJJ1JpKeeDqs+Rk9I0liQb9kjH79LItp2mIMkjjWkmJ675Lsrk3dVNf26PFTSIqeI+ts6SDYEuz16KaGtawFpixNwTWSuMimadOAyq5X/eebQxKHSRJmru+5tY//C+/g7rXl5HvF9lvZ/Uergpof4B1Qs9hH9LyFRBV5Tql90oRIKSTdOaJ20vWdcopKOPhsXClFTK1kklvAMHltSkrGQToZuGlGwnJCWVksS+yqqKHlUjuO6G8MjNckMnuyf7//fxbdPitRuOkZHdOAAIb7/2//+e8djBvUCBIUe/F/tGI3s5ZH+ytOnMGxKrPFT+sFiU1l65P4hO3C1U2bpqmapvnfAbwC4I8DeATgRvS2GwAetr9D9Hv5HSbGxtf9xaZpvr5pmq9/7rkAw07K37bf52CBTFAgzqJkTq0P+b3m1fvXpzfxWCQE2Lz5n1l/t3mKZ8rkT+1Zj4UkDh7QzTSlmHoC2D5bfC+tAdHcmiwLRWYOjUFTogCPOjA1WXniejWJjJjPeC9HYo6JGxw0DJVWVNDeOV4D4OmmcpBaawvz1KGoG7rWRkzUTdcVGSSOJDyY+pKxtTXJEohqov04QwIoYkAw4+JaD2Bz8BaLz/j3N73fnWUhkApICutcx31C5fWzLHFnKU5PzFEFwayDBgQksawaOkgH0BOYstRW7S/89e6fFCZqNzCibjpxzfj+W4Lgj73u+4Y9f90QJLYB8KNWlIet9wuBjX+NDfbmthuwCg4l8f03JAk1M4pF0mVuci1LD9rCWO8X70FMwhvos7C6721yVL8tjk3dNLAS2M8mST/xewqivzEwrJsE+ER5UIkVX2Z6jv79oMeN9QAGOBCmioCbABycfb0YhAHYtTxkvDB13z65YvfTkOmaRCPd9AnbhSKJI9f+AIDfhK87BAA45w7l9aZp3nHOfQbAWwD+5/Ytb7VjsGksO4mpheWcaymB8SKegtGHjp0JpTMuLBc55My4sfo7Zo5jaBuD0o3dk6JqsJfbAilgmlow1ifR4uxaaXpxQMQ6d3HDbbonlHJA2aw1EFAzMRZJGUMSp4N7RHRTFu2ch5JKkPiuBIkk3VQOUmttoa/3sInkAKpPYvkYdNOm/7sxS2IkF8QzOpemGo2z1VIPXy83ZMrlnvXWMUk3zSLhGktNolW4Y0y4yb8+cS3lJE9lq/vjJACuJ5kW2uI+cXRtrULuLQkZQNckNt0cNs4xWsviXDOJmT/8Da/i1TsH+MQH7lJzBEIA/KilrrMsjTpa/3RSMgpSWFXUnriLAUmsjYGbRnx0Td2mdTkWyFI1iR2SXndzpertR6i7zFJOXDhnLAqUupWFRd10kSVdPfW6qnFtj3PDs8QnJYFWuIYSvEl6a8TPezq5C/T3ciYJKn829ks2InRn1CROa34kQySx+3ybkMTh3+/2cmN/RabuO07AATOQxLp6qkHihSCJzrnnnXOfds5dc86lzrnvAvBHAPwvAP4mgK9wzn3KObcH4KcB/IOmaX6rHf6XAPyUc+52K0jzwwD+2/Z3U2MnjXEMx+Rv/SI7+++e1UqBcZoAKCeZW1hjDjmwuSbxLIeQpZZZVVHPEkChatsiJHFqAzq7bnLzHJPo/svfsN5/3kmO7iNZf9FHEiff3lmWDhERTl2tf9g0ROZ0KFzDNXzWznVAGqbH7XdIotRIkXTTNOkpQtJIYuZbZxRVPamqqU2Ea9YlN268JnFa8CNWZDPtPzOTW1X0vVH9XUeRxLPXZTZCN2UP4Fi4xiOJXEa+GG3BsFlJLxZuAqadrUUW5mhxWnu1jAaHJN5L6NrahQ4SuWctnAE2ddO4drU0JGacc/imN+7RSD8QkMSjVUnND/AsDY3QMePG2jYA08HloN6PYHbo+eiaRCZJMkAgKWpfHGxwaFuX7FD3kvmuh6J/hqRk9L3R6qa1DREE2h6cba0rewb464UzuGRbYCSut9cBXEIG0IggeR8HdF//uhVM8WM3+1w+URH3SZz+fGPACMMKGdXFIM4ALRzEsPs6y2PhmqeH510U3bSBp5b+CwDvAPgLAP5M0zR/q2maLwD4FICfb3/3UQCfVmN/Bl6M5ncA/D0Av9A0za8AADF20pjDPhuBtqc25bniLrFCFCuBfhbdcdN6HKPE1o2lbkkHN0S95ciGMFvddOLBHgtkKWc3yn524xgnZsQhZK5nDdJlnFZxY64FtAGRMUgH+kgi3aMsHanTZD7bzEP7oK0jeufIRjcV2pAp0wdPiyqqmq4tFFtmKVZtn0RmXDbynFLqmgOUevrZdm6sltHQFse6b7mhAAGwOXgb65M4JSIQj9UULApJTBI0zUi9zcQZMIduHRS1azrYBoJwU6+WkXy2ZQ/xCbHpOQIKSTw2IIlxMoFEBOMgsSJq2R/HQk2iBInTY3SwHXrSTSdAASX20b5uPYPNiKCRyhkjkMz+M9YnkfnKpJarMgZggYWF7rpsUlILN8lrU6b9QgsCv8xSrBSSyJ4dOuArKpYB0WcJODe9JuVjaESQ+d7O6otpBVPk/6fqvYfAzbTC9WjpBjMumRmUuv59lNcmTeimxTGA5qnWJF5IeNoGc5/c8PtfBTDatqJtm/Fvtf+ZxjLGKD6N1cTVE5vyGIzOOGlnNSSd5IMPqE1ox00HsjECZnUI/bjpjTWWBPY/E/32RrI4U07a46KkVgTSubj+iPzekmEtKdsnca3qGvTcN5lX5OwjIiySUg6ut3lcTAlhJdDH2nswn21Qk0jSTYU2JM8cL1zjUVnLQQ94uumq4IPLsbYUVVdHwR1QAFeTCJyVuGCd1jBG5rDJxp5toM2UnzF4VLiG2MeBPpLSNA3vJHdiGjXSJO2uvTn7HLM7pu8joBDB0pa40HTTDhWf8byxtVWC3FvWf3f/jTWh8Zqsak5MZq7FSCJ7/+MkCatcGVAb7rmJEUGmRnxsnDUA68ZVdoecRTuBfi0djWQN1E35zybPs2yX7J5QGO8j4JOX69KzBFiFa8AnXTskkWSvZG0is5vjTESQE5wb910ZJDEO+Mop/zoZAgdyHDBtWUbbGU1dr3+5kIjb1DojDeU9LHAAwDuO2T6wPmoHXX0kcWuNRhLjBTkDSaRaMIzIOOu/d/a4WEnSgCTqbDdzrblUzvb3dpXMvrMLTNckjvZ7g6EmVNNNiSzhGLUPzPUi54duOD8jaw2M0E0rviZRrifB6VRNRJoM22awh3atDl+Ac7aWWQLnAt2UpcDlrZNgobbK31+VFVZFTSMpgO/btq5qPFqVs3rLARYk0ZbIAYa1jHXD0N/8v/Y+icNnG9hck9gJYM1CEhVKRyLiY9cUVGRKGCyuiWb8yFwFpOE+MuNC8FzVHGrg/3YI1C31tXsqCcMjiX3J+7rhmQwDJJEtApthQbjGQDdNxpQkp6+VuGF5CStu1GvmTlIyExcHbgbKe9xzb2L9yzUA8X+47yxPk44p4IO96TEDddOaD26GzJXp62n651RLNG2SUFmVNV2XLtfr0YTJFhjWOQ5pwqzgHLrrAJwPNAYcyNjNa2tYkyi+BhOU1nX/7JjaK8daYHBI4rCdF816z/eA1YP2D13xmsRttuBgn/2ecWh7OtOh/z7AZcSGvWa4hTXI/hMZaHkmhs3cJ641irYxyq1DESCqJtENaxKn6sfOqgllkcRS3X+2Jit2CAGutiS+jxz/f0jt40QBkq62qq4b1M20IiTgD+2uR1O7602hB7EiIS1AMJZZJ8Y553CQp0G4xqJuqhQh2dql/TzFSVFhZUQSbx4sAACfe3BKBbJBAa5/sE3R9MYo6NRhHyU8wKz/aN+qiX1VxsUOAuA/31lJiNAPcFiTOOXM62CP7dGn/26/lmvzh4vZHWxGPg729PU32UL1SbQEexrxrGoDkqiaXNPtZjqGTVsnRUr5P05N4hwT4ZoHp20LDMKR19+3RQSrP05e2zzGP/vhPtY1x0AB2uBGKIEVF4DF/gxTEx37MiwlFhDF6YCAsbWFQFynOX2tRKFEloRrqtg1bAIOCOfSuqpRVA1ysnVGnjoUZXhuqOSKQjvZ9jZScqDVTdl1LO8HAvjAJBJGNT+MSGLoVMAnLuRak6UzI+cU2zoj9uXZdYL8ADh+2/+8OOTGnIPtgkRGSj4ZiitMLaxEOSNijJMW01RlNKOSOSpcs2GYZBUH44hr+ffOQ8B6SCLRgiEZeUCnkIMxARpmIx/2Wuq/vmlc3G5Dz+Msi1uXmHo7xQ45gzaowI1VhIyvV3RI4kSQmA4DYO6QUtlIsrZNbH+RBSTRTDedzgxq21ukOCls2WAAuLWfAwC++GiNO4f55Pt1n1UxBoEfBinNRiErsWEt43R/s7OEa6ZbAAwTQPJ3zqxJjCTy9XWng8SAZFmQxIDc8HVSY+wOCqFQNZc25WIZV5uQDY1QsGgnEPokAtMJo3iOge7I1RbGfdFYKuFck8/2zpHfS3RAfJbpXmqW4D5VzwB73sv1CvW8sfdD7+VMssOP6SM+LJPBj0H3L0837SOJFnXTXr0rmXDtAiLDGTDod0gux2W7lrqSA1JgLU+DKmpJtsDINdppuv/9di6mIDHySzYNDcn8YfeAqbU1QBIn2GVjc/TXJvfyqCyCuV6aDNvi0EFitgccfdH/LEI2T8F2QWL7xW3OWgyh7amFFSNZgkhNBmARakDXKLjIIWn/pQQBjI7MeMNtLkseiwBtqj3ScxzQTScOqTEBmjnKrSFbNDUuphb7f5mM8BwkcZQiwzhbbQN4PY6uSZQeTaUfNxUkxpQQVrhAI1lWCujBIsX9EyPdtM1aWxw7ADjIU5ysS6xKG9301kEIDG8fLibfn0Z7AtA618yzHa1J5nxK3JhwjS1x1KlyTowbywgDm1UXg3DNsCZxMkhU8vqlYf3HQTCTyR8+22SfuF6fRP7Z1ghrRSINQITaGIKNZZZ0yRFrn8R+kGILpAAeSZlrIoL1diuCtUcknBJ1tlmUkudS0np0RwtKl+h6PxbJ9f/qlg/+9U0Ouf+3Rzclt8k8jXoJkglowH+m2nAmjvVJZEXgdJDIJmWWHd3Ui5exSOIiS/rCNSQDoqp9/bUlsRInoZlRMUrHrJG4RlmsnEgejbalI5E9PUd/relEyZhwTUX45nrfslCZAfjA8PhL7c8H5KAnb898kMgUnyZRAABMZ7eGfPz2b00hie1iDUGKf53JyMdKesz1BoI3DNoWcc/lelQAEAWlVd1M0r3GoP6pwvkxSixFG40CYJaCOEbtY8ZpqoufI38fB4GsMfvJiG/o61lrEuMAoCYP0t4BZaBtAUG8BrDVSZVVY1K2A7xwx0lRYV1WdEAKALf2Q2B454AIEkeQe8a5Tly8JlkBiGHiwqq2aEHg4wSc/J2pZ1sLMLFqnkGAxooktoFpF9xM18QNBYDYJt1KpZRIYopJwLZukUQWEc/TvrgFu/6dc7h3za9fvidpvybRUqcc16CyTvkcO1z65/lLRysAQcl1k+lErY1uOkyuMIh/lgbBFUsAoOuraOEg8UtiJHHD54uZSkxtv5hPXEhwwwd7fo62M7FX398Fl8QckxDIsqJsgA4SPZK4JDOgi9QL3gB+/2GEa3K1300FXtpidgGbXAS0cI28viFoO6tP4sR3Hu8HAKe6Psbw41kh/deEBTFV8hEDPnQrHh0k7uimT884ZaMzkMSJxSHvA3gaSZexq/qHxnSwF94LGIRTRrLdU0u4cwi1k0Y6oHHgUNYN8ilnNwHqGOqfcArj/lN+jtNIohwOwxqRaWd30O6BGJeqQzTMcd7BxiqyWXt5ASK/3Q8upyiWA+Ea8iDVNahWdG9/RpCYZ66rDwFCnzrmWidrewsMjSTeYZDEkYOtZpIrSbwm2ebSseKuvb9rcJKnx431SdzEMHDOYRG1cmHbsnRBSlV3a9PiJAtSxATpMd2arVvKFFJqyT53QWJZ0wkZoP9sW2mcz11fAuBR+wEtmcjiy7hecrE5XyRxmaV+jVUNFlnCJbfU921BEnt0Uzk36CBFBdsWJFEl4eYgiawwkv7ebHNsSwAMSRItnGKqLXSuu+8WNe0s9bXzdc2rJAPhXDpeVQCmGTlin+LqEQAAIABJREFUiyzBylqTmISEU0X2YPbj+v6FKUhv+s/AHHVTXz959rXivVXmCUwEl9Ec/bWng+cxJJETXRzWG9P71uIQOH3X/7xDEp+eMZtCvECY7FZMN+WlrWMk0RDsRagBQAreGOv2OkUq9YzSohgxBZGoSYw/m1zPz2Uz2lD30FXuPgJDha5puqm9T2U3rkcjZIVr5om7aEls+R6mEMF4nnRN4kgCwipSYUX3ekgiUUcEeJRgXdY4LfyhzTq8+4puahOumRckWpHEOPvZgEQ2krhOlhBgiujdbE3i2LMNEHR+JeLg58itE40kioNtQxJbxK3ihGuswllACPZ6NYmMk5b44HlV1ibaqKaxWRARIIgwvecWVzMzphI7W7jmHINEIKCJeyyVdqwEwFg6cBF0Rx2UlgRt3Y+RmsSAODPPjU6eNiQiCASULiQJp8foPchSy54kI+e9oQa4aqmcPN3Ur6uHrSgSe3YssoAkFmQLDK2U7BMC1KV65SVsQmZQqkMkeM9SN91Uk+7/Zj9JqP8GJVzT87mIYG+EzVYzZ7AL99GSlAQAHNwLP++CxKdnTPHp0Nn1/05J3wLDIHHaaWrnFWUfJhEwN8xa63mcOS4ZEbcwom1Sb8kgYGmCqCZxmls/JlwzWZM4QomllFvP+N4YJHFsjVAI5Fzabucg9Oe+yfK0n332f4uoSVT9frogceJwi4vLaUlyFdxYFcE0lZNFEkWk4uGpl7tnD21RN10baxKvL0PPI6omcSTbyhxsmuoFGBI58V5CiFLFIhWypKfnOI4kTjWL1mq7AOiATwuniMPFfN9jtXST1NYkTsBxjqQWoLGKKS2yBKuiNiEbfUTKQIdC6CP4xvPXqPcnSV+V00J37Dl2pCrq49i1Pf+c7pHJJp3wsPRc1UkZps5JbC7dcYBAGtZkr1WKNeFXc/sP0KpwGxWn9TNqqWXXa0v+5a6nUTo73fRh++ywSOIy08I1fE1iN0fDGolLPizCNRZg5CwksZoIaMdqEikkcSThyiQ8PCLYf41RWPb3Eb1r0vvWtefDz4tdkPjUjNmU4wCAyW4NVErJoCHO2FmQxLE+fZNI4sCR4cYAY/WWHJJldXZ1k+Ju3FSfxAjZADh1x1iAIwTp53j/jfcDGBeuoaTMVbDHUvTkPV1NYitcM0U3jZMrrCS5puAyMtra3nPbIxrO8bQOObRF8IZVKt1fpKgb30vNgiQ65/DyzT0AwEvtv5tsLPvJF9tHiCBdkxj+nwnu5VYPe2QR1zoTSTz78+Wp6xwm//6aor9puqmMZ747GRdq9+rp5FbSF+liEFkAbZ2Ln2Nl2FsBv5ZXZWVyWrVqogVtANC1m3n9Ob5mZqAKadx/AAkuz9d9OVzYg8SmaemHliDFBQfUUssYlw7QoiRp/+xggo0gqKeCe5LxUqkAmO+T6BEYi2OtS0wsSG7qhoENcz2N0lnuv+w3j4xJyV5NIpkkkdYtot5tQZt1IoFCjSPfyRK0jYnCTAE3cU2iBUm09+rul84AfMmHbvej5zBph8+Fn3dI4tMzpvh0KOU/vfjnqpTGGTu6lcJI1lrPY9M8e4I3BGowJ2Ok56kDvoJSN03OLFI+66Aac6w93WVifmd8tqlzdPb9j8bxDW/taCcgjeO9IIBkoWnhiPZ6oU+i7Xtjs91jdFPWcZXgi0W2geAEPjixtc4QWfx3jwtTCwwA+Ls/+a341Z/4Frx0c5qmF69J+ZlB6eI1SdUkJmPqppvHxCIVMlWKbloPX/fCDJuchKQnXMNmyUeRRANty4okameEbRPknEOeJFi3zynA1agBLdpQ1rDI3eda8dhYk/inv/1NADySCPSfb0bdGvBrua9mu3l9PAm73iKJTPsLQKnS1rUpSElc2OcsNdi5SrjWDU/l9BS4sI4t7VV0cEmjpIpxZFVgrSbOeW2hxKShqI5hXEASLT2HNUpXN5ZEjl9Pj1okkT07NN20rOuuFdAmC/tdbarjjWtJbS1I/P8z4EHcEkdsCr0cq0lkFK5j31V+tpZuyPUoJLEdZy2d6SGJTzFIzKbfcrWNOUxjBT5m4zpLpZQNwEIjWUxeS8b1+/T5f6eWo26kLONYalnsELJUKl003zTT9/+sxqnJBuRgXLiGUxsFRgIwYo2M3v+p4NINBW/YGpE5joVkFqs6NBNnMsn6O5hTk2ihJGsKrlXd9D237ZupyNtL42wLkggAJ0VFB5bhmineeP469d6zsp8cRSZKkrDZ/znjlGNBC9e4IW0ImHZC88z1+iSytMUk8cFsWTWdCISFbirX5FpgJOb9R0xaAFiCDcDX4a5Kn/jkg0QlXEMGDWJ/6Kvfgz/01e+h3w/0e+CxwWyeDhkX5ylcAwCHS0ESjT0gFU3SGkhZHEmP9ug2EdQ0+1RCtt5skCSpu7Nk8lrqnKIp0K3ibldbSCYyAf+cWfuLxklJ5hHQAQ5L5QdCEnJWTWIVUCkr3bQ0IInxPWETyQAG95ISeIxRwYl1GdPP9XWZ6+kjh0USx1puWMZ1wjXsg3q4o5tuhTH9xsZoc8BExiJSKWXph6FxNnrjJp2tBBFq0M5jKuCL0Aaql2AUgI01wz57nn35bYDot5cOof4pul0cyAJcvd8gY0rWRCSufx94evGwJQiHyA5FQrg+ieFgC/QM5rBPBuqmzPfWCX0YAtnHUTd98YZHEr/2vbeo9wMaSfSZXVbwRovksA2R51iM0gGBAbHJ4rXFOjIxus0Kruj6wrnqymJTQXCuBJgAXqURCA7oquSFinKVXJH5TQtuxUwGa01WbVLJBALd1CLsItcC7Oqmc0yfARWJJGqRFsDvQcy+9TgmQSK7H3TUPiMCNpYUYxN+c4RrdH9FlrY41qieRYADK4pHO/OWShsCjekx8qfN6qZpP3EN2BOulgB4bk2ippvahWuaVjGURxLntKmR9wOczxv7kmJltXk9xywNfd0pmmp8PV6ErP8a8+zErAn5W5TtkMTtsKqerl0a1PYQ2d0YSWwMrRSAsKBoummU/WeD0li4hkF7Ou559JDy2U9bADCGJPpDcfN1gKFwzVRN4ln1lhytYHj/p/bWGIG0UDsGTWspummorbJw5HWh+LrigvuxDC172KxKW7Ah9uGXb+CPf+sH8EMffz/1fiAgBdaaRF2rZKlJnGNxLS9zQI2qaxJVcTG6zTaBj0Uq5LWNc0yCSm93vY5hsKkmMYnoh7yTtt+ibXOEawJyM013lGy3p/m6traTmqL/fO19APj1L5S0LEnogHSh+yQaKIFzTTt47Pem1RYBv/7P+5m7vrTVJMZKkgCPgMWUNBZdnSNcEwcAXE1uPwCYEpYK10IvccSuSa+CXpmTi0Bf3ZSum1RKnuz1ArugNqmbzq5J7NFNbS0wKmPdZJYkHbrH1jfHvhMTcAuzY4wpNoUIjvqEbrP/Gphi/bNjupZ9KLDGIKxa3XRKkX9gz32Zmvj5JaGnbBck1jVV77cu+4sK2AwbD1RKWSSxo0xEzpYhcEsS19UfWSXoTeqaTezIc+O0/DbABelx1qicyP6Mcc8bYo4DKX+SNpc4L1rQOYQkAhmjDexhP7dPos72sfcf6IskFGQtlzSpB2ziRlrd1NICAPCf7z/47g9R7xWTRtkPTgs4x7UEAfq1SuftsMa1vMyBH4/xdEfuWvFzQ41zwz1h+hAdOgjM/pqlfeECC/3Qty6puj2dUaaVhIhWF2QcBMDf99TxNYn+er7Fh3xG1q9Ytr3UlpkFSdRIiiHTPdN0PZFFuEZ/30Xd4MBYB2w1QRL3SbqppoVbgg3NQrHQ6+egPYDcf1sNaowSlRVJN1V7gklMKfEBsGX/13O0qZvqhuf+Naq+P2Ll8Oqm/ZpE9rzpBYlVQ91/6UEtSrGWPonzkUQJitrXJ5l6Z/Qhn0QSh2I3k2JuUd2knydXujG4HnFfsjQkvM3CNTnXVui8bRckkgukhxIRG3msUiqj2Xq/GG1jauKANlsHxyvpDdAGy7gwRs9hk8XKdsA8JHGKFhXqE/rfGxM0+7mF6wCccJAf52sF5tJN6V6Cbl4dS9fvrQo1iVMKXcAZNYkTwjU9JJEMtgGMq5ueo+O6VMI1izSh68Zu7Id+h5YWGHNMI/CAYd/Sz00DOLLfWEydpvsrKoRI5jA15szakg1jBWnTY2gkcdG2LjGom8r3K04aE5Rqheu0RUz5INE7TuuqQpo4yiH08/SfzTv/3Jg8TbrEj58rNWy2aaeQRhLTpF+DWtWdA3xe9tz1JQDgtBhRVhoxzdKwCde4QVKSQhJVEs6CZGmNBWsAoL83ShU16VPQaUpsmwSyMEm0DoFJJVbP0XBOSYnBuqxNVFpJLnbMFQOSuGr3rIIUbuoFzjMTCRafxF8L3TUBu8I7c80zkcSJWym/12PZmsSY8UKLx0VAkSkJ9+m/Avzeb/DvPwfbBYkk1GytSTxTpZR4YPT76Yy8gvoz8FnruHE2P244RytKIYc+pW46QBs217KMZYwYZ1f+pLW9R3z/bXRT7ewa2hR02ef+HDZZkMQOjgyjkqaVSi01iZ0zYqTxxDTV8yw/6oRrTgoTIqjbV1xEkKgpMlQWM2JAVE1DftdDmqqVXcA6yWMJoIJAuAVpE7M4QHuqvyXA0Yvl+12VPJI4pgLN+gdZ2+JjVdR0M3eZ57sna1Owl6euC7it6qZzLKYlLwg6Z5721z8r3PE49lXvuQkA+Cefe0i9v6v3NgrX9Pe79jUmuEmdasli65OomUqWRunyfDPCTTJOn1PsPp6lSU8l1qxuarn/qT1xDYQ94Xhd0nME/HmzSBN8/sEKAF/esExFuZgT/AOU4m7bTmdOIoHvZRojidP0T2C8ncXUNcdqEqfYZX5cvwxM5jsbSTSAABahwM4+9L3+v6doO+EaYpMcZPGJjSs4CH0+MotkhU0Lk9fS16sVujdHyZBteK7HsfWWQJ+CGDZkW789GbuxBUn7Jwd9EiemGIuEWOim/npyrf7rZ9k4krj5WoBkaP3PFmqNVuCz1yT699tqEkP/NcCQWZ9RbznXOuGa05ISMRG7d23Z/Xz+NYn9Q5E6ENNhT1Ir3RfgaxL7IhVsAmjYJ3GqByogSFsUJJJrZD9PcKqCREaZdhEhiSUhnKLl5wEekQUEJao9dZSsiZN5iiNp6ZMowYbQ5c/TJAAGbEiWPoNZdc3Hsa98xQeJuvZ1k/UTcP41XrjG/xxqGaevN5duGusCcPt/y4wSdd+aEw7SfoIlAZG3c5yjbmrvkziC9hDXk3PjZF21158cAsD7GLcOcnz+YRskGpBEADgt/PUY4Zo+ksiJRAFDFhBLf/bv9/9P17JHCSDmmqmqmRTj1Eb9v3Pq+2MRbrq/YswKPOf99UnbM48kMn2CBrU9xMYVqEb+/2U4A737cfGmNTXO/6trgpi16Ole4f9t42IYnRmn6hosNYnRQT2VyYwznwBXkyhjzbVVI/cfIISDRsRFrE2KLQFYL7NoyGxphdmuT+IUkpiM1XpMXqqXWbdkhOeaHPaPViVuKgrplOk5ve8u30x8jo3V4Flp2jxtKEqu1KA46Fqkgk1AxEg6oDOuZ6+vLE1w1DpnQHs/2FrSha9JXJmQRL9GViUf3ARkw/+/BUmUFh+rsjKh1FKTaKL2RYm780zIAH2VRhbJyltkSaysm3Onm17fy/Effeor8darnFKyzEcrRzPBnmbl2IRrNN2Udz6z1HUUWr51DLr3A54FxNAd9b5lqYnL2t6dlgRoKLmxBXvZyHnPzFMYKLIPsc8bANw+WOD/aRFqWt0067dqYvaFWM3cIm6kz+A5aHNV8/d/rE/iRiQxHUESCcXvWHPCz7OZTBSOljwRlOtUJ7ytwjVbYs98kMh80XFhLbNxDfsdcojIoJk7GQDE1Kam4eifiRu2bmAd+XjxcxtCgpOq6s11+v6PIIlTnPUR4RoLImJtCj68/9z3liYx3ZTL5EuQ3qisKUc3DYeGOF20cIQ4CKXQTfnvzaRSN0JbPE90Q9P55tJGv8bQcmOOZUnsJNdY5pu37zQ6fC0qdfHzRmfkjXvCKJJYTx+mImwhNtUSR9t+nuLd48KkbhqQRL93MU5yYIUEIQdLTWJR1TgtamOQmGJV1HTwBfiA1IrsPY4tI5XGOcI1Pvt//kSoP/wN76Xfq/UETHRHN9wnWeSmRzclb8ciTbp2P94ZZ9RN+zQ9X3vPjSsVm8Qk3FTbEEG51XXdmJDcNEnQNPZxkjiy0k0B4OZBSEZeW3JuuCSzpJaRUd2V701QWZ7u67CSRMJEOwqxmG5qEkEc8e+mQIAhu8xQlqWRxLrB/pR/N0ZvZeimKpg1C9dsiT3zdFPmi47FFZiN6yyVUosACqACUpKmKgFHw0L90WdjaxL7FA3/GltLp7nueu5njhnJGk05QUl0/2WedL2fESWN73+4J9Pj9Gdj+73lap1YhGvk0CiquqNrMHVqWhK7qGo4x2zIiUIS+URC6vpiB/5vnT+SCNhpo7//wy/g5n6OG3s8AjnH8plIog6kmPproEW3Iwo0xxLQAhxhDpPXGskIA9N0U00DrMg5AqomcY5wTVV3/06NizPr3kkm55gJ2lnRLRgAT51dVzXFkBETaitgC2Tn2jJLux6VTL9PICSpJPnm+8Rtl7M1xtJglarn9EnM0z6Vk+9BGJ4d7/9Mj4nLYIqK+97y1HXaAxa6qZzB1tpOIIi0+Nemr6UTpyxzCwhI4rEgiYbn5rYKEm8fLqgxi6zfz3efCRJVWxbb/e+f3VSNbEQ3ZZOSZ6mbTvVJLAYU1eme52MMM0qELGITAiS99YJ9mfOwHZJIfNFjtC1g85ets4qArd8eMIIkssFll8m313+ZxqmHRg5uZunrOrWAGNih/qneNmNIorQFmbJRKX/j5mMRvOkVUZMbeZ6JQ9KYHQugrUk0IpDy/nXVICdUQPX3xt5HQNBt//OFqJs+BpL4X/wbX4fo7DgXy6IaPKZP1iAB1LCZ9b7gjalPYpcU4xoHx0i6HzuNJA7ot0SNpth+nuLUSDeVgFCy654GutlJGyT8DCjdwSLFZ+4XuFbakMRFmmDV1lte3+OO9zxNUDfonPLzVjddZEmHvljUTQFBsBytrnmRNh5sGJFEwz6pnWtLo3TdSqEikcQYJSrrpguSNs4x1UiigRKbJLOCbcDvV7NUUWubKqo8/0dtKwuL83/7wAeGeepwuOCSQLIHCZK4T4zTGgRsbaGM0/vWXs7ff90Cg+4TOnIGTPVJFPRXrsHWCMrf711rqnVGMl7yRMUOkXDNZQsSd0gi8UXHi5jZuFK1YQG8SmOXjVHjKIpexLVm61/iz1Y3DVd/pIVrojlsnKeiDbHwu2S1miZ2CqeRxP5nY+smh5LkLN00zhpNIomDmkRbbeG6V7fBZ1t13Qw7Tt5fVDXlWMsYTYmlhVMGCOTksNmWpUkXPFuRROecqRZlrmWJ67UAYA58aaPQjWmmJcKB8cSRVcyKCfTk92M0HmDzulykSYfqyRhagn4R1E0XGdfyJEscnFNIIhG8jbFCWCftYJnhpKiwKmqTmNIy9zWJpwWPQEpwI075eSOJiyx8dzWR7NBzDNQtTjjlIq3H0jAEN/0+lXxwqXvFWVCiRVu3CvgaW2bPi1Eilt6t9y2WkSBzlCb1AL//+DnagkTtc1mCdK2KDXACWGK32iDx1sGCLqXoahIlSLTQTbsEEI/kalEk0320CtdEZ0DTNJMBpvg/MQuLqRH0c7QhiVpcqhtHCeWomlyDD7RNtl277FMwFjKOlfSAzYs4pmewTnIc3FQ1n/0H+kgWsxTTyCEEGaT4AMD/bBGu0RkqVrgmUHfDa1N9wOIgHWiRROKuaMc1IIKbxwzvP/991014P0tJW0SOHXMtQG2uVR0EaEgnoVDCNZRogXoGTCp1ri/RLq+dp4lS6XmrlM61PE2GNXhETVwVHaJz1E3Z2hLNLpDxk/1dR2g8DMMgRhJZcQXAO1cnhadyLknYzDnXicIAaBvWTwSJI/XlNJKYpzhel36OBudzmaUo6wbHaz5IXCiapEXwZq4tsyTUO5FIVp70ncKy5oRTLtJkPn26I4kIVvZgr+slWDcm5dylCtLXpDBSjBL5IJ07b7rPZlj/Urdqae+kz2BrAhTwiWdLkL5Uqth+znwy54Ub/ryJEbRNJrXz7xyv/f8b6aZs2xIgYnwZgQrNFOMT0Jq5EuawaYxcQ4wtHfPX0OPqSdGzLD0D7ZzyXUfaq1w24Zrt9Igu0CiIOh0qgAIckmhVadT0AKB10Kjsv8wNahzjEAb1PZkn5xCGzyTXtFLS2GbusQAEMJ390QEKwGWnxHo1IuT3Ft9/9p7IGurolSzdNHLsmDkC/fsijgLblFfoHUXFyc+n2mnq5jg5bLQm9LwpGs/f8D0PLQf9RVqs5sYITmikAeDX1kDdtCF7oPaQRE4UKUbSgaCeO1WTGNNv2eBmL09xWtQ0iiKmVTlXxfTYGP2yBAD7ixTH68osXCPoxjvHa7q/ou7vdyHqpipIYQV2QvlGENM47xYYVhsTrqEQQV1bSCaF/bgERdWYmCRAvyZxXXHrKz5P2T6VuibRom66zDwFWmpXTeqmtf3+A96/qBv+Pi4j+idDvxX74AvXAQBvH63pMaK8/dn7p/T1ulpqUTwm778WamEEYYBxn5cFDuL2NvrvnTVGv1eux5w3eo7y85zaeYamqhNAcj8vgnn0JG27dtmnYEw2wDsyfYcE2BzcDLLIVgEahaRYePVaOMUatMk4ZgnH9RAA50iOKV5OCadkyfDBnnIKx+4HQKKyM9TmzqKbTiOQ6K7TNHxGuAsSS5siW6aCS7aVBdB3Elak45pHVBfAXu8a1tb5bqwvtpndA7I+5KItT/pCLWxN4kDsZo6YFelc6HY6tHBNhKTLPIHNyYtcBWwAT1sEQi3Pg5PCFCQu8yC4YqlJ1NR1mm66CMI1lj6Jh61S4sPTkkYS+wmn83didLDNBvd5x5zw97Ko63NvgWG1vnCNf40V/OgFUqwCZYvAWFAzINz/pmnoREm8lguyT2WmAlLL2urq/QyiMMF3stWy65pEiwDWMkvgXAgSLQnGN1+4Rr9XTCiqn33gg0SmJlG37rEguX0/bVoQBtBIrv9/C910tMWcAYQB+NIxIOqTSJyLWeQny7Wn8iQ9KnmzQxIvpTGO05gCJTCBJKb9RczWtg1oqqSy1NwsTpwhYdVNE4U2sCItfp7JjJrE4YM91Rg23A///7UZyZJx/l+rKq2Mm6xlVEkBCyIrwjXrqjY1YNbCNeuulYWhBUBV45RUXByl8ViDdAP68jgmh+mHX75x7teaY3P6JMY1iTXpkM8Vs0p77ALu+46RdICrScwjZJXpkSUmtTz3Twq7KExZo2yDKZZu2lMJZOmmC08bfbQqTXPUcvossiF7glBpzxtJlLpJgEcS+43qfTLtIlpgWKzXk85QS50lSV/cyCDuYm23AQThmrK9j1R9ebSW2e8tj5xkliEsa/dkzYvCyFs03Ze7/xLcNKY2HUJB72oSDc/pc215A9uDExgiiUxNYhDcqkwKuDpRaKGN+vfbhIriunSGdRQj2wCJJEbJDj/f6XG65Vh/HMHmEX/XmMzZFnvm1U1ZKfl4UQEcHB7qUTA5Rv9e17GYetT0KKDzsjiz20RQAdgwcGb6JALoWjDI2E33sjswoto2rgdh+EyhtnDzmLNrEifGqSxm4vhAtleTaHASJBhaKyQxJw43OZBO1hWNJMby2+wc+0Xz5++0AsAXHq4AAB968fq5X2uOxc3jy4kkCTBEBC0Jp1jMyko3ZRNAmUqmxXvf5prEqAVGzaubClr89tHaiCT64EYCnKlawVF1U3It7y/80fzOcWFCKA4WOki0IYnyuc7bh1mkaaSuyZ9vZdV03/vWqZsq4RomkSyWpqHeuyLPe0B6CdpEcgAfOJR1g9PC7ydMzWuc9C5JNeFevaUhAAs9CFu6KTHOOS8uVTfBmbck2CXgtjjxyyxVSCK/lzjn8H/8h/8SbuzzrZNutW0zPmMIEmVOq7I2KeD2lcltpSwdm4Qtb4jPqc6/3qQ5kfTeC/DsGpmbvh4reFM36BIdfu/aOCxS9+UT5dtk25WKewpG0U3PyHRs+rKTOPNGIlkxTXWuuilANjKNkUTSIdS91CxUQt1/h+GeA0A6omQ1lcl0zvkAOApkuZqsJ0c3ZZHjqrHVUcztySWHxmlRdRQnJpMsTutJ2zrAhCTWDUUhEVtkAW220K8ex/7s93wIH3/9Lj72+t3zv9gMi5vHs8mtfh0vX5OrD1GWAt0XruGSJEm03wFcgJm3FL1GJYHYoOFO25fst794ZOpvKTQ9tnXGMOHHq/RKIMuoqGo7XIbnklc3FdSm6v3/eVncgoFFpIC+KvNVEa7Jo4SrRYGyt7fSwaX/fh+1rRss5QYyT1q8TNckGgLgZdyDkL0n7dldGc7SrPe92Zz4vTwJQaKBFg4AL9/a7yH/09dKscgSfK6lm+5RdNNQkzi3TyLL0oiFa9izO1PsMj9e/JlNY4ZIIpNgGfrJvACNnhvgz7ipRIk+p2SuO7rpJTNWxnaMM80gicMaNRuSyG5aAySRHKfbDQC+nQUVXPYCMP8aKyUv90I2BlbddKBkRXxvRbdhta/R6o79z0Z/b0pd1o+buNZIsT0zxzHhGuZAFMdxVdaKbjo9rkMSiwqnBaeI11M3JYMGGdfVsRiyn49jX/XKLfzVH/lYD4nZJovppgWhVBfXJLIqpboBMMBT12PhmjRxRJLE/xtndoHNSFEsgW5BKSRIPFpX3c+MieKi1CVOOYXxnmBx0nRtLBvsAX26KRtcCitBggZrr1CribpmXTeUsiCgpPyrWp0b2+W+zBeuSXqUtNnCNeQ2Kd+v9PdbEEh1nPRm+1TmiUJSGh7tlDk+PJU5ct+1nN0WxW/92SxtOgD14AvOAAAgAElEQVT/bM5BEufarf28+w72iO8tSxOkicOqrFGUvCJwD0k00EYBVeJD7slnI4lnj9WlLHoc60vGNYlTe8lYMpMJSnV/V4ty7jbZdu2yT8H4jPwQSWQW8aD/0cRD45xD4vp0U4uyl7UmMW6BMadxNkutlHGx2hOrSBWrmzLfm2wigW5KzNENEUgrImIOLmvbwdb1SSxV1tqAJK6KqssGM8G9OK1elp9DNzQlxJJZz9LQF9PSW+4qW5YmXcIDaCXoJzYGfR8BI/0n2hM4mnak0mjKPutDm1C361q5hM/GZmh1YGgLEr1wjbRvMPdJNASymkpmQxLtdFOh9j089c7uebeB0fXNc5BEeQ62D0lsE3dGCqhG/C1tUkS4h1ED1raIAjBLwk/ORbZPpU5usX1a/ZykvUS7Jkl0W85um+K3/9t1G1za6KahvvZCgsSWcpomjl7/fo4VrSUgf1/ThJlnNG6TwiYFvLhLX6VU/72zxgB9n7Ak9tdRRJD0JYF+MpMp+YjrlC8bigjsgkTqAUiSIP/vx0z395Ngb9Dvjdy0NJXTwquXZ6Zu7LWFYdzksJ7gTYckkj0IYyrnlHDKmJIVmzWKg3QrR56tmxzefy4oTdTmY6ENLbKwSYYifSJIbGk8py2SyIjWAEFJTZBEqkdT0t8g2TnmapyFonSVbZH2KTkFkcmP+4uyQUriXK8tTkPuCTrhZN+3hnTTTc+3OEjSSoFRthObGyQKTVKuyaqbauo0jyQqRNAgrX84oyZRnNsHhqDhcUzXSbHIWZqEpEC3PrasBYZuX2Wpwe4FUoYgRT6/JC3YfVICLgtKJ3MqVIKX7ZOoWSF0TWIuc7S1lxDROYu6aYwA2+im8xD/uXZr3+9X+3lKK35LIMtqCQBxP2uj4I1KSlLnxhlIorVPYk2dicLAsgV7nZ+me/MSiVDtA1nu4zbZdu2yT8EYxynOIlhUOeOaRI4C2q9J5II99K7TgKwtTFxPWbAxBJe1uhZgQBIV111e22RxvzGA5ZEHqovl0Nbqjiy6N7j/VnXHGiba0Nw+iZ0kdlG3SCIZJGrhGhpJDJlFi5CACOmIKM9lUwM7D8uSfk1iWdWTrWMCm8GGUmhxKYCvSdRy32zQNiYkwKmbBvohYHOuNSXTSjcVZwuYdq41QtHNkRauCQ7ngakFhnZauWe7awp+cjFIouwdx+sSTcPVcskZUNRBcGvbsvK6vZBFpEK3k7IwJ7r7WLQKoOS4QU0i8X2LkufK2Keyl6g17OVyTt0/kbpJ7hmQxLxFTE+Xs9QGBVAAvZrmi0ASX7jp+/laAtJlluK0mIEk9r437lq9ceSePGDqEc/OWbTRSbXRNPgk+nqT6vXtr2Mkcbp1RjinLG2atsl2QSKxkGMlJdYp13V7srZoJNH4oHW1baomjms3EGVjZtUfCWo2E6Uj7iMQoQ0Ej7yv0PW4c7Rx1nm6qf9XC9dQYgc9uqlca3JYR1NZlRXWVUM7hIFuakcSi0rPkTs09Lgd3VTopmFN1s00Aq+RDeDx6KbM2tJy36xDOPZsMwyDsZpE1gHVe4AVSVzpmsRJuikGc2Qd0OevL7uf33P7gJ5jT92UVEUNSKK939scm0N3zDWSSLI7Ltp0sNEhWayTXNkSOUBA245WNnEXuf+PjMjxIku6BAmDvgD9ekubumm7JjtRGL4msW6MLZdUMs2SyAGA22r/sArXzLGXb+31/mVsmSc4WlVoGj64jH0gtv43LtU5v5rEfrmBjJvaEuJWLjJu0gdN+zGA/xmT9dS6v6ul3nibbBckUkGi/1cXbQNEcONcz0EAOEc+UYFb1dhqe/qNm4lrDeim3EJOkkCtZIM9eU+HyJIU0LlKVj2n1Ug/ib/rqT2yc3YHiq+bx/WEawzB9qhwDX0ApzhtkUS21mNPCddYkcSysvWt0igRW5N71S1PgyPJtgAY1kXzQg5D4RrOISyMyN7Yoc3VJPrfifjSuuKagou91GbkLUHifp52SDrABIktkqgz8uQz+vKt/e7n997hg0R9z1iHcK9DEi+GbrqIAgAL3dE78oIkbtfGMNonkUncpZpxxNcW7mWhThzgkcQuSDcgiYDU5NZtzR8XpOepw7ryTJKaTFwDAQV/eGoThYnVTU2JqnaOFubKnYOLRRJfafcFiyrzMkvM4jraT7ME91kSekyzCV6NpAMc6ytT+0E3jkASk8SXgQW/kPvO464D/mcCSYyEay4j3XQ7pfwu0Dh1034Wga0B62VjjGpnGklkEaLeHEnaRCxcU9UsvdX1HEI9h83jkq6+k0XpxnricNmfId2XCTg0lZae4xlIIt0Cw3iwhQyV6snFOhe5L2RnZcyBgCR6J7misqZCGy1rRYk1BcD2GpGralomXNb01HeXR9nPiqQNDZFENnHhejVLrLqynqP+edPzvYiQREvCAwD+1o/9Pvzl//N38I2v3aHH7C88bWvd9UmcqEmMAmAL2qnf98rt/Q3vPNtouukASTxvumkrlGNQU+2Ea6qmqyfaOuGaqE+ic+Rzo5xk9rwHQnDf9RI8ZyRR1H2DcBDzvSkn2UBbDMI1dnVTEaABbMyVsmq67401jSReBJXw1oG/HvtsA/5eds82jST2/TT2e/Ogg18fjYW5opOShD9ztgDN9BxF0A0IfiGtsN/E1+PGSenMjm56CY2pnYlbMLDIWRzsAZyTnEQIpEklsAnXm9U423C9mMpp6UlU1k2HjMxFEqfGxYevzHvKelRaMnATZyDQfY3BfZvFlOtPWa9PoiEAAwKSaBGuERqbp5vW2CMO7UUU7AG2NSKfbRckhsbZQKjDm06u9LOtNEtArX+pJWW+gTztP2/MgZhGz42fL+8kFB262tBrGQCeu77Ev/udHzS1PDlYpDhukyTAjD6JzTz580NDLzUAuNs6ruy19i64JnGOcEqnZltvbwsMjVJUBtRYzuDGqK6pazvl+ozJ/X+0stGLRSWTbV0FROiqhW6aR2izQd1UAlKAZGFFiVoTkqiCRFZI5nHszReuAQC++yteoscssiTQdlkkMULFpxC6blzSF65hfaBYpRTY7M/ELBm5HqW4qwLZAHBMI5AABi03LHoalnKDbbJnHklkHKckcrZYmqQO9roAgKRkzuF1A4FWyfQRBPoNsAFb3VJA29rXSAfUj+Gbi2oBFDGmJkLLOFsomX0qLRfIjqmbUm0DRummk8NCTWJl77+z7CGJNrTB0ji4l0UzBOla7t5So3OVTSsgirpmPnHg6wx50zQ2UaouSPSv0bShGfWPwFlI4nRNYhckGhIec21/keGkqHBSSJ9EW5DI1Mxo+zs//s34zP0T8zz/qx/6evz0L/8m3nj+GvX+ziG/oJpECUrvH6/p6+m1LMmSbatJBFSrGkNCII8ccp6S6e+b1CRa6aYW4Rp537pVpAVIxotGVw2iMLoFRpY4Wsl2jrppv58vfx8B4PYBT1d/EvahF2/g13/qO3Dv2nL6za0ts6RDZC01iYDU11qRRFtSLE3cIPiSv3WWZWewy9jrFRErZ9qXbK/RxEHpFMARSmfYViLbZs98kMg0hc2iAIClV+pgrzIEALGyFBcktnPTSCKZyY9bYJjRNsOhobnk3Tjy/sdFykwj07gmlHVcA5W2P4ezx7Tz6gkHTV6qhyRa5tihdKVdAVRqSyzCNUnisJ+neLdz7AiqkeqH1hgyu72N1VgjclVN6jaaJrQAyCfXZP+g169NjdMteABuLWu6Kc2AkL3VrG4qCYgQOOfZ+a6T/S644bLyMZJrzSR/+Us38OUv3TDP82veext/+0/9Pvr9UtsmNYnnjSSKAuvbRzy60WegCN10u5BEAL3evDySGEQ4LEkxoRx2NYnk7RgguYZE4aqsu8Qrc/8zRROuyTNRrgUAp0XdlTowliR9dVPW3wJaNo+RbmqpaX5SZgkQgfk1iYBdzKcnFkgixxp9BECVpowhiayYUq4YfvKsTpeOSVBqU0XVCSC2BGPb7JkPEpmFHDdzZx2uONhjxsh7NBw+S7iG5D+P0U2ZjbzfONv22fx1AiJipW3JzwyPfKA2aqTSskji2P23IInmmsRMo3S27OcyS3BaeNqQpY7rYJHi7aM2SCQykl3dWNV0dEULlXbd1vbsYsTosCH7xGkFUMvaci48L5bnRrfAYPetQOUPrwU67aYgMUISjTWJc0ycVXkGpqiqoU9lOAO2Ud0uTx2cAx6uLqYmUeiz77QJJ4puqhAptkzhaZj0BUwSR88vPNu2hN8yiwWHuGBqoC5L166mnm4q6AuB5GZqL69qnhKu16BlPYrGgqVOv0OlKhvdFwA+8rJP4rz1yk16zEXbMks7f8aKJEr9NUs3HZRKPY666Yb1Fc6NcHAwfQvleoEVyLXTOavkiUcSLy8r6pkPEplgaow2BHA1QbEACkt/ENCsMkD28RzZgEite54mpnsJGkRhMnUgFiWXER7rk8jQaTUiaEFE9PfGUmsG9UeGDdK/n++tCAzVTS3lOV64xgdglkbd1/YyfPHRCoAt+19Udfc5OSqtzj5fzo31SVumAu4gHMGuybpjQbAsAU13p+eYKHVTsh4liRJwAFQQfPYfEId4XdZgW4I8rknvwi91QeKEcE3EgLA6oBdl0gOvQ0gNe8Ick/v2joFuqvcE6dV3EWqSVhO0bZkldHIrVoG2KoDeN9aSSp/QLx35vZxGEvMER6uSpugBge0g4jrsHJ1zXQ2wBdmWBK+pL3L75610X8ALyfzWz313t+9to+nnmRcpikWRuGvpUgVfcjM95qw+iRSSWGmfcFpttLteTDc1stlEFXWyx7rq71peUrrp9u2yF2xVxdAW+wEAU1gLjCOJVOCmkMSarGOJhWv4LE74XFK3ZO1tM6cnUVU3WFcVUiLjOlfdNE9H0E7SSdabgZ73WTa8/2xWC924Ob0E15L9NCGJQje11XHdPljgs/dPAXAZyV4ga8nsKpEKi9N0la2r71TNxOk+iT2nafpamm5qaW+Tq7rJquJEBOJaXgCUeqI4O1JbO/X+J2ES3Hzp0RrO8XRTjSRuq3DBXp4GJclzvo8SpHSsBErdNOwlp63jamkoflG2l3sF3NpAk88U4m9JinW1nUYqoVAkf+9dv5ezipeLtE83pURC2s92tLKvrVv7vs2DpUZ2Tp9EXd/GKnJq28tTXDe0pLho0+uCfWZkjNRfs/uWBjj4XrnJaE2iXd10unRJxsq47uyY6rkdXY9XRVVI4hbv/5tsFyQSSOKgUTpZSxdnVfTf2mSaJkn3G2vf0zS2cUmv/qj/t6bGyftZZBXQ1F0vZc4cGmNQf0kgpWnSb+4t854yzVm3iuv0BYcmL9Wnm9a8I++cw6KlNllrnZZZglUr5W8LEnP8XhskXlvydNOimtfeY13uWmCI5QpJZNUFY4QC4PskNo3fSyzfm68BVkiiMUkixnw+yY6fFnUQ8jlnIZMuSDxaYT9P6fY2VvrV07Aeve+cgy+h6UqQyCBFISlQ47RVl93fwiBRkEQLbTTv1omt/muu4NDBIsVenuDtozXy1OGQrPlbtgwUoSBOCWcB4ZkURMqC/kq7ByvddE4NNhB0Aa7aeaNp8XRbnK7e1X9vLALWAzjIRIkuUwDCWbDpexinf7JIYoJC/DuCtQKouuEYdJhCIDsGxOUVrnnmg0Qm2Ih7pNCBgwvcZ6sCqM5YsI6dvg4dXLqhuA6zjrMer1sCsOlxPSSx5Pr0jambMhL7XuxDEFn/GkXlzPpNwQGuJyYQIbmGA0oX27OHVJ46FGVtpmTu5R5JLIwNyLWS2/PX9ybfr+mmXW2bgUrbOU2XcGN90qbvJYuc6ZpEi3CQfkYtGfk88apxTSP1F5NDBgk4AFTNmTjEq7JCQTa3f1yTLPyXHq0pMY1RddMtXcsaYThvJHGRJVikCd4lBYCAML9V6Vvw6Ne2yTok0RBs6GROXXPnKKBrEm00Yecc7h568ZPbBwu6dcMyS7Eu6+7+M0G6JI6PWnEdS1LyVtuo3nJGiQp0l/A2sHKquqbLey6T3VXiOny7k5Zu2iLA7FqOAQ5WTbuvi9H+rQ2+4Ri7jFX01y0wuppElpUT9waf+Hw95eJLmoB45oNEJtgY1pb4hTIpeJO4LmirDYGUD1ICBXSOuqlFgn6gZMjWMqp2D/K3pkzD9uuqxsIif65osX5DmKYIDPsdTl4Oeeo6dIKl28XOrqW2U8aZg8Qs6QQBLAjFwSLFo1VJI7lit1SQ+Nz1aYW1Mbopm4AApN/Y1Tu055iWkpfnYMrh0skVC5I4V3FXDlppb8OIHcSUTAAo6qYVU9kUJLbIUlGr5urnTTeVWq51V5+4yXJFNQJ45einYXI/nbuYJvUHy7SriWOQS612eVoI3XT73JcOSTQkBGKBKau6qZVuCgTKqUWd09NNqw7JZe6/nPfHK1tNIhCSkpbPtWzPxE7d1JC4llZBW9hZ5bHsnjqraSSx68EpNYkkkhj12GXupQYcgBC4WZFEujevYph1ZwcLAgz8yWmgws+zRRIv4eLavl32Aq0LNkjaUMiQ+NeZ4DJA77yztZgjJR+pa7JKSj1qmaVuL+lnyPlx4UBclzUWBiRRO1sAp0hVxHRTChEJSGJJOteD+iMya9S1ADBSZAAvXe/rX2x009uHC7x7vKaRXLE7h6Hu4i7hXOSabmr4bDq4LMg1ctVNS8kLcmYptq8MCaBe6wzDOC0wVZMOwqgAQVVPUtcDssQjq49rgh7ePylwkE9rvmkFYkD28vOb3+OY3M9FmlxIU/DDRdYhUlTJQZogSxxWZehTuc1IokUAJU7msOP8dwXcN6qbAiE4tPT5E7rpqeH+y/kiSKIlSLx5YK9JXGYpVkVt9EnUfndJ0Z5Npltm8EhiGyQWtiAxTsyzScm6waA0a9M1w7mhg0sSSVT0Vl4pvB+Udm1upnxQ1arpsrbA2NIj62KsCzbYjHxHJazhHEdBLKPMA0u3CyqB89RNmeA3HmcJZHNVf2RCEtX1WLpjLHcv12WyOHPEdfIsBJcskhgQQXTjLPejVPefDfj2FylOCjuSeOdggaJq8KWjlenQ1kgi09x4ob436/r34wRtfqa3KQDBuSqququnYNVNy7rpUH8b/co2rod2ssI1ktzSSGI1nXHVwjVdTeI5rxNNr6OQxGjfYus0n4bJ/bwoxdBDVdPMt2BIWiRx+9VNLXL3uuenpXRAVGlDTSJ/P+5em4ckarrpHhFwSFBi7ckIBOEay3PtA9nKVksd1yRu6TM61+5dC9+xiEZNmaD7Qje1IImdWGNNJhcH/rV/fdOZM4okks+O9BwGgkgaW5P4uMI121pusMm2b5e9QLMEGwB6srmss6WRJYB3ktdKXXOuuqkpuGyCQ8hkkvP2wADCfbHUOxVVTQun6KABCJz1SVXU1HWbgBXJErSGHSf+sG4LYm9l0c6blkBvs9akkqqYOAZF1ZhU2V64MV2HqK3LopV1aO9hQqTqFm1+prcpAMG5sqgLamTPqm4K9BFIU3ubdpy1RlmsrKf3hT7dVBCp8z2AtYPF1CRqBWKAb4vzNEwQpYtC57SYBvt8+1rqCquiwjK7GMTTarInSxsMxrQDak347eVpdw5bkmkffsn39ztuET7Ghkji9PX2FfpunaOsSTmLqTmqIB2w0eu7+v4tXFePYxpJZO//gG5qQMV7as4UmyQKwIjSrPFzY0ZNYkc3JWsSB3PkkMSy9onTXZB4yYxVCQyZPiMFVHGfHydIMQmgKMie4WcHmqriWRPrOE/noaSySa0rXjhFNxvW/zJ00zjzQ80xTXrBZeKmA+e5dF8dJFqEgwB/SAe6KTcG6GePr+/xrVK/9cueww983Sv48W9/k3p/aNvQUNlBsYBItZTkLUQMLtqWPXolV4MXpN1tTlNPkr/btzhKIOCzszTdPcoiA2hRyKnDN0GauL7a4jknE27u591nYkQ7nHNeXEohidvqJLz+3DUAwHvvHFzI9XpIosFxlZpEBsl9GqbnyAbcWpTKimQd5Pb7CADf9qHnAaBD4RmTpuwSWDKf77BNBtxve2JaEn7f+NodvPXqLfzrH3ufaY6+JtT/P/O8yd66bhO1lrP0MpjoB7z16i16zNwWGGnk81rZVDLOv372F6HPKMD7W03DAxVyhnYJV0PP4f4cJ2IHBTBts7r1JuM9xCtooZHm5l1BBzYA16MPkJq4IAcMcE7yIus3gbeKTQCcaqsfh26cVaSim6NhnDhXp2ufbWUcO/l+1kZ0L0uSbsMSH5TZ6zzdNwSXln5vQTiIrD/NAtoQxI1IummbtV5XNrTtdi9I5JHEPE3wCz/wFv3+XpuODkkkrqNquVhxo6tuC/UMhBo87mCz1oSGQzuI5FCCTwqBLOsGBxa6qcoIF1VD7QveIb+4PolJ4nD7IMcXH3HCNTKnsqpNPWifhr1+7xAAcEjS0R7XhLq+MCCCosqcOI7q+DRs2c7RgiT26N1GJOvGvm9LlCaOKgEQe/3eIX7++78C3/Lmc/QY8YPuG9RUBXF/59iOJL716i388p/8Jvr9QGjvFDQIpsfsKVGkq1iTuJen+Gs/+nF86KXr9BgJnKW/JY0kakX/hlM37RKFyucCNp85WRy0kfRPwO/JEvyypRuZOkv9dbmka48VVdW4ZkjKb4tdvhk/QaOzAVGQwgdgDidFvxiXUdvSNYksj3kUyTK1zmhMlEAJpHQvNeYB7YLEtgm2DUlsev9OB4m6BYkNyRXqz+MIB7EBKeCpLpY6CkAaYBdYFbVNtEDVFt44500ra9t0dC0YDM2Ny2pHNxUTh2xVVrRst65jnFOjY+2v2GV3K7twTUw3ZVTghFq2Ljlk9UnYncMFvki2wADCPmm5j0/Dnrvh0YbX2mDxvO3Flrq+ZwgaFm1SwGE7lU0BP69VUeG0qHqU2k2WKeaEtU3KrU7cxXY/nHP4wY/yCB0Qzu63j3zAxyCJ8py8O4NuOseEEls3DRzBAAKCKJKwcrYV7X8c+8bX7pjeL+vp0comOJSlDqsyBFJTqqFAPykJcKVZYz1oAV6/QxBEvnRjnBI7KR6n6o29n7ad+9Yme6aDRLYmUb5YjWSxUrtxD0KKbqeRLDKzNSbRy84RaNU1TZTM8JBaHlA5WE7WPgBgDlIdSMlc9dzPsrEWGFQArJAslkc+tyfaWE0i60h6JLHGqqxMh++da/PopnNMEh4WJ1kLOXgk8eod2lbrI4m25FZRhSCdc5rCs20TsxJ6Md8CYDRIJOimgFDLApJ4EetEqNpsAODry2tTbefTsE+++Rx+/vu/At//Ne+5kOu90AalN/Z5JoMgiQ7bqWwKBLrjaVHjziHvWAOCJNpa/tzat7eJmGs39v2a//yDUwAc5fogppued5DY0U3ttZ2nbTsdhjl01W0Zocbs86ZbYJRVQ6HbY76Tfn3MOiTRKDAo7+mEayoy2IuCUlb1PlP1luvKlszfFnu2g8QZzhYgtSUclSqu22MDh7WiqVrl5wH/8FiFayyBrEYNLOPkYDkpKt+njzg0dG0boGjCFJIodFN+jote4Gbsd9j6urOEa4w1ics8wcnaJpIA9AU4LHTTOZanSVuTaBGukXqDHZIoFtQ8627fmnp2OiSxtNWEaiTXtCfE9RfG/UesqDgauqAGF0U3BYKQwwee4xC3vEXSRWxrW5UTk8SOLD2OiQgWi8gCoQYb4HorPg3by/3ZfVJUtEMYzrcaZV2b+vTdmtEmYq7dbAP6zz9cIU0c9bzt5b5NR4cknvMz6tkFPEspHrcuq0uJ9jxpk/X0wNiDsx+AcS22huqm075yjCSyQRvQBw8EKLL0HAYCM5AVjyuquhPcumx2+Wb8BC1AxmRNoiCJZKY7VcIpFuGIQZ9E4tAIgU0ISi1007puTI5MR8HVKBGDJC5CQTTbp08EIMoqpo5OPdiJKqL2r1lbMJR1TQpw+H+twjUdQmSsGwN8wL0q2yBxptN0/kiid5Itmb4ekrgTrgEQDm1dk8gKbulnlFIpVQewLbgPB6KVph2r1DF00722J9pFBon/9POPAAAfe/0u9X5B0mtDkupZMFFc3CcRWUB64FU4XVcmmupFmnau2dYeuUq4sm0DxHRt53mbBImfe3BK33/nHA7yFO8ceSTxvJ/RZZaiqBocr20OuSCJu5ZL3vLUIXF2JHGR9XtMW/QcykFN4tnPgXNu1L/mkEQ1RxIoGiCJFXee6uSu99Mu39q6fDN+gsYiUsM+fXyWvFvEVuEURW21BG0huPQtIJg5Ai2SaKBEdXWCygFiHtCuCXYh2T422zpscD81T6/A2g8sGSbJHGd3KFxD0k0VtdVC9wX8vTxZV4+VoboQJLGqTTLtogi2KneHtthCHTZdkDiV3IoQcWBebSHA0uRVcMmyLYTuHiGJjHMhPdGkxcRFBIn/8ae/Bt/85j288fw16v156jySbqw3vur28q19AMB3feQFesyetGAoeeXQizaplbx/Upgca8AngNhSFjFBEnWS5bzsxl5AEi33/2CZ4UHbJ/G8kRRxwh+cliZ0dZknOC2rS1s39qTN9+BMu++NrQHut0bjEuyabq3/nTpzdB/yziekhBCDX84mGAeBLAlULNIEiYNqi7Od+9Yme6bpphVZk6gdNIAXk0kTZ4LQxTJVk8iqnaWJz/yEILHmxqlMvsWR7KNt/Gfr6KYtTZKln3gpebmX8r1NP9hB3dRG9wVsh3aMiLC1pLresjEGift5itO2BcD8IPECkMSWj+8cl0hIEofrexnePV6jqhss0su3sT5pC3XRVfe8TaHwY+1VrOqmYmyTYiDQVCnhmu65Ca+VVUMxDKTdgCTULoKW/J0ffgHf+WE+sJGEn4VJ8izYa/cO8b/9+9+GV27v02OWWdqJi2yrcI04gWXdmFp7AOiawJuEa1p0T2i452mCJN4/KfCeW/z3pinF51+T2AaJBk8rL7QAACAASURBVCQXCKyEXVIy2DJPgpItGdx4JDEEbsw+Ln5c186C1I/Q/Q4tZRFjweV0TWJ/jqxYo3MO+5LMN2pHbItdvhk/QQv9xiaCxIjKWRqEayq18Fm1rUXqsG7FJixqZ7qW0dLLEfB9Ek291KSOorI5QHmrJHbSIYn8Z5MAWNQMp5pnZ2mCsu4rsLJ9EoFWuMYoHKT7VFoccu/I9//WlO3lXoX10cqWNQWAv/LHPoo/+NbLuH7OkvfiJEttISt3f3M/xxcergBcDJVq262HJJacIptO5FiEm+YK12glNy/4NP29xTRtf10SSYyEa/ItFDgS+pWVSv4s2Kt3Duj9AAhI4oOTskO1ts32F2HdsmibppLX5Hkj9lIbrH2ppXOep2mRIUsApkWeLkK4BgAenBamxGnHStjVwHe2zJKuJtGCJK7KQOVkhGt0CxgZp18/y3SwZ1HYzxR4wKub9msS5V/mPN1fpDhalygqPnG0TfaMI4kkZDxQN60NUrtK7ZLc/LsahVbtjD1IF2mCQskPc2in/7dPNyUCKS2vbw5uFP+f3JCzVD3YNflgd1Q2vq8NEN1/sj4qCNfYvm/pJbiubHRfIDgh941ZUwD4xBv38Ik37pnGzDEJ7lfG2sJbByFIZLKRV930HiSo7DSS6LoxtSHTqgVo5JG2IPBl7RV3mTUZZ2gBH2Tu5Qx1PcHbR3XnlGyjc+d75dqC9J2NmyCJp0XdoVrbZncPl93PbC/HRVy3ZEj4ffMb9/Cvft0rePnmnm2iM2wvT7HIPJ3Q0qeyhyRegHAN4JFEVoEY8N/VaauTsEtKevNJuFX3MzcmJPOLuqZaYAQRmr4oDIckBqFGZgwQwAOAB4qGLTfCHKZsf5Hi3WMbIrtN9kwHiWxN4pDKySGJWeK6BV83PNUoVwGYR6SoYcjVA8rSVjRN0tQTTfd2MjSuBdpauqJCUXIqhkAfSWRli0Mz8RpS8mSR8l+XNV1/GhBZKaTm6h/lerpNgaUmEYBZ3fQizdeFivwzP8eb+zn++dsnAC5G3n3bLWv3IC+vX2E/TyeTRyEBEdqrWBBBLdpkYReUVYPToqYk8hOVpBIra25fOFhkOFqXOFr7upmLagRvMWF3CHN3J1wz3w4WKd49KdA02Nog8UUVrLGJO003ZZMrYkni8Bd+4C3bJB/DhOFhuf8SJDp3/ki6rkm8rfoBT9lenuDzDwuUNae4/iyY3k95JNF1ZTpNMw3AAEMkka9JVK3ijEiiIIFsz+G45YaMY87F/VwHiZdvbV2+GT9BY2sSAZ/ts1I5NRxeN40haFABmAmBDKqodW2jVpb1vEDKI4nemWQRz/2FlzK38P+llYJcU899ao79AJi4Vg8l5e9/4oJAkaW2JM/svQSBfp+qbc1QZW0hu5XGc2t/saObKnPOdXuQRbgjVpdllpZWcqsNLAFdA3laVJRjIc9Wj25Kqkdf28twtCpxtCqRJm4rD+BFlvgazS3vk3gZ7N61ZXdGiWDLtpm09gBAK4DKuj1e+7ZQFpTuou3F9vO9RraAAYKSraXcYK7NUZeVcQ87cZ3tvf8XaVqvwFKTuK5qFXxZkERe3RSIaxJ5X14z/Niewx3goEAAgPt8+3natYDZqZteMmMRKSBSbTIEibXKjrDBxkIFYDWpbgqIAmjIdHDtBkQ4xRhI9UQxbBny/TzFccvR5pHE0AKj46xPKlIF2ty8mkRbTWgsVMQGe4sWJQ2yynzdntg2OshAKy4iQaIFSTzIcdKKMeyCRG/SAuBkzaF0QEhAWFRKs5Hnhmqd0e5bpy0Czzi7cSNloFU3Jfbka8sMD09LHK0qHC6mkdWnYXkrQrYTrnl8u3c9IEM3thRJvLGn0RdSubtVQHxwYlOSfBomgjWv3+ODRBEn2jf0xJxruuWAJdjbyxM8OG17Oe7OGwD9tcz6F3nqdRLEV+b6JPq/HVNHp/ygUXVT0ueNW1lM+aGh5UYfgWT28708xf1jXzN8GRMQz/TTEHq3MSIJM5BEpwprDcGeDsBYkRwgiCQ0ja9lpFpnSK2TbsFgqj9qTCgp4B8aORDZzIpugVGQWaoO7azrWeqmgu4xDqv8bS1URNOL0wTrssGq9EER61zcPgxO07ZmqA4XGU7WpT1IVE7gTt3UWx9J5A9taw9OXaRv6+8a6oEAbh13NO0e3ZTrr3VtmWFV1rh/UuDaFlJNgcDu2AnXPL49dy2gdNtKN9WJCiuSdd/YuPxpmNBpLfdfAsvzVtIG+nuOtU+i7Fu7INGbtMdapAntu8q9O1l7X+ax+iROnDm5amVh2V99cBmCPZYGnUXMQHltyg4WKd45vrxraztP1gsya/ZB9y7k1E2TzslqjEED4NE9GyXTtaiB/39b4/KAPFJog4zr2kTYNuTPPzwFAFpdM9fSypWom04IDvVaWfjXOOGatiaxDdItgkOSQWPVTYEQ3IsAB+tc3FFB4jaKdgC+ruFoZaMWA0HaHbicG+t52DJr+8StebqpoNQmddOulrdBlhja2yyCkBLAISJxPQogqnjT15Oamc89OMXBlgaJWVuTuOuT+Pj23PUgCrOtQSLg23v8sy8emVDjRRaQrG3tAQkAf+Y73oRzwPd91cv0GOmJeX15/t/ZjX07+gX4ey5b0HJLz9KLNgnqLckO8UOOJEi09OruqJzcWdVTNzUIs+WtmFjTNJ7NRvquWeJCTaKB9bW/SDtW1DYngM6yyzfjJ2gCHTOQuK5J5Nsi9HnWlho1ADgpKlR1Q0PUIu5SWmotew23Zd4GtK2t97P4Pjf2cvzuu16U5BqZXfQPtgjXsEiiQgQ7J5m4lupdaAn2tLJXRdaE+uu5fpBIbiR3DjSSuJ2OxeHSyz+baxIPdkFibIs2SDxphWsY6xJHFnXTNNB/LDRtmdPbrRw/sybl7/bVTWvq4L6ugsRtFK0BQpC+o5s+vt27Fva7WwZRkou2H/u2NwDA1Kaj325gO/dywN/3n/mDHzFRR1+9cwAA+K6PvHhe0+pM33MLtU+fudvKyrlo64JEw32Us/q4FRMzIYlSX0i3D0u6oK0LEpn+uu3z5Vs1caUNMs8YSWTmORfd3hbbzpP1gqwwZAO0umZdN9RGosdYggapSXy08g+aRdxlXQWxCVMz9yr0JmOmuVCBlKVuDwDuHi5wWvhJstlF3QKjCxINrUssTrIWDvL93ngkUa8RWpVW2kQUFZzjUcHrM2oGLtoOFhmOV3ZpcY0U7FpgeFu0SPVpUdFBkawtE91UqQIv64QeJ4fhO239BePsxv1FAdAUb7kHn3+w6qlKbpN54SBbe6GdjZtWq3zxxnZ+3wDwqa97BV/93lumur1+4/Lt3Mvn2mv3DvF3/71P4v13+fsx155IL8cdkggg0E0bVQowZeI7nRiQxEGfRJK9pWmjFiRRnq/TsjKVc2VtvaXMUeYwZboFzGWsSXymg0RLTeIi7QvXHDBjMl8gW7X99ixBAwAcSZBIDly0lFiLHLBca102WGYWtCFkfywoKdCvpaORxDTBw8Lfj1BsvPmauv9UbUBE+sqttiCx66VpQY7b4F5aWbACHJqOsa2OxeEixbqqcbQucffacnpAazf3FUq6pZ/tom2Z+15eJ0WNO4cGtbmyMa3/UJPY0G2CgPA9idw3o+4Y9xcFWiSR2PNk73i4KnFo6Il2keZFEuzKxTsbWpI4/OpPfBJ3DhcXIoLyOPaB566Z3r9Ik05dc5uRxLn2uvF+zLXDRdppA1jOjduHO+ZKbJKEFp+GMfFVj9sgkUnwxnTTiiw3yFKnhBrt59SqqOmzRuY5CEoZuqlGEi8hSn35ZvwEzVSTmHlHHhCl0um/L1mDdRukWGsSBUlkF1aetSIJhsaiuQ72jDWaAFrk0hYk3lEbMlvMLs4WEJDEqYe7QxJ1ewnTZ/MBMFtvuVB1k7VV3XRGI2Vt25qhklqxd4+L2XTTba4/uki7sZfh0ar0fRJJJ1mQRAHqmKWs5b7ZxsaAF+3Yz1MTkpi0/R8l8QOAzu5eW4a/v610U0kcWVqJ7Oxse+P5a71a7KtiyywIp1xGR3JbzDnX+RSWYFuj1Lsg0ZsgiVJmxVge0U2pPolpP0hk9/9MCwUafFfxlVZlRde/A77kSc4pCZwZn2b/ktNNL9+Mn6BZahKXaYJ1qz7pW2BwiqhAK5zyGEEi61xLL8GgDsVfS8vkm4JLo7gL0N+QWbpprummkjWaQhKj2kKA3ETygECWRlXaTgHXVIMqNYmVeRP5o594P4AgM75tJo78O8dr02fTgeGLN7fzs1203djLcf+k8EEi6UgKA4KlaAPo6gErTVOle6CmuH9sq63K0qRTLAZEuIZRNw1r5HC5nUmSvM127/ok7myTLfMED1e7Pn1PwoRVYDlvLoMI3EXbay09+Ac/+j56zABJNJQ3hHYWNbX/Z6q8xwL4aP+uqGsaBEiVmqqAAUxC4bqqk7XUKW+LbWf69YLMUpO4yJJOoagmMx2B7liZ0DZZxFZJZlFgDUW8hEMojeONlLRecGkIpADgrhIgYJHETAVg0i9xStxCI4mdKI9BgON0XdHfNeBrSddKAdeiivrotMSqqM1Z5J/9lz+Cn/yuL9vaFgBS63G8rmzqpgpJ3NbPdtF2Yz/Hg5MSZV3TAVieOayKGqu2BphqcJ+GQ9vauqGPJJL7lsrQAr5lDZO4047dNiOJvgcqH6Tv7NkzHZhsc5/Ey2ASHFqCbX3ebKsI3EXbV75yE//wZ39/L8iZsmXWDxKZYC+N+iSWFedz5anrtC0sNd+yLk4LjySymgdZEvorsmw2AHjpVqiffmGLa6nPsmd6N7LUJOYqACjqmlNRUjVxVcM7WpIJe6drwMkGiVFPLmO7B2EVmFpgtFlyU03igd25045k94BO3Jd+Cww/lonbxAE/LaoWNSaDxKwvXGNDIJvZdNNtDqI0wmPJ0LLqnc+S3dzP8eCkwMnaom6adCg1wKF7knwpjXRTwCe43pmBJEoQVdUNmobbk3VLhDcuqObJalKXLk7TZaQb7ez8TQcmV7Em8SJNHHlLwnWHJI6bJUAEHk+4plQoHRN8ZYk6NwyAj0YSTwu+nZTugx2CxOnrSQsY4HJSmS/fjJ+gWSBqHQCsy5rqpRMLp7CMTFFDEmfL2gLDQm3SLTBC3Z59nIVu+ppSfTOhpF0LDK5IeVTdlKxJTBOH07JCVdez+iRWDX9PFi2V+bSw00233XqqcYbPxor3PEt2Yz/Dum2VQiOJbQJCMq7M+grNjW2JI6Af3O/R+5brKORse5vYPvb6XdP7L8rCXs63BdnZs2f6udwFiY9n3/LBewCAb3ztDj1mV5P4ZEzu3VHXAsMiXBMa3DP7fz4iXMMhiUG4RsQCGctUG7a1AUl8z63LXS6zvRDEBVhlyAboAICV89cFsrUhkDrsxD68Y2ELpBoVEDEIaQj2GgNkn8VBogFJvHWw6BoOs5alQRQmqJtu/nxagMZCNwW8MuPJut1EWNpcmnSKtFXNoy8HixTH68rk/F8WO5wZJALAp7/hVbz5wvUnPaVLa7pOk10niwhJZBJOOrNr6S8KREGi4bkpyn5tCUsB+k//ta/Br/yjz3a92LbN9hdBuAnYIYk7Gze9N+7WyOPZn/u+D+OnvvfDprNUv1czFHZmM9m3O7opI1wT1ySSdFNP/2yZWw3PCpTvelVWXgdiDpJYcj4oANwzqLpvoz3TQaIVSVyrLAIVJOYBybLQFoWiJ02pbX0Sa/W5uDEAeuIKTE1iT5THGCQCwN/58W/uJL8ZW2ZaOKiGc9PfWywcBHB0U8ALcJy26B6LiCyUAm7d8C1Pru/leHhazhKu2XbTtR7WIPHPf+qrnvR0LrXpone2dYwwIFZljcRxwZdWHLX0FwXQU11lD98sdcpBsNXufd9XvYzv+6qXqfc+DTuIekdeted7Z0/G9Blz1RKFF21zhX9++U9+E24fLHZq2o9hcsaLuumcFhhlzbWl0L2zLT6vLgM7LWqTLoZmvKSJo/zeNHH46Gt38G0fep66zrbZLkiEvU/iuqwp3rpQUldl7SmqpIOwSBNkiTNnnxepayli9p6Aum6PFa7JEoeTojK19xDby1PTYbjMEqzKEKQzm0hPuKZukDiexrjMfE+606KmERGhjQI24ZrrbWuD43WF569frUfyxZt7cA5oml2tx+Oadl5eILPdyyzByVqozCm9/rPU19JZ9kig7+CytbJ5MqSSs0jitpsk/Lq9fBcA7GzEXroZBC2Y/qI7e/L21qu3nvYULr3F6qYUK01q4BVTjC0LElVsC3tOC9esyhrPsaUbieuSmL6/In9G/dKPfpx+77bZM70bdcI1xJfdQxJZumneDxJZJMU5h4NFOgtJLKrGBL075zrBG0ubCMBTy07W85BEqy3zFKvSU2LLqqGklbVwTW0U19nLE6wKW2Gz5shbhGskk/X20frKyZ/naQLpk37v2tXrb3aRputmWJW0a0ufgLDQpgFPASqrUMvL0k3lWZGm1tS1ehlhqUm8GkfT/kwRsp09WyYtjNLEXZm1v7NnzzokcdW2wGDUTaM+iUXNtUDKkhEk0cCCW5U1VgYdiMUMoOIq2LPxKc8wWWCcCqivm6nb7LqlJnFd1jRFVexwmXWOBd0nsQ1ku89FXi5vUYPaKFKxt0hxYlQAnWt7undhxfXR6dp7tGI+FjGUvTzF8bo01QlqcSOLcI3QCL/4aHWlGyl/7ftuP+0pXGp7/71Qd8cGidf3chyvKxyteNo00B7AuucqnTjy65elwwJ9UaqSFKW6LDYUIbu6z/fO5tsrt/2zvVsfO7vMJuUGD079fjdH3bSsaq6/otKpENEbquuA8iUt/p0veQpI4rPCjHo2PuUZVta+TodBfARJFDSRCfh0n0SWoip2sEi7B4ClKIm4joU22htnrNvzaFtlRunmmKYIrEmJ5B6SaFRg3c9T3D+xSfn31E0NgbMgiUXVXEkn4YMv+PYEH3rxxlOeyeU2LUfOorKytr50ZEtAeLqpfS+RBveWtixxrQfAZaAvg4mQz7sdkni1mAI7ezL2cttLbaesubPLbNfb/V/o9QybTc6WTt20amh1U2GerA1lCp1wTWFTlF/oILHkfNCrYFerAMpoZd3QtTZC5ZSm1FRNopLatdBNgb6TxQaXgrZJ0TArIy+ZfEubCKClmxaVuQXGHIuRRE6RNtRb1oY+lf56KX7v3ZPetaevFyjJdWOhm6pGvlfQifyrP/wxfPHR+twTCc+SsZS0G20d4xcerkwJiKxVcrPuCXfb4NVygOpaj9JQAnAZTLfAcKRw0M6ePXv1zgG+4f238ae//c2nPZWd7Wy27eW+fZgk2DmV0qhPYl3jWj4dmvg+iX3BM5NfXtam3tSLLO38u6KqkWfPxl7+TAeJVc1lLICwsKT/iwVJFARyYQgA5vSXEyU9UQ1lingBL3jT769oCxJLEtl7HNtTSGJJfm/OOc8jr3xgaa1JfNeIJC413dQoXCN2aEBgLovdvbbE3UsuA70t9jf+xCe65AVjsra++GhFU1QBH+StFLuAXct326bUknFlTNckdn0S2SLILTfZx989KrDMkl3/z52NWp4m+Ov/ziee9jR2trPHMuccDhdpVyrF+GlJ4uBcEJ9hWViipQHo/ro8w2xV+BYYNmHCXU3iM2VFZWmU7t/3qO2Dx2UsAqxtpZuKKp7/O9w44YN3wQ0reJP1+yuy1LJlnnrlxLLqMubnZUKVOy1qn8WhA2D/YHvuOX//l3naUcRMSGIrrlM3fJ9EHSS+cGMXTO3sbPva9942tXyQtWVFEkW4KQjXcGv5ThskrgxBolapK6+YuqnsyQ9X5ZVkCexsZzvbmTapgwd4RkmWOFVywDH8dOukwlDL7pzDMktwvK7aEh9ec2K1q0k8H3POLZ1zf9E59zvOuYfOud9wzv2B9nfvd841zrlH6r8/F439r51zD5xzn3XO/UT0t7/dOfdbzrlj59yvOefeNzWff/yZB3hwWvi2FIYsAqCCREq4pg9rW+imdw9DsMAuxtC4ua1/sdTSqYbzLOC2n/s2ESfrCnvnHCQKkrgqq1Z+mOeRS584y/3fz9Pufuwb7mPdhA2LTUDcUqqVLxrQnp3tbMpEFKlubFTmZZZiVVZegMmAwAvd1BwkdnTTq6VuqpNnV7HeeGc729nOtOlSKXbPE2FIAHQ5UZYkqOoGTdOYa9n3F2knJsaCAL4Nmw9+iwtgz22LXRS3LQPwzwF8EsD/B+B7APw159xXqvfcappmrLv6zwJ4E8D7ALwI4Necc/930zS/4py7B+BvAPhjAP42gJ8D8EsAPrZpMmXd4HRdmfjIopR5ZAgSO7ppWWNdVlgYsuNvtmIfAJ/F35/ZuDlLHAoleGOhm362qHGyruhAaq4J5fO0qOnCZiAgiWvDd+2vF+4dG2zL931aSo8g7lq3VcP5F27ugsSdPTnTKLUVSTwtarNy8Z02uSX9QhnTUuZdn8QrUr+ap0nXGucqKxfvbGc72xnQV7ame+X2EoVcCwwJJIvKt0VLHO+73tzP8fmHpwD4czFWN70qbJcpu5BTq2mao6ZpfrZpmt9umqZumuZ/BPDPAHwdMfyHAPxc0zTvNE3zjwH8lwD+aPu7fwXAbzZN89ebpjmFDyjfcs59aOqPHndBog1JPDLQTbPEIXFtn0RjC4wPvnAdAHDDICUfgkRbLZ2gbdInkQ1K9/IEJ0WFk+L8g8RAN62wJltgAEGRalXyKlZAHz1kWwfIpnFaeAeZvY+6TslSN7aznU2ZFkVi9wN572lRmVWBhW7Krn3gjBYYVyhLK47Sjm66s53t7Kqb7Hf7eWrz07QoDNkCA/Dsk6K21Qje3M/x+QcrADY/eV35cqJ1uatJPFdzzr0A4IMAflO9/DvOuX/hnPtvWoQQzrnbAF4C8PfV+/4+gI+0P39E/65pmiMA/1T9Xl/zR5xzv+6c+3UAOCkqrIqKDtzkfSIKw4xzzmE/T3G8rszqpl/2og8Sf+DrX6XHdDWJRiRx0dJNOySRdAr32z6JJ0XVXfu8LNBNa6yKuuvHNjmuRUSsdNOb+9q5tq2R03Xbs8fgXH/guUMAwPPXdzWJO3tydnM/77KrliTJMktwWlaoapsq8I29DD/6ydfxl//tj9JjerUlHd306mRpdz3wdraznT0rJkHidQPA4RlfolTKMcWk/rCoGnNLih6SaCg5axqPdBZG0Ocy24VLKTrncgD/A4D/rmma33LOXQPwDQB+A8BdAP9Z+/vvAiCcy/vqT9wHcL39+RqAL0SX0L/vrGmaXwTwiwCwfOnN5qSobI3SYySRXCDX93K8e7JG3QCLlA+kXrixh1/7yW/Fe+8cTL+5tQ5JPLI1bl6KSEVXk8giiSmOVyVOC/4+zrU9hSQeFyWev84hbofLDEfr0oQaA/0gkQ2AZY2cFEI35R3dX/rRj+OffPbhM5Od2tnFWJo4vHB9id+7f2qqG97L03ZPaOgaZcAnxv7sH/hy0xz79ShCN706z8H77x3iH/7u/V2QuLOd7ezK26wgUSGJvsSBoZu2SGJVo6xt9M+b+3lg3BmEawBfPrarSTwnc84lAP57AGsAPwYATdM8AvDr7Vs+55z7MQCfcc5dB/Coff0GgFP188P250ft/2vTvz/TTta2RpqyIES4hh13Yz/DFx95ZM+aeXjt3qHp/bonF8DX0u1lvnF8oJty19vPUxy1Klbnrm6qWmAcG2ogDxcZjlYlqga4pQK/KbuhkURyE5FAWdqksME2ANy7tsS9N3Yo4s6evEmS432GhNNenrZIoq0mcY7laVC2K6urhyS+/66/77s+oTvb2c6uut3YlyCR97cWOlFIBnxyRgiyZylR0CAAjST2gsRdTeITN+cLr/4igBcAfKppmuKMt7Z4FpKmad4B8BkAb6nfv4VAU/1N/Tvn3CGAD6BPYx21E6lJNIqSPFr5oIhFBa/v5fjSo1Xvb5yXiTN439gCY9lSMq10U40enr9wTVCKPV3z9NaDhaf7WqjFQEw3tQWJxys7kriznZ2XiRz5G89fm3hnsGXW7glGddM55psit/Uo9dVqgQEAb7b15ayIw852trOdXVZ76eY+gKBUzVieuYAkki0whG1SVC2yZzintH+n1eU3mfiPojGyQxKfvP3nAL4cwHc0TdN1g3bOfRTAuwD+XwC3AfwnAP7XpmmEYvqXAPxUW0v4AoAfBvBvtr/7mwB+wTn3KQD/E4CfBvAPmqb5ranJCN3UjiT6AIwNOG7sZfjdd05MY+bavkIS08TRmZW9Vu5+XdamcT1K5rkL1ygkseD7MgrdNE8TE91Lbxz3rnGbiNx/QZst4h0729l5maxHS5Do6aYVquoCgsQ0qJt2SOIVopt+z1e8iOd/5GOdGNnOdraznV1Ve+W2DxLfPT4LBxqablTPonQdklh5JDGfCQI8d41jcEk5kSCJuz6JT9Da3oU/CuCrAXxW9UP8QQCvA/gVeIroPwKwAvBH1PCfgRej+R0Afw/ALzRN8ysA0DTNFwB8CsDPA3gHwEcBfJqZk0cSebqpBHhHgiQaahK/dOSRxOU5L6p91Sbi/2/vzoMkuasDj39fX3P03DPSwOhcSUggtCABkkBrc6wEmCtYEAiEECAsc8hgBwEGggUB5jCLN/AuYQ6DZS0IcZrDBmyFIYwIbwBhZHMYeWVAIHGIEbpmpkfTPdPH2z8yK7vU9MxU9XRVdlV9PxEV012VWfW6pjt/9fK9/P3amqRidLic3GW2rV/8bU1/XJ1eJ7F5zcl2ltxYOzbMvv2z7J9ubwmM5oNI68n2fVuSW1nYVeq0v3j+wzn/gUdXE6i0YtXoEFMzc0zNzHb8euPR4aFqwpr52U37529nZHiIR560tZr5VZL6VWOc2TPZepLYWKsbGktgtDe7aVF9bH3M2NS07NhRLU4W2ChUs0uoiQAAGwxJREFUHJidbXuinF7WlUpiZt4KHOp/8BOH2Hc/8OLyttjjXwUOu+TFQsXspq0nDo3kqTG7aavtUOtXj1Rrf3W6kjg6PFSsOTaX7c9k2KistrGWV3OFreOVxJHiZ9szNc3+mbmW200blcSIWHK7aasWtvs6UYVWgvNO2cZ5p2xra5/VI8McKE/ItHpN7lI11hGE+dlNB2UAlqR+ckxZSZzYv9iy54sbGxliYmqGzGR2rtV20/nZTdtt/zx+y/x8H+1OXlm1m470z4nMQxnYiySKdtPZtpc3mJhqbw3C5glQujFl7tqxYfZMzbS9Jtr+6caC820kiU1nYDo9cU1EsKFpbZuW203HRpianmM4Ztr62dpZn7KhkSjvLicO6nQFRuqUxsmi3ZPTLR8jl2pkaIjZuSQz5yuJVuElqedsXDPKxeccx9MesqPlfVaNDHH37Fy1FFIrx/+qkjibzLSZJJ6+Y+F8l63FCEW76dR050+erhQDmyQWk5m0XklsVA7vLCeh2dDizE3N0wB3o4d5y/gYe6baS4hWjxal/n0HZttqybxPu2kXEqINq0e4fU8xyW3Ls5uuasw4OttWlXRkeIg/euJp/FYbFZjGe7DLSqJ6XGMA3D05fZ8TXZ3QOLZOl9eWQOst3pKkleVPnvmQtrYfLa9JnL/c4PDH/0ZL6vRckVy2uwRGu5onrunG2uArxUAmiUMRbbdXNhKAnbunWDs23MbENd2tJG5bt4pb7trXVrLX2HZiarqtGJurbd2YuW/DmlF2NpLEsdZeb23Tdu1eE/r7jzulre0bvyON9Xfa+T+QVpLG7/LuyemWr9lYqvtcW9KHs5tKkg6usU7i/OUGhz/+N2Y3nZlNDsy0twQGwNWXnc3aNoob1QoHUzNkDk6n2EAmiRHF5CIHZltvr2xMOnDvgVnuv7G1hdwBdmya37adxUWXqlHda6dq1mgna7cCGRE86qStbFgzwqnbW585cak2rB7lJ3fcC7TRbrpqfrtWlztZqsaZpV3VOpVWQ9SbGseBXfumuzJxDcD0TPbl7KaSpIMbLddJbOdyg/nZTYuTi+1eFvG4045ua/tqTJxs75KzXjeQSeJQBLvbrPasHh1m3aoR9u6faatUfXzTAtYnbet8IrVtfZHMttMv3Vw1aPdavE+85JFtbX8kNqwZqWYObX1206ZKYocruY3ZTfdU61QOxkFE/adxTJic7vzspvMzF89WE9h4TaIkDYZGJXGmjcsNmme8n56d63gRZrzslru7XK2g09fqrxSD8VMuMBzBHeW1he0kDlvL2TzbuUanedr5jWs7e20PzFcS2zkR33gPdk+2127abc2tu632g29tmoG100niyPAQY8ND89ckDshBRP2nuQK/usN/N42ugH0HZpmZm2MoXGNUkgZFY53E6TYuN2h8BpycLk4udrr7pHFJ1V17i06xTs/ov1IM5KfY4aGoJkBp54P81rLldFMbSWK3S9KNM/CntbFwcyPGPZPTK/o6uubkvNVrIJsrud1IgFePDlWLyDpxjXrV+qYTMp0+hjUG230HZov1rpy0RpIGRqOSeGBmrvr+cBrjxuSB2WJx+w4vSdE4mdkoMA1KkjiQ7abDQ8GvdhdJYjstgVvGiypduzMjveMZZ7B1vLOTPzT8t7OO4Ve7p3jt77S+dGSjbL6/zSUwuq25Ffbko1pr3d3atID10etbv5Z0qVaPDvPrif3V11Iv2rhm/m+t020182eEZ5iezWr9K0lS/2tUEqskcfjwn50aSdrUzCwzs3MdrySOj923kjgon+8GMkkcGY7ql3HzeOsJXyPhaDdJvOTcE9ra/kgcu3kt73jGf25rn+bqYacndzkSxzVVBVttN42Y/8B59n/asuwxLdQc10pOuKVD6WYlsXHdcKPddNS/G0kaGKPDQ8xl0ToKrVUSV481VxKzrXUSl2JoKFg7Nlwtg2eS2MeGm85Ut1Phu+D07fzs7n089aGtLxLaC5orBd1Yy3GpnnD6/QA4adt4W/td9Ihj+emd93ZlmY7mFoSV3LorHUrzJACdTxLnB/tBWqRYkjSfFN5bTkzYTrvp1HTRbtqNZZPGV400VRJX7mfl5TTwSeK2NtYAe/zp23n86ds7EVKt7jMD6Ar+xV8zNsw/vOrRbVdy3/2sh3Yoot/UHJuVRPWq+57s6Fa7aXtr10qSel8jKZyYKpLEltZJHB5iZCiYnJ5lZi6rJTE6ad2qEX5+9z6g9W62XjeQSeJIBLPl183XrA2qLePdmwH0SJ3axoQ8ddi8tngvx4aHnKFRPau5TbtblcR9B2bZPz1nJVGSBshYmeA1Komtfg5dPTrM5IE5pmfmOt5uCsWs3zPlDKyDMk6t7IygQ4aHu/cBqBdsalqaYyUvgdELNpcJ90pPtqVWdXN206mZWSuJkjRAGpfmTEwVM8O3MnENlEli2YHSjc+u401dd4NSSRzI0bi5vVLFH+h4+QvvdXRHZks5EZLJtvrFeIcHw6rd9MCMlURJGjCNMWD3ZOvXJBb7DTExNc2B2TnWdeFzffO8FoMyTg3kJ9mRoeCZDzuGi885ru5QVozx8pffCtiRabSbHpidqzkS6chc8KDi+utHn3pUR19nbHiI4aEo2k2tJErSQGl0k+yaLCaFaTlJHB3m7nuLfdZ2YWLCdat7Y/6O5TSwJbX3XHRm3SGsKFn+240ZQPtZI0mcPDB7mC2lle39lzyMucyOt5tGBGtHh4t20+k5towPxuArSZq/Ln33vrLdtI0ksTHbaKc7XgCO2bQGKD4nD0pBxYxAANxRLgD/8BM21xxJb2tUZI9vWtNR6kXdbJleMzbMZFVJHIw2HklSc7tp45rE1ieu+eWuSaA7lcRTjl4HFB13zZO79bPBSIV1WI1f/tPvv6HmSHrb2Sdu5oIHHc1HXnxO3aFIPWN81Qj3HphhanpuYM7QSpLmk8RdbSaJa8aGubOLlcTG5+RBmrneSqIA+NRLHsnE1MxA/fJ3wtZ1q/jLF55ddxhST9mweoQ9UzPsn5lzxmlJGiBrR4tUpKokttFuWj1HFyauaSSJr378qR1/rZXCJFFAkdxsXbeq7jAkDaANa0bZPTldtJtaSZSkgVFVEtu8JrF5+bbxVZ0/ubh2bIRb3vWUjr/OSuJoLEmq1cY1o+yZnGb/9JzL8EjSAGkkiXsmpxkeCoZb7GhrTBQILm3XKSaJkqRabVwzyj37DnBgdo7VAzK1uCRpvm30wOxcy9cjAmwZn08Su1FJHESOxpKkWm1cM1q1GllJlKTBMTwUVYtpO7NqW0nsPJNESVKtNq6Zv7bEaxIlabA01kpsJ0ncsq45SfTkYic4GkuSatWcJDq7qSQNlrXlcb+tdtOmSuJoG/updb6rkqRaWUmUpMG1egmVxEa76fYNzszfKTbxSpJqdXTTIH//jatrjESS1G1bx8f4yR33tnWS8NjNa3jlfz2Fix5xXAcjG2wmiZKkWp20bV319QnbxmuMRJLUbffbuAa4h/u1cZJwaCh49RNO61xQst1UklSvzU1Tmd9/g5VESRokO8rk8NjNa2qORM1MEiVJK8ZQiwspS5L6Q2MJi3WrRg+zpbrJdlNJUu0+d8V5TE3P1h2GJKkm7Uxco84zSZQk1e5hx2+uOwRJUg0ufdQJ/PD2CS4778S6Q1ETk0RJkiRJtdgyPsb7LnlY3WFoAeu6kiRJkqSKSaIkSZIkqWKSKEmSJEmqmCRKkiRJkiomiZIkSZKkikmiJEmSJKlikihJkiRJqpgkSpIkSZIqJomSJEmSpIpJoiRJkiSpYpIoSZIkSaqYJEqSJEmSKiaJkiRJkqSKSaIkSZIkqWKSKEmSJEmqmCRKkiRJkiomiZIkSZKkikmiJEmSJKkSmVl3DF0XERPAfyxh143A7hW+nzHWu18vxLjU/Yyx3v16Ical7tcLMS51v23AnV16raXu1wvv41L364UYl7qfMda7Xy/EuNT9eiHGpe5njPd1WmauX/SRzBy4G3DDEvf70Erfzxj92Qb5Z+uFGP3ZejPGI/jZVvx40wvvoz+bMa60/XohRn82Y2xhn4OOUbabtueLPbCfMda7Xy/EuNT9jLHe/XohxqXu1wsxHsl+3Xwt3//6Xqvb+xljvfv1QoxL3a8XYlzqfsbYokFtN70hMx9RdxySpP7meCNJWqkONUYNaiXxQ3UHIEkaCI43kqSV6qBj1EBWEiVJkiRJixvUSmJHRMSWiPh8RNwbEbdGxPPK+x8XEf8WEbsi4q5ym2PqjrffRMQrIuKGiNgfEf9nwWPnR8RNEbEvIr4WESfUFGbfOtj7HxGXRMTeptu+iMiIeHiN4faViFgVEVeVx52JiPhuRDxpke2uLN/7C+qIU+qUg42/5WOvjIifRsSe8hj1W3XG2o8Ocfw/sTzmNI8Bb6ox1L50qDEgIh4ZEV+JiLsj4o6I+ExE3L/umPvJ4cbgiLg8In5c/v5fFxE76oy3VSaJy+t9wAFgO3AJ8IGIeDDw78ATM3MTsAP4EfCB2qLsX7cBbwf+qvnOiNgGfA54E7AFuAH4VNej63+Lvv+ZeW1mrmvcgCuAnwD/WkOM/WoE+DnwGIopsN8IfDoiTmxsEBEnA88GflVDfFKnLTr+RsS5wLuAZ1H8bVwFfD4ihmuLtD8tevxvsqlpHHhbF+MaFIcaAzZTtBSeCJwATABX1xFkHzvo+x8RjwXeCTyd4jPoT4FP1BRnW2w3XSYRMQ7cA5yRmT8s77sG+GVmvr5pu1XAW4CnZ+bpdcTa7yLi7cCxmfmi8vuXAC/KzPPK78cp1i07KzNvqi3QPrXw/V/k8a8B12fmW7sa2ICJiO8Db83Mz5bfXwe8F3g/cHlmfrXO+KTlcqjxF/gO8OrMPKdp273Ajsz0hMkyW2T8PZHiQ/FoZs7UF9ngWTgGNN3/MODrebC18bQsGu8/8ChgTWb+fnn/Dopj0ymZeXONIR6WlcTlcyow0xigSt8DHgwQEcdHxC5gEngN8O7uhziwHkzxfwFAZt4L3Fzery4q23wfDXy07lj6WURspzgm3Vh+/2xgf2b+Xa2BSZ1xqPH374HhiDi3rB6+GPgusLP7YQ60WyPiFxFxddndow5aOAYs8OiD3K9lssj7H80Pl/+e0dWglmCk7gD6yDpgz4L7dgPrATLzZ8CmiNgC/B5gBat71gF3LLiv+r9RV70A+KfM/GndgfSriBgFrgU+kpk3RcR6ilaXx9cbmdQxhxp/J4DPAv+X4sPZLuBJaRtVt9wJnE2RmG+laAu+FnhinUH1s4VjwILHHgJcSdH6qA5YZAy+DvhkRHyQ4nKzK4EE1tYYZkusJC6fvcCGBfdtoBigKpl5N/AR4G8iwiS9O1r6v1FXvIDi918dEBFDwDUU12a9orz7LcA1mXlLTWFJnXaoY/zvApdRVBXHgOcDX+qViSN6XWbuzcwbMnMmM2+nOC49oTx5pWV2kDGg8dgpFJX1P8zMf6ohvL632PtfXtrxZoqTVbeUtwngF7UE2QaTxOXzQ2AkIh7QdN9DWbykPwIczW8OauqMGyn+L4DqmpSTsd2iqyLiv1BM3PTXdcfSjyIiKCbl2A5cmJnT5UPnA38QETsjYidwHMUF9a+rKVRpuR1q/D0T+FJm/jAz5zLzOorJm86rIU4VFRTw8+eyO8QY0LjU46vA2zLzmppC7GuHev8z832Z+YDM3E6RLI4AP6gn0tb5R7pMyuvcPgf8cUSMlx+Inw5cExHPjIjTImIoIo4C3gN8p6wqaplExEhErAaGKa5BWV1Waz8PnBERF5aPXwl830lrltch3v+GFwKfzUwruJ3xAeBBwNMyc7Lp/vMprn04s7zdBryUou1L6nmHGn+BbwNPiYiTovB4imuFVvwHtF5ysON/eS1o4/PPVorJs67PzN31RtyXFh0Dolhy7R+BP8/MD9YV3AA42Pu/OiLOKI8/x1PMNPu/M/OeugJtlUni8roCWAP8mmJ625dn5o3AMcB1FOXlfwPmgGfUFWQfeyPFxECvp2gpmgTemJl3ABcC76CYAe9c4Ll1BdnHFn3/oThIAhdhq2lHlGeJX0qRBO6M+fXILsnMuzJzZ+MGzAL3ZObeWoOWltfBxt+PAp8Erqe4bvG9wEs9SbjsDnb8P4n5zz8/APYDF9cUY9861BgAXE7x//CWpvs9/i+jw7z/q4GPU7TF/zPwTYol2VY8l8CQJEmSJFWsJEqSJEmSKiaJkiRJkqSKSaIkSZIkqWKSKEmSJEmqmCRKkiRJkiomiZIkSZKkikmiJEmSJKlikihJkiRJqpgkSpIkSZIqJomSJEmSpIpJoiRJkiSpYpIoSZIkSaqYJEqSJEmSKiaJkiRJkqSKSaIkSZIkqWKSKEmSJEmqmCRKkiRJkiomiZIkSZKkikmiJEmSJKlikihJkiRJqpgkSpIkSZIqJomSJEmSpEpfJYkRcUtE/Doixpvuuzwirq8xLElSnynHm8mImIiIXRHxjYh4WUT01bgqSRpM/TiYDQN/WHcQkqS+97TMXA+cALwLeB1wVb0hSZJ05PoxSfxT4DURsWnhAxFxXkR8OyJ2l/+eV97/nIi4YcG2r4qIv+1SzJKkHpWZuzPzb4HnAC+MiDMiYlVE/M+I+FlE3B4RH4yINY19IuLpEfHdiNgTETdHxO/U9xNIknRf/Zgk3gBcD7ym+c6I2AJ8GXgvsBV4D/DliNgKfBE4LSIe0LTL84CPdyNgSVLvy8x/Bn4B/DZFZfFU4EzgFOAY4EqAiDgH+CjwR8Am4NHALd2PWJKkxfVjkgjFQPzKiDiq6b6nAD/KzGsycyYzPwHcRNEutA/4G+BigDJZfCBgJVGS1I7bgC3AS4BXZebdmTkBvBN4brnN7wJ/lZlfycy5zPxlZt5UU7ySJP2GvkwSM/MHwJeA1zfdvQO4dcGmt1Kc3YWianhx+fXzgC+UyaMkSa06BhgB1gL/Uk5qswu4DmicuDwOuLmm+CRJOqy+TBJLbwZ+j/kk8DaKyQWaHQ/8svz6K8BREXEmRbJoq6kkqWURcTbFmPMFYBJ4cGZuKm8bM3NduenPgZPrilOSpMPp2yQxM38MfAr4g/KuvwNOjYjnRcRIRDwHOJ2i4khmTgOfoZj4ZgtF0ihJ0iFFxIaIeCrwSeBjmfk94MPAn0XE0eU2x0TEE8tdrgIui4jzI2KofOyB9UQvSdJv6tsksfTHwDhAZt4FPBV4NXAX8FrgqZl5Z9P2HwcuAD6TmTNdjlWS1Fu+GBETFJXB/04xIdpl5WOvA34MfCsi9gBfBU6DaoKby4A/A3YDX+c3O10kSapNZGbdMUiSJEmSVoh+ryRKkiRJktpgkihJkiRJqpgkSpIkSZIqJomSJEmSpIpJoiRJkiSp0tNJYkSsioirIuLWiJiIiO9GxJOaHj8/Im6KiH0R8bWIOKHpsYsi4hvlY9cf4jVeEBEZEZd3+MeRJEmSpNr1dJIIjFCsT/UYYCPwRuDTEXFiRGwDPge8CdgC3AB8qmnfu4H/BbzrYE8eEZuBNwA3diR6SZIkSVph+m6dxIj4PvBWYCvwosw8r7x/HLgTOCszb2ra/nLg+Zn52EWe64PA94GLgI9l5l92/ieQJEmSpPr0eiXxPiJiO3AqReXvwcD3Go9l5r3AzeX9rTzXOcAjgA8uf6SSJEmStDL1TZIYEaPAtcBHykrhOmD3gs12A+tbeK5h4P3AKzJzbrljlSRJkqSVqi+SxIgYAq4BDgCvKO/eC2xYsOkGYKKFp7wC+H5mfmvZgpQkSZKkHjBSdwBHKiICuArYDjw5M6fLh24EXti03ThwMq1NQnM+8JiIeHL5/RbgrIg4MzNfcYj9JEmSJKmn9XySCHwAeBBwQWZONt3/eeBPI+JC4MvAlRTVwZugaikdpXgPhiJiNTBbJpkvAlY3PdfngL+mSEYlSZIkqW/1dLtpue7hS4EzgZ0Rsbe8XZKZdwAXAu8A7gHOBZ7btPulwCRFkvnb5dcfBsjMXZm5s3GjaGPdk5kLr3GUJEmSpL7Sd0tgSJIkSZKWrqcriZIkSZKk5WWSKEmSJEmqmCRKkiRJkiomiZIkSZKkikmiJEmSJKlikihJkiRJqpgkSpIERMTx5Vq7w3XHIklSnUwSJUkDKyJuiYgLADLzZ5m5LjNnu/j6j42IX3Tr9SRJaoVJoiRJkiSpYpIoSRpIEXENcDzwxbLN9LURkRExUj5+fUS8PSK+UT7+xYjYGhHXRsSeiPh2RJzY9HwPjIivRMTdEfEfEXFR02NPjoh/j4iJiPhlRLwmIsaBvwd2lM+/NyJ2RMQ5EfHNiNgVEb+KiD+PiLGm58qIuCIiflQ+39si4uQyzj0R8enG9o1KZUS8ISLuLCunl3TnHZYk9SqTREnSQMrMS4GfAU/LzHXApxfZ7LnApcAxwMnAN4GrgS3A/wPeDFAmfF8BPg4cXe73/og4vXyeq4CXZuZ64AzgHzPzXuBJwG1lm+u6zLwNmAVeBWwDHgWcD1yxIK4nAg8HHgm8FvgQ8HzguPL5L27a9n7lcx0DvBD4UESc1tabJUkaKCaJkiQd3NWZeXNm7qao+t2cmV/NzBngM8BZ5XZPBW7JzKszcyYzvwN8Fnh2+fg0cHpEbMjMezLzXw/2gpn5L5n5rfJ5bgH+AnjMgs3enZl7MvNG4AfAP2TmT5riPGvB9m/KzP2Z+XXgy8BFSJJ0ECaJkiQd3O1NX08u8v268usTgHPLFtFdEbELuISiigdwIfBk4NaI+HpEPOpgLxgRp0bElyJiZ0TsAd5JUQlcSlwA95RVy4ZbgR0He31JkkwSJUmDLJfpeX4OfD0zNzXd1mXmywEy89uZ+XSKVtQvMN/autjrfwC4CXhAZm4A3gDEEcS2uWyHbTgeuO0Ink+S1OdMEiVJg+x24KRleJ4vAadGxKURMVrezo6IB0XEWERcEhEbM3Ma2APMNb3+1ojY2PRc68tt9kbEA4GXL0N8by3j+G2K1tjPLMNzSpL6lEmiJGmQ/QnwxrI99FlLfZLMnACeQDFhzW3ATuB/AKvKTS4FbinbR19G0YpKZt4EfAL4SdmmugN4DfA8YAL4MPCppcZV2gncU8Z1LfCy8nUlSVpUZC5Xp40kSVpJIuKxwMcy89i6Y5Ek9Q4riZIkSZKkikmiJEmSJKliu6kkSZIkqWIlUZIkSZJUMUmUJEmSJFVMEiVJkiRJFZNESZIkSVLFJFGSJEmSVDFJlCRJkiRV/j9YJ750IxgAtQAAAABJRU5ErkJggg==",
+ "text/plain": [
+ "
"
+ ]
+ },
+ "metadata": {
+ "needs_background": "light"
+ }
+ }
+ ],
+ "metadata": {}
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "source": [],
+ "outputs": [],
+ "metadata": {}
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "\n---\n\n**إخلاء المسؤولية**: \nتمت ترجمة هذا المستند باستخدام خدمة الترجمة الآلية [Co-op Translator](https://github.com/Azure/co-op-translator). بينما نسعى لتحقيق الدقة، يرجى العلم أن الترجمات الآلية قد تحتوي على أخطاء أو معلومات غير دقيقة. يجب اعتبار المستند الأصلي بلغته الأصلية هو المصدر الموثوق. للحصول على معلومات حساسة أو هامة، يُوصى بالاستعانة بترجمة بشرية احترافية. نحن غير مسؤولين عن أي سوء فهم أو تفسيرات خاطئة تنشأ عن استخدام هذه الترجمة.\n"
+ ]
+ }
+ ],
+ "metadata": {
+ "kernel_info": {
+ "name": "python3"
+ },
+ "kernelspec": {
+ "name": "python3",
+ "display_name": "Python 3.7.0 64-bit"
+ },
+ "language_info": {
+ "codemirror_mode": {
+ "name": "ipython",
+ "version": 3
+ },
+ "file_extension": ".py",
+ "mimetype": "text/x-python",
+ "name": "python",
+ "nbconvert_exporter": "python",
+ "pygments_lexer": "ipython3",
+ "version": "3.7.0"
+ },
+ "nteract": {
+ "version": "nteract-front-end@1.0.0"
+ },
+ "metadata": {
+ "interpreter": {
+ "hash": "70b38d7a306a849643e446cd70466270a13445e5987dfa1344ef2b127438fa4d"
+ }
+ },
+ "interpreter": {
+ "hash": "70b38d7a306a849643e446cd70466270a13445e5987dfa1344ef2b127438fa4d"
+ },
+ "coopTranslator": {
+ "original_hash": "c193140200b9684da27e3890211391b6",
+ "translation_date": "2025-08-29T15:03:16+00:00",
+ "source_file": "7-TimeSeries/2-ARIMA/solution/notebook.ipynb",
+ "language_code": "ar"
+ }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 2
+}
\ No newline at end of file
diff --git a/translations/ar/7-TimeSeries/2-ARIMA/working/notebook.ipynb b/translations/ar/7-TimeSeries/2-ARIMA/working/notebook.ipynb
new file mode 100644
index 000000000..210dc7d0b
--- /dev/null
+++ b/translations/ar/7-TimeSeries/2-ARIMA/working/notebook.ipynb
@@ -0,0 +1,61 @@
+{
+ "metadata": {
+ "language_info": {
+ "codemirror_mode": {
+ "name": "ipython",
+ "version": 3
+ },
+ "file_extension": ".py",
+ "mimetype": "text/x-python",
+ "name": "python",
+ "nbconvert_exporter": "python",
+ "pygments_lexer": "ipython3",
+ "version": 3
+ },
+ "orig_nbformat": 2,
+ "coopTranslator": {
+ "original_hash": "523ec472196307b3c4235337353c9ceb",
+ "translation_date": "2025-08-29T15:04:43+00:00",
+ "source_file": "7-TimeSeries/2-ARIMA/working/notebook.ipynb",
+ "language_code": "ar"
+ }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 2,
+ "cells": [
+ {
+ "source": [
+ "# التنبؤ بالسلاسل الزمنية باستخدام ARIMA\n",
+ "\n",
+ "في هذا الدفتر، نوضح كيفية:\n",
+ "- إعداد بيانات السلاسل الزمنية لتدريب نموذج التنبؤ بالسلاسل الزمنية ARIMA\n",
+ "- تنفيذ نموذج ARIMA بسيط للتنبؤ بالخطوات المستقبلية HORIZON (من الزمن *t+1* إلى *t+HORIZON*) في السلاسل الزمنية\n",
+ "- تقييم النموذج\n",
+ "\n",
+ "البيانات في هذا المثال مأخوذة من مسابقة التنبؤ GEFCom2014. \n",
+ "\n",
+ "تتكون من 3 سنوات من بيانات الحمل الكهربائي ودرجات الحرارة لكل ساعة بين عامي 2012 و2014. المهمة هي التنبؤ بالقيم المستقبلية للحمل الكهربائي. في هذا المثال، نوضح كيفية التنبؤ بخطوة واحدة فقط إلى الأمام باستخدام بيانات الحمل التاريخية فقط.\n",
+ "\n",
+ "تاو هونغ، بيير بينسون، شو فان، حميد رضا زاريبور، ألبرتو تروكولي وروب جي. هايندمان، \"التنبؤ بالطاقة الاحتمالية: مسابقة التنبؤ بالطاقة العالمية 2014 وما بعدها\"، المجلة الدولية للتنبؤ، المجلد 32، العدد 3، الصفحات 896-913، يوليو-سبتمبر، 2016.\n"
+ ],
+ "cell_type": "markdown",
+ "metadata": {}
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "pip install statsmodels"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "\n---\n\n**إخلاء المسؤولية**: \nتم ترجمة هذا المستند باستخدام خدمة الترجمة الآلية [Co-op Translator](https://github.com/Azure/co-op-translator). بينما نسعى لتحقيق الدقة، يرجى العلم أن الترجمات الآلية قد تحتوي على أخطاء أو معلومات غير دقيقة. يجب اعتبار المستند الأصلي بلغته الأصلية هو المصدر الموثوق. للحصول على معلومات حساسة أو هامة، يُوصى بالاستعانة بترجمة بشرية احترافية. نحن غير مسؤولين عن أي سوء فهم أو تفسيرات خاطئة ناتجة عن استخدام هذه الترجمة.\n"
+ ]
+ }
+ ]
+}
\ No newline at end of file
diff --git a/translations/ar/7-TimeSeries/3-SVR/README.md b/translations/ar/7-TimeSeries/3-SVR/README.md
new file mode 100644
index 000000000..81eea6912
--- /dev/null
+++ b/translations/ar/7-TimeSeries/3-SVR/README.md
@@ -0,0 +1,393 @@
+
+# التنبؤ بالسلاسل الزمنية باستخدام نموذج Support Vector Regressor
+
+في الدرس السابق، تعلمت كيفية استخدام نموذج ARIMA للتنبؤ بالسلاسل الزمنية. الآن ستتعرف على نموذج Support Vector Regressor، وهو نموذج يستخدم للتنبؤ بالبيانات المستمرة.
+
+## [اختبار ما قبل المحاضرة](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/51/)
+
+## المقدمة
+
+في هذا الدرس، ستكتشف طريقة محددة لبناء النماذج باستخدام [**SVM**: **S**upport **V**ector **M**achine](https://en.wikipedia.org/wiki/Support-vector_machine) للتنبؤ، أو **SVR: Support Vector Regressor**.
+
+### SVR في سياق السلاسل الزمنية [^1]
+
+قبل فهم أهمية SVR في التنبؤ بالسلاسل الزمنية، إليك بعض المفاهيم المهمة التي تحتاج إلى معرفتها:
+
+- **الانحدار:** تقنية تعلم تحت الإشراف تُستخدم للتنبؤ بالقيم المستمرة من مجموعة معينة من المدخلات. الفكرة هي ملاءمة منحنى (أو خط) في فضاء الميزات يحتوي على أكبر عدد من النقاط. [اضغط هنا](https://en.wikipedia.org/wiki/Regression_analysis) لمزيد من المعلومات.
+- **Support Vector Machine (SVM):** نوع من نماذج التعلم الآلي تحت الإشراف يُستخدم للتصنيف، والانحدار، واكتشاف القيم الشاذة. النموذج هو عبارة عن مستوى فائق في فضاء الميزات، والذي يعمل كحد فاصل في حالة التصنيف، وكأفضل خط ملائم في حالة الانحدار. في SVM، يتم استخدام دالة Kernel لتحويل مجموعة البيانات إلى فضاء بأبعاد أعلى بحيث يمكن فصلها بسهولة. [اضغط هنا](https://en.wikipedia.org/wiki/Support-vector_machine) لمزيد من المعلومات عن SVM.
+- **Support Vector Regressor (SVR):** نوع من SVM يُستخدم لإيجاد أفضل خط ملائم (والذي يكون في حالة SVM مستوى فائق) يحتوي على أكبر عدد من النقاط.
+
+### لماذا SVR؟ [^1]
+
+في الدرس السابق، تعلمت عن ARIMA، وهو طريقة إحصائية خطية ناجحة جدًا لتوقع بيانات السلاسل الزمنية. ومع ذلك، في العديد من الحالات، تحتوي بيانات السلاسل الزمنية على *لاخطية*، والتي لا يمكن تمثيلها بواسطة النماذج الخطية. في مثل هذه الحالات، قدرة SVM على أخذ اللاخطية في البيانات بعين الاعتبار تجعل SVR ناجحًا في التنبؤ بالسلاسل الزمنية.
+
+## تمرين - بناء نموذج SVR
+
+الخطوات الأولى لتحضير البيانات مشابهة لتلك التي تم تناولها في الدرس السابق عن [ARIMA](https://github.com/microsoft/ML-For-Beginners/tree/main/7-TimeSeries/2-ARIMA).
+
+افتح المجلد [_/working_](https://github.com/microsoft/ML-For-Beginners/tree/main/7-TimeSeries/3-SVR/working) في هذا الدرس وابحث عن الملف [_notebook.ipynb_](https://github.com/microsoft/ML-For-Beginners/blob/main/7-TimeSeries/3-SVR/working/notebook.ipynb). [^2]
+
+1. قم بتشغيل الملف واستيراد المكتبات اللازمة: [^2]
+
+ ```python
+ import sys
+ sys.path.append('../../')
+ ```
+
+ ```python
+ import os
+ import warnings
+ import matplotlib.pyplot as plt
+ import numpy as np
+ import pandas as pd
+ import datetime as dt
+ import math
+
+ from sklearn.svm import SVR
+ from sklearn.preprocessing import MinMaxScaler
+ from common.utils import load_data, mape
+ ```
+
+2. قم بتحميل البيانات من ملف `/data/energy.csv` إلى إطار بيانات Pandas وألقِ نظرة عليها: [^2]
+
+ ```python
+ energy = load_data('../../data')[['load']]
+ ```
+
+3. قم برسم جميع بيانات الطاقة المتاحة من يناير 2012 إلى ديسمبر 2014: [^2]
+
+ ```python
+ energy.plot(y='load', subplots=True, figsize=(15, 8), fontsize=12)
+ plt.xlabel('timestamp', fontsize=12)
+ plt.ylabel('load', fontsize=12)
+ plt.show()
+ ```
+
+ 
+
+ الآن، دعنا نبني نموذج SVR الخاص بنا.
+
+### إنشاء مجموعات التدريب والاختبار
+
+الآن بعد أن تم تحميل بياناتك، يمكنك تقسيمها إلى مجموعات تدريب واختبار. بعد ذلك، ستقوم بإعادة تشكيل البيانات لإنشاء مجموعة بيانات تعتمد على خطوات زمنية، وهو أمر ضروري لنموذج SVR. ستقوم بتدريب النموذج على مجموعة التدريب. بعد انتهاء التدريب، ستقوم بتقييم دقته على مجموعة التدريب، ومجموعة الاختبار، ثم مجموعة البيانات الكاملة لرؤية الأداء العام. يجب أن تتأكد من أن مجموعة الاختبار تغطي فترة زمنية لاحقة لمجموعة التدريب لضمان أن النموذج لا يحصل على معلومات من الفترات الزمنية المستقبلية [^2] (وهي حالة تُعرف باسم *الإفراط في التكيف*).
+
+1. خصص فترة شهرين من 1 سبتمبر إلى 31 أكتوبر 2014 لمجموعة التدريب. ستشمل مجموعة الاختبار فترة الشهرين من 1 نوفمبر إلى 31 ديسمبر 2014: [^2]
+
+ ```python
+ train_start_dt = '2014-11-01 00:00:00'
+ test_start_dt = '2014-12-30 00:00:00'
+ ```
+
+2. قم بتصور الفروقات: [^2]
+
+ ```python
+ energy[(energy.index < test_start_dt) & (energy.index >= train_start_dt)][['load']].rename(columns={'load':'train'}) \
+ .join(energy[test_start_dt:][['load']].rename(columns={'load':'test'}), how='outer') \
+ .plot(y=['train', 'test'], figsize=(15, 8), fontsize=12)
+ plt.xlabel('timestamp', fontsize=12)
+ plt.ylabel('load', fontsize=12)
+ plt.show()
+ ```
+
+ 
+
+### تحضير البيانات للتدريب
+
+الآن، تحتاج إلى تحضير البيانات للتدريب عن طريق تصفيتها وتوسيع نطاقها. قم بتصفية مجموعة البيانات لتشمل فقط الفترات الزمنية والأعمدة التي تحتاجها، وقم بتوسيع النطاق لضمان أن البيانات تقع في النطاق 0,1.
+
+1. قم بتصفية مجموعة البيانات الأصلية لتشمل فقط الفترات الزمنية المذكورة لكل مجموعة، مع تضمين العمود المطلوب 'load' بالإضافة إلى التاريخ: [^2]
+
+ ```python
+ train = energy.copy()[(energy.index >= train_start_dt) & (energy.index < test_start_dt)][['load']]
+ test = energy.copy()[energy.index >= test_start_dt][['load']]
+
+ print('Training data shape: ', train.shape)
+ print('Test data shape: ', test.shape)
+ ```
+
+ ```output
+ Training data shape: (1416, 1)
+ Test data shape: (48, 1)
+ ```
+
+2. قم بتوسيع نطاق بيانات التدريب لتكون في النطاق (0, 1): [^2]
+
+ ```python
+ scaler = MinMaxScaler()
+ train['load'] = scaler.fit_transform(train)
+ ```
+
+4. الآن، قم بتوسيع نطاق بيانات الاختبار: [^2]
+
+ ```python
+ test['load'] = scaler.transform(test)
+ ```
+
+### إنشاء بيانات مع خطوات زمنية [^1]
+
+بالنسبة لنموذج SVR، تحتاج إلى تحويل بيانات الإدخال لتكون بالشكل `[batch, timesteps]`. لذلك، ستقوم بإعادة تشكيل بيانات `train_data` و`test_data` الحالية بحيث يكون هناك بُعد جديد يشير إلى الخطوات الزمنية.
+
+```python
+# Converting to numpy arrays
+train_data = train.values
+test_data = test.values
+```
+
+في هذا المثال، نأخذ `timesteps = 5`. وبالتالي، تكون المدخلات للنموذج هي البيانات لأول 4 خطوات زمنية، والمخرجات ستكون البيانات للخطوة الزمنية الخامسة.
+
+```python
+timesteps=5
+```
+
+تحويل بيانات التدريب إلى مصفوفة ثنائية الأبعاد باستخدام تعبيرات قائمة متداخلة:
+
+```python
+train_data_timesteps=np.array([[j for j in train_data[i:i+timesteps]] for i in range(0,len(train_data)-timesteps+1)])[:,:,0]
+train_data_timesteps.shape
+```
+
+```output
+(1412, 5)
+```
+
+تحويل بيانات الاختبار إلى مصفوفة ثنائية الأبعاد:
+
+```python
+test_data_timesteps=np.array([[j for j in test_data[i:i+timesteps]] for i in range(0,len(test_data)-timesteps+1)])[:,:,0]
+test_data_timesteps.shape
+```
+
+```output
+(44, 5)
+```
+
+اختيار المدخلات والمخرجات من بيانات التدريب والاختبار:
+
+```python
+x_train, y_train = train_data_timesteps[:,:timesteps-1],train_data_timesteps[:,[timesteps-1]]
+x_test, y_test = test_data_timesteps[:,:timesteps-1],test_data_timesteps[:,[timesteps-1]]
+
+print(x_train.shape, y_train.shape)
+print(x_test.shape, y_test.shape)
+```
+
+```output
+(1412, 4) (1412, 1)
+(44, 4) (44, 1)
+```
+
+### تنفيذ SVR [^1]
+
+الآن، حان الوقت لتنفيذ SVR. لقراءة المزيد عن هذا التنفيذ، يمكنك الرجوع إلى [هذا التوثيق](https://scikit-learn.org/stable/modules/generated/sklearn.svm.SVR.html). بالنسبة لتنفيذنا، نتبع هذه الخطوات:
+
+1. تعريف النموذج عن طريق استدعاء `SVR()` وتمرير معلمات النموذج: kernel، gamma، c وepsilon.
+2. تحضير النموذج لبيانات التدريب عن طريق استدعاء دالة `fit()`.
+3. إجراء التنبؤات عن طريق استدعاء دالة `predict()`.
+
+الآن نقوم بإنشاء نموذج SVR. هنا نستخدم [RBF kernel](https://scikit-learn.org/stable/modules/svm.html#parameters-of-the-rbf-kernel)، ونحدد معلمات gamma، C وepsilon كالتالي: 0.5، 10 و0.05 على التوالي.
+
+```python
+model = SVR(kernel='rbf',gamma=0.5, C=10, epsilon = 0.05)
+```
+
+#### تدريب النموذج على بيانات التدريب [^1]
+
+```python
+model.fit(x_train, y_train[:,0])
+```
+
+```output
+SVR(C=10, cache_size=200, coef0=0.0, degree=3, epsilon=0.05, gamma=0.5,
+ kernel='rbf', max_iter=-1, shrinking=True, tol=0.001, verbose=False)
+```
+
+#### إجراء التنبؤات باستخدام النموذج [^1]
+
+```python
+y_train_pred = model.predict(x_train).reshape(-1,1)
+y_test_pred = model.predict(x_test).reshape(-1,1)
+
+print(y_train_pred.shape, y_test_pred.shape)
+```
+
+```output
+(1412, 1) (44, 1)
+```
+
+لقد قمت ببناء نموذج SVR الخاص بك! الآن نحتاج إلى تقييمه.
+
+### تقييم النموذج [^1]
+
+للتقييم، أولاً سنعيد توسيع نطاق البيانات إلى مداها الأصلي. بعد ذلك، للتحقق من الأداء، سنقوم برسم السلاسل الزمنية الأصلية والمتوقعة، وأيضًا طباعة نتيجة MAPE.
+
+إعادة توسيع نطاق المخرجات المتوقعة والأصلية:
+
+```python
+# Scaling the predictions
+y_train_pred = scaler.inverse_transform(y_train_pred)
+y_test_pred = scaler.inverse_transform(y_test_pred)
+
+print(len(y_train_pred), len(y_test_pred))
+```
+
+```python
+# Scaling the original values
+y_train = scaler.inverse_transform(y_train)
+y_test = scaler.inverse_transform(y_test)
+
+print(len(y_train), len(y_test))
+```
+
+#### التحقق من أداء النموذج على بيانات التدريب والاختبار [^1]
+
+نستخرج الطوابع الزمنية من مجموعة البيانات لعرضها على المحور x في الرسم البياني. لاحظ أننا نستخدم أول ```timesteps-1``` قيمة كمدخل لأول مخرج، لذا ستبدأ الطوابع الزمنية للمخرجات بعد ذلك.
+
+```python
+train_timestamps = energy[(energy.index < test_start_dt) & (energy.index >= train_start_dt)].index[timesteps-1:]
+test_timestamps = energy[test_start_dt:].index[timesteps-1:]
+
+print(len(train_timestamps), len(test_timestamps))
+```
+
+```output
+1412 44
+```
+
+رسم التنبؤات لبيانات التدريب:
+
+```python
+plt.figure(figsize=(25,6))
+plt.plot(train_timestamps, y_train, color = 'red', linewidth=2.0, alpha = 0.6)
+plt.plot(train_timestamps, y_train_pred, color = 'blue', linewidth=0.8)
+plt.legend(['Actual','Predicted'])
+plt.xlabel('Timestamp')
+plt.title("Training data prediction")
+plt.show()
+```
+
+
+
+طباعة MAPE لبيانات التدريب:
+
+```python
+print('MAPE for training data: ', mape(y_train_pred, y_train)*100, '%')
+```
+
+```output
+MAPE for training data: 1.7195710200875551 %
+```
+
+رسم التنبؤات لبيانات الاختبار:
+
+```python
+plt.figure(figsize=(10,3))
+plt.plot(test_timestamps, y_test, color = 'red', linewidth=2.0, alpha = 0.6)
+plt.plot(test_timestamps, y_test_pred, color = 'blue', linewidth=0.8)
+plt.legend(['Actual','Predicted'])
+plt.xlabel('Timestamp')
+plt.show()
+```
+
+
+
+طباعة MAPE لبيانات الاختبار:
+
+```python
+print('MAPE for testing data: ', mape(y_test_pred, y_test)*100, '%')
+```
+
+```output
+MAPE for testing data: 1.2623790187854018 %
+```
+
+🏆 لقد حصلت على نتيجة جيدة جدًا على مجموعة بيانات الاختبار!
+
+### التحقق من أداء النموذج على مجموعة البيانات الكاملة [^1]
+
+```python
+# Extracting load values as numpy array
+data = energy.copy().values
+
+# Scaling
+data = scaler.transform(data)
+
+# Transforming to 2D tensor as per model input requirement
+data_timesteps=np.array([[j for j in data[i:i+timesteps]] for i in range(0,len(data)-timesteps+1)])[:,:,0]
+print("Tensor shape: ", data_timesteps.shape)
+
+# Selecting inputs and outputs from data
+X, Y = data_timesteps[:,:timesteps-1],data_timesteps[:,[timesteps-1]]
+print("X shape: ", X.shape,"\nY shape: ", Y.shape)
+```
+
+```output
+Tensor shape: (26300, 5)
+X shape: (26300, 4)
+Y shape: (26300, 1)
+```
+
+```python
+# Make model predictions
+Y_pred = model.predict(X).reshape(-1,1)
+
+# Inverse scale and reshape
+Y_pred = scaler.inverse_transform(Y_pred)
+Y = scaler.inverse_transform(Y)
+```
+
+```python
+plt.figure(figsize=(30,8))
+plt.plot(Y, color = 'red', linewidth=2.0, alpha = 0.6)
+plt.plot(Y_pred, color = 'blue', linewidth=0.8)
+plt.legend(['Actual','Predicted'])
+plt.xlabel('Timestamp')
+plt.show()
+```
+
+
+
+```python
+print('MAPE: ', mape(Y_pred, Y)*100, '%')
+```
+
+```output
+MAPE: 2.0572089029888656 %
+```
+
+🏆 رسومات رائعة جدًا، تُظهر نموذجًا بدقة جيدة. عمل رائع!
+
+---
+
+## 🚀تحدي
+
+- حاول تعديل معلمات النموذج (gamma، C، epsilon) أثناء إنشائه وقم بتقييم النتائج على البيانات لمعرفة أي مجموعة من المعلمات تعطي أفضل النتائج على بيانات الاختبار. لمعرفة المزيد عن هذه المعلمات، يمكنك الرجوع إلى [التوثيق هنا](https://scikit-learn.org/stable/modules/svm.html#parameters-of-the-rbf-kernel).
+- حاول استخدام دوال kernel مختلفة للنموذج وقم بتحليل أدائها على مجموعة البيانات. يمكنك العثور على وثيقة مفيدة [هنا](https://scikit-learn.org/stable/modules/svm.html#kernel-functions).
+- حاول استخدام قيم مختلفة لـ `timesteps` للنموذج للنظر إلى الوراء لإجراء التنبؤ.
+
+## [اختبار ما بعد المحاضرة](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/52/)
+
+## المراجعة والدراسة الذاتية
+
+كان هذا الدرس مقدمة لتطبيق SVR في التنبؤ بالسلاسل الزمنية. لقراءة المزيد عن SVR، يمكنك الرجوع إلى [هذه المدونة](https://www.analyticsvidhya.com/blog/2020/03/support-vector-regression-tutorial-for-machine-learning/). يوفر [هذا التوثيق على scikit-learn](https://scikit-learn.org/stable/modules/svm.html) شرحًا أكثر شمولاً حول SVM بشكل عام، [SVRs](https://scikit-learn.org/stable/modules/svm.html#regression) وتفاصيل التنفيذ الأخرى مثل [دوال kernel المختلفة](https://scikit-learn.org/stable/modules/svm.html#kernel-functions) التي يمكن استخدامها ومعلماتها.
+
+## الواجب
+
+[نموذج SVR جديد](assignment.md)
+
+## الشكر
+
+[^1]: النص، الكود والمخرجات في هذا القسم تم تقديمها من قبل [@AnirbanMukherjeeXD](https://github.com/AnirbanMukherjeeXD)
+[^2]: النص، الكود والمخرجات في هذا القسم مأخوذة من [ARIMA](https://github.com/microsoft/ML-For-Beginners/tree/main/7-TimeSeries/2-ARIMA)
+
+---
+
+**إخلاء المسؤولية**:
+تمت ترجمة هذا المستند باستخدام خدمة الترجمة الآلية [Co-op Translator](https://github.com/Azure/co-op-translator). بينما نسعى لتحقيق الدقة، يرجى العلم أن الترجمات الآلية قد تحتوي على أخطاء أو معلومات غير دقيقة. يجب اعتبار المستند الأصلي بلغته الأصلية هو المصدر الموثوق. للحصول على معلومات حساسة أو هامة، يُوصى بالاستعانة بترجمة بشرية احترافية. نحن غير مسؤولين عن أي سوء فهم أو تفسيرات خاطئة تنشأ عن استخدام هذه الترجمة.
\ No newline at end of file
diff --git a/translations/ar/7-TimeSeries/3-SVR/assignment.md b/translations/ar/7-TimeSeries/3-SVR/assignment.md
new file mode 100644
index 000000000..b6ea5925a
--- /dev/null
+++ b/translations/ar/7-TimeSeries/3-SVR/assignment.md
@@ -0,0 +1,27 @@
+
+# نموذج SVR جديد
+
+## التعليمات [^1]
+
+الآن بعد أن قمت ببناء نموذج SVR، قم ببناء نموذج جديد باستخدام بيانات جديدة (جرب واحدة من [هذه المجموعات من جامعة Duke](http://www2.stat.duke.edu/~mw/ts_data_sets.html)). قم بتوضيح عملك في دفتر ملاحظات، وقم بتصور البيانات ونموذجك، واختبر دقته باستخدام الرسوم البيانية المناسبة و MAPE. جرب أيضًا تعديل مختلف المعاملات واستخدام قيم مختلفة للخطوات الزمنية.
+
+## المعيار [^1]
+
+| المعايير | ممتاز | مقبول | يحتاج إلى تحسين |
+| -------- | ---------------------------------------------------------- | ----------------------------------------------------- | --------------------------------- |
+| | يتم تقديم دفتر ملاحظات يحتوي على نموذج SVR تم بناؤه واختباره وشرحه مع التصورات ودقة النموذج مذكورة. | يتم تقديم دفتر ملاحظات غير مشروح أو يحتوي على أخطاء. | يتم تقديم دفتر ملاحظات غير مكتمل |
+
+[^1]: النص في هذا القسم مستند إلى [المهمة من ARIMA](https://github.com/microsoft/ML-For-Beginners/tree/main/7-TimeSeries/2-ARIMA/assignment.md)
+
+---
+
+**إخلاء المسؤولية**:
+تمت ترجمة هذه الوثيقة باستخدام خدمة الترجمة الآلية [Co-op Translator](https://github.com/Azure/co-op-translator). بينما نسعى لتحقيق الدقة، يرجى العلم أن الترجمات الآلية قد تحتوي على أخطاء أو عدم دقة. يجب اعتبار الوثيقة الأصلية بلغتها الأصلية المصدر الموثوق. للحصول على معلومات حساسة أو هامة، يُوصى بالاستعانة بترجمة بشرية احترافية. نحن غير مسؤولين عن أي سوء فهم أو تفسيرات خاطئة تنشأ عن استخدام هذه الترجمة.
\ No newline at end of file
diff --git a/translations/ar/7-TimeSeries/3-SVR/solution/notebook.ipynb b/translations/ar/7-TimeSeries/3-SVR/solution/notebook.ipynb
new file mode 100644
index 000000000..8692988e9
--- /dev/null
+++ b/translations/ar/7-TimeSeries/3-SVR/solution/notebook.ipynb
@@ -0,0 +1,1035 @@
+{
+ "cells": [
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "fv9OoQsMFk5A"
+ },
+ "source": [
+ "التنبؤ بالسلاسل الزمنية باستخدام منظم المتجهات الداعمة\n"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "في هذا الدفتر، نوضح كيفية:\n",
+ "\n",
+ "- تجهيز بيانات السلاسل الزمنية ثنائية الأبعاد لتدريب نموذج SVM للتنبؤ\n",
+ "- تنفيذ SVR باستخدام نواة RBF\n",
+ "- تقييم النموذج باستخدام الرسوم البيانية و MAPE\n"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "## استيراد الوحدات\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 1,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "import sys\n",
+ "sys.path.append('../../')"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 2,
+ "metadata": {
+ "id": "M687KNlQFp0-"
+ },
+ "outputs": [],
+ "source": [
+ "import os\n",
+ "import warnings\n",
+ "import matplotlib.pyplot as plt\n",
+ "import numpy as np\n",
+ "import pandas as pd\n",
+ "import datetime as dt\n",
+ "import math\n",
+ "\n",
+ "from sklearn.svm import SVR\n",
+ "from sklearn.preprocessing import MinMaxScaler\n",
+ "from common.utils import load_data, mape"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "Cj-kfVdMGjWP"
+ },
+ "source": [
+ "## تجهيز البيانات\n"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "8fywSjC6GsRz"
+ },
+ "source": [
+ "### تحميل البيانات\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 3,
+ "metadata": {
+ "colab": {
+ "base_uri": "https://localhost:8080/",
+ "height": 363
+ },
+ "id": "aBDkEB11Fumg",
+ "outputId": "99cf7987-0509-4b73-8cc2-75d7da0d2740"
+ },
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "
"
+ ],
+ "text/plain": [
+ " load\n",
+ "2012-01-01 00:00:00 2698.0\n",
+ "2012-01-01 01:00:00 2558.0\n",
+ "2012-01-01 02:00:00 2444.0\n",
+ "2012-01-01 03:00:00 2402.0\n",
+ "2012-01-01 04:00:00 2403.0"
+ ]
+ },
+ "execution_count": 3,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "energy = load_data('../../data')[['load']]\n",
+ "energy.head(5)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "O0BWP13rGnh4"
+ },
+ "source": [
+ "### رسم البيانات\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "colab": {
+ "base_uri": "https://localhost:8080/",
+ "height": 486
+ },
+ "id": "hGaNPKu_Gidk",
+ "outputId": "7f89b326-9057-4f49-efbe-cb100ebdf76d"
+ },
+ "outputs": [],
+ "source": [
+ "energy.plot(y='load', subplots=True, figsize=(15, 8), fontsize=12)\n",
+ "plt.xlabel('timestamp', fontsize=12)\n",
+ "plt.ylabel('load', fontsize=12)\n",
+ "plt.show()"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "IPuNor4eGwYY"
+ },
+ "source": [
+ "### إنشاء بيانات التدريب والاختبار\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "id": "ysvsNyONGt0Q"
+ },
+ "outputs": [],
+ "source": [
+ "train_start_dt = '2014-11-01 00:00:00'\n",
+ "test_start_dt = '2014-12-30 00:00:00'"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "colab": {
+ "base_uri": "https://localhost:8080/",
+ "height": 548
+ },
+ "id": "SsfdLoPyGy9w",
+ "outputId": "d6d6c25b-b1f4-47e5-91d1-707e043237d7"
+ },
+ "outputs": [],
+ "source": [
+ "energy[(energy.index < test_start_dt) & (energy.index >= train_start_dt)][['load']].rename(columns={'load':'train'}) \\\n",
+ " .join(energy[test_start_dt:][['load']].rename(columns={'load':'test'}), how='outer') \\\n",
+ " .plot(y=['train', 'test'], figsize=(15, 8), fontsize=12)\n",
+ "plt.xlabel('timestamp', fontsize=12)\n",
+ "plt.ylabel('load', fontsize=12)\n",
+ "plt.show()"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "XbFTqBw6G1Ch"
+ },
+ "source": [
+ "### تجهيز البيانات للتدريب\n"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "الآن، تحتاج إلى تجهيز البيانات للتدريب من خلال تنفيذ عملية التصفية وتوسيع نطاق بياناتك.\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "colab": {
+ "base_uri": "https://localhost:8080/"
+ },
+ "id": "cYivRdQpHDj3",
+ "outputId": "a138f746-461c-4fd6-bfa6-0cee094c4aa1"
+ },
+ "outputs": [],
+ "source": [
+ "train = energy.copy()[(energy.index >= train_start_dt) & (energy.index < test_start_dt)][['load']]\n",
+ "test = energy.copy()[energy.index >= test_start_dt][['load']]\n",
+ "\n",
+ "print('Training data shape: ', train.shape)\n",
+ "print('Test data shape: ', test.shape)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "قم بتوسيع البيانات لتكون في النطاق (0، 1).\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "colab": {
+ "base_uri": "https://localhost:8080/",
+ "height": 363
+ },
+ "id": "3DNntGQnZX8G",
+ "outputId": "210046bc-7a66-4ccd-d70d-aa4a7309949c"
+ },
+ "outputs": [],
+ "source": [
+ "scaler = MinMaxScaler()\n",
+ "train['load'] = scaler.fit_transform(train)\n",
+ "train.head(5)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "colab": {
+ "base_uri": "https://localhost:8080/",
+ "height": 206
+ },
+ "id": "26Yht-rzZexe",
+ "outputId": "20326077-a38a-4e78-cc5b-6fd7af95d301"
+ },
+ "outputs": [],
+ "source": [
+ "test['load'] = scaler.transform(test)\n",
+ "test.head(5)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "x0n6jqxOQ41Z"
+ },
+ "source": [
+ "### إنشاء بيانات بخطوات زمنية\n"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "fdmxTZtOQ8xs"
+ },
+ "source": [
+ "بالنسبة لنموذج SVR الخاص بنا، نقوم بتحويل بيانات الإدخال لتكون بالشكل `[batch, timesteps]`. لذلك، نقوم بإعادة تشكيل بيانات `train_data` و `test_data` الحالية بحيث يكون هناك بُعد جديد يشير إلى الخطوات الزمنية. في مثالنا، نأخذ `timesteps = 5`. وبالتالي، تكون المدخلات للنموذج هي البيانات الخاصة بأول 4 خطوات زمنية، والمخرج سيكون البيانات الخاصة بالخطوة الزمنية الخامسة.\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "id": "Rpju-Sc2HFm0"
+ },
+ "outputs": [],
+ "source": [
+ "# Converting to numpy arrays\n",
+ "\n",
+ "train_data = train.values\n",
+ "test_data = test.values"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "# Selecting the timesteps\n",
+ "\n",
+ "timesteps=None"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "colab": {
+ "base_uri": "https://localhost:8080/"
+ },
+ "id": "O-JrsrsVJhUQ",
+ "outputId": "c90dbe71-bacc-4ec4-b452-f82fe5aefaef"
+ },
+ "outputs": [],
+ "source": [
+ "# Converting data to 2D tensor\n",
+ "\n",
+ "train_data_timesteps=None"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "colab": {
+ "base_uri": "https://localhost:8080/"
+ },
+ "id": "exJD8AI7KE4g",
+ "outputId": "ce90260c-f327-427d-80f2-77307b5a6318"
+ },
+ "outputs": [],
+ "source": [
+ "# Converting test data to 2D tensor\n",
+ "\n",
+ "test_data_timesteps=None"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "id": "2u0R2sIsLuq5"
+ },
+ "outputs": [],
+ "source": [
+ "x_train, y_train = None\n",
+ "x_test, y_test = None\n",
+ "\n",
+ "print(x_train.shape, y_train.shape)\n",
+ "print(x_test.shape, y_test.shape)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "8wIPOtAGLZlh"
+ },
+ "source": [
+ "## إنشاء نموذج SVR\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "id": "EhA403BEPEiD"
+ },
+ "outputs": [],
+ "source": [
+ "# Create model using RBF kernel\n",
+ "\n",
+ "model = None"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "colab": {
+ "base_uri": "https://localhost:8080/"
+ },
+ "id": "GS0UA3csMbqp",
+ "outputId": "d86b6f05-5742-4c1d-c2db-c40510bd4f0d"
+ },
+ "outputs": [],
+ "source": [
+ "# Fit model on training data"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "Rz_x8S3UrlcF"
+ },
+ "source": [
+ "### قم بعمل توقع النموذج\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "colab": {
+ "base_uri": "https://localhost:8080/"
+ },
+ "id": "XR0gnt3MnuYS",
+ "outputId": "157e40ab-9a23-4b66-a885-0d52a24b2364"
+ },
+ "outputs": [],
+ "source": [
+ "# Making predictions\n",
+ "\n",
+ "y_train_pred = None\n",
+ "y_test_pred = None"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "_2epncg-SGzr"
+ },
+ "source": [
+ "## تحليل أداء النموذج\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "# Scaling the predictions\n",
+ "\n",
+ "y_train_pred = scaler.inverse_transform(y_train_pred)\n",
+ "y_test_pred = scaler.inverse_transform(y_test_pred)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "colab": {
+ "base_uri": "https://localhost:8080/"
+ },
+ "id": "xmm_YLXhq7gV",
+ "outputId": "18392f64-4029-49ac-c71a-a4e2411152a1"
+ },
+ "outputs": [],
+ "source": [
+ "# Scaling the original values\n",
+ "\n",
+ "y_train = scaler.inverse_transform(y_train)\n",
+ "y_test = scaler.inverse_transform(y_test)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "colab": {
+ "base_uri": "https://localhost:8080/"
+ },
+ "id": "u3LBj93coHEi",
+ "outputId": "d4fd49e8-8c6e-4bb0-8ef9-ca0b26d725b4"
+ },
+ "outputs": [],
+ "source": [
+ "# Extract the timesteps for x-axis\n",
+ "\n",
+ "train_timestamps = None\n",
+ "test_timestamps = None"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "plt.figure(figsize=(25,6))\n",
+ "# plot original output\n",
+ "# plot predicted output\n",
+ "plt.legend(['Actual','Predicted'])\n",
+ "plt.xlabel('Timestamp')\n",
+ "plt.title(\"Training data prediction\")\n",
+ "plt.show()"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "colab": {
+ "base_uri": "https://localhost:8080/"
+ },
+ "id": "LnhzcnYtXHCm",
+ "outputId": "f5f0d711-f18b-4788-ad21-d4470ea2c02b"
+ },
+ "outputs": [],
+ "source": [
+ "print('MAPE for training data: ', mape(y_train_pred, y_train)*100, '%')"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "colab": {
+ "base_uri": "https://localhost:8080/",
+ "height": 225
+ },
+ "id": "53Q02FoqQH4V",
+ "outputId": "53e2d59b-5075-4765-ad9e-aed56c966583"
+ },
+ "outputs": [],
+ "source": [
+ "plt.figure(figsize=(10,3))\n",
+ "# plot original output\n",
+ "# plot predicted output\n",
+ "plt.legend(['Actual','Predicted'])\n",
+ "plt.xlabel('Timestamp')\n",
+ "plt.show()"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "colab": {
+ "base_uri": "https://localhost:8080/"
+ },
+ "id": "clOAUH-SXCJG",
+ "outputId": "a3aa85ff-126a-4a4a-cd9e-90b9cc465ef5"
+ },
+ "outputs": [],
+ "source": [
+ "print('MAPE for testing data: ', mape(y_test_pred, y_test)*100, '%')"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "DHlKvVCId5ue"
+ },
+ "source": [
+ "## التنبؤ بمجموعة البيانات الكاملة\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "colab": {
+ "base_uri": "https://localhost:8080/"
+ },
+ "id": "cOFJ45vreO0N",
+ "outputId": "35628e33-ecf9-4966-8036-f7ea86db6f16"
+ },
+ "outputs": [],
+ "source": [
+ "# Extracting load values as numpy array\n",
+ "data = None\n",
+ "\n",
+ "# Scaling\n",
+ "data = None\n",
+ "\n",
+ "# Transforming to 2D tensor as per model input requirement\n",
+ "data_timesteps=None\n",
+ "\n",
+ "# Selecting inputs and outputs from data\n",
+ "X, Y = None, None"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "id": "ESSAdQgwexIi"
+ },
+ "outputs": [],
+ "source": [
+ "# Make model predictions\n",
+ "\n",
+ "# Inverse scale and reshape\n",
+ "Y_pred = None\n",
+ "Y = None"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "colab": {
+ "base_uri": "https://localhost:8080/",
+ "height": 328
+ },
+ "id": "M_qhihN0RVVX",
+ "outputId": "a89cb23e-1d35-437f-9d63-8b8907e12f80"
+ },
+ "outputs": [],
+ "source": [
+ "plt.figure(figsize=(30,8))\n",
+ "# plot original output\n",
+ "# plot predicted output\n",
+ "plt.legend(['Actual','Predicted'])\n",
+ "plt.xlabel('Timestamp')\n",
+ "plt.show()"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "colab": {
+ "base_uri": "https://localhost:8080/"
+ },
+ "id": "AcN7pMYXVGTK",
+ "outputId": "7e1c2161-47ce-496c-9d86-7ad9ae0df770"
+ },
+ "outputs": [],
+ "source": [
+ "print('MAPE: ', mape(Y_pred, Y)*100, '%')"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "\n---\n\n**إخلاء المسؤولية**: \nتمت ترجمة هذا المستند باستخدام خدمة الترجمة الآلية [Co-op Translator](https://github.com/Azure/co-op-translator). بينما نسعى لتحقيق الدقة، يرجى العلم أن الترجمات الآلية قد تحتوي على أخطاء أو معلومات غير دقيقة. يجب اعتبار المستند الأصلي بلغته الأصلية هو المصدر الموثوق. للحصول على معلومات حساسة أو هامة، يُوصى بالاستعانة بترجمة بشرية احترافية. نحن غير مسؤولين عن أي سوء فهم أو تفسيرات خاطئة تنشأ عن استخدام هذه الترجمة.\n"
+ ]
+ }
+ ],
+ "metadata": {
+ "accelerator": "GPU",
+ "colab": {
+ "collapsed_sections": [],
+ "name": "Recurrent_Neural_Networks.ipynb",
+ "provenance": []
+ },
+ "kernelspec": {
+ "display_name": "Python 3",
+ "language": "python",
+ "name": "python3"
+ },
+ "language_info": {
+ "codemirror_mode": {
+ "name": "ipython",
+ "version": 3
+ },
+ "file_extension": ".py",
+ "mimetype": "text/x-python",
+ "name": "python",
+ "nbconvert_exporter": "python",
+ "pygments_lexer": "ipython3",
+ "version": "3.7.1"
+ },
+ "coopTranslator": {
+ "original_hash": "e86ce102239a14c44585623b9b924a74",
+ "translation_date": "2025-08-29T15:08:16+00:00",
+ "source_file": "7-TimeSeries/3-SVR/working/notebook.ipynb",
+ "language_code": "ar"
+ }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 1
+}
\ No newline at end of file
diff --git a/translations/ar/7-TimeSeries/README.md b/translations/ar/7-TimeSeries/README.md
new file mode 100644
index 000000000..ef7439d17
--- /dev/null
+++ b/translations/ar/7-TimeSeries/README.md
@@ -0,0 +1,37 @@
+
+# مقدمة في التنبؤ بالسلاسل الزمنية
+
+ما هو التنبؤ بالسلاسل الزمنية؟ إنه يتعلق بتوقع الأحداث المستقبلية من خلال تحليل اتجاهات الماضي.
+
+## موضوع إقليمي: استخدام الكهرباء عالميًا ✨
+
+في هذين الدرسين، ستتعرف على التنبؤ بالسلاسل الزمنية، وهو مجال أقل شهرة في تعلم الآلة ولكنه ذو قيمة كبيرة للتطبيقات الصناعية والتجارية، بالإضافة إلى مجالات أخرى. بينما يمكن استخدام الشبكات العصبية لتعزيز فائدة هذه النماذج، سنقوم بدراستها في سياق تعلم الآلة التقليدي حيث تساعد النماذج في توقع الأداء المستقبلي بناءً على الماضي.
+
+تركيزنا الإقليمي هو استخدام الكهرباء عالميًا، وهو مجموعة بيانات مثيرة للاهتمام للتعلم عن كيفية التنبؤ باستخدام الطاقة في المستقبل بناءً على أنماط الأحمال السابقة. يمكنك أن ترى كيف يمكن أن يكون هذا النوع من التنبؤ مفيدًا للغاية في بيئة الأعمال.
+
+
+
+صورة بواسطة [Peddi Sai hrithik](https://unsplash.com/@shutter_log?utm_source=unsplash&utm_medium=referral&utm_content=creditCopyText) لأبراج كهرباء على طريق في راجستان على [Unsplash](https://unsplash.com/s/photos/electric-india?utm_source=unsplash&utm_medium=referral&utm_content=creditCopyText)
+
+## الدروس
+
+1. [مقدمة في التنبؤ بالسلاسل الزمنية](1-Introduction/README.md)
+2. [بناء نماذج ARIMA للسلاسل الزمنية](2-ARIMA/README.md)
+3. [بناء نموذج دعم المتجهات للتنبؤ بالسلاسل الزمنية](3-SVR/README.md)
+
+## الشكر والتقدير
+
+تم كتابة "مقدمة في التنبؤ بالسلاسل الزمنية" بحب ⚡️ بواسطة [Francesca Lazzeri](https://twitter.com/frlazzeri) و [Jen Looper](https://twitter.com/jenlooper). ظهرت الدفاتر لأول مرة على الإنترنت في [مستودع Azure "Deep Learning For Time Series"](https://github.com/Azure/DeepLearningForTimeSeriesForecasting) الذي كتبته في الأصل Francesca Lazzeri. تم كتابة درس SVR بواسطة [Anirban Mukherjee](https://github.com/AnirbanMukherjeeXD)
+
+---
+
+**إخلاء المسؤولية**:
+تمت ترجمة هذا المستند باستخدام خدمة الترجمة الآلية [Co-op Translator](https://github.com/Azure/co-op-translator). بينما نسعى لتحقيق الدقة، يرجى العلم أن الترجمات الآلية قد تحتوي على أخطاء أو معلومات غير دقيقة. يجب اعتبار المستند الأصلي بلغته الأصلية هو المصدر الموثوق. للحصول على معلومات حساسة أو هامة، يُوصى بالاستعانة بترجمة بشرية احترافية. نحن غير مسؤولين عن أي سوء فهم أو تفسيرات خاطئة تنشأ عن استخدام هذه الترجمة.
\ No newline at end of file
diff --git a/translations/ar/8-Reinforcement/1-QLearning/README.md b/translations/ar/8-Reinforcement/1-QLearning/README.md
new file mode 100644
index 000000000..dcce3321e
--- /dev/null
+++ b/translations/ar/8-Reinforcement/1-QLearning/README.md
@@ -0,0 +1,256 @@
+
+# مقدمة إلى التعلم التعزيزي وخوارزمية Q-Learning
+
+
+> رسم توضيحي بواسطة [Tomomi Imura](https://www.twitter.com/girlie_mac)
+
+يتضمن التعلم التعزيزي ثلاثة مفاهيم مهمة: الوكيل، بعض الحالات، ومجموعة من الإجراءات لكل حالة. من خلال تنفيذ إجراء في حالة معينة، يحصل الوكيل على مكافأة. تخيل مرة أخرى لعبة الكمبيوتر "سوبر ماريو". أنت ماريو، وأنت في مستوى من اللعبة، تقف بجانب حافة منحدر. فوقك توجد عملة. كونك ماريو، في مستوى اللعبة، في موقع معين ... هذه هي حالتك. التحرك خطوة واحدة إلى اليمين (إجراء) سيجعلك تسقط من الحافة، وهذا سيمنحك درجة رقمية منخفضة. ومع ذلك، فإن الضغط على زر القفز سيجعلك تحصل على نقطة وستبقى على قيد الحياة. هذا نتيجة إيجابية ويجب أن تمنحك درجة رقمية إيجابية.
+
+باستخدام التعلم التعزيزي والمحاكي (اللعبة)، يمكنك تعلم كيفية لعب اللعبة لزيادة المكافأة إلى أقصى حد، وهي البقاء على قيد الحياة وتسجيل أكبر عدد ممكن من النقاط.
+
+[](https://www.youtube.com/watch?v=lDq_en8RNOo)
+
+> 🎥 انقر على الصورة أعلاه للاستماع إلى ديمتري وهو يناقش التعلم التعزيزي
+
+## [اختبار ما قبل المحاضرة](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/45/)
+
+## المتطلبات والإعداد
+
+في هذا الدرس، سنجرب بعض الأكواد بلغة Python. يجب أن تكون قادرًا على تشغيل كود Jupyter Notebook من هذا الدرس، سواء على جهاز الكمبيوتر الخاص بك أو في السحابة.
+
+يمكنك فتح [دفتر الدرس](https://github.com/microsoft/ML-For-Beginners/blob/main/8-Reinforcement/1-QLearning/notebook.ipynb) ومتابعة هذا الدرس للبناء.
+
+> **ملاحظة:** إذا كنت تفتح هذا الكود من السحابة، فستحتاج أيضًا إلى جلب ملف [`rlboard.py`](https://github.com/microsoft/ML-For-Beginners/blob/main/8-Reinforcement/1-QLearning/rlboard.py)، الذي يُستخدم في كود الدفتر. أضفه إلى نفس الدليل الذي يحتوي على الدفتر.
+
+## المقدمة
+
+في هذا الدرس، سنستكشف عالم **[بيتر والذئب](https://en.wikipedia.org/wiki/Peter_and_the_Wolf)**، المستوحى من حكاية خرافية موسيقية من تأليف الملحن الروسي [سيرجي بروكوفييف](https://en.wikipedia.org/wiki/Sergei_Prokofiev). سنستخدم **التعلم التعزيزي** لتمكين بيتر من استكشاف بيئته، جمع التفاح اللذيذ وتجنب مواجهة الذئب.
+
+**التعلم التعزيزي** (RL) هو تقنية تعلم تتيح لنا تعلم السلوك الأمثل لوكيل **agent** في بيئة **environment** معينة من خلال إجراء العديد من التجارب. يجب أن يكون للوكيل في هذه البيئة هدف **goal**، يتم تعريفه بواسطة دالة مكافأة **reward function**.
+
+## البيئة
+
+للتبسيط، دعونا نعتبر عالم بيتر عبارة عن لوحة مربعة بحجم `width` x `height`، مثل هذه:
+
+
+
+كل خلية في هذه اللوحة يمكن أن تكون:
+
+* **أرض**، يمكن لبيتر والمخلوقات الأخرى المشي عليها.
+* **ماء**، لا يمكن المشي عليه بالطبع.
+* **شجرة** أو **عشب**، مكان يمكن الراحة فيه.
+* **تفاحة**، تمثل شيئًا يود بيتر العثور عليه لإطعام نفسه.
+* **ذئب**، وهو خطير ويجب تجنبه.
+
+يوجد وحدة Python منفصلة، [`rlboard.py`](https://github.com/microsoft/ML-For-Beginners/blob/main/8-Reinforcement/1-QLearning/rlboard.py)، تحتوي على الكود للعمل مع هذه البيئة. نظرًا لأن هذا الكود ليس مهمًا لفهم مفاهيمنا، سنقوم باستيراد الوحدة واستخدامها لإنشاء اللوحة النموذجية (كتلة الكود 1):
+
+```python
+from rlboard import *
+
+width, height = 8,8
+m = Board(width,height)
+m.randomize(seed=13)
+m.plot()
+```
+
+يجب أن يطبع هذا الكود صورة للبيئة مشابهة للصورة أعلاه.
+
+## الإجراءات والسياسة
+
+في مثالنا، سيكون هدف بيتر هو العثور على تفاحة، مع تجنب الذئب والعوائق الأخرى. للقيام بذلك، يمكنه ببساطة التجول حتى يجد تفاحة.
+
+لذلك، في أي موقع، يمكنه الاختيار بين أحد الإجراءات التالية: أعلى، أسفل، يسار، ويمين.
+
+سنعرّف هذه الإجراءات كقاموس، ونربطها بأزواج من التغييرات المنسقة المقابلة. على سبيل المثال، التحرك إلى اليمين (`R`) سيقابل الزوج `(1,0)`. (كتلة الكود 2):
+
+```python
+actions = { "U" : (0,-1), "D" : (0,1), "L" : (-1,0), "R" : (1,0) }
+action_idx = { a : i for i,a in enumerate(actions.keys()) }
+```
+
+لتلخيص، الاستراتيجية والهدف في هذا السيناريو هما كما يلي:
+
+- **الاستراتيجية**، الخاصة بوكيلنا (بيتر) يتم تعريفها بواسطة ما يسمى **السياسة**. السياسة هي دالة تعيد الإجراء في أي حالة معينة. في حالتنا، يتم تمثيل حالة المشكلة بواسطة اللوحة، بما في ذلك الموقع الحالي للاعب.
+
+- **الهدف**، من التعلم التعزيزي هو في النهاية تعلم سياسة جيدة تسمح لنا بحل المشكلة بكفاءة. ومع ذلك، كخط أساس، دعونا نعتبر السياسة الأبسط المسماة **المشي العشوائي**.
+
+## المشي العشوائي
+
+دعونا نحل مشكلتنا أولاً من خلال تنفيذ استراتيجية المشي العشوائي. مع المشي العشوائي، سنختار الإجراء التالي عشوائيًا من بين الإجراءات المسموح بها، حتى نصل إلى التفاحة (كتلة الكود 3).
+
+1. قم بتنفيذ المشي العشوائي باستخدام الكود أدناه:
+
+ ```python
+ def random_policy(m):
+ return random.choice(list(actions))
+
+ def walk(m,policy,start_position=None):
+ n = 0 # number of steps
+ # set initial position
+ if start_position:
+ m.human = start_position
+ else:
+ m.random_start()
+ while True:
+ if m.at() == Board.Cell.apple:
+ return n # success!
+ if m.at() in [Board.Cell.wolf, Board.Cell.water]:
+ return -1 # eaten by wolf or drowned
+ while True:
+ a = actions[policy(m)]
+ new_pos = m.move_pos(m.human,a)
+ if m.is_valid(new_pos) and m.at(new_pos)!=Board.Cell.water:
+ m.move(a) # do the actual move
+ break
+ n+=1
+
+ walk(m,random_policy)
+ ```
+
+ يجب أن تعيد استدعاء `walk` طول المسار المقابل، والذي يمكن أن يختلف من تشغيل إلى آخر.
+
+1. قم بتشغيل تجربة المشي عدة مرات (على سبيل المثال، 100 مرة)، واطبع الإحصائيات الناتجة (كتلة الكود 4):
+
+ ```python
+ def print_statistics(policy):
+ s,w,n = 0,0,0
+ for _ in range(100):
+ z = walk(m,policy)
+ if z<0:
+ w+=1
+ else:
+ s += z
+ n += 1
+ print(f"Average path length = {s/n}, eaten by wolf: {w} times")
+
+ print_statistics(random_policy)
+ ```
+
+ لاحظ أن متوسط طول المسار حوالي 30-40 خطوة، وهو عدد كبير نسبيًا، بالنظر إلى أن متوسط المسافة إلى أقرب تفاحة حوالي 5-6 خطوات.
+
+ يمكنك أيضًا رؤية كيف يبدو تحرك بيتر أثناء المشي العشوائي:
+
+ 
+
+## دالة المكافأة
+
+لجعل سياستنا أكثر ذكاءً، نحتاج إلى فهم أي الحركات "أفضل" من غيرها. للقيام بذلك، نحتاج إلى تعريف هدفنا.
+
+يمكن تعريف الهدف من حيث **دالة المكافأة**، التي ستعيد قيمة درجة لكل حالة. كلما زاد الرقم، كانت دالة المكافأة أفضل. (كتلة الكود 5)
+
+```python
+move_reward = -0.1
+goal_reward = 10
+end_reward = -10
+
+def reward(m,pos=None):
+ pos = pos or m.human
+ if not m.is_valid(pos):
+ return end_reward
+ x = m.at(pos)
+ if x==Board.Cell.water or x == Board.Cell.wolf:
+ return end_reward
+ if x==Board.Cell.apple:
+ return goal_reward
+ return move_reward
+```
+
+الشيء المثير للاهتمام بشأن دوال المكافأة هو أنه في معظم الحالات، *نحصل فقط على مكافأة كبيرة في نهاية اللعبة*. وهذا يعني أن الخوارزمية الخاصة بنا يجب أن تتذكر بطريقة ما الخطوات "الجيدة" التي تؤدي إلى مكافأة إيجابية في النهاية، وتزيد من أهميتها. وبالمثل، يجب تثبيط جميع الحركات التي تؤدي إلى نتائج سيئة.
+
+## خوارزمية Q-Learning
+
+الخوارزمية التي سنناقشها هنا تسمى **Q-Learning**. في هذه الخوارزمية، يتم تعريف السياسة بواسطة دالة (أو بنية بيانات) تسمى **جدول Q**. يسجل "جودة" كل من الإجراءات في حالة معينة.
+
+يسمى جدول Q بهذا الاسم لأنه غالبًا ما يكون من الملائم تمثيله كجدول، أو مصفوفة متعددة الأبعاد. نظرًا لأن لوحتنا لها أبعاد `width` x `height`، يمكننا تمثيل جدول Q باستخدام مصفوفة numpy ذات الشكل `width` x `height` x `len(actions)`: (كتلة الكود 6)
+
+```python
+Q = np.ones((width,height,len(actions)),dtype=np.float)*1.0/len(actions)
+```
+
+لاحظ أننا نقوم بتهيئة جميع قيم جدول Q بقيمة متساوية، في حالتنا - 0.25. هذا يتوافق مع سياسة "المشي العشوائي"، لأن جميع الحركات في كل حالة متساوية الجودة. يمكننا تمرير جدول Q إلى دالة `plot` لتصور الجدول على اللوحة: `m.plot(Q)`.
+
+
+
+في مركز كل خلية يوجد "سهم" يشير إلى الاتجاه المفضل للحركة. نظرًا لأن جميع الاتجاهات متساوية، يتم عرض نقطة.
+
+الآن نحتاج إلى تشغيل المحاكاة، استكشاف بيئتنا، وتعلم توزيع أفضل لقيم جدول Q، مما سيمكننا من العثور على المسار إلى التفاحة بشكل أسرع بكثير.
+
+## جوهر Q-Learning: معادلة بيلمان
+
+بمجرد أن نبدأ في التحرك، سيكون لكل إجراء مكافأة مقابلة، أي يمكننا نظريًا اختيار الإجراء التالي بناءً على أعلى مكافأة فورية. ومع ذلك، في معظم الحالات، لن تحقق الحركة هدفنا المتمثل في الوصول إلى التفاحة، وبالتالي لا يمكننا اتخاذ قرار فوري بشأن الاتجاه الأفضل.
+
+> تذكر أن النتيجة الفورية ليست هي المهمة، بل النتيجة النهائية، التي سنحصل عليها في نهاية المحاكاة.
+
+لأخذ هذه المكافأة المؤجلة في الاعتبار، نحتاج إلى استخدام مبادئ **[البرمجة الديناميكية](https://en.wikipedia.org/wiki/Dynamic_programming)**، التي تتيح لنا التفكير في مشكلتنا بشكل تكراري.
+
+افترض أننا الآن في الحالة *s*، ونريد الانتقال إلى الحالة التالية *s'*. من خلال القيام بذلك، سنحصل على المكافأة الفورية *r(s,a)*، التي تم تعريفها بواسطة دالة المكافأة، بالإضافة إلى بعض المكافأة المستقبلية. إذا افترضنا أن جدول Q الخاص بنا يعكس بشكل صحيح "جاذبية" كل إجراء، فإننا في الحالة *s'* سنختار الإجراء *a* الذي يتوافق مع القيمة القصوى لـ *Q(s',a')*. وبالتالي، فإن أفضل مكافأة مستقبلية ممكنة يمكننا الحصول عليها في الحالة *s* سيتم تعريفها كـ `max`
+
+## التحقق من السياسة
+
+نظرًا لأن جدول Q يسرد "جاذبية" كل إجراء في كل حالة، فمن السهل استخدامه لتحديد التنقل الفعّال في عالمنا. في أبسط الحالات، يمكننا اختيار الإجراء الذي يتوافق مع أعلى قيمة في جدول Q: (كتلة الكود 9)
+
+```python
+def qpolicy_strict(m):
+ x,y = m.human
+ v = probs(Q[x,y])
+ a = list(actions)[np.argmax(v)]
+ return a
+
+walk(m,qpolicy_strict)
+```
+
+> إذا جربت الكود أعلاه عدة مرات، قد تلاحظ أنه أحيانًا "يتوقف"، وتحتاج إلى الضغط على زر الإيقاف في الدفتر لمقاطعته. يحدث هذا لأن هناك حالات قد تشير فيها حالتان إلى بعضهما البعض من حيث قيمة Q المثلى، وفي هذه الحالة ينتهي الأمر بالوكيل بالتحرك بين تلك الحالات إلى ما لا نهاية.
+
+## 🚀التحدي
+
+> **المهمة 1:** قم بتعديل وظيفة `walk` لتحديد الحد الأقصى لطول المسار بعدد معين من الخطوات (على سبيل المثال، 100)، وشاهد الكود أعلاه يعيد هذه القيمة من وقت لآخر.
+
+> **المهمة 2:** قم بتعديل وظيفة `walk` بحيث لا تعود إلى الأماكن التي زارتها مسبقًا. سيمنع هذا `walk` من التكرار، ومع ذلك، قد ينتهي الأمر بالوكيل بأن يكون "محاصرًا" في موقع لا يستطيع الهروب منه.
+
+## التنقل
+
+سياسة التنقل الأفضل هي تلك التي استخدمناها أثناء التدريب، والتي تجمع بين الاستغلال والاستكشاف. في هذه السياسة، سنختار كل إجراء باحتمالية معينة، تتناسب مع القيم في جدول Q. قد تؤدي هذه الاستراتيجية إلى عودة الوكيل إلى موقع سبق أن استكشفه، ولكن، كما يمكنك أن ترى من الكود أدناه، فإنها تؤدي إلى مسار متوسط قصير جدًا إلى الموقع المطلوب (تذكر أن `print_statistics` يشغل المحاكاة 100 مرة): (كتلة الكود 10)
+
+```python
+def qpolicy(m):
+ x,y = m.human
+ v = probs(Q[x,y])
+ a = random.choices(list(actions),weights=v)[0]
+ return a
+
+print_statistics(qpolicy)
+```
+
+بعد تشغيل هذا الكود، يجب أن تحصل على طول مسار متوسط أصغر بكثير من السابق، في نطاق 3-6.
+
+## التحقيق في عملية التعلم
+
+كما ذكرنا، عملية التعلم هي توازن بين الاستكشاف واستغلال المعرفة المكتسبة حول هيكل مساحة المشكلة. لقد رأينا أن نتائج التعلم (القدرة على مساعدة الوكيل في العثور على مسار قصير إلى الهدف) قد تحسنت، ولكن من المثير أيضًا ملاحظة كيف يتصرف متوسط طول المسار أثناء عملية التعلم:
+
+## يمكن تلخيص التعلم كما يلي:
+
+- **زيادة متوسط طول المسار**. ما نراه هنا هو أنه في البداية، يزيد متوسط طول المسار. ربما يرجع ذلك إلى حقيقة أنه عندما لا نعرف شيئًا عن البيئة، فمن المحتمل أن نقع في حالات سيئة، مثل الماء أو الذئب. ومع تعلمنا المزيد واستخدام هذه المعرفة، يمكننا استكشاف البيئة لفترة أطول، ولكننا لا نزال لا نعرف مكان التفاح جيدًا.
+
+- **انخفاض طول المسار مع زيادة التعلم**. بمجرد أن نتعلم بما يكفي، يصبح من الأسهل للوكيل تحقيق الهدف، ويبدأ طول المسار في الانخفاض. ومع ذلك، لا نزال منفتحين على الاستكشاف، لذا غالبًا ما ننحرف بعيدًا عن المسار الأفضل، ونستكشف خيارات جديدة، مما يجعل المسار أطول من المثالي.
+
+- **زيادة الطول بشكل مفاجئ**. ما نلاحظه أيضًا في هذا الرسم البياني هو أنه في مرحلة ما، زاد الطول بشكل مفاجئ. يشير هذا إلى الطبيعة العشوائية للعملية، وأنه يمكننا في مرحلة ما "إفساد" معاملات جدول Q عن طريق استبدالها بقيم جديدة. يجب تقليل هذا بشكل مثالي عن طريق تقليل معدل التعلم (على سبيل المثال، نحو نهاية التدريب، نقوم فقط بتعديل قيم جدول Q بقيمة صغيرة).
+
+بشكل عام، من المهم أن نتذكر أن نجاح وجودة عملية التعلم تعتمد بشكل كبير على المعلمات، مثل معدل التعلم، انخفاض معدل التعلم، وعامل الخصم. غالبًا ما يُطلق على هذه المعلمات اسم **المعلمات الفائقة**، لتمييزها عن **المعلمات**، التي نقوم بتحسينها أثناء التدريب (على سبيل المثال، معاملات جدول Q). عملية العثور على أفضل قيم للمعلمات الفائقة تُسمى **تحسين المعلمات الفائقة**، وهي تستحق موضوعًا منفصلًا.
+
+## [اختبار ما بعد المحاضرة](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/46/)
+
+## الواجب
+[عالم أكثر واقعية](assignment.md)
+
+---
+
+**إخلاء المسؤولية**:
+تمت ترجمة هذه الوثيقة باستخدام خدمة الترجمة الآلية [Co-op Translator](https://github.com/Azure/co-op-translator). على الرغم من أننا نسعى لتحقيق الدقة، يرجى العلم أن الترجمات الآلية قد تحتوي على أخطاء أو معلومات غير دقيقة. يجب اعتبار الوثيقة الأصلية بلغتها الأصلية المصدر الموثوق. للحصول على معلومات حساسة أو هامة، يُوصى بالاستعانة بترجمة بشرية احترافية. نحن غير مسؤولين عن أي سوء فهم أو تفسيرات خاطئة تنشأ عن استخدام هذه الترجمة.
\ No newline at end of file
diff --git a/translations/ar/8-Reinforcement/1-QLearning/assignment.md b/translations/ar/8-Reinforcement/1-QLearning/assignment.md
new file mode 100644
index 000000000..cb5970a0a
--- /dev/null
+++ b/translations/ar/8-Reinforcement/1-QLearning/assignment.md
@@ -0,0 +1,41 @@
+
+# عالم أكثر واقعية
+
+في وضعنا الحالي، كان بيتر قادرًا على التحرك تقريبًا دون أن يشعر بالتعب أو الجوع. في عالم أكثر واقعية، عليه أن يجلس ويرتاح من وقت لآخر، وأيضًا أن يطعم نفسه. دعونا نجعل عالمنا أكثر واقعية من خلال تطبيق القواعد التالية:
+
+1. عند الانتقال من مكان إلى آخر، يفقد بيتر **الطاقة** ويكتسب بعض **الإرهاق**.
+2. يمكن لبيتر أن يكتسب المزيد من الطاقة عن طريق تناول التفاح.
+3. يمكن لبيتر التخلص من الإرهاق عن طريق الراحة تحت الشجرة أو على العشب (أي المشي إلى موقع على اللوحة يحتوي على شجرة أو عشب - حقل أخضر).
+4. يحتاج بيتر إلى العثور على الذئب وقتله.
+5. لكي يتمكن بيتر من قتل الذئب، يجب أن تكون لديه مستويات معينة من الطاقة والإرهاق، وإلا سيخسر المعركة.
+
+## التعليمات
+
+استخدم [notebook.ipynb](notebook.ipynb) الأصلي كنقطة بداية لحلّك.
+
+قم بتعديل وظيفة المكافأة أعلاه وفقًا لقواعد اللعبة، وشغّل خوارزمية التعلم المعزز لتعلم أفضل استراتيجية للفوز باللعبة، وقارن نتائج المشي العشوائي مع خوارزميتك من حيث عدد الألعاب التي تم الفوز بها والخسارة.
+
+> **Note**: في عالمك الجديد، الحالة أكثر تعقيدًا، وبالإضافة إلى موقع الإنسان، تشمل أيضًا مستويات الإرهاق والطاقة. يمكنك اختيار تمثيل الحالة كـ tuple (Board,energy,fatigue)، أو تعريف فئة للحالة (يمكنك أيضًا أن تستمدها من `Board`)، أو حتى تعديل الفئة الأصلية `Board` داخل [rlboard.py](../../../../8-Reinforcement/1-QLearning/rlboard.py).
+
+في حلّك، يرجى الاحتفاظ بالكود المسؤول عن استراتيجية المشي العشوائي، وقارن نتائج خوارزميتك مع المشي العشوائي في النهاية.
+
+> **Note**: قد تحتاج إلى ضبط المعاملات الفائقة لجعلها تعمل، خاصة عدد العصور. نظرًا لأن نجاح اللعبة (مواجهة الذئب) هو حدث نادر، يمكنك توقع وقت تدريب أطول بكثير.
+
+## التقييم
+
+| المعايير | ممتاز | مقبول | يحتاج إلى تحسين |
+| -------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------ |
+| | يتم تقديم دفتر ملاحظات يحتوي على تعريف قواعد العالم الجديدة، خوارزمية Q-Learning وبعض الشروحات النصية. Q-Learning قادر على تحسين النتائج بشكل كبير مقارنة بالمشي العشوائي. | يتم تقديم دفتر ملاحظات، يتم تنفيذ Q-Learning ويحسن النتائج مقارنة بالمشي العشوائي، ولكن ليس بشكل كبير؛ أو أن دفتر الملاحظات موثق بشكل ضعيف والكود غير منظم جيدًا. | يتم بذل بعض المحاولات لإعادة تعريف قواعد العالم، ولكن خوارزمية Q-Learning لا تعمل، أو وظيفة المكافأة غير محددة بالكامل.
+
+---
+
+**إخلاء المسؤولية**:
+تمت ترجمة هذا المستند باستخدام خدمة الترجمة الآلية [Co-op Translator](https://github.com/Azure/co-op-translator). بينما نسعى لتحقيق الدقة، يرجى العلم أن الترجمات الآلية قد تحتوي على أخطاء أو معلومات غير دقيقة. يجب اعتبار المستند الأصلي بلغته الأصلية هو المصدر الموثوق. للحصول على معلومات حساسة أو هامة، يُوصى بالاستعانة بترجمة بشرية احترافية. نحن غير مسؤولين عن أي سوء فهم أو تفسيرات خاطئة تنشأ عن استخدام هذه الترجمة.
\ No newline at end of file
diff --git a/translations/ar/8-Reinforcement/1-QLearning/notebook.ipynb b/translations/ar/8-Reinforcement/1-QLearning/notebook.ipynb
new file mode 100644
index 000000000..0d80d7b77
--- /dev/null
+++ b/translations/ar/8-Reinforcement/1-QLearning/notebook.ipynb
@@ -0,0 +1,413 @@
+{
+ "metadata": {
+ "language_info": {
+ "codemirror_mode": {
+ "name": "ipython",
+ "version": 3
+ },
+ "file_extension": ".py",
+ "mimetype": "text/x-python",
+ "name": "python",
+ "nbconvert_exporter": "python",
+ "pygments_lexer": "ipython3",
+ "version": "3.7.0"
+ },
+ "orig_nbformat": 2,
+ "kernelspec": {
+ "name": "python3",
+ "display_name": "Python 3.7.0 64-bit ('3.7')"
+ },
+ "interpreter": {
+ "hash": "70b38d7a306a849643e446cd70466270a13445e5987dfa1344ef2b127438fa4d"
+ },
+ "coopTranslator": {
+ "original_hash": "17e5a668646eabf5aabd0e9bfcf17876",
+ "translation_date": "2025-08-29T15:35:37+00:00",
+ "source_file": "8-Reinforcement/1-QLearning/notebook.ipynb",
+ "language_code": "ar"
+ }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 2,
+ "cells": [
+ {
+ "source": [
+ "# بيتر والذئب: مقدمة في التعلم المعزز\n",
+ "\n",
+ "في هذا الدرس، سنتعلم كيفية تطبيق التعلم المعزز على مشكلة إيجاد المسار. الإعداد مستوحى من الحكاية الموسيقية [بيتر والذئب](https://en.wikipedia.org/wiki/Peter_and_the_Wolf) التي ألفها الموسيقار الروسي [سيرجي بروكوفييف](https://en.wikipedia.org/wiki/Sergei_Prokofiev). إنها قصة عن الشاب بيتر، الذي يخرج بشجاعة من منزله إلى الغابة لمطاردة ذئب. سنقوم بتدريب خوارزميات تعلم الآلة التي ستساعد بيتر على استكشاف المنطقة المحيطة وبناء خريطة تنقل مثالية.\n",
+ "\n",
+ "أولاً، دعونا نستورد مجموعة من المكتبات المفيدة:\n"
+ ],
+ "cell_type": "markdown",
+ "metadata": {}
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 3,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "import matplotlib.pyplot as plt\n",
+ "import numpy as np\n",
+ "import random\n",
+ "import math"
+ ]
+ },
+ {
+ "source": [
+ "## نظرة عامة على التعلم المعزز\n",
+ "\n",
+ "**التعلم المعزز** (RL) هو تقنية تعلم تتيح لنا اكتساب سلوك مثالي لوكيل **agent** في بيئة **environment** معينة من خلال إجراء العديد من التجارب. يجب أن يكون لدى الوكيل في هذه البيئة **هدف** محدد بواسطة **دالة المكافأة**.\n",
+ "\n",
+ "## البيئة\n",
+ "\n",
+ "للتبسيط، دعونا نعتبر أن عالم بيتر عبارة عن لوحة مربعة بحجم `width` x `height`. كل خلية في هذه اللوحة يمكن أن تكون واحدة من التالي:\n",
+ "* **أرض**، يمكن لبيتر والمخلوقات الأخرى المشي عليها\n",
+ "* **ماء**، من الواضح أنه لا يمكنك المشي عليه\n",
+ "* **شجرة** أو **عشب** - مكان يمكنك أن تستريح فيه\n",
+ "* **تفاحة**، وهي تمثل شيئًا يسر بيتر العثور عليه لإطعام نفسه\n",
+ "* **ذئب**، وهو خطر ويجب تجنبه\n",
+ "\n",
+ "للعمل مع البيئة، سنقوم بتعريف فئة تسمى `Board`. ولتجنب ازدحام هذا الدفتر بالكود، قمنا بنقل جميع الأكواد المتعلقة بالعمل مع اللوحة إلى وحدة منفصلة تسمى `rlboard`، والتي سنقوم الآن باستيرادها. يمكنك الاطلاع داخل هذه الوحدة للحصول على مزيد من التفاصيل حول آليات التنفيذ الداخلية.\n"
+ ],
+ "cell_type": "markdown",
+ "metadata": {}
+ },
+ {
+ "source": [
+ "لنقم الآن بإنشاء لوحة عشوائية ونرى كيف تبدو:\n"
+ ],
+ "cell_type": "markdown",
+ "metadata": {}
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 4,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "# code block 1"
+ ]
+ },
+ {
+ "source": [
+ "## الإجراءات والسياسة\n",
+ "\n",
+ "في مثالنا، سيكون هدف بيتر هو العثور على تفاحة، مع تجنب الذئب والعوائق الأخرى. قم بتعريف هذه الإجراءات كقاموس، واربطها بأزواج من تغييرات الإحداثيات المقابلة.\n"
+ ],
+ "cell_type": "markdown",
+ "metadata": {}
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 5,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "# code block 2"
+ ]
+ },
+ {
+ "source": [
+ "استراتيجية وكيلنا (بيتر) تُعرّف بما يُسمى **السياسة**. دعونا نأخذ بعين الاعتبار أبسط سياسة تُسمى **المشي العشوائي**.\n",
+ "\n",
+ "## المشي العشوائي\n",
+ "\n",
+ "دعونا نحل مشكلتنا أولاً من خلال تنفيذ استراتيجية المشي العشوائي.\n"
+ ],
+ "cell_type": "markdown",
+ "metadata": {}
+ },
+ {
+ "source": [
+ "# Let's run a random walk experiment several times and see the average number of steps taken: code block 3"
+ ],
+ "cell_type": "code",
+ "metadata": {},
+ "execution_count": null,
+ "outputs": []
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 7,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "# code block 4"
+ ]
+ },
+ {
+ "source": [
+ "## وظيفة المكافأة\n",
+ "\n",
+ "لجعل سياستنا أكثر ذكاءً، نحتاج إلى فهم أي الحركات \"أفضل\" من غيرها.\n"
+ ],
+ "cell_type": "markdown",
+ "metadata": {}
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 8,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "#code block 5"
+ ]
+ },
+ {
+ "source": [
+ "## التعلم باستخدام Q-Learning\n",
+ "\n",
+ "قم بإنشاء جدول Q، أو مصفوفة متعددة الأبعاد. بما أن لوحتنا لها أبعاد `width` x `height`، يمكننا تمثيل جدول Q باستخدام مصفوفة numpy ذات الشكل `width` x `height` x `len(actions)`:\n"
+ ],
+ "cell_type": "markdown",
+ "metadata": {}
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 9,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "# code block 6"
+ ]
+ },
+ {
+ "source": [
+ "مرر جدول Q إلى دالة `plot` لعرض الجدول على اللوحة:\n"
+ ],
+ "cell_type": "markdown",
+ "metadata": {}
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 10,
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "error",
+ "ename": "NameError",
+ "evalue": "name 'm' is not defined",
+ "traceback": [
+ "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
+ "\u001b[0;31mNameError\u001b[0m Traceback (most recent call last)",
+ "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0mm\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mplot\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mQ\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m",
+ "\u001b[0;31mNameError\u001b[0m: name 'm' is not defined"
+ ]
+ }
+ ],
+ "source": [
+ "m.plot(Q)"
+ ]
+ },
+ {
+ "source": [
+ "## جوهر Q-Learning: معادلة بيلمان وخوارزمية التعلم\n",
+ "\n",
+ "اكتب كودًا شبه برمجي لخوارزمية التعلم الخاصة بنا:\n",
+ "\n",
+ "* قم بتهيئة جدول Q بحيث يحتوي على أرقام متساوية لجميع الحالات والإجراءات\n",
+ "* قم بتعيين معدل التعلم $\\alpha\\leftarrow 1$\n",
+ "* كرر المحاكاة عدة مرات\n",
+ " 1. ابدأ من موقع عشوائي\n",
+ " 1. كرر\n",
+ " 1. اختر إجراءً $a$ في الحالة $s$\n",
+ " 2. نفذ الإجراء بالانتقال إلى حالة جديدة $s'$\n",
+ " 3. إذا واجهنا شرط نهاية اللعبة، أو إذا كان إجمالي المكافأة صغيرًا جدًا - اخرج من المحاكاة \n",
+ " 4. احسب المكافأة $r$ في الحالة الجديدة\n",
+ " 5. قم بتحديث دالة Q وفقًا لمعادلة بيلمان: $Q(s,a)\\leftarrow (1-\\alpha)Q(s,a)+\\alpha(r+\\gamma\\max_{a'}Q(s',a'))$\n",
+ " 6. $s\\leftarrow s'$\n",
+ " 7. قم بتحديث إجمالي المكافأة وقلل $\\alpha$.\n",
+ "\n",
+ "## الاستغلال مقابل الاستكشاف\n",
+ "\n",
+ "أفضل نهج هو تحقيق توازن بين الاستكشاف والاستغلال. كلما تعلمنا المزيد عن بيئتنا، سنكون أكثر ميلًا لاتباع المسار الأمثل، ومع ذلك، يجب اختيار المسار غير المستكشف بين الحين والآخر.\n",
+ "\n",
+ "## تنفيذ Python\n",
+ "\n",
+ "الآن نحن جاهزون لتنفيذ خوارزمية التعلم. قبل ذلك، نحتاج أيضًا إلى وظيفة تقوم بتحويل الأرقام العشوائية في جدول Q إلى متجه من الاحتمالات للإجراءات المقابلة:\n"
+ ],
+ "cell_type": "markdown",
+ "metadata": {}
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 10,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "# code block 7"
+ ]
+ },
+ {
+ "source": [
+ "نضيف كمية صغيرة من `eps` إلى المتجه الأصلي لتجنب القسمة على 0 في الحالة الأولية، عندما تكون جميع مكونات المتجه متطابقة.\n",
+ "\n",
+ "خوارزمية التعلم الفعلية التي سنقوم بتشغيلها لـ 5000 تجربة، والتي تُعرف أيضًا باسم **epochs**:\n"
+ ],
+ "cell_type": "markdown",
+ "metadata": {}
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 56,
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "name": "stdout",
+ "text": [
+ ""
+ ]
+ }
+ ],
+ "source": [
+ "\n",
+ "from IPython.display import clear_output\n",
+ "\n",
+ "lpath = []\n",
+ "\n",
+ "# code block 8"
+ ]
+ },
+ {
+ "source": [
+ "بعد تنفيذ هذا الخوارزمية، يجب تحديث جدول Q بالقيم التي تحدد جاذبية الإجراءات المختلفة في كل خطوة. تصور الجدول هنا:\n"
+ ],
+ "cell_type": "markdown",
+ "metadata": {}
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 43,
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "display_data",
+ "data": {
+ "text/plain": "
",
+ "image/svg+xml": "\r\n\r\n\r\n\r\n",
+ "image/png": "iVBORw0KGgoAAAANSUhEUgAAAW4AAAFpCAYAAAC8p8I3AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjAsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+17YcXAAAgAElEQVR4nOzdd3xUxd7H8c9sS7KbShJCL1IEBAURFEUBxXoVVFBARS7YQETgiooFsaGAXgUsIGIDHzuCXiuKICDKpYoiHUJJAmkk2Wzfc+b5YzcRrgSQZHM2ZN6+8kr27ObMlyX8nMyZmSOklCiKoig1h8noAIqiKMrfowq3oihKDaMKt6IoSg2jCreiKEoNowq3oihKDaMKt6IoSg0TscIthLhCCLFVCLFDCDE+Uu0oiqLUNiIS87iFEGZgG3ApsB9YDQySUv5R5Y0piqLUMpHqcXcFdkgpd0kp/cAHQN8ItaUoilKrRKpwNwT2HfZ4f/iYoiiKUkmWCJ1XHOXYEWMyQog7gTsBrFZr5zPPPDNCUSrP5/PhdDpJS0szOkqFioqKsFqtOBwOo6NUKCcnh7p162I2m42OUqG9e/fSpEkTo2NUKBgMkpeXR/369Y2OUqHS0lKCwSDJyclGR6lQXl4eiYmJxMTEGB2lQps2bcLj8RytloKUsso/gG7At4c9fgh4qKLX161bV0az7du3y9mzZxsd45gWLFggV65caXSMY3rqqadkYWGh0TEqpOu6vOeee4yOcUwFBQVy0qRJRsc4phUrVsiFCxcaHeOYZs2aJbdv3250jGMK18Wj1sxIDZWsBloJIZoLIWzAQODzCLWlKIpSq0SkcEspg8A9wLfAZuAjKeWmSLSlKMqpZf369Xi9XqNjRLVIjXEjpfwK+CpS51cU5dSSlZXFq6++SkxMDPPnz6dVq1YMGTLE6FhRSa2cVBTFcFJKcnJy2LZtG8OHD6d79+589NFHZdfIlP+hCreiKIYLBAJMnjyZF198kX/961+cccYZDBgwgLfeesvoaFEpYkMliqIoJ8pmszF+/Hhuu+02OnTowMcff8z333/PV1+p0dajqXE97l27dvHRRx8ZHUNRlCrWtGlT+vfvj9lsZsqUKdx7771GR4paNarH3adPH2JjYzn33HPp0KEDS5YsiepFMYqinLj09HTuuOMO9u3bx6JFi+jVq5fRkaJWjelx79q1i9jYWGbNmkW/fv24/PLL+f33342OpShKFWvcuDHffPMN/fv3NzpKldu0aRO6rlf6PDWmcK9du5auXbtSUlLCW2+9Rb169Vi+fLm66qwop6D4+HjOPPNMVq1aZXSUKrNkyRLee+89NE2r9LlqzFDJDTfcQIcOHThw4AD169dn3Lhx5OTkIMTRl/IrilJzORwOLrjgAn744QfOPfdco+NU2s8//8zPP//MuHHjsFqtlT5fjelxQ+j/WFdffTUul4sDBw4wfPhwioqKjI6lKEoExMTEIKXE7/cbHeWkSSnZsmUL8+bNY/To0aSkpFTJeWtU4U5LS6Nnz55MmDCBjIwM3n77bSZMmMCOHTuMjqYoShW75JJLcDqd/PLLL0ZHOWmrVq1i2rRpvPLKK1W6c2eNKtxlyoZHkpOTGT16NPPmzSMzM9PYUIqiKIdZsmQJ33//PS+88EKVD+nWyMJ9uJYtWzJ06FAee+wx3G53xNurigsLkSSlrJKr1pFUEzLquq4ufEeB4cOH8/rrr1fLv+2qIqVkw4YN/PDDD4wcORK73V7lbdT4wg3QrFkzZs2axa233kpOTk7E2snKyqJfv35s3ryZgoKCiLVTGevXr+eOO+5gy5YtUfnDHgwGee+993jhhRfYsmVLVBZwp9PJxIkT+fLLL9m1a5fRcaJWdnZ2xMefmzZtihCC3bt3R7SdqrRlyxamT5/OhAkTqmxM+3+dEoUbwG6389JLL/HSSy+xffv2iLTx+eef89JLLzFmzBhmz54dkTYq6/PPP2f06NEMGDCAdevWGR3nL9xuN4WFhTRt2pSLL744Krfv3LFjB927d2fDhg1cd911RseJOkVFRcyZM4eXXnqJ2bNn88UXX0S0vbfffptbbrklom1UlWXLljFnzhzeeOMNbDZbxNqpMdMBT0T9+vUZOnQob7zxBmPHjiUjI6NKzz9ixAjGjBmDpml88sknbNmy5aTPFRcXx8yZM6t87Ou+++5j1KhR6LrOpEmTqFu37kmfq127djz44INVmA4SExPp3r0706ZNQ9M07rzzzkrdyuy6667j2muvrcKE0KlTJ95//322bdtGVlZWpbcWHT9+PG3btq2idMY7cOAA8+bN44033uC///0vzz33HFdffbXRsQy3fPlyVq5cyWOPPYbJFNk+8SlVuAFatWrF2LFjGTFiBPPmzavSK7kej4dRo0bx9ddfk5mZyV133XXS5/J6vXTu3LlKxlHbt29Pv379gND42vjx45kyZQqXX345nTt3Punz/v7773Tq1KnS+QAGDx5cnq9x48Y88MADbNy4kQcffJDY2NiTPu/HH3/ME088USUZp02bBoSGc3r06EGbNm1Yt24djz76aKXO+8QTT7BpU9XcR+STTz6p8LnS0lIuuuiiiI/Ne71ecnNzueGGG1iwYAFms5mXX36Ze+65JyLtCSGYPn06DzzwAFOnTo1IG5UhpWTz5s0sWLCAxx9/nMTExIi3ecoVboCMjAzmzZvHPffcw2OPPUbz5s2r5LzPPvss7du35+OPP+aOO+6gVatWJ30uKSVr1qypklwQGiIBGDlyJD169GDXrl20a9euUhlbtmxJ3759qySfEIJJkyZRVFTE1KlTSU1NJTk5mVatWlWqcD/00EOMHz++yjJ+8skn/PLLLyxfvpxNmzbRuXPnSr2HAHPnzq2SfMAx1y04HI4q/ZmqyJYtW7j//vuZM2cO27ZtY+bMmSxZsiRi7QkhqFevHgcPHoxYG5WxYcMGXnrpJebMmRPxnnaZU7JwQ+iH+LHHHuOdd95h8ODBtGjRotLnfPLJJ3nppZdYunRppYc4hBARWfU5a9Ys5s+fz48//ljpc0UiY0pKCqNHjyY/P59JkyZV+nxVmbGsp9q9e3ecTie33HILjRs3rvR5q+sfc6R+pv5Xeno6HTt2ZPbs2QQCAW6++eaIt1unTh2aNWvGhg0b6NixY0Tb+jt++OEHli5dyqxZs6rt7xlO4cIN0Lx5cwYPHsxzzz3HlClTSEpKqvQ5R40aVQXJIsfhcHDrrbcaHeOYasJ475VXXml0hKiVnp7OpEmT2LhxIy1atKjS4ciKpKWlcdppp7FmzRrOOussw7e6kFKyevVqVq5cydixYyN6IfJoTplZJRVp0aIFU6dOZciQIVE7hU9RaqIzzzyzWop2mQEDBrBmzZqoWCm9detW5syZw3333RexKX/HcsoXbgjNZHjzzTd5+umnIzZVUFGUyIqNjSUYDBq+CO7nn39mxowZvPbaa8TFxRmSoVYUbgiNkY0cOZJ58+axd+9eo+MoinISBg4cyNy5c6t94dbzzz+PpmksWbKEJUuW8Nxzzxk6XFNrCjeEZknccccdjB8/PipXFSqKcmy9e/fmm2++qbbtCL7++mvOPfdcTjvtNLp168a3337LiBEjqnWI6GhqVeGG0N013njjDYYOHcr+/fuNjqMoyt/UsmXLahnn9vl8ZGZmMnbsWFq2bEkwGERKWa2zRypifAIDxMXF8cILL7BixQqjoyiK8je9/fbb3H777RFvx+l0sm/fPjp06MDXX3/Nl19+icPhiIp9U2pl4QZo2LAhAwcONDqGoih/k81mY9CgQbz33nsRbSctLY0zzjiDf/7zn9xwww0MGzaMoqKiqJhHfkrP41YU5dRjsVjo2LEjn332GTfddFNE2+rbty8XXHAB9913Hy+//LIhU/+ORhVuRVFqnKSkJKxWK3l5eaSnp0esnfj4eOLj48v3iDF64U+ZWjtUoihKzXXGGWeQkJBQbbc1q67tBE6U6nErilIjDRgwwPBpeUapVOEWQmQCTkADglLKc4QQdYAPgWZAJnCjlPJQ5WIqiqIcqVmzZkZHMExVDJX0klJ2lFKeE348HlgspWwFLA4/VhRFUapIJMa4+wLvhL9+B6ja25MoiqLUcpUt3BJYJIRYK4S4M3wsQ0qZAxD+fPL3zlIURVH+orIXJy+QUmYLIeoC3wkhTvgmjOFCfyeEptxE8659+/fvp6ioKKoz5ufno+t6VGd0uVzs3r2b/Px8o6NUyO/3R/V7WFJSgsvliuqMBw4ciPp/L0VFRezbt6/a9jw5GcfaSKtShVtKmR3+nCuEWAB0BQ4KIepLKXOEEPWB3Aq+dzYwGyA1NVUuXbq0MlEiqqioiP379xPNGXfu3Indbo/qPcfz8/NZuXIlMTExRkepUGlpaVT/PXu9Xn7O+5nPln5mdJQK2XPsXOK5pNp38Ps7srKyWLt2bVTs7V2RY75/UsqT+gAcQMJhX68ErgCeA8aHj48Hph7vXHXr1pXRbPv27XL27NlGxzimBQsWyJUrVxod45ieeuopWVhYaHSMCum6Lu+55x6jYxxTQUGB7DypsySK/6u3op5cuHCh0W/VMc2aNUtu377d6BjHFK6LR62ZlRnjzgBWCCF+Bf4LfCml/AaYDFwqhNgOXBp+rPyPyy67LKp7JIqiRK+THiqRUu4CzjrK8QLgksqEqg3y8vKMjqAoSg2llrwriqLUMKpwK4qi1DCqcCuKotQwqnAriqLUMKpwK4qi1DC1snB7vV42btzIU089hdvtVtPyjqK0tJShQ4caHUNRaoTdu3fz8MMPV1t7tbJw9+jRg+eff5527drRvHlz9u7da3SkqKNpmnpfFOUE+f1+Dhw4UG3t1brCvXjxYi677DImT55MQkICL774Ip9++mlU71mgnNreeust9fNXw1X331+tK9wZGRlkZWXx8MMPU79+fbKysmjcuLHRsZRaaOHChVxzzTWYTCb69OlTfl9DRTmeWnfrsiZNmpCZmUkwGOSXX37hlVdeYfny5VF1Pznl1Fe2C+FNN91Er169cDgcbN++Hb/fj81mMzqeEuVqVY87OzubyZMnM3v2bObOnYumaWRmZqoet1LtMjMzKSoqwm63M3HiRLp3747b7Y7q3eqU6FFretzFxcW8+uqr9OvXj5YtWwIwfPhwg1MptVVsbCw//fQTzzzzDNu2bePuu++ma9eutGvXzuhoSg1QKwq3pmkMHz6cJ554gtatWxsdR6nlPB4PDz/8MJMnhzbOfPjhh3nggQdo0qSJwcmUmuKUL9x5eXk8+OCDTJs2jYyMDKPjKLVcdnY2Y8aM4e2338ZutwPw7rvvRvXNJaKBz+cjPz+fhg0bGh3lqKr7GtkpPcadk5PDq6++yr/+9S9VtBUgNG1r/vz51d5uSUkJs2fP5pVXXuHFF18sL9qAKtonYM+ePdW6wOXvUtMBq4jX62Xy5Mn06dOH9u3bGx1HiQIfffQRQ4YM4cCBAwwePLjablEmpWTChAnExcUxZMiQqO01KjXHKTlU4vF4GDx4MNOmTaNRo0ZGx6mRhBDExMTg8/mqrUdYWloa0Z7LqlWr6NmzJ9deey1+v5+tW7dy4YUXYjabI9amz+fj7rvvZty4cbRt2zZi7ZzKpJR4vV7i4uKMjlIhk8mE2WwmEAhgtVoj3t4pV7hzcnKYOnUq06ZNi+qeTceOHfn111/p1KmT0VGOKiEhgfvuu49nnnmGJ554olraHDFiBFlZWRE7/86dO1myZAlLlixh6tSpPPfcc2RlZUXsomBhYSHTp09n5MiRtGnTJiJtnOp27dpFZmYmw4cP57XXXiMnJ4f69esbHesvWrVqRbdu3fi///s//vnPf0a8vVOqcOfn5zN79mxuvfXWqO9pz5gxgz59+rBkyRKjoxyVEAIhRLWO3c2bNy+i53/ooYfIz8/nqaeeYuTIkVx55ZURK9ozZsygqKiInj17cvbZZ0ekjdrg9ddfZ//+/ZSUlPDiiy/Sp08fbr/9dqNj/UXZxcnq+vdyyoxxa5rGuHHj6N+/f9T2YhVjDR06lH79+nH//fdz5513csUVV1R5G1JKJk2aRIMGDbjqqqvo1atXlbdRW/z3v//Fbrczbdo0GjRowMyZM9m8eTP79u0zOprhToked1FREXfffTcvvviimj2iVKh169blv9ImJSVV+fn9fj9vvPEGbdq04dprr43o2Hlt0LFjRxYuXMjy5ctZtGgRH374Ia1ataJBgwZGRzNcjS/cWVlZzJo1i8cff1wVbeW4hBARKdqLFi0iMzOTmJgY+vXrV+Xnr41sNhvt27fn/fff5+DBgyxbtoy77rpL/Q+RGj5U4nQ6eemll7juuuvUikjFMB9//DEbN24kMTGRYcOGGR3nlHLTTTfxwQcfkJSUxIcffsjFF19sdKSoUGN73MFgkNtvv51nnnmGFi1aGB1HqaUWL17Mvn37uPvuu49YVKNUHSEEAwcONDpGVKmRhTs3N5dHH32U6dOnU69ePaPjKLVYz5496dmzp/r1XalWNa5wHzhwgNmzZ3PPPfeooq0YThVsxQg1rnBbrVb69OnDmWeeaXSUU9qoUaP47bffyMvLY+vWrbzxxhvEx8cbHUtRoo6u6/zzn/9ky5YtACxZsoS3334bkylylxBrXOFOTU0lNTXV6BinNJfLxdq1axk1ahSrVq1i27ZtFBYWqsKtKEfhdDrZsWMHN954I0II5s+fj9PpjMjspTI1rnArkffyyy8zbtw4mjdvTiAQ4JZbbuHJJ59kzpw5RkdTlKjz5JNPMmnSJPx+P0IIzj77bJ588kn+/e9/R6xNVbiVv3jwwQdp27Yt999/P82bN2fAgAGsWbPG6FiKEpWmTp1K8+bNmT59OlJKxowZw+7duyPa5nEHYYQQbwohcoUQvx92rI4Q4jshxPbw55TwcSGEmCGE2CGE2CiEUJs01FBvvvkmAD/++CNz5sxRwySKUgGTycS8efPIzMxk7969zJs3L6Lj23BiPe63gZeBuYcdGw8sllJOFkKMDz9+ELgSaBX+OBeYGf6s1DDdunWjS5cuBINBYmNjjY6j1DDVfUcYIwkh6NGjB926dQNCKz4j7bj/W5BSLgMK/+dwX+Cd8NfvANcednyuDPkFSBZCRN8ejMoJsVgsqmgrJ6W67wgTDWw2W7UUbTj5Je8ZUsocgPDnuuHjDYHDt+7aHz6mKIqiVJGqHog52u9HR/1frxDiTiHEGiHEGo/HU8UxottDDz3ERRddxNq1a+nUqRMrVqwwOpKiKDXIyRbug2VDIOHPueHj+4HGh72uEZB9tBNIKWdLKc+RUp4Tzbckqmq5ubk4nU7mzZvH2WefzciRI9mxYwfBYNDoaIqi1BAnOx3wc2AIMDn8+bPDjt8jhPiA0EXJ4rIhlWPRNI2FCxeeZJTIy8/PZ+fOnVWS8ZdffiElJYVNmzZhs9lIS0tj9uzZ2Gy2Sm1S9Pvvv7Nnzx4OHjxY6YyRcuDAAb755puovndgSUlJVP8sut1uHDkOTlt4mtFRKpSQmcDvrt+jepx7165dWCwWfv/99+O/2CCaplX43HELtxDifaAnkCaE2A9MJFSwPxJC3AbsBW4Iv/wr4CpgB+AGhp5IQL9fMGJE9O6lbbfrDBlir5L9vvv27Vv+ddm9HCdMmFDp8+7Zs4dZs5IoKore97FlyxiuvTYdh8NhdJQKWSyWqN7XvbS0lC4xXZicMdnoKBXacmgLTpMzqt9Hu93OM3WewZ3hNjpKhfzCX+Fzxy3cUspBFTx1yVFeK4GRJ5ys/PtMHDjQ7e9+W7VJStpB/foF5dN9otHBgwcpKsqI6vexUaPFdO7cGZvNhtPpJKVOMgcPZZPgSKIkkMuiQ3PZ5d6EKWAhRsQjdDM5zmzOS7mCy5oPxO/20Si9CSUlJTgcDg4dOoTdbicQCKBpGg6HAyklcXFx5Uv0y5Yelz32+XwkJSXh8/mQUhIbG4vJZCq/v+Z7771XJX/Puq6zaNEi9uzZw4ABA3A6nbzwwgs888wzlfqNo7CwkNWrV0f1z6Ku6+Tn50d1xo0bN1LQoYDilsVGR6lQvKnitRM1+kYKSs0jpU5BIJstrl9YVfgVM7Lv5MPsKXx28DU0P7S2nYtdT6e01EdD2+mcl3oFiTEp3L/kZiavu5/Nub/h1/0EAgFMJhO6rgOhRRCapqFpGj6fDyEEmqYhhCh/bdljv9+Ppmnouh6xawtut5vPPvuMXr160a9fPywWC02aNGHp0qURae/vWrZsWVQPZSjHppa8K9VKIlmfu4rp6yeR4cigSVJTioMBft39B5nZ+2jXsjHWgI1tu3aQ37qI5kltEewnRiYSJxJ5f8ObnF6nA5e3vIZYWxxCCMxmM7qulxeiQCCA1WpF0zQsFguaphETE4MQAovFUl6spZQEAoGIzL2Nj4/nuuuu47bbbmPv3r08/PDD+P1+xo4dW+Vt/R0//fQT//nPf0hISOCrr77isssuU3eVqYFUj1upViZh5py0i6kf6MymrYVs3JTH+o05lGTbiHHXw7XPTtY2P5vW57Fq/Xo27VrNsnVL8biCrNz5M7nOAmatfIVCXz5OpxMI/Wru8XiwWCyYTAK7PQ6v14PVasXn8xEbG4vL5SrvbTscjvIiHsm71nTt2pXJkyeTlpbGoEGDmDhxYsTaOhFSStauXUtCQgL33nsvGRkZrFy5UvW8ayBVuJVqpes6DpOdGdfMoHlqcxbv+I5PNsznxx0/sjFrI1+tXkrdpMbcdulweqXdQANPV9xuF96SAvILD7E9ZyfBgJm+M69Bs4V6zjabjZSUFHxeD+u/fpJ5Dzfhs8kdWPvFYyQmJuJ0OklNTUXXdeLi4sjPz0fTNPx+P4WF/7souOokJydzwQUXkJyczLnnnmv4fVG3bNlSfpu1Sy+9lGHDhuH3+1m3bp2huZS/TxVupVqZTCZiYmLwlnp4rd8srmrzDyxmM6eln8Z5Lc/jzGbt2ZO3h01Zv1PgLCSnIAdHQVNcW5PokNgWT3E+6F60YsHtM25HCIHX66WwsADnwU3s3LSCQyVeGrbvQ3KDjjhLSoiPjycvLw8hBC6Xi7S0NCwWCxaLheTkZKPfkmrTtm1bGjduzCOPPEJWVhaPP/44NpuNzp07Gx1N+ZvUGLdSraSU+P1+UlJSCAQCzOz3Ko/GTeDTtZ9SVFqEw+zALuLwCT+5BVsoPlRMgjWRvt36UuosJY46FOTlYkrJxn8wgKYFsVqtLFkwjdzMnziUs49OF4/lwj5jCQZDz3k8HlJSUtA0DbvdTnFxMWazGSklpaWlEd3wPtr07t2bhIQEPvjgA77//nveffddoyMpJ0H1uJVqZzKZMJlMSClJiavDk5c/yYBzBlEacLErbze/Z/3B6t2r2XtoH6c1akGTBk3YlbMLp9dJgkila5OLyF/jI6btAd5aOIeA38vqpfPx+iz0vetNulx6Z/n5y6b5ld0bsuxxmdq0ix1Au3btGDp0KIsXL6Zhw4acddZZRkdSToLqcSvVzmQyUVpaisPhwOVykRiTyOR/PMOTV07kuleu51DJIXbs20XdhDQKSwuItybgdXshIMnLKyDe6uDSzn3Yv38by+UCfhnxFima5Ipet9C0bTesVitut5uYmJjyi5OlpaXYbDb8fj92u718OqDVajX67TBE06ZNjY6gVIIq3Eq1klLi8/lITU2lsLCQ5ORkXC4XNqsNf6mfL0Z+QWZhJv9Z+x9cXhemoAmHzU5JUQlIgcftJcZsY0DvAZxz1jks27iI11c+Ro9/DOCs865G0zRKS0upU6cOJSUlJCUlUVRURFpaGk6nk7i4OAoKCrDb7UgpcblcUb3CL1JiY2M555xzWLlyJeeff77RcZS/SRVupVoJIYiJiaGwsJC4uDiKi4uxWq0Eg0Hi4+ORUtKybktGXToKKSU2i5kDK77nwH8/xR4TS2qvK0nudgnWmBgOHTpE4EAQT5Hggt79sNlsSClJTk4mPzOT1W+8TOH+vaS0aEvnIXeQXDe9fLxb1/XyWSa1kd1up3v37vzwww+qcNdAqnAr1aqsx52UlERxcTGJiYm43W4sFkv5XGz8Xkw+L1seG4X0e2l03c2c89Cz6MKE1Wxi9+wpFPy6lqCmsyO/iJi8XHy/r2bNT8vI3biOgKbRdsAwOl0/EL/Pi+b18f6dgyktKaXPY0+Q2LwFGY2bYDKZcLlcxMTEGP22KMrfogq3Uu3MZjOBQKB8FWPZhUSz2YzmLCZ79nO49u6g7b+exJqQSKDoEN5d20GAT0LD62+h6a0jCbqcNPxxMeds20zBT8toduHFdLjpdoJBP65Dh/A7i9Ek6Ej6PPI4QU1n+f/NZeOKFdw1521OO7tz+UXL2igjIwNN08jLyyM9Pd3oOMrfoAq3Uq2EEEfsI1K2daWUEoJB9sx8Fu1gNqfdPBx/3gGCeQcQSMomfwgJ/r278UqJDiSe3pbkjp3R/EE8RQWU7NmJJiWaBE1KdCnRdNClJKhLzr66DwFd5//G/YuBz06l1bm195aonTp1Yv78+fzxxx/06NHD6DjK36AKt1KtpJQEg0FSUlKOuDhpsVjYt+BdPDs20/yW4RDwInQQIvxxxDlCBRwkmtuFX8pQsQ4XaE2X6JLy4h3UJJrUCYZf0/6iXvi8fmaNuIuxH35M27PPNujdUJSTowq3Uq1MJhOxsbHk5OSQmppKfn4+DocDn9tF4fefc/rNI9HcxUgTIASmcA/dFK7cUspQ71wSquBlRVqX6LokKHU0XaJpEAwX7oCuE5QQ1HU0XaDpOm3Pv4Dc/fvx5OdH/M+s9gJRqpoq3Eq1Kutxx8XFEQgEyi8MFqz4HpsjHm9+FmaTwGQOrQ0TZjAfVrh1GepVS12ApqNLHSlB6uGetl5WoCUBPTQ8EtQlQUmogOuhYZRAUCe1UVNeHX0vr2/6AxHBse5oXuTTtWtX1qxZQ7du3SJ6h/Lvv/+eHTt20LBhQ6655pqItVNbqMIdhSZOnMiECRNCMyxOQWWFrOyzlBLnupXYm7VE87gQJoE0mULrek0CYRKYw5Vb6hIhJVIHqcnwtD7Cn0PFW9NDRQuL1LoAACAASURBVPrPwq0T0P8s3AEt1Atv0KoFW1avMuptiAp9+vShV69e3HnnnREt3LGxsSQkJLBr1y5uvvnmI54bOnQovXv3jljbp6JTszLUUF9++SXjxo1j2rRpdOnShWuuuYYnn3zS6FhVqmz/bKfTid1ux+VyYbfbMZtNSM2P5nFhMgl0kwlpIlTAzaHiDYS73ICuo5cVbglBLVSUg1qoxx0M97gDuiQQ1AhKiV+XBDRBQNPCRZzyGzEokdW9e3e6d++Ox+OhT58+Rzz32muvMW7cuCOOzZ8/n7S0tPLHJpOJhISEaslaE6jCHWF5eXn89ttvJ/TaVatW0bt3b2w2Gx9++CFz5szh4MGDp9TKPl3X8fl8JCcn43a7SUxMxO/34/f5kQUHiQnvYyLMApNJIMwCYTIR6n5LgoCm66HirMlwgQ59HZDh3rQWKtj+YKg4l5QUY7Y78GtlxTv8fHgRTm3XqVMn1q5dS8+ePSPeVlxcHM2bNz/i2LPPPsuzzz57xLGBAweSf9j1hzp16jBixIgjXtOkSRNatmx5Qu1mZmaSkJBAamrqSSaPLqpwR1hBQcEJ367qjz/+wOVysWzZMm6//Xbsdjt5eXmnVOE2mUzYbDYKCgpIT0/n0KFDJCQkEJuYRM6P32AzmSA5GcLFG1NoSknQ70PExKFTNvwBPpcTd34efk3HF9Tx6xKfpuMLSjSTBUtaBgEExdn7sddriF/XCWjg0zSCOuTlHMDv9Rr9lhju+eefp3Pnzqxfv96Q9o92DeDDDz884nFBQQHTp08/4ljZZmWHGzZsGI0aNSp/7PP5mDJlCrquI4QgKSmJMWPGVGF6Y6jCHWFt2rQ54eGOjz76iIkTJ/LCCy8waNAgzjzzTNq3bx/hhNVL13X8fj/p6aHl58nJyfj9fupffyt5Py2maOtvaA2b4Eiri24S6CZBUEBw306sjVsgAc/BbAIlxXh9PrylpXiDGn5N4glKfEENr6bjR6Dv24sfM3GNm1Cck4NwOAho4NV0igsL2bXpDzpefS1E8cVDJSQ1NfUv/452797N9u3bjzj2yCOPkJOTU/44GAxSUFDAJ598QklJCYMHD2b06NHVkjmSVOGOItdeey2XXnopd999N5988gnx8RXf5bkm03W9/D6RZdusxjRogm6xEXC5Yfd20DRs8fEEpIYZ8JcUIzb+NzRXW9MIaDp+Tcev/Tk8EpR6eO42BDQNb1EhvqBOQX4+noCGH0Fi42YcOnSI3KwDeP1Brh4xIqpnfVSXtLQ0CgoKatRQQvPmzf8y7HLeeeeVL+oCuOqqq9i5cyf9+/fn1VdfZdasWTzwwAMnPMQSrVThjiI2mw2bzcb7779vdJSIEUJgs9lwOp3ExMTg8XjKi7gWE4dfl8iAhrmkmKAWQMveF54OKBCAhixfZOPXdYKawK8fPnatl495B8MzTIJaAE2DQFDDU1pKYc5BdAkIE3HxDqPfEsOZTCZmzpzJ2LFjmTt3rtFxKiUxMfGIx4sWLeK8885j3rx5FBYWMmLECDZv3sxrr71mUMKqoW6koFSrsjvgJCcn4/F4SEhIQNd1LBYLzW6+HV94nNpVWIi71IlP0/FqOh5Nx63peIM6nmDosV8DX7jXfUTPW9dDKyZ1WT67JBiefVJSeCh0R3iTiS79rkfE1s7dAWuLmJgY7r77bhYsWMCqVasYP3680ZGqhOpxK9WqbFvX/Px84uPjKSoqwmazEQgEaHDBpazXQZc6ugygO90Q1EPXJ0WojyGlHl6EA8HwYht/+GKlXy+bLSLxa6HnA2UFXEpEbCxejy/0Gi1Ix549aXLaaQa/I0ok2Ww2Ro4cycGDB4mLi/tLj7ymUj1upVpJKQkEAqSlpeF2u0lKSiq/E43T5Sahy0WhXnZQo9RZijsQ6mG7A3r4axnqcQd1PEENT3hGiTeo4Qtq+DQNf1Di1zT8mn7YXG4dV6kbv89PQno6lw+/C3NsXETv8l6TxMTEkJiYeMQUvFNJRkbGKVO0QRVupZqVLcBxu91YrVa8Xm/5LoFxCQm0vuk2vEEZLtAa3vBsEW9QwxvUDivaoSEUb1CWD6/4NIkvPFzi1wR+HfyaPGK+d0BKMlq1oqTwEN2u6VNrb6Twvxo3bkzXrl1ZsGCB0VGUE6AKt1LtpJTl27qWLYCRUmKxWEhpeTqNLusTLtThXnUwNLb95/i2xBMIPe8Lv84XnmUSCBfv0HCJFiriusSvh1ZXtruoJ5qwcH6//lgsllp7z0mlZlOFW6lWZUXbbrcTCASIi4srv4mCx+PB5IgntX1H/JhCvW4tNDTiDmq4y4t4MHSxsvxxqDfu1UJzuH26xBsMLbbx6xq+cG9bFyZSGjbE6Syhw0UXoWkaLpfL6LckathsNoLBIMFg0OgoynGowq1Uq7JtXXNzc3E4HBQUFJTfESc5OZm4uDhaD7iVjPMuDA2N+DXcAQ13UA99BHTcfokvKPEGZXi4JNQL9wbBo0l8wdCUQG94+CSgaUiLlfYXX8rqxUt5dsFCYmJjsVqtNWrecqQNGDCAdevWsW3bNqOjKMehCrdSrcouTsbHx+Pz+XA4HOULcrxeL36/H5MQtO3TH80ai0cLj20HNDyBP3vX7sPHvLU/i7gvPGxy+DTBICYan9mJAIIL+/dDs/7ZsywtLTX6LYkaaiFSzXHcwi2EeFMIkSuE+P2wY48LIbKEEBvCH1cd9txDQogdQoitQojLIxVcqbnMZjOapmG1WgkEAuWrJy0WS/k9IJtcfDn2NmfgDUrcQVne4y6/MBk+Xjb+7QuExrt95Rct/xz3rtuyNfaUOmRu+oMOvXrhiI8v3+fiVN0692SV/V2omz9EtxPpcb8NXHGU4y9KKTuGP74CEEK0AwYCZ4S/51UhRO29G6vyF2X3nPT7/Ufce1JKecSmQbqu84+nnseUknpYwS4bMpG4whclvYE/i7lHA0+4aHs1Dd1iJbFRUyzxCRQXFnL96Hs5vWtXzGZzeQ51cfJIM2bM4K677jpi2bgSfY5buKWUy4ATnezaF/hASumTUu4GdgBdK5FPOcX871CJ3W5H13VMJhMej4dAIACELpQ1aNmKga++SUKTZngCevgjNETiK5vfXT7GrZfPRPEFQ2Pgfinw+gOUFB6iU+9L6T10KLFxcTidTjRNUxcnjyI2NhaPx2N0DOU4KjPGfY8QYmN4KCUlfKwhsO+w1+wPH/sLIcSdQog1Qog1gYD6QaktylZOFhUVERsbS0lJCRDaxc3hcBATE4OUEq/Xi9PppGXX87j6yWfpdP2N+KQon2XiN1tofmHP8imC3qBGbFpd4us1wKtpoeXwvgA2u53rRo3i0mHDEELg9XpJTk7GbDZjsVjU5vxH8eijj/5lu1QlupzsAN9M4ClCt2x9Cvg3MIwjb8Zd5qiDZVLK2cBsgISEDOnznWQSpcax2WzUrVsXs9lMenp6+UWxsmJhsViw2+3lxzpfegXtu3XnmvtD+0xICcIksCcnU3rYykeLLQaEOGKPbVtsLHWbNEEPTzmMi4tDCFG+8EZdkPur6667zugIynGcVOGWUh4s+1oI8TrwRfjhfqDxYS9tBGSfdDrllHT4WPbRenbm/7lxr8lkwpqSQnxKyl9em5JR74TaLDtjWXvVWbDVhT6lqp3U70NCiPqHPbwOKJtx8jkwUAgRI4RoDrQC/lu5iIpSs914443ld7NXlKogjtcbEEK8D/QE0oCDwMTw446EhkEygbuklDnh1z9CaNgkCIyRUn59vBBJSXVk69b/Otk/Q8RZrS7OOCOfpk2bGh2lQgcOHODXX2Pwev/aK40WKSnb6NateVTP5Pjtt9/o0KGD0TEqFAgEyMzMpFWrVkZHqVBhYSF+v5969U7styEjZGZm8kf6HwQcAaOjVGjbC9soLiw+6q+Gxy3c1SEhoa70+7caHaNCiYmZNGjwE1u23Gx0lAo1bfoNr76aTufOnY2OUqFp06YxdOhQkpKSjI5SoUceeYRJkyYZHaNCRUVFzJ07l3vvvdfoKBVas2YNBQUFXH559C7jmDdvHhdddFFUd8ZOP/10cnNzj1q4o2T1gcDvj96eYiBQgKbFRHVGTYvD4XCQcpRx4GhhtVpJSkqK2oxle6ZEaz4IZbRarVGd0W6343a7ozpjTEwM8fHxUZ3xWNdh1JwfRVGUGkYVbkVRlBpGFW5FUaKalJLdu3cbHSOqRMkYt6Ioyl+tXr2aX3/9tXy2z4UXXsjpp59udCzDqR63oihR69NPP2XXrl089thjrFq1iuXLlxsdKSqowq0oSlRasWIFDoeD8ePHM3ToUCZPnsxvv/2mhk1QhVtRlCh1wQUX4HK5ePvtt9m8eTP//ve/6dChA82aNTM62l+43W62bq2+tShqjFtRlKgkhKBXr14sXboUp9OJEIKOHTtG3cZgc+fOZc+ePQSDQWw2G8OHD4/4LfFUj1tRKqEm3C2mJmSsyGWXXcbTTz9N/fr1mTRpEuecc47RkY4gpWTOnDmcd9553HHHHSxdupS8vLyIt6sKt6KcBCkl2dnZfPjhh8yaNYusrKyoK47BYJD9+/fz6KOPsnz5cnJzc42OdMqZPn069957L02bNmXKlCm8+eabjB8/Hl3XI9quKtyKcpK6dOlCVlYWVquVTp064ff7jY50hOzsbLp160b37t1ZuHAhV1111fG/SflbxowZw4wZM/jss8/YtGkTt956K5MnT474jShU4VaUkzBr1iwef/xxLr74Ylq3bs20adOYMWOG0bHKSSmZPXs2s2fPxuVyMWbMGAYNGsT8+fONjnbKGTVqFEVFRbjdbq699loyMjIi3qYq3LXEU089Rc+ePfH5fDXmRrCBQIDvvvuO9957j0AgEFVDEb1792bRokU0atSIzz//nOnTp9O7d2+jYx3h4osv5scff+Scc87h3nvvZcWKFVG9e2RNdcMNNzB48GDatWvH6NGjq2XjKlW4a4nx48fz2Wef0aNHD5544gl+/fVXgsGg0bEqJKWkZcuWfPfdd2RlZdGgQYOoGopo2bIlubm5TJw4EQCfz8fTTz/N/v37DU4WIoSgbdu2LFq0iIULF6LrOpmZmcyaNYuioiKj4ymVpAp3LVG2peovv/xC9+7dee2113j11Vf55ptvjI52VF9++SW33nord911Fw6HgyFDhvDpp58aHaucEIIff/yR22+/nauvvpoNGzYwbdo0XnvtNXbs2GF0PADq16/PunXrqF+/Pq+88grr16/niiuuYObMmZSWlhodT6kEVbhrocsuu4xXXnmFRo0a8ccffzBo0CB27txpdKwjxMfH43Q6sdlspKSk4HQ6mTp1qtGx/uLss8+mZ8+eADRu3JjBgwczc+ZM8vPzjQ12mAEDBtC4cehWsD179uTCCy/koYceiqqhJ+XvUQtwaikhBNdffz0ul4vrr7+ecePGsWPHDq655hruu+8+EhIS/nLT3urUo0cP7rzzTnRdp27duvznP//hnXfeoWPHjkyYMIHevXuTmJgYdYsxWrduzfjx4xk4cCDNmjXj5ZdfJjY21uhYR+jevTupqal06tSJ2267jREjRmCxqFJQGdX9c6h63LWcw+GgWbNmfPzxx6xfv55zzz2X/v37s3DhQtatW2dYLiEEW7dupX///rRt25asrCx69+7N+vXr2bJlCzff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\n"
+ },
+ "metadata": {
+ "needs_background": "light"
+ }
+ }
+ ],
+ "source": [
+ "m.plot(Q)"
+ ]
+ },
+ {
+ "source": [
+ "## التحقق من السياسة\n",
+ "\n",
+ "نظرًا لأن جدول Q يعرض \"جاذبية\" كل إجراء في كل حالة، فمن السهل جدًا استخدامه لتحديد التنقل الفعّال في عالمنا. في أبسط الحالات، يمكننا ببساطة اختيار الإجراء الذي يتوافق مع أعلى قيمة في جدول Q:\n"
+ ],
+ "cell_type": "markdown",
+ "metadata": {}
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 13,
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "execute_result",
+ "data": {
+ "text/plain": [
+ "2"
+ ]
+ },
+ "metadata": {},
+ "execution_count": 13
+ }
+ ],
+ "source": [
+ "# code block 9"
+ ]
+ },
+ {
+ "source": [
+ "إذا جربت الكود أعلاه عدة مرات، قد تلاحظ أنه أحيانًا \"يتوقف\" عن العمل، وتحتاج إلى الضغط على زر الإيقاف في الدفتر لمقاطعته.\n",
+ "\n",
+ "> **المهمة 1:** قم بتعديل دالة `walk` لتحديد الحد الأقصى لطول المسار بعدد معين من الخطوات (على سبيل المثال، 100)، وراقب الكود أعلاه يعيد هذه القيمة من وقت لآخر.\n",
+ "\n",
+ "> **المهمة 2:** قم بتعديل دالة `walk` بحيث لا تعود إلى الأماكن التي زارتها مسبقًا. هذا سيمنع `walk` من التكرار في نفس الأماكن، ومع ذلك، قد ينتهي الأمر بالوكيل \"محاصرًا\" في موقع لا يستطيع الهروب منه.\n"
+ ],
+ "cell_type": "markdown",
+ "metadata": {}
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 58,
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "name": "stdout",
+ "text": [
+ "Average path length = 5.31, eaten by wolf: 0 times\n"
+ ]
+ }
+ ],
+ "source": [
+ "\n",
+ "# code block 10"
+ ]
+ },
+ {
+ "source": [
+ "## التحقيق في عملية التعلم\n"
+ ],
+ "cell_type": "markdown",
+ "metadata": {}
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 57,
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "execute_result",
+ "data": {
+ "text/plain": [
+ "[]"
+ ]
+ },
+ "metadata": {},
+ "execution_count": 57
+ },
+ {
+ "output_type": "display_data",
+ "data": {
+ "text/plain": "
",
+ "image/svg+xml": "\r\n\r\n\r\n\r\n",
+ "image/png": "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\n"
+ },
+ "metadata": {
+ "needs_background": "light"
+ }
+ }
+ ],
+ "source": [
+ "plt.plot(lpath)"
+ ]
+ },
+ {
+ "source": [
+ "## التمرين\n",
+ "## عالم أكثر واقعية لقصة بيتر والذئب\n"
+ ],
+ "cell_type": "markdown",
+ "metadata": {}
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "\n---\n\n**إخلاء المسؤولية**: \nتمت ترجمة هذا المستند باستخدام خدمة الترجمة الآلية [Co-op Translator](https://github.com/Azure/co-op-translator). بينما نسعى لتحقيق الدقة، يرجى العلم أن الترجمات الآلية قد تحتوي على أخطاء أو عدم دقة. يجب اعتبار المستند الأصلي بلغته الأصلية هو المصدر الموثوق. للحصول على معلومات حساسة أو هامة، يُوصى بالاستعانة بترجمة بشرية احترافية. نحن غير مسؤولين عن أي سوء فهم أو تفسيرات خاطئة تنشأ عن استخدام هذه الترجمة.\n"
+ ]
+ }
+ ]
+}
\ No newline at end of file
diff --git a/translations/ar/8-Reinforcement/1-QLearning/solution/Julia/README.md b/translations/ar/8-Reinforcement/1-QLearning/solution/Julia/README.md
new file mode 100644
index 000000000..3997a77c5
--- /dev/null
+++ b/translations/ar/8-Reinforcement/1-QLearning/solution/Julia/README.md
@@ -0,0 +1,15 @@
+
+هذا عنصر نائب مؤقت
+
+---
+
+**إخلاء المسؤولية**:
+تمت ترجمة هذا المستند باستخدام خدمة الترجمة الآلية [Co-op Translator](https://github.com/Azure/co-op-translator). بينما نسعى لتحقيق الدقة، يرجى العلم أن الترجمات الآلية قد تحتوي على أخطاء أو معلومات غير دقيقة. يجب اعتبار المستند الأصلي بلغته الأصلية هو المصدر الموثوق. للحصول على معلومات حساسة أو هامة، يُوصى بالاستعانة بترجمة بشرية احترافية. نحن غير مسؤولين عن أي سوء فهم أو تفسيرات خاطئة تنشأ عن استخدام هذه الترجمة.
\ No newline at end of file
diff --git a/translations/ar/8-Reinforcement/1-QLearning/solution/R/README.md b/translations/ar/8-Reinforcement/1-QLearning/solution/R/README.md
new file mode 100644
index 000000000..773bd7f0a
--- /dev/null
+++ b/translations/ar/8-Reinforcement/1-QLearning/solution/R/README.md
@@ -0,0 +1,15 @@
+
+هذا مكان مؤقت placeholder
+
+---
+
+**إخلاء المسؤولية**:
+تم ترجمة هذا المستند باستخدام خدمة الترجمة الآلية [Co-op Translator](https://github.com/Azure/co-op-translator). بينما نسعى لتحقيق الدقة، يرجى العلم أن الترجمات الآلية قد تحتوي على أخطاء أو معلومات غير دقيقة. يجب اعتبار المستند الأصلي بلغته الأصلية هو المصدر الموثوق. للحصول على معلومات حساسة أو هامة، يُوصى بالاستعانة بترجمة بشرية احترافية. نحن غير مسؤولين عن أي سوء فهم أو تفسيرات خاطئة تنشأ عن استخدام هذه الترجمة.
\ No newline at end of file
diff --git a/translations/ar/8-Reinforcement/1-QLearning/solution/assignment-solution.ipynb b/translations/ar/8-Reinforcement/1-QLearning/solution/assignment-solution.ipynb
new file mode 100644
index 000000000..caf94413d
--- /dev/null
+++ b/translations/ar/8-Reinforcement/1-QLearning/solution/assignment-solution.ipynb
@@ -0,0 +1,427 @@
+{
+ "metadata": {
+ "language_info": {
+ "codemirror_mode": {
+ "name": "ipython",
+ "version": 3
+ },
+ "file_extension": ".py",
+ "mimetype": "text/x-python",
+ "name": "python",
+ "nbconvert_exporter": "python",
+ "pygments_lexer": "ipython3",
+ "version": "3.7.0"
+ },
+ "orig_nbformat": 2,
+ "kernelspec": {
+ "name": "python3",
+ "display_name": "Python 3.7.0 64-bit ('3.7')"
+ },
+ "interpreter": {
+ "hash": "70b38d7a306a849643e446cd70466270a13445e5987dfa1344ef2b127438fa4d"
+ },
+ "coopTranslator": {
+ "original_hash": "eadbd20d2a075efb602615ad90b1e97a",
+ "translation_date": "2025-08-29T15:40:11+00:00",
+ "source_file": "8-Reinforcement/1-QLearning/solution/assignment-solution.ipynb",
+ "language_code": "ar"
+ }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 2,
+ "cells": [
+ {
+ "source": [
+ "# بيتر والذئب: بيئة واقعية\n",
+ "\n",
+ "في حالتنا، كان بيتر قادرًا على التحرك تقريبًا دون أن يشعر بالتعب أو الجوع. في عالم أكثر واقعية، عليه أن يجلس للراحة من وقت لآخر، وأيضًا أن يطعم نفسه. دعونا نجعل عالمنا أكثر واقعية من خلال تطبيق القواعد التالية:\n",
+ "\n",
+ "1. عند الانتقال من مكان إلى آخر، يفقد بيتر **الطاقة** ويكتسب بعض **الإرهاق**.\n",
+ "2. يمكن لبيتر استعادة المزيد من الطاقة عن طريق تناول التفاح.\n",
+ "3. يمكن لبيتر التخلص من الإرهاق عن طريق الراحة تحت الشجرة أو على العشب (أي المشي إلى موقع على اللوحة يحتوي على شجرة أو عشب - حقل أخضر).\n",
+ "4. يحتاج بيتر إلى العثور على الذئب وقتله.\n",
+ "5. لكي يتمكن بيتر من قتل الذئب، يجب أن يكون لديه مستويات معينة من الطاقة والإرهاق، وإلا فإنه سيخسر المعركة.\n"
+ ],
+ "cell_type": "markdown",
+ "metadata": {}
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 1,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "import matplotlib.pyplot as plt\n",
+ "import numpy as np\n",
+ "import random\n",
+ "import math\n",
+ "from rlboard import *"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 2,
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "display_data",
+ "data": {
+ "text/plain": "
",
+ "image/svg+xml": "\n\n\n\n",
+ "image/png": "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\n"
+ },
+ "metadata": {
+ "needs_background": "light"
+ }
+ }
+ ],
+ "source": [
+ "m.plot(Q)"
+ ]
+ },
+ {
+ "source": [
+ "## النتائج\n",
+ "\n",
+ "لنرى ما إذا كنا قد نجحنا في تدريب بيتر على مواجهة الذئب!\n"
+ ],
+ "cell_type": "markdown",
+ "metadata": {}
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 12,
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "name": "stdout",
+ "text": [
+ "Killed by wolf = 1, won: 9 times, drown: 90 times\n"
+ ]
+ }
+ ],
+ "source": [
+ "def qpolicy(m):\n",
+ " x,y = m.human\n",
+ " v = probs(Q[x,y])\n",
+ " a = random.choices(list(actions),weights=v)[0]\n",
+ " return a\n",
+ "\n",
+ "print_statistics(qpolicy)"
+ ]
+ },
+ {
+ "source": [
+ "نرى الآن حالات غرق أقل بكثير، لكن بيتر لا يزال غير قادر دائمًا على قتل الذئب. حاول التجربة ومعرفة ما إذا كان بإمكانك تحسين هذه النتيجة من خلال التلاعب بالمعاملات الفائقة.\n"
+ ],
+ "cell_type": "markdown",
+ "metadata": {}
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 13,
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "execute_result",
+ "data": {
+ "text/plain": [
+ "[]"
+ ]
+ },
+ "metadata": {},
+ "execution_count": 13
+ },
+ {
+ "output_type": "display_data",
+ "data": {
+ "text/plain": "
",
+ "image/svg+xml": "\n\n\n\n",
+ "image/png": "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\n"
+ },
+ "metadata": {
+ "needs_background": "light"
+ }
+ }
+ ],
+ "source": [
+ "plt.plot(lpath)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": []
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "\n---\n\n**إخلاء المسؤولية**: \nتمت ترجمة هذا المستند باستخدام خدمة الترجمة بالذكاء الاصطناعي [Co-op Translator](https://github.com/Azure/co-op-translator). بينما نسعى لتحقيق الدقة، يرجى العلم أن الترجمات الآلية قد تحتوي على أخطاء أو معلومات غير دقيقة. يجب اعتبار المستند الأصلي بلغته الأصلية هو المصدر الموثوق. للحصول على معلومات حساسة أو هامة، يُوصى بالاستعانة بترجمة بشرية احترافية. نحن غير مسؤولين عن أي سوء فهم أو تفسيرات خاطئة ناتجة عن استخدام هذه الترجمة.\n"
+ ]
+ }
+ ]
+}
\ No newline at end of file
diff --git a/translations/ar/8-Reinforcement/1-QLearning/solution/notebook.ipynb b/translations/ar/8-Reinforcement/1-QLearning/solution/notebook.ipynb
new file mode 100644
index 000000000..9643f8b44
--- /dev/null
+++ b/translations/ar/8-Reinforcement/1-QLearning/solution/notebook.ipynb
@@ -0,0 +1,579 @@
+{
+ "metadata": {
+ "language_info": {
+ "codemirror_mode": {
+ "name": "ipython",
+ "version": 3
+ },
+ "file_extension": ".py",
+ "mimetype": "text/x-python",
+ "name": "python",
+ "nbconvert_exporter": "python",
+ "pygments_lexer": "ipython3",
+ "version": "3.7.0"
+ },
+ "orig_nbformat": 2,
+ "kernelspec": {
+ "name": "python3",
+ "display_name": "Python 3.7.0 64-bit ('3.7')"
+ },
+ "interpreter": {
+ "hash": "70b38d7a306a849643e446cd70466270a13445e5987dfa1344ef2b127438fa4d"
+ },
+ "coopTranslator": {
+ "original_hash": "488431336543f71f14d4aaf0399e3381",
+ "translation_date": "2025-08-29T15:37:55+00:00",
+ "source_file": "8-Reinforcement/1-QLearning/solution/notebook.ipynb",
+ "language_code": "ar"
+ }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 2,
+ "cells": [
+ {
+ "source": [
+ "# بيتر والذئب: مقدمة في التعلم المعزز\n",
+ "\n",
+ "في هذا الدرس، سنتعلم كيفية تطبيق التعلم المعزز على مشكلة إيجاد المسارات. الإعداد مستوحى من الحكاية الموسيقية [بيتر والذئب](https://en.wikipedia.org/wiki/Peter_and_the_Wolf) التي ألفها الملحن الروسي [سيرجي بروكوفييف](https://en.wikipedia.org/wiki/Sergei_Prokofiev). إنها قصة عن بيتر، الشاب المغامر الذي يخرج بشجاعة من منزله إلى الغابة لمطاردة الذئب. سنقوم بتدريب خوارزميات تعلم الآلة التي ستساعد بيتر على استكشاف المنطقة المحيطة وبناء خريطة تنقل مثالية.\n",
+ "\n",
+ "أولاً، دعونا نستورد مجموعة من المكتبات المفيدة:\n"
+ ],
+ "cell_type": "markdown",
+ "metadata": {}
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 1,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "import matplotlib.pyplot as plt\n",
+ "import numpy as np\n",
+ "import random\n",
+ "import math"
+ ]
+ },
+ {
+ "source": [
+ "## نظرة عامة على التعلم المعزز\n",
+ "\n",
+ "**التعلم المعزز** (RL) هو تقنية تعلم تتيح لنا تعلم السلوك الأمثل لوكيل **agent** في بيئة **environment** معينة من خلال إجراء العديد من التجارب. يجب أن يكون لدى الوكيل في هذه البيئة **هدف** محدد بواسطة **دالة المكافأة**.\n",
+ "\n",
+ "## البيئة\n",
+ "\n",
+ "للتبسيط، دعونا نعتبر أن عالم بيتر عبارة عن لوحة مربعة بحجم `width` x `height`. كل خلية في هذه اللوحة يمكن أن تكون:\n",
+ "* **أرضًا**، يمكن لبيتر والمخلوقات الأخرى المشي عليها\n",
+ "* **ماء**، من الواضح أنه لا يمكنك المشي عليه\n",
+ "* **شجرة** أو **عشب** - مكان يمكن أن تأخذ فيه قسطًا من الراحة\n",
+ "* **تفاحة**، تمثل شيئًا يسر بيتر العثور عليه لإطعام نفسه\n",
+ "* **ذئب**، وهو خطر يجب تجنبه\n",
+ "\n",
+ "للعمل مع البيئة، سنقوم بتعريف فئة تسمى `Board`. ولتجنب ازدحام هذا الدفتر بالكود، قمنا بنقل جميع الأكواد المتعلقة بالعمل مع اللوحة إلى وحدة منفصلة تسمى `rlboard`، والتي سنقوم الآن باستيرادها. يمكنك الاطلاع داخل هذه الوحدة للحصول على مزيد من التفاصيل حول آليات التنفيذ الداخلية.\n"
+ ],
+ "cell_type": "markdown",
+ "metadata": {}
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 2,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "from rlboard import *"
+ ]
+ },
+ {
+ "source": [
+ "لنقم الآن بإنشاء لوحة عشوائية ونرى كيف تبدو:\n"
+ ],
+ "cell_type": "markdown",
+ "metadata": {}
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 3,
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "display_data",
+ "data": {
+ "text/plain": "
",
+ "image/svg+xml": "\n\n\n\n",
+ "image/png": "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\n"
+ },
+ "metadata": {
+ "needs_background": "light"
+ }
+ }
+ ],
+ "source": [
+ "width, height = 8,8\n",
+ "m = Board(width,height)\n",
+ "m.randomize(seed=13)\n",
+ "m.plot()"
+ ]
+ },
+ {
+ "source": [
+ "## الإجراءات والسياسة\n",
+ "\n",
+ "في مثالنا، هدف بيتر هو العثور على تفاحة، مع تجنب الذئب والعوائق الأخرى. لتحقيق ذلك، يمكنه ببساطة التجول حتى يجد تفاحة. لذلك، في أي موقع يمكنه اختيار واحدة من الإجراءات التالية: أعلى، أسفل، يسار، ويمين. سنقوم بتعريف هذه الإجراءات كقاموس، وربطها بأزواج من تغييرات الإحداثيات المقابلة. على سبيل المثال، التحرك يمينًا (`R`) سيقابل الزوج `(1,0)`.\n"
+ ],
+ "cell_type": "markdown",
+ "metadata": {}
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 4,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "actions = { \"U\" : (0,-1), \"D\" : (0,1), \"L\" : (-1,0), \"R\" : (1,0) }\n",
+ "action_idx = { a : i for i,a in enumerate(actions.keys()) }"
+ ]
+ },
+ {
+ "source": [
+ "استراتيجية وكيلنا (بيتر) تُعرّف بما يُسمى **السياسة**. دعونا نأخذ بعين الاعتبار أبسط سياسة تُسمى **المشي العشوائي**.\n",
+ "\n",
+ "## المشي العشوائي\n",
+ "\n",
+ "دعونا نبدأ بحل مشكلتنا من خلال تنفيذ استراتيجية المشي العشوائي.\n"
+ ],
+ "cell_type": "markdown",
+ "metadata": {}
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 5,
+ "metadata": {
+ "tags": []
+ },
+ "outputs": [
+ {
+ "output_type": "execute_result",
+ "data": {
+ "text/plain": [
+ "18"
+ ]
+ },
+ "metadata": {},
+ "execution_count": 5
+ }
+ ],
+ "source": [
+ "def random_policy(m):\n",
+ " return random.choice(list(actions))\n",
+ "\n",
+ "def walk(m,policy,start_position=None):\n",
+ " n = 0 # number of steps\n",
+ " # set initial position\n",
+ " if start_position:\n",
+ " m.human = start_position \n",
+ " else:\n",
+ " m.random_start()\n",
+ " while True:\n",
+ " if m.at() == Board.Cell.apple:\n",
+ " return n # success!\n",
+ " if m.at() in [Board.Cell.wolf, Board.Cell.water]:\n",
+ " return -1 # eaten by wolf or drowned\n",
+ " while True:\n",
+ " a = actions[policy(m)]\n",
+ " new_pos = m.move_pos(m.human,a)\n",
+ " if m.is_valid(new_pos) and m.at(new_pos)!=Board.Cell.water:\n",
+ " m.move(a) # do the actual move\n",
+ " break\n",
+ " n+=1\n",
+ "\n",
+ "walk(m,random_policy)"
+ ]
+ },
+ {
+ "source": [
+ "لنقم بتجربة السير العشوائي عدة مرات ونرى متوسط عدد الخطوات المتخذة:\n"
+ ],
+ "cell_type": "markdown",
+ "metadata": {}
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 6,
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "name": "stdout",
+ "text": [
+ "Average path length = 32.87096774193548, eaten by wolf: 7 times\n"
+ ]
+ }
+ ],
+ "source": [
+ "def print_statistics(policy):\n",
+ " s,w,n = 0,0,0\n",
+ " for _ in range(100):\n",
+ " z = walk(m,policy)\n",
+ " if z<0:\n",
+ " w+=1\n",
+ " else:\n",
+ " s += z\n",
+ " n += 1\n",
+ " print(f\"Average path length = {s/n}, eaten by wolf: {w} times\")\n",
+ "\n",
+ "print_statistics(random_policy)"
+ ]
+ },
+ {
+ "source": [
+ "## وظيفة المكافأة\n",
+ "\n",
+ "لجعل سياستنا أكثر ذكاءً، نحتاج إلى فهم أي الحركات \"أفضل\" من غيرها.\n"
+ ],
+ "cell_type": "markdown",
+ "metadata": {}
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 7,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "move_reward = -0.1\n",
+ "goal_reward = 10\n",
+ "end_reward = -10\n",
+ "\n",
+ "def reward(m,pos=None):\n",
+ " pos = pos or m.human\n",
+ " if not m.is_valid(pos):\n",
+ " return end_reward\n",
+ " x = m.at(pos)\n",
+ " if x==Board.Cell.water or x == Board.Cell.wolf:\n",
+ " return end_reward\n",
+ " if x==Board.Cell.apple:\n",
+ " return goal_reward\n",
+ " return move_reward"
+ ]
+ },
+ {
+ "source": [
+ "## التعلم باستخدام Q-Learning\n",
+ "\n",
+ "قم ببناء جدول Q، أو مصفوفة متعددة الأبعاد. بما أن لوحتنا لها أبعاد `width` x `height`، يمكننا تمثيل جدول Q باستخدام مصفوفة numpy ذات الشكل `width` x `height` x `len(actions)`:\n"
+ ],
+ "cell_type": "markdown",
+ "metadata": {}
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 8,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "Q = np.ones((width,height,len(actions)),dtype=np.float)*1.0/len(actions)"
+ ]
+ },
+ {
+ "source": [
+ "مرر جدول Q إلى دالة الرسم من أجل تصور الجدول على اللوحة:\n"
+ ],
+ "cell_type": "markdown",
+ "metadata": {}
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 9,
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "display_data",
+ "data": {
+ "text/plain": "
",
+ "image/svg+xml": "\n\n\n\n",
+ "image/png": "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1fB4PKxatYoRI0bw4YcfMn/+fDp27Mj69eutjlZjx44d2O12rrrqKv71r3+xcOFCCgoKOHDggNXRanz66acMGjSIDh064Ha7efHFF1m0aFFY/QX42muv8bvf/Q6n08mll17Kn/70J1577bVGXacUtzhC586d2b59O/369aNNmzZs2bKF7Oxsq2PVkp2dzY8//kj//v1JTU3l+++/p0uXLlbHqhEVFUXr1q1RStG/f38CgQCHDh2iVatWVkerkZaWhmmatGnThvPOO4+ioiKSkpKIj4+3OlqNdu3asWfPHs4//3zOPPNMtm/fTufOneudj/Fky87OJjc3l/79+9OiRQs2btzY6O8XKW5xhO7du1NQUMD8+fN57733eP/99znvvPOsjlXLeeedx5dffsn69eu55557yMvLo3v37lbHquFwOOjcuTNvvvkmLpeLoUOHopQiKyvL6mg1MjIySElJYebMmXi9XiZNmkRWVhaJiYlWR6vRsWNHXC4Xf/vb31i7di0vv/wy55xzTlgVd69evdi4cSPLly/nmWeeYc2aNY0+dBcms7yLcPPFF1/w3Xff8cMPP4TdmCJAcnIyubm5vPfee1x99dVhVdrV+vfvz9atW8nJyWHlypVhtSVb7b777uPee+9lypQpfP/991bHOaq3336bwsJClixZwrZt26yOcwSbzcaWLVv4/PPPUUoxY8aMRl+nFLeoU7du3ejWrZvVMeo1ZMgQqyMc09SpU62OUC+lFH/5y1+sjlGvVq1aceedd1odo14XX3zxSVuXDJUIIUSEkeIWQogII8UthBARRopbCCEijBS3EEJEGCluIYSIMMcsbqXU6Uqpz5RS3yulvlNK/SG0PF0p9YlSKjf0OS20XCmlnldK7VBKbVJKndvY/wghhDiVHM8WdxC4T2vdFbgA+L1SqivwELBCa90JWBH6GuBXQKfQx3jgxQZPLYQQp7BjFrfWulBr/Z/Q7UrgByALuA6YF3rYPOD60O3rgPm6yv8BqUqp8LlAgxBCRLifNcatlGoHnAOsBVporQtDd+0HWoRuZwE/Hva0vaFlP32t8Uqp9Uqp9YGA52fGFkKIU9dxF7dSKhFYBEzSWte6ar2uumr4z7pyuNZ6tta6t9a6t8MR93OeKoQQp7TjKm6llIOq0l6otX4/tLioeggk9Ln6Ir4FwOmHPb11aJkQQogG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1r+LXq+XioqKsM5Y3/tEhcObKD09Xd9///1Wx6iTy+Xi4MGDtGvXzuoodSosLCQmJob09HSro9Rp27ZttG/fPqyHUTZu3MjZZ59tdYw6BQIBvv56F4cONf7F+n+p2NhSzjnHR6tGmv2oIeTl5ZGZmdnoM9WciGeeeYbS0tKj7yTSWlv+kZmZqcNZbm6unj17ttUx6vXBBx/o1atXWx2jXo8//rguLS21OkadTNPUEyZMsDpGvUpKSnSvXjm66pJg4fnRsuXXevHixVZ/q+o1a9YsnZuba3WMeoV68aidKWPcQggRYaS4hRAiwkhxCyFEhJHiFkKICCPFLYQQEUaKWwghIowUtxBCRBgpbiGEiDBS3EIIEWGkuIUQIsJIcQshRISR4hZCiAgjxS2EEBFGilsIISKMFLcQQkQYKW4hhIgwTba4V69eHdZTZAWDQdatW2d1jHqVlJSQm5trdYx67dixg5KSEqtj1Oubb74hGAxaHSOiuVwuNm/ebHWMeu3du5eCgoKTsq4wmXOy4axfv54PPviA2NhY/vWvf3HxxRdz2WWXWR2rlnfffZeNGzcSHR3NkiVLGD16NGeeeabVsWp55plnqKiowGazEQgEeOSRR4iLi7M6Vg2Px8O0adNwOByYpklSUhKTJ0+2OlYtO3bsYO7cucTExLBkyRKys7MZNmyY1bEizssvv8zu3btxOBy89dZbTJo0iebNm1sdq4Zpmjz22GM1G4pKKf70pz9hszXednGT2uLWWrNhwwZM0+QPf/gDLVu25PPPPw+rLW+tNf/85z/p3r07d999N0VFRezatSvsMs6bN48bbriB3/72t3zyySe43W6rY9Xi9Xr597//zejRo7nxxhuZP39+2H0Pd+3axf79+5kwYQJnn302H374YVhljARaaxYuXMill17K+PHj2bhxI8XFxWH1fTRNk7fffpvhw4dz8803884772CaZqOus0kVd35+Pps2baKyspJf/epXjB49mtjYWFavXm11tBrvv/8+F1xwAXPnzmXy5MlMmzaNhQsXUlFRYXW0GlOnTiUnJ4fbbruN5cuX88YbbzB+/HirY9Uybtw4Jk2axI033ojP5+P5559nypQpVseqUVlZyfz588nKymLw4MEMHjyYiy66iEWLFlkdLaL87W9/48477+Shhx7ixRdf5B//+AdTp05t9GL8OcaP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\n"
+ },
+ "metadata": {
+ "needs_background": "light"
+ }
+ }
+ ],
+ "source": [
+ "m.plot(Q)"
+ ]
+ },
+ {
+ "source": [
+ "## جوهر التعلم باستخدام Q-Learning: معادلة بيلمان وخوارزمية التعلم\n",
+ "\n",
+ "اكتب كودًا شبه برمجي لخوارزمية التعلم الخاصة بنا:\n",
+ "\n",
+ "* قم بتهيئة جدول Q بحيث يحتوي على أرقام متساوية لجميع الحالات والإجراءات\n",
+ "* قم بتعيين معدل التعلم $\\alpha\\leftarrow 1$\n",
+ "* كرر المحاكاة عدة مرات\n",
+ " 1. ابدأ من موقع عشوائي\n",
+ " 1. كرر\n",
+ " 1. اختر إجراءً $a$ في الحالة $s$\n",
+ " 2. نفذ الإجراء بالانتقال إلى حالة جديدة $s'$\n",
+ " 3. إذا واجهنا شرط نهاية اللعبة، أو كان إجمالي المكافأة صغيرًا جدًا - قم بإنهاء المحاكاة \n",
+ " 4. احسب المكافأة $r$ في الحالة الجديدة\n",
+ " 5. قم بتحديث دالة Q وفقًا لمعادلة بيلمان: $Q(s,a)\\leftarrow (1-\\alpha)Q(s,a)+\\alpha(r+\\gamma\\max_{a'}Q(s',a'))$\n",
+ " 6. $s\\leftarrow s'$\n",
+ " 7. قم بتحديث إجمالي المكافأة وقلل $\\alpha$.\n",
+ "\n",
+ "## الاستغلال مقابل الاستكشاف\n",
+ "\n",
+ "أفضل نهج هو تحقيق توازن بين الاستكشاف والاستغلال. مع تعلمنا المزيد عن بيئتنا، سنكون أكثر ميلًا لاتباع المسار الأمثل، ومع ذلك، يجب اختيار المسار غير المستكشف بين الحين والآخر.\n",
+ "\n",
+ "## تنفيذ الخوارزمية باستخدام بايثون\n",
+ "\n",
+ "الآن نحن جاهزون لتنفيذ خوارزمية التعلم. قبل ذلك، نحتاج أيضًا إلى بعض الوظائف التي تحول الأرقام العشوائية في جدول Q إلى متجه من الاحتمالات للإجراءات المقابلة:\n"
+ ],
+ "cell_type": "markdown",
+ "metadata": {}
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 10,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "def probs(v,eps=1e-4):\n",
+ " v = v-v.min()+eps\n",
+ " v = v/v.sum()\n",
+ " return v"
+ ]
+ },
+ {
+ "source": [
+ "نضيف كمية صغيرة من `eps` إلى المتجه الأصلي لتجنب القسمة على 0 في الحالة الأولية، عندما تكون جميع مكونات المتجه متطابقة.\n",
+ "\n",
+ "خوارزمية التعلم الفعلية التي سنقوم بتشغيلها لـ 5000 تجربة، والتي تُعرف أيضًا باسم **epochs**:\n"
+ ],
+ "cell_type": "markdown",
+ "metadata": {}
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 11,
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "name": "stdout",
+ "text": [
+ ""
+ ]
+ }
+ ],
+ "source": [
+ "\n",
+ "from IPython.display import clear_output\n",
+ "\n",
+ "lpath = []\n",
+ "\n",
+ "for epoch in range(10000):\n",
+ " clear_output(wait=True)\n",
+ " print(f\"Epoch = {epoch}\",end='')\n",
+ "\n",
+ " # Pick initial point\n",
+ " m.random_start()\n",
+ " \n",
+ " # Start travelling\n",
+ " n=0\n",
+ " cum_reward = 0\n",
+ " while True:\n",
+ " x,y = m.human\n",
+ " v = probs(Q[x,y])\n",
+ " a = random.choices(list(actions),weights=v)[0]\n",
+ " dpos = actions[a]\n",
+ " m.move(dpos,check_correctness=False) # we allow player to move outside the board, which terminates episode\n",
+ " r = reward(m)\n",
+ " cum_reward += r\n",
+ " if r==end_reward or cum_reward < -1000:\n",
+ " print(f\" {n} steps\",end='\\r')\n",
+ " lpath.append(n)\n",
+ " break\n",
+ " alpha = np.exp(-n / 3000)\n",
+ " gamma = 0.5\n",
+ " ai = action_idx[a]\n",
+ " Q[x,y,ai] = (1 - alpha) * Q[x,y,ai] + alpha * (r + gamma * Q[x+dpos[0], y+dpos[1]].max())\n",
+ " n+=1"
+ ]
+ },
+ {
+ "source": [
+ "بعد تنفيذ هذا الخوارزمية، يجب تحديث جدول Q بقيم تحدد جاذبية الإجراءات المختلفة في كل خطوة. تصور الجدول هنا:\n"
+ ],
+ "cell_type": "markdown",
+ "metadata": {}
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 12,
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "display_data",
+ "data": {
+ "text/plain": "
",
+ "image/svg+xml": "\n\n\n\n",
+ "image/png": "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DBhgaPG22+307NmTbt26hQv1W2+9xWuvvUbv3r0544wzDP/lEqvUr7UIevPNN7n55ptPuWhX8Xg8XHPNNaxcuTJCyequZcuWMWHCBGbMmMFzzz3HE088YXSkOkkIgc1mw2w289RTT7Fs2TKWLl164r9YCywWS/h2dtdddx2apjFv3jw+/vhjo6PFLFW4I2TBggXcddddR/VnCyFwOBwnbDUIIUhISDhq27Zt27j55pv57rvvopK3LiguLmbt2rUsWLCAl19+mcTERFq0aMHatWuNjlbnTZkyhT179sTkxcCxY8fy9NNPs3v3bj744AOj48QkVbhrSNM03n77bSZPnkxZWdlR32vVqhWzZ88+YX+d1WplyZIlpKSkHDVJZ/v27Vx55ZXs2LGjQY42SU5O5qyzzmLZsmWMGzeOyy67jBdffJFdu3ZRVlbWIF+TSLHb7XTp0oWcnJxqRzwZyW63M3bsWDZv3szKlStj/t+6trt0VOGuASklK1eu5Prrr6ekpCS8vXHjxvTv359vv/2WzMzMk/pHPfvss/n111+55557jmp95+bm0q9fP/Lz86PyHGKZxWKhdevWLF68mBUrVjBnzhzuv/9+9u/fz7XXXsvy5cvZs2eP0THrrAsvvJDmzZvz5ptvxmTxdjgcPPjggyxZsiTmuw1r+xeLKtw1oOs6f//734/q027atCnTpk3jk08+oVGjRid9rKrp8ZMmTeK22247agnQiooK5s6dG/Otjmg477zzWLZsGX6/n48//pg777yTKVOm8N5777FmzRreeOMNHnnkEbxer9FRj+nLL7/kvPPOi8klXYUQjBkzBiEE//d//2d0nGMSQvDMM8+wZs2amOzWqZKZmUnLli354YcfauV8qnDXgBCCVq1ahdcZsVqtTJ8+nVGjRpGcnPy73z4JIcjIyOC+++5j/Pjx4e12u73WR1IkJCQwatSomFnf4qabbjpqpl9cXBwPP/wwo0eP5txzz+XKK6/kiSeeCA91ixUrVqzgvPPOIy4uzugo1frLX/5Cy5YtefLJJ2PqtasihOCuu+7il19+4ZNPPonJjFWFe9OmTbVyPlW4a0AIwfTp05k8eTJt27Zl/fr1jB49+jcXGn/vf7S0tDRmzJjByy+/TJs2bZg9e3a4ZVRbqropYr0rok2bNgwaNIi33nqLjh070r17d7766isOHDhg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\n"
+ },
+ "metadata": {
+ "needs_background": "light"
+ }
+ }
+ ],
+ "source": [
+ "m.plot(Q)"
+ ]
+ },
+ {
+ "source": [
+ "## التحقق من السياسة\n",
+ "\n",
+ "بما أن جدول Q يعرض \"جاذبية\" كل إجراء في كل حالة، فمن السهل جدًا استخدامه لتحديد التنقل الفعّال في عالمنا. في أبسط الحالات، يمكننا ببساطة اختيار الإجراء الذي يتوافق مع أعلى قيمة في جدول Q:\n"
+ ],
+ "cell_type": "markdown",
+ "metadata": {}
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 13,
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "execute_result",
+ "data": {
+ "text/plain": [
+ "2"
+ ]
+ },
+ "metadata": {},
+ "execution_count": 13
+ }
+ ],
+ "source": [
+ "def qpolicy_strict(m):\n",
+ " x,y = m.human\n",
+ " v = probs(Q[x,y])\n",
+ " a = list(actions)[np.argmax(v)]\n",
+ " return a\n",
+ "\n",
+ "walk(m,qpolicy_strict)"
+ ]
+ },
+ {
+ "source": [
+ "إذا جربت الكود أعلاه عدة مرات، قد تلاحظ أنه أحيانًا \"يتوقف\" عن العمل، وتحتاج إلى الضغط على زر الإيقاف في الدفتر لمقاطعته.\n",
+ "\n",
+ "> **المهمة 1:** قم بتعديل دالة `walk` لتحديد الحد الأقصى لطول المسار بعدد معين من الخطوات (على سبيل المثال، 100)، وراقب الكود أعلاه يعيد هذه القيمة من وقت لآخر.\n",
+ "\n",
+ "> **المهمة 2:** قم بتعديل دالة `walk` بحيث لا تعود إلى الأماكن التي زارتها مسبقًا. هذا سيمنع `walk` من التكرار في نفس الأماكن، ومع ذلك، قد ينتهي الأمر بالوكيل \"محاصرًا\" في موقع لا يستطيع الهروب منه.\n"
+ ],
+ "cell_type": "markdown",
+ "metadata": {}
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 14,
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "name": "stdout",
+ "text": [
+ "Average path length = 3.45, eaten by wolf: 0 times\n"
+ ]
+ }
+ ],
+ "source": [
+ "\n",
+ "def qpolicy(m):\n",
+ " x,y = m.human\n",
+ " v = probs(Q[x,y])\n",
+ " a = random.choices(list(actions),weights=v)[0]\n",
+ " return a\n",
+ "\n",
+ "print_statistics(qpolicy)"
+ ]
+ },
+ {
+ "source": [
+ "## التحقيق في عملية التعلم\n"
+ ],
+ "cell_type": "markdown",
+ "metadata": {}
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 15,
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "execute_result",
+ "data": {
+ "text/plain": [
+ "[]"
+ ]
+ },
+ "metadata": {},
+ "execution_count": 15
+ },
+ {
+ "output_type": "display_data",
+ "data": {
+ "text/plain": "
",
+ "image/svg+xml": "\n\n\n\n",
+ "image/png": "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\n"
+ },
+ "metadata": {
+ "needs_background": "light"
+ }
+ }
+ ],
+ "source": [
+ "plt.plot(lpath)"
+ ]
+ },
+ {
+ "source": [
+ "ما نلاحظه هنا هو أنه في البداية زاد متوسط طول المسار. ربما يعود ذلك إلى حقيقة أننا عندما لا نعرف شيئًا عن البيئة - فمن المحتمل أن نقع في حالات سيئة، مثل الوقوع في الماء أو مواجهة الذئب. ومع تعلمنا المزيد وبدء استخدام هذه المعرفة، يمكننا استكشاف البيئة لفترة أطول، ولكننا لا نزال غير مدركين تمامًا لمواقع التفاح.\n",
+ "\n",
+ "بمجرد أن نتعلم بما يكفي، يصبح من الأسهل على الوكيل تحقيق الهدف، ويبدأ طول المسار في الانخفاض. ومع ذلك، لا نزال منفتحين على الاستكشاف، لذا غالبًا ما ننحرف عن أفضل مسار ونستكشف خيارات جديدة، مما يجعل المسار أطول من المثالي.\n",
+ "\n",
+ "ما نلاحظه أيضًا في هذا الرسم البياني هو أنه في نقطة معينة زاد الطول بشكل مفاجئ. يشير هذا إلى الطبيعة العشوائية للعملية، وأنه يمكننا في بعض الأحيان \"إفساد\" معاملات Q-Table عن طريق استبدالها بقيم جديدة. يجب تقليل هذا الأمر قدر الإمكان عن طريق تقليل معدل التعلم (أي أنه مع اقتراب نهاية التدريب نقوم فقط بتعديل قيم Q-Table بقيمة صغيرة).\n",
+ "\n",
+ "بشكل عام، من المهم أن نتذكر أن نجاح وجودة عملية التعلم تعتمد بشكل كبير على المعاملات، مثل معدل التعلم، وتناقص معدل التعلم، ومعامل الخصم. غالبًا ما يُطلق على هذه المعاملات اسم **المعاملات الفائقة**، لتمييزها عن **المعاملات** التي نقوم بتحسينها أثناء التدريب (مثل معاملات Q-Table). تُعرف عملية العثور على أفضل قيم للمعاملات الفائقة باسم **تحسين المعاملات الفائقة**، وهي تستحق أن تكون موضوعًا منفصلًا.\n"
+ ],
+ "cell_type": "markdown",
+ "metadata": {}
+ },
+ {
+ "source": [
+ "## التمرين\n",
+ "#### عالم أكثر واقعية لقصة بيتر والذئب\n",
+ "\n",
+ "في وضعنا الحالي، كان بيتر قادرًا على التحرك تقريبًا دون أن يشعر بالتعب أو الجوع. في عالم أكثر واقعية، عليه أن يجلس ويرتاح من وقت لآخر، وأيضًا أن يطعم نفسه. دعونا نجعل عالمنا أكثر واقعية من خلال تنفيذ القواعد التالية:\n",
+ "\n",
+ "1. عند الانتقال من مكان إلى آخر، يفقد بيتر **الطاقة** ويكتسب بعض **الإرهاق**.\n",
+ "2. يمكن لبيتر أن يكتسب المزيد من الطاقة عن طريق تناول التفاح.\n",
+ "3. يمكن لبيتر التخلص من الإرهاق عن طريق الراحة تحت الشجرة أو على العشب (أي المشي إلى موقع على اللوحة يحتوي على شجرة أو عشب - حقل أخضر).\n",
+ "4. يحتاج بيتر إلى العثور على الذئب وقتله.\n",
+ "5. لكي يتمكن بيتر من قتل الذئب، يجب أن تكون لديه مستويات معينة من الطاقة والإرهاق، وإلا فإنه سيخسر المعركة.\n",
+ "\n",
+ "قم بتعديل وظيفة المكافأة أعلاه وفقًا لقواعد اللعبة، وقم بتشغيل خوارزمية التعلم المعزز لتعلم أفضل استراتيجية للفوز باللعبة، وقارن نتائج المشي العشوائي مع نتائج خوارزميتك من حيث عدد الألعاب التي تم الفوز بها والخسارة.\n",
+ "\n",
+ "> **ملاحظة**: قد تحتاج إلى ضبط معلمات التعلم لجعلها تعمل، خاصة عدد العصور التدريبية. نظرًا لأن نجاح اللعبة (مواجهة الذئب) هو حدث نادر، يمكنك توقع وقت تدريب أطول بكثير.\n"
+ ],
+ "cell_type": "markdown",
+ "metadata": {}
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "\n---\n\n**إخلاء المسؤولية**: \nتمت ترجمة هذا المستند باستخدام خدمة الترجمة الآلية [Co-op Translator](https://github.com/Azure/co-op-translator). بينما نسعى لتحقيق الدقة، يرجى العلم أن الترجمات الآلية قد تحتوي على أخطاء أو معلومات غير دقيقة. يجب اعتبار المستند الأصلي بلغته الأصلية هو المصدر الموثوق. للحصول على معلومات حساسة أو هامة، يُوصى بالاستعانة بترجمة بشرية احترافية. نحن غير مسؤولين عن أي سوء فهم أو تفسيرات خاطئة تنشأ عن استخدام هذه الترجمة.\n"
+ ]
+ }
+ ]
+}
\ No newline at end of file
diff --git a/translations/ar/8-Reinforcement/2-Gym/README.md b/translations/ar/8-Reinforcement/2-Gym/README.md
new file mode 100644
index 000000000..02841ebe2
--- /dev/null
+++ b/translations/ar/8-Reinforcement/2-Gym/README.md
@@ -0,0 +1,333 @@
+
+## متطلبات مسبقة
+
+في هذا الدرس، سنستخدم مكتبة **OpenAI Gym** لمحاكاة بيئات مختلفة. يمكنك تشغيل كود هذا الدرس محليًا (على سبيل المثال، من خلال Visual Studio Code)، وفي هذه الحالة ستفتح المحاكاة في نافذة جديدة. عند تشغيل الكود عبر الإنترنت، قد تحتاج إلى إجراء بعض التعديلات على الكود، كما هو موضح [هنا](https://towardsdatascience.com/rendering-openai-gym-envs-on-binder-and-google-colab-536f99391cc7).
+
+## OpenAI Gym
+
+في الدرس السابق، كانت قواعد اللعبة والحالة معطاة من خلال الفئة `Board` التي قمنا بتعريفها بأنفسنا. هنا سنستخدم بيئة محاكاة خاصة، والتي ستقوم بمحاكاة الفيزياء وراء توازن العصا. واحدة من أشهر بيئات المحاكاة لتدريب خوارزميات التعلم المعزز تُعرف بـ [Gym](https://gym.openai.com/)، والتي يتم صيانتها بواسطة [OpenAI](https://openai.com/). باستخدام هذه البيئة، يمكننا إنشاء بيئات مختلفة، بدءًا من محاكاة CartPole إلى ألعاب Atari.
+
+> **ملاحظة**: يمكنك الاطلاع على بيئات أخرى متاحة من OpenAI Gym [هنا](https://gym.openai.com/envs/#classic_control).
+
+أولاً، لنقم بتثبيت مكتبة gym واستيراد المكتبات المطلوبة (كتلة الكود 1):
+
+```python
+import sys
+!{sys.executable} -m pip install gym
+
+import gym
+import matplotlib.pyplot as plt
+import numpy as np
+import random
+```
+
+## تمرين - تهيئة بيئة CartPole
+
+للتعامل مع مشكلة توازن العصا، نحتاج إلى تهيئة البيئة المناسبة. كل بيئة مرتبطة بـ:
+
+- **مساحة الملاحظة** التي تحدد بنية المعلومات التي نتلقاها من البيئة. بالنسبة لمشكلة CartPole، نتلقى موقع العصا، السرعة، وبعض القيم الأخرى.
+
+- **مساحة الحركة** التي تحدد الإجراءات الممكنة. في حالتنا، مساحة الحركة متقطعة، وتتكون من إجراءين - **يسار** و **يمين**. (كتلة الكود 2)
+
+1. للتهيئة، اكتب الكود التالي:
+
+ ```python
+ env = gym.make("CartPole-v1")
+ print(env.action_space)
+ print(env.observation_space)
+ print(env.action_space.sample())
+ ```
+
+لمعرفة كيفية عمل البيئة، دعنا نقوم بتشغيل محاكاة قصيرة لمدة 100 خطوة. في كل خطوة، نقدم أحد الإجراءات التي يجب اتخاذها - في هذه المحاكاة، نختار إجراءً عشوائيًا من `action_space`.
+
+1. قم بتشغيل الكود أدناه وشاهد النتيجة.
+
+ ✅ تذكر أنه يُفضل تشغيل هذا الكود على تثبيت Python محلي! (كتلة الكود 3)
+
+ ```python
+ env.reset()
+
+ for i in range(100):
+ env.render()
+ env.step(env.action_space.sample())
+ env.close()
+ ```
+
+ يجب أن ترى شيئًا مشابهًا لهذه الصورة:
+
+ 
+
+1. أثناء المحاكاة، نحتاج إلى الحصول على الملاحظات لتحديد كيفية التصرف. في الواقع، تُرجع دالة الخطوة الملاحظات الحالية، ودالة المكافأة، وعلامة الانتهاء التي تشير إلى ما إذا كان من المنطقي متابعة المحاكاة أم لا: (كتلة الكود 4)
+
+ ```python
+ env.reset()
+
+ done = False
+ while not done:
+ env.render()
+ obs, rew, done, info = env.step(env.action_space.sample())
+ print(f"{obs} -> {rew}")
+ env.close()
+ ```
+
+ ستنتهي برؤية شيء مثل هذا في مخرجات الدفتر:
+
+ ```text
+ [ 0.03403272 -0.24301182 0.02669811 0.2895829 ] -> 1.0
+ [ 0.02917248 -0.04828055 0.03248977 0.00543839] -> 1.0
+ [ 0.02820687 0.14636075 0.03259854 -0.27681916] -> 1.0
+ [ 0.03113408 0.34100283 0.02706215 -0.55904489] -> 1.0
+ [ 0.03795414 0.53573468 0.01588125 -0.84308041] -> 1.0
+ ...
+ [ 0.17299878 0.15868546 -0.20754175 -0.55975453] -> 1.0
+ [ 0.17617249 0.35602306 -0.21873684 -0.90998894] -> 1.0
+ ```
+
+ يحتوي متجه الملاحظة الذي يتم إرجاعه في كل خطوة من خطوات المحاكاة على القيم التالية:
+ - موقع العربة
+ - سرعة العربة
+ - زاوية العصا
+ - معدل دوران العصا
+
+1. احصل على الحد الأدنى والحد الأقصى لتلك القيم: (كتلة الكود 5)
+
+ ```python
+ print(env.observation_space.low)
+ print(env.observation_space.high)
+ ```
+
+ قد تلاحظ أيضًا أن قيمة المكافأة في كل خطوة من خطوات المحاكاة دائمًا ما تكون 1. هذا لأن هدفنا هو البقاء لأطول فترة ممكنة، أي الحفاظ على العصا في وضع رأسي معقول لأطول فترة زمنية.
+
+ ✅ في الواقع، تُعتبر محاكاة CartPole محلولة إذا تمكنا من تحقيق متوسط مكافأة قدره 195 على مدى 100 تجربة متتالية.
+
+## تقطيع الحالة إلى قيم متقطعة
+
+في التعلم باستخدام Q-Learning، نحتاج إلى بناء جدول Q-Table يحدد ما يجب فعله في كل حالة. للقيام بذلك، يجب أن تكون الحالة **متقطعة**، وبشكل أكثر دقة، يجب أن تحتوي على عدد محدود من القيم المتقطعة. وبالتالي، نحتاج بطريقة ما إلى **تقطيع** الملاحظات، وتحويلها إلى مجموعة محدودة من الحالات.
+
+هناك عدة طرق يمكننا القيام بذلك:
+
+- **التقسيم إلى فئات**. إذا كنا نعرف النطاق لقيمة معينة، يمكننا تقسيم هذا النطاق إلى عدد من **الفئات**، ثم استبدال القيمة برقم الفئة التي تنتمي إليها. يمكن القيام بذلك باستخدام طريقة [`digitize`](https://numpy.org/doc/stable/reference/generated/numpy.digitize.html) من مكتبة numpy. في هذه الحالة، سنعرف بدقة حجم الحالة، لأنه سيعتمد على عدد الفئات التي نختارها للتقطيع.
+
+✅ يمكننا استخدام الاستيفاء الخطي لجلب القيم إلى نطاق محدود (على سبيل المثال، من -20 إلى 20)، ثم تحويل الأرقام إلى أعداد صحيحة عن طريق تقريبها. هذا يمنحنا تحكمًا أقل قليلاً في حجم الحالة، خاصة إذا لم نكن نعرف النطاقات الدقيقة لقيم الإدخال. على سبيل المثال، في حالتنا، 2 من أصل 4 قيم ليس لها حدود عليا/سفلى، مما قد يؤدي إلى عدد لا نهائي من الحالات.
+
+في مثالنا، سنختار الطريقة الثانية. كما قد تلاحظ لاحقًا، على الرغم من عدم وجود حدود عليا/سفلى، فإن تلك القيم نادرًا ما تأخذ قيمًا خارج نطاقات محدودة معينة، وبالتالي ستكون الحالات ذات القيم القصوى نادرة جدًا.
+
+1. هنا دالة تأخذ الملاحظة من نموذجنا وتنتج مجموعة من 4 قيم صحيحة: (كتلة الكود 6)
+
+ ```python
+ def discretize(x):
+ return tuple((x/np.array([0.25, 0.25, 0.01, 0.1])).astype(np.int))
+ ```
+
+1. دعنا نستكشف أيضًا طريقة أخرى للتقطيع باستخدام الفئات: (كتلة الكود 7)
+
+ ```python
+ def create_bins(i,num):
+ return np.arange(num+1)*(i[1]-i[0])/num+i[0]
+
+ print("Sample bins for interval (-5,5) with 10 bins\n",create_bins((-5,5),10))
+
+ ints = [(-5,5),(-2,2),(-0.5,0.5),(-2,2)] # intervals of values for each parameter
+ nbins = [20,20,10,10] # number of bins for each parameter
+ bins = [create_bins(ints[i],nbins[i]) for i in range(4)]
+
+ def discretize_bins(x):
+ return tuple(np.digitize(x[i],bins[i]) for i in range(4))
+ ```
+
+1. الآن دعنا نقوم بتشغيل محاكاة قصيرة ونلاحظ تلك القيم البيئية المتقطعة. لا تتردد في تجربة كل من `discretize` و `discretize_bins` وملاحظة الفرق.
+
+ ✅ تُرجع `discretize_bins` رقم الفئة، وهو يبدأ من 0. وبالتالي، بالنسبة لقيم المتغير المدخل حول 0، تُرجع الرقم من منتصف النطاق (10). في `discretize`، لم نهتم بنطاق قيم الإخراج، مما يسمح لها بأن تكون سالبة، وبالتالي فإن القيم 0 تتوافق مع 0. (كتلة الكود 8)
+
+ ```python
+ env.reset()
+
+ done = False
+ while not done:
+ #env.render()
+ obs, rew, done, info = env.step(env.action_space.sample())
+ #print(discretize_bins(obs))
+ print(discretize(obs))
+ env.close()
+ ```
+
+ ✅ قم بإلغاء تعليق السطر الذي يبدأ بـ `env.render` إذا كنت تريد رؤية كيفية تنفيذ البيئة. وإلا يمكنك تنفيذها في الخلفية، وهو أسرع. سنستخدم هذا التنفيذ "غير المرئي" أثناء عملية Q-Learning.
+
+## بنية جدول Q-Table
+
+في درسنا السابق، كانت الحالة عبارة عن زوج بسيط من الأرقام من 0 إلى 8، وبالتالي كان من الملائم تمثيل جدول Q-Table باستخدام مصفوفة numpy ذات شكل 8x8x2. إذا استخدمنا تقطيع الفئات، فإن حجم متجه الحالة معروف أيضًا، لذا يمكننا استخدام نفس النهج وتمثيل الحالة بمصفوفة ذات شكل 20x20x10x10x2 (حيث أن 2 هو بُعد مساحة الحركة، والأبعاد الأولى تتوافق مع عدد الفئات التي اخترنا استخدامها لكل من المعلمات في مساحة الملاحظة).
+
+ومع ذلك، في بعض الأحيان لا تكون أبعاد مساحة الملاحظة معروفة بدقة. في حالة دالة `discretize`، قد لا نكون متأكدين أبدًا من أن حالتنا تبقى ضمن حدود معينة، لأن بعض القيم الأصلية ليست محددة. وبالتالي، سنستخدم نهجًا مختلفًا قليلاً ونمثل جدول Q-Table باستخدام قاموس.
+
+1. استخدم الزوج *(state, action)* كمفتاح للقاموس، وستكون القيمة هي القيمة المقابلة في جدول Q-Table. (كتلة الكود 9)
+
+ ```python
+ Q = {}
+ actions = (0,1)
+
+ def qvalues(state):
+ return [Q.get((state,a),0) for a in actions]
+ ```
+
+ هنا نحدد أيضًا دالة `qvalues()`، التي تُرجع قائمة بقيم جدول Q-Table لحالة معينة تتوافق مع جميع الحركات الممكنة. إذا لم تكن الإدخالات موجودة في جدول Q-Table، سنُرجع القيمة الافتراضية 0.
+
+## لنبدأ التعلم باستخدام Q-Learning
+
+الآن نحن جاهزون لتعليم بيتر كيفية الحفاظ على التوازن!
+
+1. أولاً، لنقم بتحديد بعض المعاملات الفائقة: (كتلة الكود 10)
+
+ ```python
+ # hyperparameters
+ alpha = 0.3
+ gamma = 0.9
+ epsilon = 0.90
+ ```
+
+ هنا، `alpha` هو **معدل التعلم** الذي يحدد إلى أي مدى يجب علينا تعديل القيم الحالية لجدول Q-Table في كل خطوة. في الدرس السابق، بدأنا بـ 1، ثم قمنا بتقليل `alpha` إلى قيم أقل أثناء التدريب. في هذا المثال، سنبقيه ثابتًا فقط للتبسيط، ويمكنك تجربة تعديل قيم `alpha` لاحقًا.
+
+ `gamma` هو **عامل الخصم** الذي يوضح إلى أي مدى يجب أن نعطي الأولوية للمكافأة المستقبلية على المكافأة الحالية.
+
+ `epsilon` هو **عامل الاستكشاف/الاستغلال** الذي يحدد ما إذا كان يجب علينا تفضيل الاستكشاف على الاستغلال أو العكس. في خوارزميتنا، سنختار في `epsilon` بالمئة من الحالات الإجراء التالي وفقًا لقيم جدول Q-Table، وفي النسبة المتبقية من الحالات سننفذ إجراءً عشوائيًا. هذا سيسمح لنا باستكشاف مناطق من مساحة البحث التي لم نرها من قبل.
+
+ ✅ من حيث التوازن - اختيار إجراء عشوائي (الاستكشاف) سيعمل كضربة عشوائية في الاتجاه الخاطئ، وسيتعين على العصا تعلم كيفية استعادة التوازن من تلك "الأخطاء".
+
+### تحسين الخوارزمية
+
+يمكننا أيضًا إجراء تحسينين على خوارزميتنا من الدرس السابق:
+
+- **حساب متوسط المكافأة التراكمية**، على عدد من المحاكاة. سنطبع التقدم كل 5000 تكرار، وسنحسب متوسط المكافأة التراكمية خلال تلك الفترة الزمنية. هذا يعني أنه إذا حصلنا على أكثر من 195 نقطة - يمكننا اعتبار المشكلة محلولة، بجودة أعلى حتى من المطلوب.
+
+- **حساب أقصى نتيجة تراكمية متوسطة**، `Qmax`، وسنخزن جدول Q-Table المقابل لتلك النتيجة. عندما تقوم بتشغيل التدريب، ستلاحظ أحيانًا أن المتوسط التراكمي يبدأ في الانخفاض، ونريد الاحتفاظ بقيم جدول Q-Table التي تتوافق مع أفضل نموذج تم ملاحظته أثناء التدريب.
+
+1. اجمع جميع المكافآت التراكمية في كل محاكاة في متجه `rewards` للرسم لاحقًا. (كتلة الكود 11)
+
+ ```python
+ def probs(v,eps=1e-4):
+ v = v-v.min()+eps
+ v = v/v.sum()
+ return v
+
+ Qmax = 0
+ cum_rewards = []
+ rewards = []
+ for epoch in range(100000):
+ obs = env.reset()
+ done = False
+ cum_reward=0
+ # == do the simulation ==
+ while not done:
+ s = discretize(obs)
+ if random.random() Qmax:
+ Qmax = np.average(cum_rewards)
+ Qbest = Q
+ cum_rewards=[]
+ ```
+
+ما قد تلاحظه من تلك النتائج:
+
+- **قريب من هدفنا**. نحن قريبون جدًا من تحقيق الهدف المتمثل في الحصول على 195 مكافأة تراكمية على مدى 100+ تجربة متتالية، أو ربما قد حققنا ذلك بالفعل! حتى إذا حصلنا على أرقام أقل، لا يزال بإمكاننا عدم التأكد، لأننا نحسب المتوسط على مدى 5000 تجربة، بينما يتطلب المعيار الرسمي فقط 100 تجربة.
+
+- **المكافأة تبدأ في الانخفاض**. أحيانًا تبدأ المكافأة في الانخفاض، مما يعني أنه يمكننا "تدمير" القيم التي تم تعلمها بالفعل في جدول Q-Table بالقيم التي تجعل الوضع أسوأ.
+
+هذا الملاحظة تصبح أكثر وضوحًا إذا قمنا برسم تقدم التدريب.
+
+## رسم تقدم التدريب
+
+أثناء التدريب، قمنا بجمع قيمة المكافأة التراكمية في كل تكرار في متجه `rewards`. إليك كيف يبدو عند رسمه مقابل رقم التكرار:
+
+```python
+plt.plot(rewards)
+```
+
+
+
+من هذا الرسم البياني، لا يمكننا استنتاج أي شيء، بسبب طبيعة عملية التدريب العشوائية التي تختلف فيها مدة جلسات التدريب بشكل كبير. لجعل هذا الرسم أكثر وضوحًا، يمكننا حساب **المتوسط المتحرك** على سلسلة من التجارب، لنقل 100. يمكن القيام بذلك بسهولة باستخدام `np.convolve`: (كتلة الكود 12)
+
+```python
+def running_average(x,window):
+ return np.convolve(x,np.ones(window)/window,mode='valid')
+
+plt.plot(running_average(rewards,100))
+```
+
+
+
+## تغيير المعاملات الفائقة
+
+لجعل التعلم أكثر استقرارًا، من المنطقي تعديل بعض المعاملات الفائقة أثناء التدريب. على وجه الخصوص:
+
+- **بالنسبة لمعدل التعلم**، `alpha`، يمكننا البدء بقيم قريبة من 1، ثم نستمر في تقليل هذا المعامل. مع مرور الوقت، سنحصل على قيم احتمالية جيدة في جدول Q-Table، وبالتالي يجب علينا تعديلها بشكل طفيف، وليس استبدالها بالكامل بقيم جديدة.
+
+- **زيادة epsilon**. قد نرغب في زيادة `epsilon` ببطء، من أجل تقليل الاستكشاف وزيادة الاستغلال. ربما يكون من المنطقي البدء بقيمة منخفضة لـ `epsilon`، ثم زيادتها تدريجيًا لتقترب من 1.
+> **المهمة 1**: جرّب تعديل قيم المعاملات الفائقة (Hyperparameters) وانظر إذا كان بإمكانك تحقيق مكافأة تراكمية أعلى. هل تحصل على أكثر من 195؟
+> **المهمة 2**: لحل المشكلة بشكل رسمي، تحتاج إلى تحقيق متوسط مكافأة قدره 195 عبر 100 تشغيل متتالي. قم بقياس ذلك أثناء التدريب وتأكد من أنك قد حللت المشكلة بشكل رسمي!
+
+## رؤية النتيجة عمليًا
+
+سيكون من المثير للاهتمام رؤية كيف يتصرف النموذج المدرب بالفعل. دعنا نقوم بتشغيل المحاكاة ونتبع نفس استراتيجية اختيار الإجراءات كما في التدريب، حيث يتم أخذ العينات وفقًا لتوزيع الاحتمالات في Q-Table: (كتلة الكود 13)
+
+```python
+obs = env.reset()
+done = False
+while not done:
+ s = discretize(obs)
+ env.render()
+ v = probs(np.array(qvalues(s)))
+ a = random.choices(actions,weights=v)[0]
+ obs,_,done,_ = env.step(a)
+env.close()
+```
+
+يجب أن ترى شيئًا مثل هذا:
+
+
+
+---
+
+## 🚀التحدي
+
+> **المهمة 3**: هنا، كنا نستخدم النسخة النهائية من Q-Table، والتي قد لا تكون الأفضل. تذكر أننا قمنا بتخزين أفضل نسخة أداء من Q-Table في المتغير `Qbest`! جرب نفس المثال باستخدام أفضل نسخة أداء من Q-Table عن طريق نسخ `Qbest` إلى `Q` وشاهد إذا لاحظت الفرق.
+
+> **المهمة 4**: هنا لم نكن نختار أفضل إجراء في كل خطوة، بل كنا نأخذ العينات وفقًا لتوزيع الاحتمالات المقابل. هل سيكون من المنطقي دائمًا اختيار أفضل إجراء، الذي يحتوي على أعلى قيمة في Q-Table؟ يمكن القيام بذلك باستخدام وظيفة `np.argmax` لمعرفة رقم الإجراء الذي يتوافق مع أعلى قيمة في Q-Table. قم بتنفيذ هذه الاستراتيجية وشاهد إذا كانت تحسن التوازن.
+
+## [اختبار ما بعد المحاضرة](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/48/)
+
+## الواجب
+[تدريب سيارة جبلية](assignment.md)
+
+## الخاتمة
+
+لقد تعلمنا الآن كيفية تدريب الوكلاء لتحقيق نتائج جيدة فقط من خلال توفير دالة مكافأة تحدد الحالة المطلوبة للعبة، ومنحهم فرصة لاستكشاف مساحة البحث بذكاء. لقد طبقنا بنجاح خوارزمية Q-Learning في حالات البيئات المنفصلة والمستمرة، ولكن مع إجراءات منفصلة.
+
+من المهم أيضًا دراسة الحالات التي تكون فيها حالة الإجراء مستمرة، وعندما تكون مساحة الملاحظة أكثر تعقيدًا، مثل الصورة من شاشة لعبة أتاري. في تلك المشاكل، غالبًا ما نحتاج إلى استخدام تقنيات تعلم الآلة الأكثر قوة، مثل الشبكات العصبية، لتحقيق نتائج جيدة. هذه المواضيع الأكثر تقدمًا هي موضوع دورتنا القادمة الأكثر تقدمًا في الذكاء الاصطناعي.
+
+---
+
+**إخلاء المسؤولية**:
+تمت ترجمة هذا المستند باستخدام خدمة الترجمة الآلية [Co-op Translator](https://github.com/Azure/co-op-translator). بينما نسعى لتحقيق الدقة، يرجى العلم أن الترجمات الآلية قد تحتوي على أخطاء أو معلومات غير دقيقة. يجب اعتبار المستند الأصلي بلغته الأصلية هو المصدر الموثوق. للحصول على معلومات حساسة أو هامة، يُوصى بالاستعانة بترجمة بشرية احترافية. نحن غير مسؤولين عن أي سوء فهم أو تفسيرات خاطئة تنشأ عن استخدام هذه الترجمة.
\ No newline at end of file
diff --git a/translations/ar/8-Reinforcement/2-Gym/assignment.md b/translations/ar/8-Reinforcement/2-Gym/assignment.md
new file mode 100644
index 000000000..36b12a041
--- /dev/null
+++ b/translations/ar/8-Reinforcement/2-Gym/assignment.md
@@ -0,0 +1,57 @@
+
+# تدريب سيارة الجبل
+
+[OpenAI Gym](http://gym.openai.com) تم تصميمه بحيث توفر جميع البيئات نفس واجهة البرمجة - أي نفس الطرق `reset`, `step` و `render`، ونفس التجريدات لمساحة **الإجراءات** ومساحة **الملاحظات**. لذلك يجب أن يكون من الممكن تكييف نفس خوارزميات التعلم المعزز مع بيئات مختلفة مع تغييرات بسيطة في الكود.
+
+## بيئة سيارة الجبل
+
+[بيئة سيارة الجبل](https://gym.openai.com/envs/MountainCar-v0/) تحتوي على سيارة عالقة في وادٍ:
+
+الهدف هو الخروج من الوادي والوصول إلى العلم، عن طريق القيام بأحد الإجراءات التالية في كل خطوة:
+
+| القيمة | المعنى |
+|---|---|
+| 0 | التسارع إلى اليسار |
+| 1 | عدم التسارع |
+| 2 | التسارع إلى اليمين |
+
+الحيلة الرئيسية في هذه المشكلة هي أن محرك السيارة ليس قويًا بما يكفي لتسلق الجبل في محاولة واحدة. لذلك، الطريقة الوحيدة للنجاح هي القيادة ذهابًا وإيابًا لبناء الزخم.
+
+مساحة الملاحظات تتكون فقط من قيمتين:
+
+| الرقم | الملاحظة | الحد الأدنى | الحد الأقصى |
+|-----|--------------|-----|-----|
+| 0 | موقع السيارة | -1.2| 0.6 |
+| 1 | سرعة السيارة | -0.07 | 0.07 |
+
+نظام المكافآت لسيارة الجبل معقد نوعًا ما:
+
+ * يتم منح مكافأة قدرها 0 إذا وصل الوكيل إلى العلم (الموقع = 0.5) على قمة الجبل.
+ * يتم منح مكافأة قدرها -1 إذا كان موقع الوكيل أقل من 0.5.
+
+تنتهي الحلقة إذا كان موقع السيارة أكثر من 0.5، أو إذا تجاوز طول الحلقة 200.
+
+## التعليمات
+
+قم بتكييف خوارزمية التعلم المعزز الخاصة بنا لحل مشكلة سيارة الجبل. ابدأ بالكود الموجود في [notebook.ipynb](notebook.ipynb)، استبدل البيئة الجديدة، غيّر وظائف تقسيم الحالة، وحاول جعل الخوارزمية الحالية تتدرب مع تعديلات بسيطة في الكود. قم بتحسين النتيجة عن طريق ضبط معلمات الضبط.
+
+> **ملاحظة**: من المحتمل أن يكون ضبط معلمات الضبط ضروريًا لجعل الخوارزمية تتقارب.
+
+## التقييم
+
+| المعايير | مثالي | كافٍ | يحتاج إلى تحسين |
+| -------- | --------- | -------- | ----------------- |
+| | تم تكييف خوارزمية Q-Learning بنجاح من مثال CartPole، مع تعديلات بسيطة في الكود، وهي قادرة على حل مشكلة الوصول إلى العلم في أقل من 200 خطوة. | تم اعتماد خوارزمية Q-Learning جديدة من الإنترنت، ولكنها موثقة جيدًا؛ أو تم اعتماد الخوارزمية الحالية، ولكنها لم تصل إلى النتائج المطلوبة. | لم يتمكن الطالب من اعتماد أي خوارزمية بنجاح، ولكنه قام بخطوات كبيرة نحو الحل (تنفيذ تقسيم الحالة، هيكل بيانات Q-Table، إلخ). |
+
+---
+
+**إخلاء المسؤولية**:
+تمت ترجمة هذا المستند باستخدام خدمة الترجمة الآلية [Co-op Translator](https://github.com/Azure/co-op-translator). بينما نسعى لتحقيق الدقة، يرجى العلم أن الترجمات الآلية قد تحتوي على أخطاء أو عدم دقة. يجب اعتبار المستند الأصلي بلغته الأصلية هو المصدر الموثوق. للحصول على معلومات حساسة أو هامة، يُوصى بالاستعانة بترجمة بشرية احترافية. نحن غير مسؤولين عن أي سوء فهم أو تفسيرات خاطئة تنشأ عن استخدام هذه الترجمة.
\ No newline at end of file
diff --git a/translations/ar/8-Reinforcement/2-Gym/notebook.ipynb b/translations/ar/8-Reinforcement/2-Gym/notebook.ipynb
new file mode 100644
index 000000000..d09151f04
--- /dev/null
+++ b/translations/ar/8-Reinforcement/2-Gym/notebook.ipynb
@@ -0,0 +1,396 @@
+{
+ "metadata": {
+ "language_info": {
+ "codemirror_mode": {
+ "name": "ipython",
+ "version": 3
+ },
+ "file_extension": ".py",
+ "mimetype": "text/x-python",
+ "name": "python",
+ "nbconvert_exporter": "python",
+ "pygments_lexer": "ipython3",
+ "version": "3.7.4"
+ },
+ "orig_nbformat": 4,
+ "kernelspec": {
+ "name": "python3",
+ "display_name": "Python 3.7.4 64-bit ('base': conda)"
+ },
+ "interpreter": {
+ "hash": "86193a1ab0ba47eac1c69c1756090baa3b420b3eea7d4aafab8b85f8b312f0c5"
+ },
+ "coopTranslator": {
+ "original_hash": "f22f8f3daed4b6d34648d1254763105b",
+ "translation_date": "2025-08-29T15:41:25+00:00",
+ "source_file": "8-Reinforcement/2-Gym/notebook.ipynb",
+ "language_code": "ar"
+ }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 2,
+ "cells": [
+ {
+ "source": [
+ "## التزلج على العمود المتحرك\n",
+ "\n",
+ "> **المشكلة**: إذا أراد بيتر الهروب من الذئب، فعليه أن يتحرك أسرع منه. سنرى كيف يمكن لبيتر أن يتعلم التزلج، وبالأخص الحفاظ على التوازن، باستخدام التعلم المعزز (Q-Learning).\n",
+ "\n",
+ "أولاً، دعونا نقوم بتثبيت مكتبة gym واستيراد المكتبات المطلوبة:\n"
+ ],
+ "cell_type": "markdown",
+ "metadata": {}
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 1,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "#code block 1"
+ ]
+ },
+ {
+ "source": [
+ "## أنشئ بيئة عربة القطب\n"
+ ],
+ "cell_type": "markdown",
+ "metadata": {}
+ },
+ {
+ "source": [
+ "#code block 2"
+ ],
+ "cell_type": "code",
+ "metadata": {},
+ "execution_count": null,
+ "outputs": []
+ },
+ {
+ "source": [
+ "لرؤية كيفية عمل البيئة، دعنا نجري محاكاة قصيرة لمدة 100 خطوة.\n"
+ ],
+ "cell_type": "markdown",
+ "metadata": {}
+ },
+ {
+ "source": [
+ "#code block 3"
+ ],
+ "cell_type": "code",
+ "metadata": {},
+ "execution_count": null,
+ "outputs": []
+ },
+ {
+ "source": [
+ "أثناء المحاكاة، نحتاج إلى الحصول على الملاحظات لتحديد كيفية التصرف. في الواقع، تقوم وظيفة `step` بإرجاع الملاحظات الحالية، دالة المكافأة، وعلامة `done` التي تشير إلى ما إذا كان من المنطقي متابعة المحاكاة أم لا:\n"
+ ],
+ "cell_type": "markdown",
+ "metadata": {}
+ },
+ {
+ "source": [
+ "#code block 4"
+ ],
+ "cell_type": "code",
+ "metadata": {},
+ "execution_count": null,
+ "outputs": []
+ },
+ {
+ "source": [
+ "يمكننا الحصول على القيمة الصغرى والكبرى لتلك الأرقام:\n"
+ ],
+ "cell_type": "markdown",
+ "metadata": {}
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 5,
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "name": "stdout",
+ "text": [
+ "[-4.8000002e+00 -3.4028235e+38 -4.1887903e-01 -3.4028235e+38]\n[4.8000002e+00 3.4028235e+38 4.1887903e-01 3.4028235e+38]\n"
+ ]
+ }
+ ],
+ "source": [
+ "#code block 5"
+ ]
+ },
+ {
+ "source": [],
+ "cell_type": "markdown",
+ "metadata": {}
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 6,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "#code block 6"
+ ]
+ },
+ {
+ "source": [
+ "دعونا نستكشف أيضًا طريقة أخرى للتقسيم باستخدام الحاويات:\n"
+ ],
+ "cell_type": "markdown",
+ "metadata": {}
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 7,
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "name": "stdout",
+ "text": [
+ "Sample bins for interval (-5,5) with 10 bins\n [-5. -4. -3. -2. -1. 0. 1. 2. 3. 4. 5.]\n"
+ ]
+ }
+ ],
+ "source": [
+ "#code block 7"
+ ]
+ },
+ {
+ "source": [
+ "لنقم الآن بتشغيل محاكاة قصيرة ومراقبة تلك القيم البيئية المنفصلة.\n"
+ ],
+ "cell_type": "markdown",
+ "metadata": {}
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 8,
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "name": "stdout",
+ "text": [
+ "(0, 0, -2, -2)\n(0, 1, -2, -5)\n(0, 2, -3, -8)\n(0, 3, -5, -11)\n(0, 3, -7, -14)\n(0, 4, -10, -17)\n(0, 3, -14, -15)\n(0, 3, -17, -12)\n(0, 3, -20, -16)\n(0, 4, -23, -19)\n"
+ ]
+ }
+ ],
+ "source": [
+ "#code block 8"
+ ]
+ },
+ {
+ "source": [
+ "## هيكل الجدول Q\n"
+ ],
+ "cell_type": "markdown",
+ "metadata": {}
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 12,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "#code block 9"
+ ]
+ },
+ {
+ "source": [],
+ "cell_type": "markdown",
+ "metadata": {}
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 13,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "#code block 10"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 14,
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "name": "stdout",
+ "text": [
+ "0: 22.0, alpha=0.3, epsilon=0.9\n",
+ "5000: 70.1384, alpha=0.3, epsilon=0.9\n",
+ "10000: 121.8586, alpha=0.3, epsilon=0.9\n",
+ "15000: 149.6368, alpha=0.3, epsilon=0.9\n",
+ "20000: 168.2782, alpha=0.3, epsilon=0.9\n",
+ "25000: 196.7356, alpha=0.3, epsilon=0.9\n",
+ "30000: 220.7614, alpha=0.3, epsilon=0.9\n",
+ "35000: 233.2138, alpha=0.3, epsilon=0.9\n",
+ "40000: 248.22, alpha=0.3, epsilon=0.9\n",
+ "45000: 264.636, alpha=0.3, epsilon=0.9\n",
+ "50000: 276.926, alpha=0.3, epsilon=0.9\n",
+ "55000: 277.9438, alpha=0.3, epsilon=0.9\n",
+ "60000: 248.881, alpha=0.3, epsilon=0.9\n",
+ "65000: 272.529, alpha=0.3, epsilon=0.9\n",
+ "70000: 281.7972, alpha=0.3, epsilon=0.9\n",
+ "75000: 284.2844, alpha=0.3, epsilon=0.9\n",
+ "80000: 269.667, alpha=0.3, epsilon=0.9\n",
+ "85000: 273.8652, alpha=0.3, epsilon=0.9\n",
+ "90000: 278.2466, alpha=0.3, epsilon=0.9\n",
+ "95000: 269.1736, alpha=0.3, epsilon=0.9\n"
+ ]
+ }
+ ],
+ "source": [
+ "#code block 11"
+ ]
+ },
+ {
+ "source": [
+ "## رسم تقدم التدريب\n"
+ ],
+ "cell_type": "markdown",
+ "metadata": {}
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 20,
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "execute_result",
+ "data": {
+ "text/plain": [
+ "[]"
+ ]
+ },
+ "metadata": {},
+ "execution_count": 20
+ },
+ {
+ "output_type": "display_data",
+ "data": {
+ "text/plain": "
",
+ "image/svg+xml": "\r\n\r\n\r\n\r\n",
+ "image/png": "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\n"
+ },
+ "metadata": {
+ "needs_background": "light"
+ }
+ }
+ ],
+ "source": [
+ "plt.plot(rewards)"
+ ]
+ },
+ {
+ "source": [
+ "من هذا الرسم البياني، لا يمكن معرفة أي شيء، لأن طبيعة عملية التدريب العشوائية تؤدي إلى اختلاف كبير في مدة جلسات التدريب. لجعل هذا الرسم البياني أكثر وضوحًا، يمكننا حساب **المتوسط المتحرك** عبر سلسلة من التجارب، لنقل 100. يمكن القيام بذلك بسهولة باستخدام `np.convolve`:\n"
+ ],
+ "cell_type": "markdown",
+ "metadata": {}
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 22,
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "execute_result",
+ "data": {
+ "text/plain": [
+ "[]"
+ ]
+ },
+ "metadata": {},
+ "execution_count": 22
+ },
+ {
+ "output_type": "display_data",
+ "data": {
+ "text/plain": "
",
+ "image/svg+xml": "\r\n\r\n\r\n\r\n",
+ "image/png": "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\n"
+ },
+ "metadata": {
+ "needs_background": "light"
+ }
+ }
+ ],
+ "source": [
+ "#code block 12"
+ ]
+ },
+ {
+ "source": [
+ "## تغيير المعاملات الفائقة ومشاهدة النتيجة عمليًا\n",
+ "\n",
+ "سيكون من المثير للاهتمام الآن أن نرى كيف يتصرف النموذج المدرب فعليًا. دعونا نقوم بتشغيل المحاكاة، وسنتبع نفس استراتيجية اختيار الإجراءات كما فعلنا أثناء التدريب: أخذ عينات وفقًا لتوزيع الاحتمالات في Q-Table:\n"
+ ],
+ "cell_type": "markdown",
+ "metadata": {}
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 23,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "# code block 13"
+ ]
+ },
+ {
+ "source": [
+ "## حفظ النتيجة كصورة GIF متحركة\n",
+ "\n",
+ "إذا كنت ترغب في إبهار أصدقائك، قد ترغب في إرسال صورة GIF متحركة للعمود المتوازن لهم. للقيام بذلك، يمكننا استخدام `env.render` لإنتاج إطار صورة، ثم حفظ هذه الإطارات كصورة GIF متحركة باستخدام مكتبة PIL:\n"
+ ],
+ "cell_type": "markdown",
+ "metadata": {}
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 26,
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "name": "stdout",
+ "text": [
+ "360\n"
+ ]
+ }
+ ],
+ "source": [
+ "from PIL import Image\n",
+ "obs = env.reset()\n",
+ "done = False\n",
+ "i=0\n",
+ "ims = []\n",
+ "while not done:\n",
+ " s = discretize(obs)\n",
+ " img=env.render(mode='rgb_array')\n",
+ " ims.append(Image.fromarray(img))\n",
+ " v = probs(np.array([Qbest.get((s,a),0) for a in actions]))\n",
+ " a = random.choices(actions,weights=v)[0]\n",
+ " obs,_,done,_ = env.step(a)\n",
+ " i+=1\n",
+ "env.close()\n",
+ "ims[0].save('images/cartpole-balance.gif',save_all=True,append_images=ims[1::2],loop=0,duration=5)\n",
+ "print(i)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "\n---\n\n**إخلاء المسؤولية**: \nتمت ترجمة هذه الوثيقة باستخدام خدمة الترجمة الآلية [Co-op Translator](https://github.com/Azure/co-op-translator). على الرغم من أننا نسعى لتحقيق الدقة، يرجى العلم أن الترجمات الآلية قد تحتوي على أخطاء أو معلومات غير دقيقة. يجب اعتبار الوثيقة الأصلية بلغتها الأصلية المصدر الموثوق. للحصول على معلومات حساسة أو هامة، يُوصى بالاستعانة بترجمة بشرية احترافية. نحن غير مسؤولين عن أي سوء فهم أو تفسيرات خاطئة ناتجة عن استخدام هذه الترجمة.\n"
+ ]
+ }
+ ]
+}
\ No newline at end of file
diff --git a/translations/ar/8-Reinforcement/2-Gym/solution/Julia/README.md b/translations/ar/8-Reinforcement/2-Gym/solution/Julia/README.md
new file mode 100644
index 000000000..ec29dd4dc
--- /dev/null
+++ b/translations/ar/8-Reinforcement/2-Gym/solution/Julia/README.md
@@ -0,0 +1,15 @@
+
+هذا مكان مؤقت
+
+---
+
+**إخلاء المسؤولية**:
+تمت ترجمة هذا المستند باستخدام خدمة الترجمة الآلية [Co-op Translator](https://github.com/Azure/co-op-translator). بينما نسعى لتحقيق الدقة، يرجى العلم أن الترجمات الآلية قد تحتوي على أخطاء أو معلومات غير دقيقة. يجب اعتبار المستند الأصلي بلغته الأصلية هو المصدر الموثوق. للحصول على معلومات حساسة أو هامة، يُوصى بالاستعانة بترجمة بشرية احترافية. نحن غير مسؤولين عن أي سوء فهم أو تفسيرات خاطئة تنشأ عن استخدام هذه الترجمة.
\ No newline at end of file
diff --git a/translations/ar/8-Reinforcement/2-Gym/solution/R/README.md b/translations/ar/8-Reinforcement/2-Gym/solution/R/README.md
new file mode 100644
index 000000000..b9ab90ef0
--- /dev/null
+++ b/translations/ar/8-Reinforcement/2-Gym/solution/R/README.md
@@ -0,0 +1,15 @@
+
+هذا مجرد عنصر نائب مؤقت
+
+---
+
+**إخلاء المسؤولية**:
+تمت ترجمة هذا المستند باستخدام خدمة الترجمة الآلية [Co-op Translator](https://github.com/Azure/co-op-translator). بينما نسعى لتحقيق الدقة، يرجى العلم أن الترجمات الآلية قد تحتوي على أخطاء أو معلومات غير دقيقة. يجب اعتبار المستند الأصلي بلغته الأصلية هو المصدر الموثوق. للحصول على معلومات حساسة أو هامة، يُوصى بالاستعانة بترجمة بشرية احترافية. نحن غير مسؤولين عن أي سوء فهم أو تفسيرات خاطئة تنشأ عن استخدام هذه الترجمة.
\ No newline at end of file
diff --git a/translations/ar/8-Reinforcement/2-Gym/solution/notebook.ipynb b/translations/ar/8-Reinforcement/2-Gym/solution/notebook.ipynb
new file mode 100644
index 000000000..459393d50
--- /dev/null
+++ b/translations/ar/8-Reinforcement/2-Gym/solution/notebook.ipynb
@@ -0,0 +1,528 @@
+{
+ "metadata": {
+ "language_info": {
+ "codemirror_mode": {
+ "name": "ipython",
+ "version": 3
+ },
+ "file_extension": ".py",
+ "mimetype": "text/x-python",
+ "name": "python",
+ "nbconvert_exporter": "python",
+ "pygments_lexer": "ipython3",
+ "version": "3.7.0"
+ },
+ "orig_nbformat": 4,
+ "kernelspec": {
+ "name": "python3",
+ "display_name": "Python 3.7.0 64-bit ('3.7')"
+ },
+ "interpreter": {
+ "hash": "70b38d7a306a849643e446cd70466270a13445e5987dfa1344ef2b127438fa4d"
+ },
+ "coopTranslator": {
+ "original_hash": "5c0e485e58d63c506f1791c4dbf990ce",
+ "translation_date": "2025-08-29T15:42:45+00:00",
+ "source_file": "8-Reinforcement/2-Gym/solution/notebook.ipynb",
+ "language_code": "ar"
+ }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 2,
+ "cells": [
+ {
+ "source": [
+ "## التزلج على العربة\n",
+ "\n",
+ "> **المشكلة**: إذا أراد بيتر الهروب من الذئب، يجب أن يكون قادرًا على التحرك أسرع منه. سنرى كيف يمكن لبيتر أن يتعلم التزلج، وبالتحديد الحفاظ على التوازن، باستخدام التعلم المعزز Q-Learning.\n",
+ "\n",
+ "أولاً، دعونا نقوم بتثبيت مكتبة gym واستيراد المكتبات المطلوبة:\n"
+ ],
+ "cell_type": "markdown",
+ "metadata": {}
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 1,
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "name": "stdout",
+ "text": [
+ "Requirement already satisfied: gym in /Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages (0.18.3)\n",
+ "Requirement already satisfied: Pillow<=8.2.0 in /Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages (from gym) (7.0.0)\n",
+ "Requirement already satisfied: scipy in /Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages (from gym) (1.4.1)\n",
+ "Requirement already satisfied: numpy>=1.10.4 in /Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages (from gym) (1.19.2)\n",
+ "Requirement already satisfied: cloudpickle<1.7.0,>=1.2.0 in /Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages (from gym) (1.6.0)\n",
+ "Requirement already satisfied: pyglet<=1.5.15,>=1.4.0 in /Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages (from gym) (1.5.15)\n",
+ "\u001b[33mWARNING: You are using pip version 20.2.3; however, version 21.1.2 is available.\n",
+ "You should consider upgrading via the '/Library/Frameworks/Python.framework/Versions/3.7/bin/python3.7 -m pip install --upgrade pip' command.\u001b[0m\n"
+ ]
+ }
+ ],
+ "source": [
+ "import sys\n",
+ "!pip install gym \n",
+ "\n",
+ "import gym\n",
+ "import matplotlib.pyplot as plt\n",
+ "import numpy as np\n",
+ "import random"
+ ]
+ },
+ {
+ "source": [
+ "## إنشاء بيئة عربة القطب\n"
+ ],
+ "cell_type": "markdown",
+ "metadata": {}
+ },
+ {
+ "source": [
+ "env = gym.make(\"CartPole-v1\")\n",
+ "print(env.action_space)\n",
+ "print(env.observation_space)\n",
+ "print(env.action_space.sample())"
+ ],
+ "cell_type": "code",
+ "metadata": {},
+ "execution_count": 2,
+ "outputs": [
+ {
+ "output_type": "stream",
+ "name": "stdout",
+ "text": [
+ "Discrete(2)\nBox(-3.4028234663852886e+38, 3.4028234663852886e+38, (4,), float32)\n0\n"
+ ]
+ }
+ ]
+ },
+ {
+ "source": [
+ "لرؤية كيفية عمل البيئة، دعنا نجري محاكاة قصيرة لمدة 100 خطوة.\n"
+ ],
+ "cell_type": "markdown",
+ "metadata": {}
+ },
+ {
+ "source": [
+ "env.reset()\n",
+ "\n",
+ "for i in range(100):\n",
+ " env.render()\n",
+ " env.step(env.action_space.sample())\n",
+ "env.close()"
+ ],
+ "cell_type": "code",
+ "metadata": {},
+ "execution_count": 3,
+ "outputs": [
+ {
+ "output_type": "stream",
+ "name": "stderr",
+ "text": [
+ "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/gym/logger.py:30: UserWarning: \u001b[33mWARN: You are calling 'step()' even though this environment has already returned done = True. You should always call 'reset()' once you receive 'done = True' -- any further steps are undefined behavior.\u001b[0m\n warnings.warn(colorize('%s: %s'%('WARN', msg % args), 'yellow'))\n"
+ ]
+ }
+ ]
+ },
+ {
+ "source": [
+ "أثناء المحاكاة، نحتاج إلى الحصول على الملاحظات من أجل اتخاذ قرار حول كيفية التصرف. في الواقع، تعيد لنا وظيفة `step` الملاحظات الحالية، ودالة المكافأة، وعلامة `done` التي تشير إلى ما إذا كان من المنطقي متابعة المحاكاة أم لا:\n"
+ ],
+ "cell_type": "markdown",
+ "metadata": {}
+ },
+ {
+ "source": [
+ "env.reset()\n",
+ "\n",
+ "done = False\n",
+ "while not done:\n",
+ " env.render()\n",
+ " obs, rew, done, info = env.step(env.action_space.sample())\n",
+ " print(f\"{obs} -> {rew}\")\n",
+ "env.close()"
+ ],
+ "cell_type": "code",
+ "metadata": {},
+ "execution_count": 4,
+ "outputs": [
+ {
+ "output_type": "stream",
+ "name": "stdout",
+ "text": [
+ "[ 0.03044442 -0.19543914 -0.04496216 0.28125618] -> 1.0\n",
+ "[ 0.02653564 -0.38989186 -0.03933704 0.55942606] -> 1.0\n",
+ "[ 0.0187378 -0.19424049 -0.02814852 0.25461393] -> 1.0\n",
+ "[ 0.01485299 -0.38894946 -0.02305624 0.53828712] -> 1.0\n",
+ "[ 0.007074 -0.19351108 -0.0122905 0.23842953] -> 1.0\n",
+ "[ 0.00320378 0.00178427 -0.00752191 -0.05810469] -> 1.0\n",
+ "[ 0.00323946 0.19701326 -0.008684 -0.35315131] -> 1.0\n",
+ "[ 0.00717973 0.00201587 -0.01574703 -0.06321931] -> 1.0\n",
+ "[ 0.00722005 0.19736001 -0.01701141 -0.36082863] -> 1.0\n",
+ "[ 0.01116725 0.39271958 -0.02422798 -0.65882671] -> 1.0\n",
+ "[ 0.01902164 0.19794307 -0.03740452 -0.37387001] -> 1.0\n",
+ "[ 0.0229805 0.39357584 -0.04488192 -0.67810827] -> 1.0\n",
+ "[ 0.03085202 0.58929164 -0.05844408 -0.98457719] -> 1.0\n",
+ "[ 0.04263785 0.78514572 -0.07813563 -1.2950295 ] -> 1.0\n",
+ "[ 0.05834076 0.98116859 -0.10403622 -1.61111521] -> 1.0\n",
+ "[ 0.07796413 0.78741784 -0.13625852 -1.35259196] -> 1.0\n",
+ "[ 0.09371249 0.98396202 -0.16331036 -1.68461179] -> 1.0\n",
+ "[ 0.11339173 0.79106371 -0.1970026 -1.44691436] -> 1.0\n",
+ "[ 0.12921301 0.59883361 -0.22594088 -1.22169133] -> 1.0\n"
+ ]
+ }
+ ]
+ },
+ {
+ "source": [
+ "يمكننا الحصول على القيمتين الصغرى والكبرى لتلك الأرقام:\n"
+ ],
+ "cell_type": "markdown",
+ "metadata": {}
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 5,
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "name": "stdout",
+ "text": [
+ "[-4.8000002e+00 -3.4028235e+38 -4.1887903e-01 -3.4028235e+38]\n[4.8000002e+00 3.4028235e+38 4.1887903e-01 3.4028235e+38]\n"
+ ]
+ }
+ ],
+ "source": [
+ "print(env.observation_space.low)\n",
+ "print(env.observation_space.high)"
+ ]
+ },
+ {
+ "source": [],
+ "cell_type": "markdown",
+ "metadata": {}
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 6,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "def discretize(x):\n",
+ " return tuple((x/np.array([0.25, 0.25, 0.01, 0.1])).astype(np.int))"
+ ]
+ },
+ {
+ "source": [
+ "دعونا نستكشف أيضًا طريقة أخرى للتقسيم باستخدام الحاويات:\n"
+ ],
+ "cell_type": "markdown",
+ "metadata": {}
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 7,
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "name": "stdout",
+ "text": [
+ "Sample bins for interval (-5,5) with 10 bins\n [-5. -4. -3. -2. -1. 0. 1. 2. 3. 4. 5.]\n"
+ ]
+ }
+ ],
+ "source": [
+ "def create_bins(i,num):\n",
+ " return np.arange(num+1)*(i[1]-i[0])/num+i[0]\n",
+ "\n",
+ "print(\"Sample bins for interval (-5,5) with 10 bins\\n\",create_bins((-5,5),10))\n",
+ "\n",
+ "ints = [(-5,5),(-2,2),(-0.5,0.5),(-2,2)] # intervals of values for each parameter\n",
+ "nbins = [20,20,10,10] # number of bins for each parameter\n",
+ "bins = [create_bins(ints[i],nbins[i]) for i in range(4)]\n",
+ "\n",
+ "def discretize_bins(x):\n",
+ " return tuple(np.digitize(x[i],bins[i]) for i in range(4))"
+ ]
+ },
+ {
+ "source": [
+ "لنقم الآن بتشغيل محاكاة قصيرة ومراقبة تلك القيم البيئية المنفصلة.\n"
+ ],
+ "cell_type": "markdown",
+ "metadata": {}
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 8,
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "name": "stdout",
+ "text": [
+ "(0, 0, -1, -3)\n(0, 0, -2, 0)\n(0, 0, -2, -3)\n(0, 1, -3, -6)\n(0, 2, -4, -9)\n(0, 3, -6, -12)\n(0, 2, -8, -9)\n(0, 3, -10, -13)\n(0, 4, -13, -16)\n(0, 4, -16, -19)\n(0, 4, -20, -17)\n(0, 4, -24, -20)\n"
+ ]
+ }
+ ],
+ "source": [
+ "env.reset()\n",
+ "\n",
+ "done = False\n",
+ "while not done:\n",
+ " #env.render()\n",
+ " obs, rew, done, info = env.step(env.action_space.sample())\n",
+ " #print(discretize_bins(obs))\n",
+ " print(discretize(obs))\n",
+ "env.close()"
+ ]
+ },
+ {
+ "source": [
+ "## هيكل الجدول Q\n"
+ ],
+ "cell_type": "markdown",
+ "metadata": {}
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 9,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "Q = {}\n",
+ "actions = (0,1)\n",
+ "\n",
+ "def qvalues(state):\n",
+ " return [Q.get((state,a),0) for a in actions]"
+ ]
+ },
+ {
+ "source": [],
+ "cell_type": "markdown",
+ "metadata": {}
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 10,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "# hyperparameters\n",
+ "alpha = 0.3\n",
+ "gamma = 0.9\n",
+ "epsilon = 0.90"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 11,
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "name": "stdout",
+ "text": [
+ "0: 108.0, alpha=0.3, epsilon=0.9\n"
+ ]
+ }
+ ],
+ "source": [
+ "def probs(v,eps=1e-4):\n",
+ " v = v-v.min()+eps\n",
+ " v = v/v.sum()\n",
+ " return v\n",
+ "\n",
+ "Qmax = 0\n",
+ "cum_rewards = []\n",
+ "rewards = []\n",
+ "for epoch in range(100000):\n",
+ " obs = env.reset()\n",
+ " done = False\n",
+ " cum_reward=0\n",
+ " # == do the simulation ==\n",
+ " while not done:\n",
+ " s = discretize(obs)\n",
+ " if random.random() Qmax:\n",
+ " Qmax = np.average(cum_rewards)\n",
+ " Qbest = Q\n",
+ " cum_rewards=[]"
+ ]
+ },
+ {
+ "source": [
+ "## رسم تقدم التدريب\n"
+ ],
+ "cell_type": "markdown",
+ "metadata": {}
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 20,
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "execute_result",
+ "data": {
+ "text/plain": [
+ "[]"
+ ]
+ },
+ "metadata": {},
+ "execution_count": 20
+ },
+ {
+ "output_type": "display_data",
+ "data": {
+ "text/plain": "
",
+ "image/svg+xml": "\r\n\r\n\r\n\r\n",
+ "image/png": "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\n"
+ },
+ "metadata": {
+ "needs_background": "light"
+ }
+ }
+ ],
+ "source": [
+ "plt.plot(rewards)"
+ ]
+ },
+ {
+ "source": [
+ "من هذا الرسم البياني، لا يمكن استنتاج أي شيء، لأن طبيعة عملية التدريب العشوائية تؤدي إلى تباين كبير في مدة جلسات التدريب. لفهم هذا الرسم البياني بشكل أفضل، يمكننا حساب **المتوسط المتحرك** عبر سلسلة من التجارب، لنقل 100 تجربة. يمكن القيام بذلك بسهولة باستخدام `np.convolve`:\n"
+ ],
+ "cell_type": "markdown",
+ "metadata": {}
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 22,
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "execute_result",
+ "data": {
+ "text/plain": [
+ "[]"
+ ]
+ },
+ "metadata": {},
+ "execution_count": 22
+ },
+ {
+ "output_type": "display_data",
+ "data": {
+ "text/plain": "
",
+ "image/svg+xml": "\r\n\r\n\r\n\r\n",
+ "image/png": "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\n"
+ },
+ "metadata": {
+ "needs_background": "light"
+ }
+ }
+ ],
+ "source": [
+ "def running_average(x,window):\n",
+ " return np.convolve(x,np.ones(window)/window,mode='valid')\n",
+ "\n",
+ "plt.plot(running_average(rewards,100))"
+ ]
+ },
+ {
+ "source": [
+ "## تغيير المعاملات ومشاهدة النتائج عمليًا\n",
+ "\n",
+ "سيكون من المثير للاهتمام الآن رؤية كيفية تصرف النموذج المدرب فعليًا. دعونا نقوم بتشغيل المحاكاة، وسنتبع نفس استراتيجية اختيار الإجراءات كما فعلنا أثناء التدريب: أخذ عينات وفقًا لتوزيع الاحتمالات في Q-Table:\n"
+ ],
+ "cell_type": "markdown",
+ "metadata": {}
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 23,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "obs = env.reset()\n",
+ "done = False\n",
+ "while not done:\n",
+ " s = discretize(obs)\n",
+ " env.render()\n",
+ " v = probs(np.array(qvalues(s)))\n",
+ " a = random.choices(actions,weights=v)[0]\n",
+ " obs,_,done,_ = env.step(a)\n",
+ "env.close()"
+ ]
+ },
+ {
+ "source": [
+ "## حفظ النتيجة كصورة GIF متحركة\n",
+ "\n",
+ "إذا كنت ترغب في إبهار أصدقائك، قد ترغب في إرسال صورة GIF متحركة للعمود المتوازن لهم. للقيام بذلك، يمكننا استخدام `env.render` لإنتاج إطار صورة، ثم حفظ هذه الإطارات كصورة GIF متحركة باستخدام مكتبة PIL:\n"
+ ],
+ "cell_type": "markdown",
+ "metadata": {}
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 26,
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "name": "stdout",
+ "text": [
+ "360\n"
+ ]
+ }
+ ],
+ "source": [
+ "from PIL import Image\n",
+ "obs = env.reset()\n",
+ "done = False\n",
+ "i=0\n",
+ "ims = []\n",
+ "while not done:\n",
+ " s = discretize(obs)\n",
+ " img=env.render(mode='rgb_array')\n",
+ " ims.append(Image.fromarray(img))\n",
+ " v = probs(np.array([Qbest.get((s,a),0) for a in actions]))\n",
+ " a = random.choices(actions,weights=v)[0]\n",
+ " obs,_,done,_ = env.step(a)\n",
+ " i+=1\n",
+ "env.close()\n",
+ "ims[0].save('images/cartpole-balance.gif',save_all=True,append_images=ims[1::2],loop=0,duration=5)\n",
+ "print(i)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "\n---\n\n**إخلاء المسؤولية**: \nتم ترجمة هذا المستند باستخدام خدمة الترجمة بالذكاء الاصطناعي [Co-op Translator](https://github.com/Azure/co-op-translator). بينما نسعى لتحقيق الدقة، يرجى العلم أن الترجمات الآلية قد تحتوي على أخطاء أو معلومات غير دقيقة. يجب اعتبار المستند الأصلي بلغته الأصلية المصدر الرسمي. للحصول على معلومات حاسمة، يُوصى بالاستعانة بترجمة بشرية احترافية. نحن غير مسؤولين عن أي سوء فهم أو تفسيرات خاطئة تنشأ عن استخدام هذه الترجمة.\n"
+ ]
+ }
+ ]
+}
\ No newline at end of file
diff --git a/translations/ar/8-Reinforcement/README.md b/translations/ar/8-Reinforcement/README.md
new file mode 100644
index 000000000..d04670cbd
--- /dev/null
+++ b/translations/ar/8-Reinforcement/README.md
@@ -0,0 +1,67 @@
+
+# مقدمة في التعلم المعزز
+
+يُعتبر التعلم المعزز، أو RL، أحد الأسس الرئيسية في تعلم الآلة، إلى جانب التعلم الموجّه والتعلم غير الموجّه. التعلم المعزز يدور حول اتخاذ القرارات: اتخاذ القرارات الصحيحة أو على الأقل التعلم منها.
+
+تخيل أن لديك بيئة محاكاة مثل سوق الأسهم. ماذا يحدث إذا فرضت تنظيمًا معينًا؟ هل سيكون له تأثير إيجابي أم سلبي؟ إذا حدث شيء سلبي، عليك أن تأخذ هذا _التعزيز السلبي_، تتعلم منه، وتغير المسار. وإذا كان هناك نتيجة إيجابية، عليك أن تبني على هذا _التعزيز الإيجابي_.
+
+
+
+> بيتر وأصدقاؤه بحاجة للهروب من الذئب الجائع! الصورة بواسطة [جين لوبر](https://twitter.com/jenlooper)
+
+## موضوع إقليمي: بيتر والذئب (روسيا)
+
+[بيتر والذئب](https://en.wikipedia.org/wiki/Peter_and_the_Wolf) هي قصة خيالية موسيقية كتبها المؤلف الروسي [سيرجي بروكوفييف](https://en.wikipedia.org/wiki/Sergei_Prokofiev). تحكي القصة عن بيتر، الشاب الشجاع الذي يخرج من منزله إلى الغابة لمطاردة الذئب. في هذا القسم، سنقوم بتدريب خوارزميات تعلم الآلة لمساعدة بيتر:
+
+- **استكشاف** المنطقة المحيطة وبناء خريطة تنقل مثالية.
+- **تعلم** كيفية استخدام لوح التزلج والتوازن عليه، للتنقل بشكل أسرع.
+
+[](https://www.youtube.com/watch?v=Fmi5zHg4QSM)
+
+> 🎥 انقر على الصورة أعلاه للاستماع إلى بيتر والذئب بواسطة بروكوفييف
+
+## التعلم المعزز
+
+في الأقسام السابقة، رأيت مثالين لمشاكل تعلم الآلة:
+
+- **التعلم الموجّه**، حيث لدينا مجموعات بيانات تقترح حلولًا نموذجية للمشكلة التي نريد حلها. [التصنيف](../4-Classification/README.md) و[الانحدار](../2-Regression/README.md) هما مهمتان في التعلم الموجّه.
+- **التعلم غير الموجّه**، حيث لا توجد لدينا بيانات تدريبية مُعلمة. المثال الرئيسي للتعلم غير الموجّه هو [التجميع](../5-Clustering/README.md).
+
+في هذا القسم، سنقدم لك نوعًا جديدًا من مشاكل التعلم التي لا تتطلب بيانات تدريب مُعلمة. هناك عدة أنواع من هذه المشاكل:
+
+- **[التعلم شبه الموجّه](https://wikipedia.org/wiki/Semi-supervised_learning)**، حيث لدينا الكثير من البيانات غير المُعلمة التي يمكن استخدامها لتدريب النموذج مبدئيًا.
+- **[التعلم المعزز](https://wikipedia.org/wiki/Reinforcement_learning)**، حيث يتعلم الوكيل كيفية التصرف من خلال إجراء تجارب في بيئة محاكاة.
+
+### مثال - لعبة كمبيوتر
+
+افترض أنك تريد تعليم الكمبيوتر لعب لعبة، مثل الشطرنج أو [سوبر ماريو](https://wikipedia.org/wiki/Super_Mario). لكي يلعب الكمبيوتر اللعبة، نحتاج إلى أن يتنبأ بالحركة التي يجب أن يقوم بها في كل حالة من حالات اللعبة. بينما قد يبدو هذا كمشكلة تصنيف، إلا أنه ليس كذلك - لأننا لا نملك مجموعة بيانات تحتوي على الحالات والإجراءات المقابلة لها. على الرغم من أنه قد يكون لدينا بعض البيانات مثل مباريات الشطرنج الموجودة أو تسجيلات للاعبين يلعبون سوبر ماريو، فمن المحتمل أن هذه البيانات لن تغطي عددًا كافيًا من الحالات الممكنة.
+
+بدلاً من البحث عن بيانات اللعبة الموجودة، يعتمد **التعلم المعزز** (RL) على فكرة *جعل الكمبيوتر يلعب* مرات عديدة ومراقبة النتائج. لذلك، لتطبيق التعلم المعزز، نحتاج إلى شيئين:
+
+- **بيئة** و**محاكي** يسمحان لنا بلعب اللعبة مرات عديدة. هذا المحاكي سيحدد جميع قواعد اللعبة بالإضافة إلى الحالات والإجراءات الممكنة.
+
+- **دالة المكافأة**، التي تخبرنا بمدى نجاحنا خلال كل حركة أو لعبة.
+
+الفرق الرئيسي بين أنواع التعلم الأخرى وRL هو أنه في RL عادةً لا نعرف ما إذا كنا سنفوز أو نخسر حتى ننهي اللعبة. لذلك، لا يمكننا القول ما إذا كانت حركة معينة وحدها جيدة أم لا - نحن نتلقى المكافأة فقط في نهاية اللعبة. وهدفنا هو تصميم خوارزميات تسمح لنا بتدريب نموذج في ظل ظروف غير مؤكدة. سنتعلم عن خوارزمية RL تُسمى **Q-learning**.
+
+## الدروس
+
+1. [مقدمة في التعلم المعزز وQ-Learning](1-QLearning/README.md)
+2. [استخدام بيئة محاكاة الجيم](2-Gym/README.md)
+
+## الشكر
+
+تم كتابة "مقدمة في التعلم المعزز" بحب ♥️ بواسطة [ديمتري سوشنيكوف](http://soshnikov.com)
+
+---
+
+**إخلاء المسؤولية**:
+تمت ترجمة هذا المستند باستخدام خدمة الترجمة الآلية [Co-op Translator](https://github.com/Azure/co-op-translator). بينما نسعى لتحقيق الدقة، يرجى العلم أن الترجمات الآلية قد تحتوي على أخطاء أو معلومات غير دقيقة. يجب اعتبار المستند الأصلي بلغته الأصلية هو المصدر الموثوق. للحصول على معلومات حساسة أو هامة، يُوصى بالاستعانة بترجمة بشرية احترافية. نحن غير مسؤولين عن أي سوء فهم أو تفسيرات خاطئة تنشأ عن استخدام هذه الترجمة.
\ No newline at end of file
diff --git a/translations/ar/9-Real-World/1-Applications/README.md b/translations/ar/9-Real-World/1-Applications/README.md
new file mode 100644
index 000000000..92fe69da4
--- /dev/null
+++ b/translations/ar/9-Real-World/1-Applications/README.md
@@ -0,0 +1,159 @@
+
+# الملحق: التعلم الآلي في العالم الحقيقي
+
+
+> رسم تخطيطي من [Tomomi Imura](https://www.twitter.com/girlie_mac)
+
+في هذا المنهج، تعلمت العديد من الطرق لتحضير البيانات للتدريب وإنشاء نماذج تعلم آلي. قمت ببناء سلسلة من نماذج الانحدار الكلاسيكية، والتجميع، والتصنيف، ومعالجة اللغة الطبيعية، ونماذج السلاسل الزمنية. تهانينا! الآن، قد تتساءل عن الغرض من كل هذا... ما هي التطبيقات الواقعية لهذه النماذج؟
+
+على الرغم من أن الذكاء الاصطناعي، الذي يعتمد عادةً على التعلم العميق، قد جذب الكثير من الاهتمام في الصناعة، إلا أن هناك تطبيقات قيمة لنماذج التعلم الآلي الكلاسيكية. قد تكون تستخدم بعض هذه التطبيقات بالفعل اليوم! في هذا الدرس، ستستكشف كيف تستخدم ثمانية صناعات ومجالات مختلفة هذه النماذج لتحسين أدائها، وجعلها أكثر موثوقية وذكاءً وقيمة للمستخدمين.
+
+## [اختبار ما قبل المحاضرة](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/49/)
+
+## 💰 المالية
+
+يوفر قطاع المالية العديد من الفرص للتعلم الآلي. العديد من المشكلات في هذا المجال يمكن نمذجتها وحلها باستخدام التعلم الآلي.
+
+### كشف الاحتيال في بطاقات الائتمان
+
+تعلمنا عن [التجميع باستخدام خوارزمية k-means](../../5-Clustering/2-K-Means/README.md) في وقت سابق من الدورة، ولكن كيف يمكن استخدامه لحل مشكلات تتعلق بالاحتيال في بطاقات الائتمان؟
+
+تعتبر خوارزمية k-means مفيدة في تقنية كشف الاحتيال في بطاقات الائتمان المعروفة باسم **كشف القيم الشاذة**. القيم الشاذة، أو الانحرافات في الملاحظات حول مجموعة من البيانات، يمكن أن تخبرنا ما إذا كانت بطاقة الائتمان تُستخدم بشكل طبيعي أو إذا كان هناك شيء غير عادي يحدث. كما هو موضح في الورقة البحثية المرتبطة أدناه، يمكنك تصنيف بيانات بطاقات الائتمان باستخدام خوارزمية k-means وتعيين كل معاملة إلى مجموعة بناءً على مدى شذوذها. بعد ذلك، يمكنك تقييم المجموعات الأكثر خطورة لتحديد ما إذا كانت المعاملات احتيالية أم شرعية.
+[مرجع](https://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.680.1195&rep=rep1&type=pdf)
+
+### إدارة الثروات
+
+في إدارة الثروات، يتولى فرد أو شركة إدارة الاستثمارات نيابة عن عملائهم. وظيفتهم هي الحفاظ على الثروة وتنميتها على المدى الطويل، لذا من الضروري اختيار الاستثمارات التي تحقق أداءً جيدًا.
+
+إحدى الطرق لتقييم أداء استثمار معين هي من خلال الانحدار الإحصائي. [الانحدار الخطي](../../2-Regression/1-Tools/README.md) هو أداة قيمة لفهم كيفية أداء صندوق معين مقارنة بمعيار معين. يمكننا أيضًا استنتاج ما إذا كانت نتائج الانحدار ذات دلالة إحصائية، أو مدى تأثيرها على استثمارات العميل. يمكنك حتى توسيع تحليلك باستخدام الانحدار المتعدد، حيث يمكن أخذ عوامل الخطر الإضافية في الاعتبار. للحصول على مثال حول كيفية عمل ذلك لصندوق معين، تحقق من الورقة أدناه حول تقييم أداء الصناديق باستخدام الانحدار.
+[مرجع](http://www.brightwoodventures.com/evaluating-fund-performance-using-regression/)
+
+## 🎓 التعليم
+
+قطاع التعليم هو أيضًا مجال مثير للاهتمام يمكن تطبيق التعلم الآلي فيه. هناك مشكلات مثيرة يمكن معالجتها مثل كشف الغش في الاختبارات أو المقالات أو إدارة التحيز، سواء كان مقصودًا أم لا، في عملية التصحيح.
+
+### التنبؤ بسلوك الطلاب
+
+[Coursera](https://coursera.com)، مزود دورات تعليمية عبر الإنترنت، لديه مدونة تقنية رائعة حيث يناقشون العديد من القرارات الهندسية. في هذه الدراسة، قاموا برسم خط انحدار لاستكشاف أي علاقة بين تقييم NPS (Net Promoter Score) المنخفض والاحتفاظ بالدورة أو الانسحاب منها.
+[مرجع](https://medium.com/coursera-engineering/controlled-regression-quantifying-the-impact-of-course-quality-on-learner-retention-31f956bd592a)
+
+### تقليل التحيز
+
+[Grammarly](https://grammarly.com)، مساعد الكتابة الذي يتحقق من الأخطاء الإملائية والنحوية، يستخدم أنظمة [معالجة اللغة الطبيعية](../../6-NLP/README.md) المتقدمة في جميع منتجاته. نشروا دراسة حالة مثيرة للاهتمام في مدونتهم التقنية حول كيفية تعاملهم مع التحيز الجنساني في التعلم الآلي، وهو ما تعلمته في [درس الإنصاف التمهيدي](../../1-Introduction/3-fairness/README.md).
+[مرجع](https://www.grammarly.com/blog/engineering/mitigating-gender-bias-in-autocorrect/)
+
+## 👜 التجزئة
+
+يمكن لقطاع التجزئة بالتأكيد الاستفادة من استخدام التعلم الآلي، بدءًا من تحسين تجربة العميل إلى إدارة المخزون بطريقة مثلى.
+
+### تخصيص رحلة العميل
+
+في Wayfair، وهي شركة تبيع السلع المنزلية مثل الأثاث، مساعدة العملاء في العثور على المنتجات المناسبة لذوقهم واحتياجاتهم أمر بالغ الأهمية. في هذا المقال، يصف المهندسون من الشركة كيف يستخدمون التعلم الآلي ومعالجة اللغة الطبيعية "لإظهار النتائج المناسبة للعملاء". على وجه الخصوص، تم بناء محرك نية الاستعلام الخاص بهم لاستخدام استخراج الكيانات، تدريب المصنفات، استخراج الأصول والآراء، ووضع علامات على المشاعر في مراجعات العملاء. هذا مثال كلاسيكي على كيفية عمل معالجة اللغة الطبيعية في تجارة التجزئة عبر الإنترنت.
+[مرجع](https://www.aboutwayfair.com/tech-innovation/how-we-use-machine-learning-and-natural-language-processing-to-empower-search)
+
+### إدارة المخزون
+
+تعتمد الشركات المبتكرة مثل [StitchFix](https://stitchfix.com)، وهي خدمة صناديق شحن الملابس للمستهلكين، بشكل كبير على التعلم الآلي للتوصيات وإدارة المخزون. تعمل فرق التصميم الخاصة بهم مع فرق البضائع، في الواقع: "أحد علماء البيانات لدينا قام بتجربة خوارزمية جينية وطبقها على الملابس للتنبؤ بما سيكون قطعة ملابس ناجحة لا توجد اليوم. قدمنا ذلك لفريق البضائع والآن يمكنهم استخدامه كأداة."
+[مرجع](https://www.zdnet.com/article/how-stitch-fix-uses-machine-learning-to-master-the-science-of-styling/)
+
+## 🏥 الرعاية الصحية
+
+يمكن لقطاع الرعاية الصحية الاستفادة من التعلم الآلي لتحسين مهام البحث وأيضًا المشكلات اللوجستية مثل إعادة إدخال المرضى أو وقف انتشار الأمراض.
+
+### إدارة التجارب السريرية
+
+تعتبر السمية في التجارب السريرية مصدر قلق كبير لمصنعي الأدوية. ما هي كمية السمية المقبولة؟ في هذه الدراسة، أدى تحليل طرق التجارب السريرية المختلفة إلى تطوير نهج جديد للتنبؤ باحتمالات نتائج التجارب السريرية. على وجه التحديد، تمكنوا من استخدام الغابة العشوائية لإنتاج [مصنف](../../4-Classification/README.md) قادر على التمييز بين مجموعات الأدوية.
+[مرجع](https://www.sciencedirect.com/science/article/pii/S2451945616302914)
+
+### إدارة إعادة إدخال المرضى
+
+الرعاية في المستشفيات مكلفة، خاصة عندما يتعين إعادة إدخال المرضى. تناقش هذه الورقة شركة تستخدم التعلم الآلي للتنبؤ بإمكانية إعادة الإدخال باستخدام [التجميع](../../5-Clustering/README.md) الخوارزمي. تساعد هذه المجموعات المحللين على "اكتشاف مجموعات من حالات إعادة الإدخال التي قد تشترك في سبب مشترك".
+[مرجع](https://healthmanagement.org/c/healthmanagement/issuearticle/hospital-readmissions-and-machine-learning)
+
+### إدارة الأمراض
+
+ألقت الجائحة الأخيرة الضوء على الطرق التي يمكن أن يساعد بها التعلم الآلي في وقف انتشار الأمراض. في هذا المقال، ستتعرف على استخدام ARIMA، المنحنيات اللوجستية، الانحدار الخطي، وSARIMA. "هذا العمل هو محاولة لحساب معدل انتشار هذا الفيروس وبالتالي التنبؤ بالوفيات، حالات الشفاء، والحالات المؤكدة، مما قد يساعدنا على الاستعداد بشكل أفضل والبقاء على قيد الحياة."
+[مرجع](https://www.ncbi.nlm.nih.gov/pmc/articles/PMC7979218/)
+
+## 🌲 البيئة والتكنولوجيا الخضراء
+
+تتكون الطبيعة والبيئة من العديد من الأنظمة الحساسة حيث يتداخل تفاعل الحيوانات والطبيعة. من المهم أن تكون قادرًا على قياس هذه الأنظمة بدقة واتخاذ الإجراءات المناسبة إذا حدث شيء ما، مثل حرائق الغابات أو انخفاض عدد الحيوانات.
+
+### إدارة الغابات
+
+تعلمت عن [التعلم المعزز](../../8-Reinforcement/README.md) في الدروس السابقة. يمكن أن يكون مفيدًا جدًا عند محاولة التنبؤ بالأنماط في الطبيعة. على وجه الخصوص، يمكن استخدامه لتتبع المشكلات البيئية مثل حرائق الغابات وانتشار الأنواع الغازية. في كندا، استخدم مجموعة من الباحثين التعلم المعزز لبناء نماذج ديناميكيات حرائق الغابات من صور الأقمار الصناعية. باستخدام "عملية الانتشار المكاني (SSP)" المبتكرة، تصوروا حريق الغابة كـ "عامل في أي خلية في المشهد". "مجموعة الإجراءات التي يمكن أن يتخذها الحريق من موقع معين في أي وقت تشمل الانتشار شمالًا، جنوبًا، شرقًا، غربًا، أو عدم الانتشار.
+
+هذا النهج يعكس الإعداد المعتاد للتعلم المعزز حيث تكون ديناميكيات عملية اتخاذ القرار الماركوفية (MDP) وظيفة معروفة للانتشار الفوري للحريق." اقرأ المزيد عن الخوارزميات الكلاسيكية المستخدمة من قبل هذه المجموعة في الرابط أدناه.
+[مرجع](https://www.frontiersin.org/articles/10.3389/fict.2018.00006/full)
+
+### استشعار حركة الحيوانات
+
+بينما أحدث التعلم العميق ثورة في تتبع حركات الحيوانات بصريًا (يمكنك بناء [متعقب الدب القطبي الخاص بك](https://docs.microsoft.com/learn/modules/build-ml-model-with-azure-stream-analytics/?WT.mc_id=academic-77952-leestott) هنا)، لا يزال للتعلم الآلي الكلاسيكي مكان في هذه المهمة.
+
+تستخدم المستشعرات لتتبع حركات الحيوانات في المزارع وإنترنت الأشياء هذا النوع من المعالجة البصرية، ولكن تقنيات التعلم الآلي الأساسية أكثر فائدة في معالجة البيانات الأولية. على سبيل المثال، في هذه الورقة، تم مراقبة وتحليل وضعيات الأغنام باستخدام خوارزميات تصنيف مختلفة. قد تتعرف على منحنى ROC في الصفحة 335.
+[مرجع](https://druckhaus-hofmann.de/gallery/31-wj-feb-2020.pdf)
+
+### ⚡️ إدارة الطاقة
+
+في دروسنا حول [التنبؤ بالسلاسل الزمنية](../../7-TimeSeries/README.md)، تناولنا مفهوم عدادات وقوف السيارات الذكية لتوليد الإيرادات لمدينة بناءً على فهم العرض والطلب. يناقش هذا المقال بالتفصيل كيف تم دمج التجميع، الانحدار، والتنبؤ بالسلاسل الزمنية للمساعدة في التنبؤ باستخدام الطاقة المستقبلية في أيرلندا، استنادًا إلى العدادات الذكية.
+[مرجع](https://www-cdn.knime.com/sites/default/files/inline-images/knime_bigdata_energy_timeseries_whitepaper.pdf)
+
+## 💼 التأمين
+
+قطاع التأمين هو قطاع آخر يستخدم التعلم الآلي لبناء وتحسين النماذج المالية والاكتوارية القابلة للتطبيق.
+
+### إدارة التقلبات
+
+MetLife، مزود التأمين على الحياة، شفاف بشأن الطريقة التي يحلل بها ويخفف التقلبات في نماذجه المالية. في هذا المقال، ستلاحظ تصورات التصنيف الثنائي والترتيبي. ستكتشف أيضًا تصورات التنبؤ.
+[مرجع](https://investments.metlife.com/content/dam/metlifecom/us/investments/insights/research-topics/macro-strategy/pdf/MetLifeInvestmentManagement_MachineLearnedRanking_070920.pdf)
+
+## 🎨 الفنون، الثقافة، والأدب
+
+في الفنون، على سبيل المثال في الصحافة، هناك العديد من المشكلات المثيرة للاهتمام. كشف الأخبار المزيفة هو مشكلة كبيرة حيث ثبت أنها تؤثر على آراء الناس وحتى تقوض الديمقراطيات. يمكن للمتاحف أيضًا الاستفادة من استخدام التعلم الآلي في كل شيء بدءًا من العثور على الروابط بين القطع الأثرية إلى تخطيط الموارد.
+
+### كشف الأخبار المزيفة
+
+أصبح كشف الأخبار المزيفة لعبة القط والفأر في وسائل الإعلام اليوم. في هذا المقال، يقترح الباحثون أن نظامًا يجمع بين العديد من تقنيات التعلم الآلي التي درسناها يمكن اختباره ونشر النموذج الأفضل: "يعتمد هذا النظام على معالجة اللغة الطبيعية لاستخراج الميزات من البيانات، ثم يتم استخدام هذه الميزات لتدريب مصنفي التعلم الآلي مثل Naive Bayes، Support Vector Machine (SVM)، Random Forest (RF)، Stochastic Gradient Descent (SGD)، والانحدار اللوجستي (LR)."
+[مرجع](https://www.irjet.net/archives/V7/i6/IRJET-V7I6688.pdf)
+
+يظهر هذا المقال كيف يمكن أن يؤدي الجمع بين مجالات التعلم الآلي المختلفة إلى إنتاج نتائج مثيرة للاهتمام يمكن أن تساعد في وقف انتشار الأخبار المزيفة وإحداث أضرار حقيقية؛ في هذه الحالة، كان الدافع هو انتشار الشائعات حول علاجات COVID التي أثارت العنف الجماعي.
+
+### التعلم الآلي في المتاحف
+
+تقف المتاحف على أعتاب ثورة في الذكاء الاصطناعي حيث أصبح تصنيف المجموعات الرقمية والعثور على الروابط بين القطع الأثرية أسهل مع تقدم التكنولوجيا. مشاريع مثل [In Codice Ratio](https://www.sciencedirect.com/science/article/abs/pii/S0306457321001035#:~:text=1.,studies%20over%20large%20historical%20sources.) تساعد في فك أسرار المجموعات غير القابلة للوصول مثل أرشيف الفاتيكان. ولكن، الجانب التجاري للمتاحف يستفيد أيضًا من نماذج التعلم الآلي.
+
+على سبيل المثال، قام معهد الفن في شيكاغو ببناء نماذج للتنبؤ بما يهتم به الجمهور ومتى سيحضر المعارض. الهدف هو إنشاء تجارب زوار فردية ومحسنة في كل مرة يزور فيها المستخدم المتحف. "خلال السنة المالية 2017، تنبأ النموذج بالحضور والإيرادات بدقة تصل إلى 1 بالمائة، كما يقول Andrew Simnick، نائب الرئيس الأول في معهد الفن."
+[مرجع](https://www.chicagobusiness.com/article/20180518/ISSUE01/180519840/art-institute-of-chicago-uses-data-to-make-exhibit-choices)
+
+## 🏷 التسويق
+
+### تقسيم العملاء
+
+تستهدف استراتيجيات التسويق الأكثر فعالية العملاء بطرق مختلفة بناءً على مجموعات متنوعة. يناقش هذا المقال استخدام خوارزميات التجميع لدعم التسويق المتمايز. يساعد التسويق المتمايز الشركات على تحسين التعرف على العلامة التجارية، الوصول إلى المزيد من العملاء، وزيادة الأرباح.
+[مرجع](https://ai.inqline.com/machine-learning-for-marketing-customer-segmentation/)
+
+## 🚀 التحدي
+حدد قطاعًا آخر يستفيد من بعض التقنيات التي تعلمتها في هذا المنهج، واكتشف كيف يستخدم التعلم الآلي.
+
+## [اختبار ما بعد المحاضرة](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/50/)
+
+## المراجعة والدراسة الذاتية
+
+فريق علوم البيانات في Wayfair لديه عدة فيديوهات مثيرة للاهتمام حول كيفية استخدامهم للتعلم الآلي في شركتهم. من المفيد [إلقاء نظرة](https://www.youtube.com/channel/UCe2PjkQXqOuwkW1gw6Ameuw/videos)!
+
+## المهمة
+
+[بحث عن التعلم الآلي](assignment.md)
+
+---
+
+**إخلاء المسؤولية**:
+تمت ترجمة هذا المستند باستخدام خدمة الترجمة الآلية [Co-op Translator](https://github.com/Azure/co-op-translator). بينما نسعى لتحقيق الدقة، يرجى العلم أن الترجمات الآلية قد تحتوي على أخطاء أو معلومات غير دقيقة. يجب اعتبار المستند الأصلي بلغته الأصلية هو المصدر الموثوق. للحصول على معلومات حساسة أو هامة، يُوصى بالاستعانة بترجمة بشرية احترافية. نحن غير مسؤولين عن أي سوء فهم أو تفسيرات خاطئة تنشأ عن استخدام هذه الترجمة.
\ No newline at end of file
diff --git a/translations/ar/9-Real-World/1-Applications/assignment.md b/translations/ar/9-Real-World/1-Applications/assignment.md
new file mode 100644
index 000000000..ae43d969a
--- /dev/null
+++ b/translations/ar/9-Real-World/1-Applications/assignment.md
@@ -0,0 +1,27 @@
+
+# البحث عن الكنز باستخدام تعلم الآلة
+
+## التعليمات
+
+في هذا الدرس، تعلمت عن العديد من الحالات الواقعية التي تم حلها باستخدام تعلم الآلة الكلاسيكي. على الرغم من أن استخدام التعلم العميق، والتقنيات والأدوات الجديدة في الذكاء الاصطناعي، والاستفادة من الشبكات العصبية قد ساعد في تسريع إنتاج الأدوات التي تخدم هذه القطاعات، إلا أن تعلم الآلة الكلاسيكي باستخدام التقنيات التي تناولناها في هذا المنهج لا يزال ذا قيمة كبيرة.
+
+في هذا التمرين، تخيل أنك تشارك في هاكاثون. استخدم ما تعلمته في المنهج لتقديم حل باستخدام تعلم الآلة الكلاسيكي لحل مشكلة في أحد القطاعات التي تمت مناقشتها في هذا الدرس. قم بإنشاء عرض تقديمي تناقش فيه كيفية تنفيذ فكرتك. ستحصل على نقاط إضافية إذا تمكنت من جمع بيانات نموذجية وبناء نموذج تعلم آلي لدعم فكرتك!
+
+## معايير التقييم
+
+| المعايير | ممتاز | مقبول | يحتاج إلى تحسين |
+| -------- | --------------------------------------------------------------- | --------------------------------------------- | -------------------- |
+| | يتم تقديم عرض PowerPoint - مع نقاط إضافية لبناء نموذج | يتم تقديم عرض بسيط وغير مبتكر | العمل غير مكتمل |
+
+---
+
+**إخلاء المسؤولية**:
+تم ترجمة هذا المستند باستخدام خدمة الترجمة بالذكاء الاصطناعي [Co-op Translator](https://github.com/Azure/co-op-translator). بينما نسعى لتحقيق الدقة، يرجى العلم أن الترجمات الآلية قد تحتوي على أخطاء أو معلومات غير دقيقة. يجب اعتبار المستند الأصلي بلغته الأصلية المصدر الرسمي. للحصول على معلومات حاسمة، يُوصى بالاستعانة بترجمة بشرية احترافية. نحن غير مسؤولين عن أي سوء فهم أو تفسيرات خاطئة ناتجة عن استخدام هذه الترجمة.
\ No newline at end of file
diff --git a/translations/ar/9-Real-World/2-Debugging-ML-Models/README.md b/translations/ar/9-Real-World/2-Debugging-ML-Models/README.md
new file mode 100644
index 000000000..10d03fc09
--- /dev/null
+++ b/translations/ar/9-Real-World/2-Debugging-ML-Models/README.md
@@ -0,0 +1,183 @@
+
+# الملحق: تصحيح النماذج في تعلم الآلة باستخدام مكونات لوحة تحكم الذكاء الاصطناعي المسؤول
+
+## [اختبار ما قبل المحاضرة](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/5/)
+
+## المقدمة
+
+يؤثر تعلم الآلة على حياتنا اليومية بشكل كبير. فالذكاء الاصطناعي يشق طريقه إلى بعض الأنظمة الأكثر أهمية التي تؤثر علينا كأفراد وعلى مجتمعنا ككل، مثل الرعاية الصحية، والتمويل، والتعليم، والتوظيف. على سبيل المثال، تُستخدم الأنظمة والنماذج في اتخاذ قرارات يومية مثل تشخيص الأمراض أو اكتشاف الاحتيال. ونتيجة لذلك، فإن التقدم في الذكاء الاصطناعي إلى جانب التبني المتسارع له يقابله تطور في توقعات المجتمع وزيادة في التشريعات المنظمة. نرى باستمرار مجالات يفشل فيها الذكاء الاصطناعي في تلبية التوقعات، مما يكشف عن تحديات جديدة، وتبدأ الحكومات في تنظيم حلول الذكاء الاصطناعي. لذلك، من المهم تحليل هذه النماذج لضمان تقديم نتائج عادلة وموثوقة وشاملة وشفافة ومسؤولة للجميع.
+
+في هذا المنهج، سنستعرض أدوات عملية يمكن استخدامها لتقييم ما إذا كان النموذج يواجه مشكلات تتعلق بالذكاء الاصطناعي المسؤول. تعتمد تقنيات تصحيح تعلم الآلة التقليدية عادةً على حسابات كمية مثل دقة الإجماليات أو متوسط فقدان الخطأ. تخيل ما يمكن أن يحدث عندما تفتقر البيانات التي تستخدمها لبناء هذه النماذج إلى تمثيل معين لفئات ديموغرافية مثل العرق أو الجنس أو الرؤية السياسية أو الدين، أو عندما تكون هذه الفئات ممثلة بشكل غير متناسب. ماذا عن الحالات التي يتم فيها تفسير مخرجات النموذج لتفضيل فئة ديموغرافية معينة؟ يمكن أن يؤدي ذلك إلى تمثيل زائد أو ناقص لهذه الفئات الحساسة، مما يؤدي إلى مشكلات تتعلق بالعدالة أو الشمولية أو الموثوقية. عامل آخر هو أن نماذج تعلم الآلة تُعتبر صناديق سوداء، مما يجعل من الصعب فهم وتفسير ما يدفع توقعات النموذج. كل هذه التحديات تواجه علماء البيانات ومطوري الذكاء الاصطناعي عندما لا تتوفر لديهم الأدوات المناسبة لتصحيح النماذج أو تقييم عدالتها أو موثوقيتها.
+
+في هذا الدرس، ستتعلم كيفية تصحيح النماذج باستخدام:
+
+- **تحليل الأخطاء**: تحديد الأماكن في توزيع البيانات التي تكون فيها معدلات الخطأ عالية.
+- **نظرة عامة على النموذج**: إجراء تحليل مقارن عبر مجموعات بيانات مختلفة لاكتشاف التفاوتات في مقاييس أداء النموذج.
+- **تحليل البيانات**: التحقيق في الأماكن التي قد يكون فيها تمثيل زائد أو ناقص للبيانات، مما قد يؤدي إلى انحياز النموذج لفئة ديموغرافية معينة.
+- **أهمية الميزات**: فهم الميزات التي تؤثر على توقعات النموذج على المستوى العام أو المحلي.
+
+## المتطلبات الأساسية
+
+كشرط أساسي، يُرجى مراجعة [أدوات الذكاء الاصطناعي المسؤول للمطورين](https://www.microsoft.com/ai/ai-lab-responsible-ai-dashboard)
+
+> 
+
+## تحليل الأخطاء
+
+تعتمد مقاييس أداء النماذج التقليدية المستخدمة لقياس الدقة غالبًا على حسابات تعتمد على التوقعات الصحيحة مقابل التوقعات الخاطئة. على سبيل المثال، يمكن اعتبار أن النموذج دقيق بنسبة 89% مع فقدان خطأ قدره 0.001 أداءً جيدًا. ومع ذلك، فإن الأخطاء غالبًا ما تكون غير موزعة بالتساوي في مجموعة البيانات الأساسية. قد تحصل على درجة دقة نموذج تبلغ 89% ولكن تكتشف أن هناك مناطق معينة في بياناتك يفشل فيها النموذج بنسبة 42%. يمكن أن تؤدي هذه الأنماط من الفشل مع مجموعات بيانات معينة إلى مشكلات تتعلق بالعدالة أو الموثوقية. من الضروري فهم المناطق التي يعمل فيها النموذج بشكل جيد أو لا يعمل. قد تكون المناطق التي تحتوي على عدد كبير من الأخطاء في النموذج تمثل فئة ديموغرافية مهمة.
+
+
+
+يوضح مكون تحليل الأخطاء في لوحة تحكم الذكاء الاصطناعي المسؤول كيفية توزيع فشل النموذج عبر مجموعات مختلفة باستخدام تصور شجري. هذا مفيد في تحديد الميزات أو المناطق التي تحتوي على معدلات خطأ عالية في مجموعة البيانات الخاصة بك. من خلال رؤية مصدر معظم الأخطاء في النموذج، يمكنك البدء في التحقيق في السبب الجذري. يمكنك أيضًا إنشاء مجموعات بيانات لإجراء التحليل عليها. تساعد هذه المجموعات في عملية التصحيح لتحديد سبب أداء النموذج بشكل جيد في مجموعة معينة ولكنه يخطئ في مجموعة أخرى.
+
+
+
+تساعد المؤشرات المرئية على الخريطة الشجرية في تحديد مناطق المشكلة بسرعة. على سبيل المثال، كلما كان لون العقدة الشجرية أغمق باللون الأحمر، زادت نسبة الخطأ.
+
+الخريطة الحرارية هي وظيفة تصور أخرى يمكن للمستخدمين استخدامها للتحقيق في معدل الخطأ باستخدام ميزة واحدة أو ميزتين لتحديد المساهمين في أخطاء النموذج عبر مجموعة البيانات بأكملها أو المجموعات.
+
+
+
+استخدم تحليل الأخطاء عندما تحتاج إلى:
+
+* فهم عميق لكيفية توزيع أخطاء النموذج عبر مجموعة البيانات وعبر عدة أبعاد إدخال وميزات.
+* تقسيم مقاييس الأداء الإجمالية لاكتشاف المجموعات الخاطئة تلقائيًا لإبلاغ خطوات التخفيف المستهدفة.
+
+## نظرة عامة على النموذج
+
+يتطلب تقييم أداء نموذج تعلم الآلة فهمًا شاملاً لسلوكه. يمكن تحقيق ذلك من خلال مراجعة أكثر من مقياس واحد مثل معدل الخطأ، الدقة، الاستدعاء، الدقة، أو متوسط الخطأ المطلق (MAE) لاكتشاف التفاوتات بين مقاييس الأداء. قد يبدو أحد مقاييس الأداء رائعًا، ولكن يمكن كشف الأخطاء في مقياس آخر. بالإضافة إلى ذلك، فإن مقارنة المقاييس للكشف عن التفاوتات عبر مجموعة البيانات بأكملها أو المجموعات يساعد في تسليط الضوء على الأماكن التي يعمل فيها النموذج بشكل جيد أو لا يعمل. هذا مهم بشكل خاص لرؤية أداء النموذج بين الميزات الحساسة مقابل غير الحساسة (مثل العرق، الجنس، أو العمر) للكشف عن أي انحياز محتمل قد يكون لدى النموذج. على سبيل المثال، اكتشاف أن النموذج أكثر خطأً في مجموعة تحتوي على ميزات حساسة يمكن أن يكشف عن انحياز محتمل.
+
+يساعد مكون نظرة عامة على النموذج في لوحة تحكم الذكاء الاصطناعي المسؤول ليس فقط في تحليل مقاييس الأداء لتمثيل البيانات في مجموعة معينة، بل يمنح المستخدمين القدرة على مقارنة سلوك النموذج عبر مجموعات مختلفة.
+
+
+
+تتيح وظيفة التحليل المستندة إلى الميزات للمكون للمستخدمين تضييق نطاق مجموعات البيانات الفرعية ضمن ميزة معينة لتحديد الشذوذ على مستوى دقيق. على سبيل المثال، تحتوي لوحة التحكم على ذكاء مدمج لتوليد مجموعات تلقائيًا لميزة يختارها المستخدم (مثل *"time_in_hospital < 3"* أو *"time_in_hospital >= 7"*). يتيح ذلك للمستخدم عزل ميزة معينة من مجموعة بيانات أكبر لمعرفة ما إذا كانت مؤثرًا رئيسيًا في نتائج النموذج الخاطئة.
+
+
+
+يدعم مكون نظرة عامة على النموذج فئتين من مقاييس التفاوت:
+
+**التفاوت في أداء النموذج**: تحسب هذه المجموعة من المقاييس التفاوت (الاختلاف) في قيم مقياس الأداء المحدد عبر مجموعات البيانات الفرعية. إليك بعض الأمثلة:
+
+* التفاوت في معدل الدقة
+* التفاوت في معدل الخطأ
+* التفاوت في الدقة
+* التفاوت في الاستدعاء
+* التفاوت في متوسط الخطأ المطلق (MAE)
+
+**التفاوت في معدل الاختيار**: يحتوي هذا المقياس على الفرق في معدل الاختيار (التوقع الإيجابي) بين المجموعات الفرعية. مثال على ذلك هو التفاوت في معدلات الموافقة على القروض. معدل الاختيار يعني نسبة نقاط البيانات في كل فئة المصنفة على أنها 1 (في التصنيف الثنائي) أو توزيع قيم التوقعات (في الانحدار).
+
+## تحليل البيانات
+
+> "إذا عذبت البيانات بما فيه الكفاية، ستعترف بأي شيء" - رونالد كواس
+
+قد يبدو هذا البيان متطرفًا، لكنه صحيح أن البيانات يمكن التلاعب بها لدعم أي استنتاج. يمكن أن يحدث هذا التلاعب أحيانًا عن غير قصد. كبشر، لدينا جميعًا تحيزات، وغالبًا ما يكون من الصعب معرفة متى يتم إدخال التحيز في البيانات. ضمان العدالة في الذكاء الاصطناعي وتعلم الآلة يظل تحديًا معقدًا.
+
+البيانات هي نقطة عمياء كبيرة لمقاييس أداء النماذج التقليدية. قد تحصل على درجات دقة عالية، لكن هذا لا يعكس دائمًا التحيز الأساسي الذي قد يكون موجودًا في مجموعة البيانات الخاصة بك. على سبيل المثال، إذا كانت مجموعة بيانات الموظفين تحتوي على 27% من النساء في المناصب التنفيذية في شركة و73% من الرجال في نفس المستوى، فإن نموذج الذكاء الاصطناعي للإعلانات الوظيفية المدرب على هذه البيانات قد يستهدف في الغالب جمهورًا ذكوريًا للمناصب العليا. هذا الخلل في البيانات أثر على توقعات النموذج لتفضيل جنس معين. يكشف هذا عن مشكلة عدالة حيث يوجد تحيز جنسي في نموذج الذكاء الاصطناعي.
+
+يساعد مكون تحليل البيانات في لوحة تحكم الذكاء الاصطناعي المسؤول في تحديد المناطق التي يوجد فيها تمثيل زائد أو ناقص في مجموعة البيانات. يساعد المستخدمين في تشخيص السبب الجذري للأخطاء ومشكلات العدالة الناتجة عن اختلالات البيانات أو نقص تمثيل مجموعة بيانات معينة. يوفر هذا للمستخدمين القدرة على تصور مجموعات البيانات بناءً على النتائج المتوقعة والفعلية، مجموعات الأخطاء، والميزات المحددة. أحيانًا يمكن أن يكشف اكتشاف مجموعة بيانات غير ممثلة بشكل كافٍ أن النموذج لا يتعلم بشكل جيد، وبالتالي ارتفاع الأخطاء. وجود نموذج يحتوي على تحيز في البيانات ليس فقط مشكلة عدالة ولكنه يظهر أن النموذج غير شامل أو غير موثوق.
+
+
+
+استخدم تحليل البيانات عندما تحتاج إلى:
+
+* استكشاف إحصائيات مجموعة البيانات الخاصة بك عن طريق اختيار مرشحات مختلفة لتقسيم بياناتك إلى أبعاد مختلفة (تُعرف أيضًا بالمجموعات).
+* فهم توزيع مجموعة البيانات الخاصة بك عبر مجموعات مختلفة ومجموعات الميزات.
+* تحديد ما إذا كانت النتائج المتعلقة بالعدالة، تحليل الأخطاء، والسببية (المستمدة من مكونات لوحة التحكم الأخرى) ناتجة عن توزيع مجموعة البيانات الخاصة بك.
+* تحديد المناطق التي يجب جمع المزيد من البيانات فيها لتخفيف الأخطاء الناتجة عن مشكلات التمثيل، ضوضاء العلامات، ضوضاء الميزات، تحيز العلامات، وعوامل مشابهة.
+
+## تفسير النموذج
+
+تميل نماذج تعلم الآلة إلى أن تكون صناديق سوداء. فهم الميزات الرئيسية التي تدفع توقعات النموذج يمكن أن يكون تحديًا. من المهم توفير الشفافية حول سبب اتخاذ النموذج لتوقع معين. على سبيل المثال، إذا توقع نظام ذكاء اصطناعي أن مريضًا مصابًا بالسكري معرض لخطر العودة إلى المستشفى في أقل من 30 يومًا، فيجب أن يكون قادرًا على تقديم بيانات داعمة أدت إلى هذا التوقع. وجود مؤشرات بيانات داعمة يجلب الشفافية لمساعدة الأطباء أو المستشفيات على اتخاذ قرارات مستنيرة. بالإضافة إلى ذلك، القدرة على تفسير سبب اتخاذ النموذج لتوقع معين لمريض فردي يعزز المساءلة مع اللوائح الصحية. عندما تستخدم نماذج تعلم الآلة بطرق تؤثر على حياة الناس، من الضروري فهم وتفسير ما يؤثر على سلوك النموذج. تساعد قابلية تفسير النموذج في الإجابة على أسئلة في سيناريوهات مثل:
+
+* تصحيح النموذج: لماذا ارتكب النموذج هذا الخطأ؟ كيف يمكنني تحسين النموذج؟
+* التعاون بين الإنسان والذكاء الاصطناعي: كيف يمكنني فهم وثقة قرارات النموذج؟
+* الامتثال التنظيمي: هل يلبي النموذج المتطلبات القانونية؟
+
+يساعد مكون أهمية الميزات في لوحة تحكم الذكاء الاصطناعي المسؤول في تصحيح الأخطاء والحصول على فهم شامل لكيفية اتخاذ النموذج للتوقعات. كما أنه أداة مفيدة لمتخصصي تعلم الآلة وصناع القرار لتفسير وإظهار الأدلة على الميزات التي تؤثر على سلوك النموذج للامتثال التنظيمي. بعد ذلك، يمكن للمستخدمين استكشاف التفسيرات العامة والمحلية للتحقق من الميزات التي تؤثر على توقعات النموذج. تسرد التفسيرات العامة الميزات الرئيسية التي أثرت على توقعات النموذج بشكل عام. تعرض التفسيرات المحلية الميزات التي أدت إلى توقع النموذج لحالة فردية. القدرة على تقييم التفسيرات المحلية مفيدة أيضًا في تصحيح الأخطاء أو تدقيق حالة معينة لفهم وتفسير سبب اتخاذ النموذج لتوقع دقيق أو غير دقيق.
+
+
+
+* التفسيرات العامة: على سبيل المثال، ما الميزات التي تؤثر على السلوك العام لنموذج إعادة إدخال مرضى السكري إلى المستشفى؟
+* التفسيرات المحلية: على سبيل المثال، لماذا تم توقع أن مريضًا مصابًا بالسكري يزيد عمره عن 60 عامًا وله تاريخ من الدخول إلى المستشفى سيتم إعادة إدخاله أو لن يتم إعادة إدخاله إلى المستشفى خلال 30 يومًا؟
+
+في عملية تصحيح أداء النموذج عبر مجموعات مختلفة، تُظهر أهمية الميزات مستوى تأثير الميزة عبر المجموعات. يساعد ذلك في الكشف عن الشذوذ عند مقارنة مستوى تأثير الميزة في دفع توقعات النموذج الخاطئة. يمكن لمكون أهمية الميزات أن يُظهر القيم في ميزة معينة التي أثرت إيجابًا أو سلبًا على نتيجة النموذج. على سبيل المثال، إذا قام النموذج بتوقع غير دقيق، يتيح لك المكون القدرة على التعمق وتحديد الميزات أو قيم الميزات التي دفعت التوقع. يساعد هذا المستوى من التفاصيل ليس فقط في التصحيح ولكن يوفر الشفافية والمساءلة في حالات التدقيق. أخيرًا، يمكن للمكون أن يساعدك في تحديد مشكلات العدالة. على سبيل المثال، إذا كانت ميزة حساسة مثل العرق أو الجنس لها تأثير كبير في دفع توقعات النموذج، فقد يكون هذا مؤشرًا على وجود تحيز عرقي أو جنسي في النموذج.
+
+
+
+استخدم التفسيرية عندما تحتاج إلى:
+
+* تحديد مدى موثوقية توقعات نظام الذكاء الاصطناعي الخاص بك من خلال فهم الميزات الأكثر أهمية للتوقعات.
+* الاقتراب من تصحيح النموذج من خلال فهمه أولاً وتحديد ما إذا كان النموذج يستخدم ميزات صحية أو مجرد ارتباطات خاطئة.
+* الكشف عن مصادر محتملة للانحياز من خلال فهم ما إذا كان النموذج يعتمد في توقعاته على ميزات حساسة أو ميزات مرتبطة بها بشكل كبير.
+* بناء ثقة المستخدم في قرارات النموذج من خلال توليد تفسيرات محلية لتوضيح نتائجها.
+* إكمال تدقيق تنظيمي لنظام ذكاء اصطناعي للتحقق من النماذج ومراقبة تأثير قرارات النموذج على البشر.
+
+## الخاتمة
+
+تُعد جميع مكونات لوحة تحكم الذكاء الاصطناعي المسؤول أدوات عملية لمساعدتك في بناء نماذج تعلم الآلة التي تكون أقل ضررًا وأكثر موثوقية للمجتمع. تعمل على تحسين الوقاية من التهديدات لحقوق الإنسان؛ التمييز أو استبعاد مجموعات معينة من فرص الحياة؛ وخطر الإصابة الجسدية أو النفسية. كما تساعد في بناء الثقة في قرارات النموذج من خلال توليد تفسيرات محلية لتوضيح نتائجها. يمكن تصنيف بعض الأضرار المحتملة على النحو التالي:
+
+- **التخصيص**: إذا تم تفضيل جنس أو عرق معين على آخر.
+- **جودة الخدمة**: إذا تم تدريب البيانات على سيناريو معين ولكن الواقع أكثر تعقيدًا، مما يؤدي إلى خدمة ضعيفة الأداء.
+- **التنميط**: ربط مجموعة معينة بسمات محددة مسبقًا.
+- **التقليل من القيمة**: الانتقاد غير العادل ووضع تصنيفات سلبية على شيء أو شخص معين.
+- **التمثيل الزائد أو الناقص**. الفكرة هي أن مجموعة معينة لا تُرى في مهنة معينة، وأي خدمة أو وظيفة تستمر في تعزيز ذلك تساهم في الضرر.
+
+### لوحة معلومات Azure RAI
+
+[لوحة معلومات Azure RAI](https://learn.microsoft.com/en-us/azure/machine-learning/concept-responsible-ai-dashboard?WT.mc_id=aiml-90525-ruyakubu) مبنية على أدوات مفتوحة المصدر طورتها مؤسسات أكاديمية ومنظمات رائدة، بما في ذلك Microsoft، وهي أدوات أساسية لعلماء البيانات ومطوري الذكاء الاصطناعي لفهم سلوك النماذج بشكل أفضل، واكتشاف المشكلات غير المرغوب فيها والتخفيف منها في نماذج الذكاء الاصطناعي.
+
+- تعلم كيفية استخدام المكونات المختلفة من خلال الاطلاع على [وثائق لوحة معلومات RAI.](https://learn.microsoft.com/en-us/azure/machine-learning/how-to-responsible-ai-dashboard?WT.mc_id=aiml-90525-ruyakubu)
+
+- استعرض بعض [دفاتر الملاحظات النموذجية للوحة معلومات RAI](https://github.com/Azure/RAI-vNext-Preview/tree/main/examples/notebooks) لتصحيح سيناريوهات الذكاء الاصطناعي الأكثر مسؤولية في Azure Machine Learning.
+
+---
+## 🚀 التحدي
+
+لمنع إدخال التحيزات الإحصائية أو المتعلقة بالبيانات من البداية، يجب علينا:
+
+- ضمان تنوع الخلفيات ووجهات النظر بين الأشخاص الذين يعملون على الأنظمة
+- الاستثمار في مجموعات بيانات تعكس تنوع مجتمعنا
+- تطوير طرق أفضل لاكتشاف التحيز وتصحيحه عند حدوثه
+
+فكر في سيناريوهات واقعية حيث يكون الظلم واضحًا في بناء النماذج واستخدامها. ما الذي يجب أن نأخذه بعين الاعتبار أيضًا؟
+
+## [اختبار ما بعد المحاضرة](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/6/)
+## المراجعة والدراسة الذاتية
+
+في هذا الدرس، تعلمت بعض الأدوات العملية لتضمين الذكاء الاصطناعي المسؤول في تعلم الآلة.
+
+شاهد هذا الورشة للتعمق أكثر في المواضيع:
+
+- لوحة معلومات الذكاء الاصطناعي المسؤول: منصة شاملة لتطبيق RAI عمليًا بواسطة بسميرة نوشي ومهرنوش ساميكي
+
+[](https://www.youtube.com/watch?v=f1oaDNl3djg "لوحة معلومات الذكاء الاصطناعي المسؤول: منصة شاملة لتطبيق RAI عمليًا بواسطة بسميرة نوشي ومهرنوش ساميكي")
+
+> 🎥 انقر على الصورة أعلاه لمشاهدة الفيديو: لوحة معلومات الذكاء الاصطناعي المسؤول: منصة شاملة لتطبيق RAI عمليًا بواسطة بسميرة نوشي ومهرنوش ساميكي
+
+ارجع إلى المواد التالية لتتعلم المزيد عن الذكاء الاصطناعي المسؤول وكيفية بناء نماذج أكثر موثوقية:
+
+- أدوات لوحة معلومات Microsoft RAI لتصحيح نماذج تعلم الآلة: [موارد أدوات الذكاء الاصطناعي المسؤول](https://aka.ms/rai-dashboard)
+
+- استكشف مجموعة أدوات الذكاء الاصطناعي المسؤول: [Github](https://github.com/microsoft/responsible-ai-toolbox)
+
+- مركز موارد Microsoft RAI: [موارد الذكاء الاصطناعي المسؤول – Microsoft AI](https://www.microsoft.com/ai/responsible-ai-resources?activetab=pivot1%3aprimaryr4)
+
+- مجموعة أبحاث FATE من Microsoft: [FATE: العدالة، المساءلة، الشفافية، والأخلاقيات في الذكاء الاصطناعي - أبحاث Microsoft](https://www.microsoft.com/research/theme/fate/)
+
+## الواجب
+
+[استكشاف لوحة معلومات RAI](assignment.md)
+
+---
+
+**إخلاء المسؤولية**:
+تمت ترجمة هذا المستند باستخدام خدمة الترجمة الآلية [Co-op Translator](https://github.com/Azure/co-op-translator). بينما نسعى لتحقيق الدقة، يرجى العلم أن الترجمات الآلية قد تحتوي على أخطاء أو معلومات غير دقيقة. يجب اعتبار المستند الأصلي بلغته الأصلية هو المصدر الموثوق. للحصول على معلومات حساسة أو هامة، يُوصى بالاستعانة بترجمة بشرية احترافية. نحن غير مسؤولين عن أي سوء فهم أو تفسيرات خاطئة تنشأ عن استخدام هذه الترجمة.
\ No newline at end of file
diff --git a/translations/ar/9-Real-World/2-Debugging-ML-Models/assignment.md b/translations/ar/9-Real-World/2-Debugging-ML-Models/assignment.md
new file mode 100644
index 000000000..703576be2
--- /dev/null
+++ b/translations/ar/9-Real-World/2-Debugging-ML-Models/assignment.md
@@ -0,0 +1,25 @@
+
+# استكشاف لوحة تحكم الذكاء الاصطناعي المسؤول (RAI)
+
+## التعليمات
+
+في هذا الدرس، تعلمت عن لوحة تحكم RAI، وهي مجموعة من المكونات المبنية على أدوات "مفتوحة المصدر" لمساعدة علماء البيانات في تحليل الأخطاء، واستكشاف البيانات، وتقييم الإنصاف، وفهم نماذج الذكاء الاصطناعي، وتقييم السيناريوهات الافتراضية/ماذا لو، وتحليل الأسباب في أنظمة الذكاء الاصطناعي. في هذه المهمة، قم باستكشاف بعض [دفاتر الملاحظات](https://github.com/Azure/RAI-vNext-Preview/tree/main/examples/notebooks) الخاصة بلوحة تحكم RAI وقدم نتائجك في ورقة أو عرض تقديمي.
+
+## معايير التقييم
+
+| المعايير | ممتاز | مقبول | يحتاج إلى تحسين |
+| -------- | ------ | ------ | --------------- |
+| | يتم تقديم ورقة أو عرض تقديمي يناقش مكونات لوحة تحكم RAI، والدفتر الذي تم تشغيله، والاستنتاجات المستخلصة من تشغيله | يتم تقديم ورقة بدون استنتاجات | لم يتم تقديم أي ورقة |
+
+---
+
+**إخلاء المسؤولية**:
+تمت ترجمة هذا المستند باستخدام خدمة الترجمة الآلية [Co-op Translator](https://github.com/Azure/co-op-translator). بينما نسعى لتحقيق الدقة، يرجى العلم أن الترجمات الآلية قد تحتوي على أخطاء أو عدم دقة. يجب اعتبار المستند الأصلي بلغته الأصلية هو المصدر الموثوق. للحصول على معلومات حساسة أو هامة، يُوصى بالاستعانة بترجمة بشرية احترافية. نحن غير مسؤولين عن أي سوء فهم أو تفسيرات خاطئة تنشأ عن استخدام هذه الترجمة.
\ No newline at end of file
diff --git a/translations/ar/9-Real-World/README.md b/translations/ar/9-Real-World/README.md
new file mode 100644
index 000000000..cab2a1b18
--- /dev/null
+++ b/translations/ar/9-Real-World/README.md
@@ -0,0 +1,32 @@
+
+# ملحق: تطبيقات العالم الحقيقي لتعلم الآلة الكلاسيكي
+
+في هذا القسم من المنهج الدراسي، ستتعرف على بعض تطبيقات العالم الحقيقي لتعلم الآلة الكلاسيكي. لقد قمنا بالبحث عبر الإنترنت للعثور على أوراق بحثية ومقالات حول تطبيقات استخدمت هذه الاستراتيجيات، مع تجنب الشبكات العصبية، التعلم العميق والذكاء الاصطناعي قدر الإمكان. تعرف على كيفية استخدام تعلم الآلة في أنظمة الأعمال، التطبيقات البيئية، التمويل، الفنون والثقافة، والمزيد.
+
+
+
+> صورة بواسطة Alexis Fauvet على Unsplash
+
+## الدرس
+
+1. [تطبيقات العالم الحقيقي لتعلم الآلة](1-Applications/README.md)
+2. [تصحيح النماذج في تعلم الآلة باستخدام مكونات لوحة التحكم للذكاء الاصطناعي المسؤول](2-Debugging-ML-Models/README.md)
+
+## الشكر والتقدير
+
+تم كتابة "تطبيقات العالم الحقيقي" بواسطة فريق من الأشخاص، بما في ذلك [Jen Looper](https://twitter.com/jenlooper) و[Ornella Altunyan](https://twitter.com/ornelladotcom).
+
+تم كتابة "تصحيح النماذج في تعلم الآلة باستخدام مكونات لوحة التحكم للذكاء الاصطناعي المسؤول" بواسطة [Ruth Yakubu](https://twitter.com/ruthieyakubu)
+
+---
+
+**إخلاء المسؤولية**:
+تم ترجمة هذا المستند باستخدام خدمة الترجمة الآلية [Co-op Translator](https://github.com/Azure/co-op-translator). بينما نسعى لتحقيق الدقة، يرجى العلم أن الترجمات الآلية قد تحتوي على أخطاء أو معلومات غير دقيقة. يجب اعتبار المستند الأصلي بلغته الأصلية هو المصدر الموثوق. للحصول على معلومات حساسة أو هامة، يُوصى بالاستعانة بترجمة بشرية احترافية. نحن غير مسؤولين عن أي سوء فهم أو تفسيرات خاطئة ناتجة عن استخدام هذه الترجمة.
\ No newline at end of file
diff --git a/translations/ar/CODE_OF_CONDUCT.md b/translations/ar/CODE_OF_CONDUCT.md
new file mode 100644
index 000000000..7085d6e85
--- /dev/null
+++ b/translations/ar/CODE_OF_CONDUCT.md
@@ -0,0 +1,23 @@
+
+# مدونة قواعد السلوك لمصادر مايكروسوفت المفتوحة
+
+لقد تبنى هذا المشروع [مدونة قواعد السلوك لمصادر مايكروسوفت المفتوحة](https://opensource.microsoft.com/codeofconduct/).
+
+الموارد:
+
+- [مدونة قواعد السلوك لمصادر مايكروسوفت المفتوحة](https://opensource.microsoft.com/codeofconduct/)
+- [الأسئلة الشائعة حول مدونة قواعد السلوك](https://opensource.microsoft.com/codeofconduct/faq/)
+- تواصل مع [opencode@microsoft.com](mailto:opencode@microsoft.com) في حال وجود أسئلة أو مخاوف
+
+---
+
+**إخلاء المسؤولية**:
+تمت ترجمة هذه الوثيقة باستخدام خدمة الترجمة الآلية [Co-op Translator](https://github.com/Azure/co-op-translator). على الرغم من أننا نسعى لتحقيق الدقة، يرجى العلم أن الترجمات الآلية قد تحتوي على أخطاء أو معلومات غير دقيقة. يجب اعتبار الوثيقة الأصلية بلغتها الأصلية المصدر الموثوق. للحصول على معلومات حساسة أو هامة، يُوصى بالاستعانة بترجمة بشرية احترافية. نحن غير مسؤولين عن أي سوء فهم أو تفسيرات خاطئة تنشأ عن استخدام هذه الترجمة.
\ No newline at end of file
diff --git a/translations/ar/CONTRIBUTING.md b/translations/ar/CONTRIBUTING.md
new file mode 100644
index 000000000..57d149f1f
--- /dev/null
+++ b/translations/ar/CONTRIBUTING.md
@@ -0,0 +1,25 @@
+
+# المساهمة
+
+هذا المشروع يرحب بالمساهمات والاقتراحات. معظم المساهمات تتطلب منك الموافقة على اتفاقية ترخيص المساهم (CLA) التي تؤكد أنك تمتلك الحق في، وتقوم فعليًا، بمنحنا الحقوق لاستخدام مساهمتك. لمزيد من التفاصيل، قم بزيارة https://cla.microsoft.com.
+
+> مهم: عند ترجمة النصوص في هذا المستودع، يرجى التأكد من عدم استخدام الترجمة الآلية. سنقوم بالتحقق من الترجمات عبر المجتمع، لذا يرجى التطوع فقط للترجمة إلى اللغات التي تتقنها.
+
+عند تقديم طلب سحب، سيقوم CLA-bot تلقائيًا بتحديد ما إذا كنت بحاجة إلى تقديم CLA وتزيين الطلب بشكل مناسب (مثل إضافة علامة أو تعليق). فقط اتبع التعليمات المقدمة من الروبوت. ستحتاج إلى القيام بذلك مرة واحدة فقط عبر جميع المستودعات التي تستخدم CLA الخاص بنا.
+
+هذا المشروع قد تبنى [مدونة قواعد السلوك لمصادر مايكروسوفت المفتوحة](https://opensource.microsoft.com/codeofconduct/).
+لمزيد من المعلومات، راجع [الأسئلة الشائعة حول مدونة قواعد السلوك](https://opensource.microsoft.com/codeofconduct/faq/)
+أو تواصل مع [opencode@microsoft.com](mailto:opencode@microsoft.com) لأي أسئلة أو تعليقات إضافية.
+
+---
+
+**إخلاء المسؤولية**:
+تم ترجمة هذا المستند باستخدام خدمة الترجمة بالذكاء الاصطناعي [Co-op Translator](https://github.com/Azure/co-op-translator). بينما نسعى لتحقيق الدقة، يرجى العلم أن الترجمات الآلية قد تحتوي على أخطاء أو معلومات غير دقيقة. يجب اعتبار المستند الأصلي بلغته الأصلية المصدر الرسمي. للحصول على معلومات حاسمة، يُوصى بالاستعانة بترجمة بشرية احترافية. نحن غير مسؤولين عن أي سوء فهم أو تفسيرات خاطئة ناتجة عن استخدام هذه الترجمة.
\ No newline at end of file
diff --git a/translations/ar/PyTorch_Fundamentals.ipynb b/translations/ar/PyTorch_Fundamentals.ipynb
new file mode 100644
index 000000000..efc345db4
--- /dev/null
+++ b/translations/ar/PyTorch_Fundamentals.ipynb
@@ -0,0 +1,2836 @@
+{
+ "nbformat": 4,
+ "nbformat_minor": 0,
+ "metadata": {
+ "colab": {
+ "provenance": [],
+ "gpuType": "T4",
+ "authorship_tag": "ABX9TyOgv0AozH1FKQBD+RkgT2bV",
+ "include_colab_link": true
+ },
+ "kernelspec": {
+ "name": "python3",
+ "display_name": "Python 3"
+ },
+ "language_info": {
+ "name": "python"
+ },
+ "accelerator": "GPU",
+ "coopTranslator": {
+ "original_hash": "0ca21b6ee62904d616f2e36dc1cf0da7",
+ "translation_date": "2025-08-29T14:39:43+00:00",
+ "source_file": "PyTorch_Fundamentals.ipynb",
+ "language_code": "ar"
+ }
+ },
+ "cells": [
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "view-in-github",
+ "colab_type": "text"
+ },
+ "source": []
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "id": "EHh5JllMh1rG",
+ "outputId": "f55755ad-c369-414c-85ec-6e9d4f061a02",
+ "colab": {
+ "base_uri": "https://localhost:8080/",
+ "height": 35
+ }
+ },
+ "outputs": [
+ {
+ "output_type": "execute_result",
+ "data": {
+ "text/plain": [
+ "'2.2.1+cu121'"
+ ],
+ "application/vnd.google.colaboratory.intrinsic+json": {
+ "type": "string"
+ }
+ },
+ "metadata": {},
+ "execution_count": 1
+ }
+ ],
+ "source": [
+ "import torch\n",
+ "torch.__version__"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "source": [
+ "print(\"I am excited to run this\")"
+ ],
+ "metadata": {
+ "colab": {
+ "base_uri": "https://localhost:8080/"
+ },
+ "id": "UPlb-duwXAfz",
+ "outputId": "cfd687e4-1238-49f4-ab6b-ee1305b740d2"
+ },
+ "execution_count": null,
+ "outputs": [
+ {
+ "output_type": "stream",
+ "name": "stdout",
+ "text": [
+ "I am excited to run this\n"
+ ]
+ }
+ ]
+ },
+ {
+ "cell_type": "code",
+ "source": [
+ "import torch\n",
+ "import pandas as pd\n",
+ "import numpy as np\n",
+ "import matplotlib.pyplot as plt\n",
+ "print(torch.__version__)"
+ ],
+ "metadata": {
+ "colab": {
+ "base_uri": "https://localhost:8080/"
+ },
+ "id": "byWVlJ9wXDSk",
+ "outputId": "fd74a5c4-4d4a-41b2-ef3c-562ea3e4811f"
+ },
+ "execution_count": null,
+ "outputs": [
+ {
+ "output_type": "stream",
+ "name": "stdout",
+ "text": [
+ "2.2.1+cu121\n"
+ ]
+ }
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "source": [
+ "# **مقدمة إلى الموترات**\n"
+ ],
+ "metadata": {
+ "id": "Osm80zoEYklS"
+ }
+ },
+ {
+ "cell_type": "code",
+ "source": [
+ "# scalar\n",
+ "scalar = torch.tensor(7)\n",
+ "scalar"
+ ],
+ "metadata": {
+ "colab": {
+ "base_uri": "https://localhost:8080/"
+ },
+ "id": "-o8wvJ-VXZmI",
+ "outputId": "558816f5-1205-4de1-fe1f-2f96e9bd79e6"
+ },
+ "execution_count": null,
+ "outputs": [
+ {
+ "output_type": "execute_result",
+ "data": {
+ "text/plain": [
+ "tensor(7)"
+ ]
+ },
+ "metadata": {},
+ "execution_count": 4
+ }
+ ]
+ },
+ {
+ "cell_type": "code",
+ "source": [
+ "scalar.ndim"
+ ],
+ "metadata": {
+ "colab": {
+ "base_uri": "https://localhost:8080/"
+ },
+ "id": "mCZ2tXC4Y_Sg",
+ "outputId": "2d86dbdc-56e1-45c6-d3dd-14515f2a457a"
+ },
+ "execution_count": null,
+ "outputs": [
+ {
+ "output_type": "execute_result",
+ "data": {
+ "text/plain": [
+ "0"
+ ]
+ },
+ "metadata": {},
+ "execution_count": 5
+ }
+ ]
+ },
+ {
+ "cell_type": "code",
+ "source": [
+ "scalar.item()"
+ ],
+ "metadata": {
+ "colab": {
+ "base_uri": "https://localhost:8080/"
+ },
+ "id": "ssN00By0ZQgS",
+ "outputId": "490f40d1-5135-4969-a6d3-c8c902cdc473"
+ },
+ "execution_count": null,
+ "outputs": [
+ {
+ "output_type": "execute_result",
+ "data": {
+ "text/plain": [
+ "7"
+ ]
+ },
+ "metadata": {},
+ "execution_count": 6
+ }
+ ]
+ },
+ {
+ "cell_type": "code",
+ "source": [
+ "# vector\n",
+ "vector = torch.tensor([7, 7])\n",
+ "vector\n",
+ "#vector.ndim\n",
+ "#vector.item()"
+ ],
+ "metadata": {
+ "colab": {
+ "base_uri": "https://localhost:8080/"
+ },
+ "id": "Bws__5wlZnmF",
+ "outputId": "944e38f9-5ba1-4ddc-a9c6-cfb6a19bb488"
+ },
+ "execution_count": null,
+ "outputs": [
+ {
+ "output_type": "execute_result",
+ "data": {
+ "text/plain": [
+ "tensor([7, 7])"
+ ]
+ },
+ "metadata": {},
+ "execution_count": 7
+ }
+ ]
+ },
+ {
+ "cell_type": "code",
+ "source": [
+ "vector.shape"
+ ],
+ "metadata": {
+ "colab": {
+ "base_uri": "https://localhost:8080/"
+ },
+ "id": "9pjCvnsZZzNG",
+ "outputId": "e030a4da-8f81-4858-fbce-86da2aaafe52"
+ },
+ "execution_count": null,
+ "outputs": [
+ {
+ "output_type": "execute_result",
+ "data": {
+ "text/plain": [
+ "torch.Size([2])"
+ ]
+ },
+ "metadata": {},
+ "execution_count": 8
+ }
+ ]
+ },
+ {
+ "cell_type": "code",
+ "source": [
+ "# Matrix\n",
+ "MATRIX = torch.tensor([[7, 8],[9, 10]])\n",
+ "MATRIX"
+ ],
+ "metadata": {
+ "colab": {
+ "base_uri": "https://localhost:8080/"
+ },
+ "id": "a747hI9SaBGW",
+ "outputId": "af835ddb-81ff-4981-badb-441567194d15"
+ },
+ "execution_count": null,
+ "outputs": [
+ {
+ "output_type": "execute_result",
+ "data": {
+ "text/plain": [
+ "tensor([[ 7, 8],\n",
+ " [ 9, 10]])"
+ ]
+ },
+ "metadata": {},
+ "execution_count": 9
+ }
+ ]
+ },
+ {
+ "cell_type": "code",
+ "source": [
+ "MATRIX.ndim"
+ ],
+ "metadata": {
+ "colab": {
+ "base_uri": "https://localhost:8080/"
+ },
+ "id": "XdTfFa7vaRUj",
+ "outputId": "0fbbab9c-8263-4cad-a380-0d2a16ca499e"
+ },
+ "execution_count": null,
+ "outputs": [
+ {
+ "output_type": "execute_result",
+ "data": {
+ "text/plain": [
+ "2"
+ ]
+ },
+ "metadata": {},
+ "execution_count": 10
+ }
+ ]
+ },
+ {
+ "cell_type": "code",
+ "source": [
+ "MATRIX[0]\n",
+ "MATRIX[1]"
+ ],
+ "metadata": {
+ "colab": {
+ "base_uri": "https://localhost:8080/"
+ },
+ "id": "TFeD3jSDafm7",
+ "outputId": "69b44ab3-5ba7-451a-c6b2-f019a03d0c96"
+ },
+ "execution_count": null,
+ "outputs": [
+ {
+ "output_type": "execute_result",
+ "data": {
+ "text/plain": [
+ "tensor([ 9, 10])"
+ ]
+ },
+ "metadata": {},
+ "execution_count": 11
+ }
+ ]
+ },
+ {
+ "cell_type": "code",
+ "source": [
+ "# Tensor\n",
+ "TENSOR = torch.tensor([[[1, 2, 3],[3,6,9], [2,4,5]]])\n",
+ "TENSOR"
+ ],
+ "metadata": {
+ "colab": {
+ "base_uri": "https://localhost:8080/"
+ },
+ "id": "ic3cE47tah42",
+ "outputId": "f250e295-91de-43ec-9d80-588a6fe0abde"
+ },
+ "execution_count": null,
+ "outputs": [
+ {
+ "output_type": "execute_result",
+ "data": {
+ "text/plain": [
+ "tensor([[[1, 2, 3],\n",
+ " [3, 6, 9],\n",
+ " [2, 4, 5]]])"
+ ]
+ },
+ "metadata": {},
+ "execution_count": 12
+ }
+ ]
+ },
+ {
+ "cell_type": "code",
+ "source": [
+ "TENSOR.shape"
+ ],
+ "metadata": {
+ "colab": {
+ "base_uri": "https://localhost:8080/"
+ },
+ "id": "Wvjf5fczbAM1",
+ "outputId": "9c72b5b8-bafe-4ae7-9883-b051e209eada"
+ },
+ "execution_count": null,
+ "outputs": [
+ {
+ "output_type": "execute_result",
+ "data": {
+ "text/plain": [
+ "torch.Size([1, 3, 3])"
+ ]
+ },
+ "metadata": {},
+ "execution_count": 13
+ }
+ ]
+ },
+ {
+ "cell_type": "code",
+ "source": [
+ "TENSOR.ndim"
+ ],
+ "metadata": {
+ "colab": {
+ "base_uri": "https://localhost:8080/"
+ },
+ "id": "mwtXZwiMbN3m",
+ "outputId": "331a5e36-b1b0-4a5f-a9b8-e7049cbaa8f9"
+ },
+ "execution_count": null,
+ "outputs": [
+ {
+ "output_type": "execute_result",
+ "data": {
+ "text/plain": [
+ "3"
+ ]
+ },
+ "metadata": {},
+ "execution_count": 14
+ }
+ ]
+ },
+ {
+ "cell_type": "code",
+ "source": [
+ "TENSOR[0]"
+ ],
+ "metadata": {
+ "colab": {
+ "base_uri": "https://localhost:8080/"
+ },
+ "id": "vzdZu_IfbP3J",
+ "outputId": "e24e7e71-e365-412d-ff50-fc094b56d2f3"
+ },
+ "execution_count": null,
+ "outputs": [
+ {
+ "output_type": "execute_result",
+ "data": {
+ "text/plain": [
+ "tensor([[1, 2, 3],\n",
+ " [3, 6, 9],\n",
+ " [2, 4, 5]])"
+ ]
+ },
+ "metadata": {},
+ "execution_count": 15
+ }
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "source": [],
+ "metadata": {
+ "id": "A8OL9eWfcRrJ"
+ }
+ },
+ {
+ "cell_type": "code",
+ "source": [
+ "random_tensor = torch.rand(3,4)\n",
+ "random_tensor"
+ ],
+ "metadata": {
+ "colab": {
+ "base_uri": "https://localhost:8080/"
+ },
+ "id": "hAqSDE1EcVS_",
+ "outputId": "946171c3-d054-400c-f893-79110356888c"
+ },
+ "execution_count": null,
+ "outputs": [
+ {
+ "output_type": "execute_result",
+ "data": {
+ "text/plain": [
+ "tensor([[0.4414, 0.7681, 0.8385, 0.3166],\n",
+ " [0.0468, 0.5812, 0.0670, 0.9173],\n",
+ " [0.2959, 0.3276, 0.7411, 0.4643]])"
+ ]
+ },
+ "metadata": {},
+ "execution_count": 16
+ }
+ ]
+ },
+ {
+ "cell_type": "code",
+ "source": [
+ "random_tensor.ndim"
+ ],
+ "metadata": {
+ "colab": {
+ "base_uri": "https://localhost:8080/"
+ },
+ "id": "g4fvPE5GcwzP",
+ "outputId": "8737f36b-6864-4059-eaed-6f9156c22306"
+ },
+ "execution_count": null,
+ "outputs": [
+ {
+ "output_type": "execute_result",
+ "data": {
+ "text/plain": [
+ "2"
+ ]
+ },
+ "metadata": {},
+ "execution_count": 17
+ }
+ ]
+ },
+ {
+ "cell_type": "code",
+ "source": [
+ "random_tensor.shape"
+ ],
+ "metadata": {
+ "colab": {
+ "base_uri": "https://localhost:8080/"
+ },
+ "id": "XsAg99QmdAU6",
+ "outputId": "35467c11-257c-4f16-99aa-eca930bcbc36"
+ },
+ "execution_count": null,
+ "outputs": [
+ {
+ "output_type": "execute_result",
+ "data": {
+ "text/plain": [
+ "torch.Size([3, 4])"
+ ]
+ },
+ "metadata": {},
+ "execution_count": 18
+ }
+ ]
+ },
+ {
+ "cell_type": "code",
+ "source": [
+ "random_tensor.size()"
+ ],
+ "metadata": {
+ "colab": {
+ "base_uri": "https://localhost:8080/"
+ },
+ "id": "cii1pNdVdB68",
+ "outputId": "fc8d2de6-9215-43de-99f7-7b0d7f7d20fa"
+ },
+ "execution_count": null,
+ "outputs": [
+ {
+ "output_type": "execute_result",
+ "data": {
+ "text/plain": [
+ "torch.Size([3, 4])"
+ ]
+ },
+ "metadata": {},
+ "execution_count": 19
+ }
+ ]
+ },
+ {
+ "cell_type": "code",
+ "source": [
+ "random_image_tensor = torch.rand(size=(3, 224, 224)) #color channels, height, width\n",
+ "random_image_tensor.ndim, random_image_tensor.shape"
+ ],
+ "metadata": {
+ "colab": {
+ "base_uri": "https://localhost:8080/"
+ },
+ "id": "aTKq2j0cdDjb",
+ "outputId": "6be42057-20b9-4faf-d79d-8b65c42cc27e"
+ },
+ "execution_count": null,
+ "outputs": [
+ {
+ "output_type": "execute_result",
+ "data": {
+ "text/plain": [
+ "(3, torch.Size([3, 224, 224]))"
+ ]
+ },
+ "metadata": {},
+ "execution_count": 20
+ }
+ ]
+ },
+ {
+ "cell_type": "code",
+ "source": [
+ "random_tensor_ofownsize = torch.rand(size=(5,10,10))\n",
+ "random_tensor_ofownsize.ndim, random_tensor_ofownsize.shape\n"
+ ],
+ "metadata": {
+ "colab": {
+ "base_uri": "https://localhost:8080/"
+ },
+ "id": "IyhDdj-Pd6nC",
+ "outputId": "43e5e334-6d4d-4b67-f87d-7d364c6d8c67"
+ },
+ "execution_count": null,
+ "outputs": [
+ {
+ "output_type": "execute_result",
+ "data": {
+ "text/plain": [
+ "(3, torch.Size([5, 10, 10]))"
+ ]
+ },
+ "metadata": {},
+ "execution_count": 21
+ }
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "source": [
+ "أصفار وآحاد موتر\n"
+ ],
+ "metadata": {
+ "id": "UOJW08uOert_"
+ }
+ },
+ {
+ "cell_type": "code",
+ "source": [
+ "zero = torch.zeros(size=(3, 4))\n",
+ "zero"
+ ],
+ "metadata": {
+ "colab": {
+ "base_uri": "https://localhost:8080/"
+ },
+ "id": "uGvXtaXyefie",
+ "outputId": "d40d3e28-8667-4d2f-8b62-f0829c6162ad"
+ },
+ "execution_count": null,
+ "outputs": [
+ {
+ "output_type": "execute_result",
+ "data": {
+ "text/plain": [
+ "tensor([[0., 0., 0., 0.],\n",
+ " [0., 0., 0., 0.],\n",
+ " [0., 0., 0., 0.]])"
+ ]
+ },
+ "metadata": {},
+ "execution_count": 22
+ }
+ ]
+ },
+ {
+ "cell_type": "code",
+ "source": [
+ "zero*random_tensor"
+ ],
+ "metadata": {
+ "colab": {
+ "base_uri": "https://localhost:8080/"
+ },
+ "id": "OyUkUPkDe0uH",
+ "outputId": "26c2e4be-36ba-4c6c-9a90-2704ec135828"
+ },
+ "execution_count": null,
+ "outputs": [
+ {
+ "output_type": "execute_result",
+ "data": {
+ "text/plain": [
+ "tensor([[0., 0., 0., 0.],\n",
+ " [0., 0., 0., 0.],\n",
+ " [0., 0., 0., 0.]])"
+ ]
+ },
+ "metadata": {},
+ "execution_count": 23
+ }
+ ]
+ },
+ {
+ "cell_type": "code",
+ "source": [
+ "ones = torch.ones(size=(3, 4))\n",
+ "ones\n"
+ ],
+ "metadata": {
+ "colab": {
+ "base_uri": "https://localhost:8080/"
+ },
+ "id": "y_Ac62Aqe82G",
+ "outputId": "291de5d9-b9df-49de-c9d1-d098e3e9f4d8"
+ },
+ "execution_count": null,
+ "outputs": [
+ {
+ "output_type": "execute_result",
+ "data": {
+ "text/plain": [
+ "tensor([[1., 1., 1., 1.],\n",
+ " [1., 1., 1., 1.],\n",
+ " [1., 1., 1., 1.]])"
+ ]
+ },
+ "metadata": {},
+ "execution_count": 24
+ }
+ ]
+ },
+ {
+ "cell_type": "code",
+ "source": [
+ "ones.dtype"
+ ],
+ "metadata": {
+ "colab": {
+ "base_uri": "https://localhost:8080/"
+ },
+ "id": "TvGOA9odfIEO",
+ "outputId": "45949ef4-6649-4b6c-d6af-2d4bfb8de832"
+ },
+ "execution_count": null,
+ "outputs": [
+ {
+ "output_type": "execute_result",
+ "data": {
+ "text/plain": [
+ "torch.float32"
+ ]
+ },
+ "metadata": {},
+ "execution_count": 25
+ }
+ ]
+ },
+ {
+ "cell_type": "code",
+ "source": [
+ "ones*zero"
+ ],
+ "metadata": {
+ "colab": {
+ "base_uri": "https://localhost:8080/"
+ },
+ "id": "--pTyge-fI-8",
+ "outputId": "c4d9bb7e-829b-43db-e2db-b1a2d64e61f0"
+ },
+ "execution_count": null,
+ "outputs": [
+ {
+ "output_type": "execute_result",
+ "data": {
+ "text/plain": [
+ "tensor([[0., 0., 0., 0.],\n",
+ " [0., 0., 0., 0.],\n",
+ " [0., 0., 0., 0.]])"
+ ]
+ },
+ "metadata": {},
+ "execution_count": 26
+ }
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "source": [
+ "مدى الموترات، موتر - مثل\n"
+ ],
+ "metadata": {
+ "id": "qDcc7Z36fSJF"
+ }
+ },
+ {
+ "cell_type": "code",
+ "source": [
+ "one_to_ten = torch.arange(start = 1, end = 11, step = 1)\n",
+ "one_to_ten"
+ ],
+ "metadata": {
+ "colab": {
+ "base_uri": "https://localhost:8080/"
+ },
+ "id": "w3CZB4zUfR1s",
+ "outputId": "197fcba1-da0a-4b4a-ed11-3974bd6c01aa"
+ },
+ "execution_count": null,
+ "outputs": [
+ {
+ "output_type": "execute_result",
+ "data": {
+ "text/plain": [
+ "tensor([ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10])"
+ ]
+ },
+ "metadata": {},
+ "execution_count": 27
+ }
+ ]
+ },
+ {
+ "cell_type": "code",
+ "source": [
+ "ten_zeros = torch.zeros_like(one_to_ten)\n",
+ "ten_zeros"
+ ],
+ "metadata": {
+ "colab": {
+ "base_uri": "https://localhost:8080/"
+ },
+ "id": "WZh99BwVfRy8",
+ "outputId": "51ef8bfb-6fa0-4099-ff66-b97d65b2ddea"
+ },
+ "execution_count": null,
+ "outputs": [
+ {
+ "output_type": "execute_result",
+ "data": {
+ "text/plain": [
+ "tensor([0, 0, 0, 0, 0, 0, 0, 0, 0, 0])"
+ ]
+ },
+ "metadata": {},
+ "execution_count": 28
+ }
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "source": [
+ "أنواع بيانات التنسور\n"
+ ],
+ "metadata": {
+ "id": "pGGhgsbUgqbW"
+ }
+ },
+ {
+ "cell_type": "code",
+ "source": [
+ "float_32_tensor = torch.tensor([3.0, 6.0,9.0], dtype = None, device = None, requires_grad = False)\n",
+ "float_32_tensor"
+ ],
+ "metadata": {
+ "colab": {
+ "base_uri": "https://localhost:8080/"
+ },
+ "id": "JORJl4XkfRsx",
+ "outputId": "71114171-0f49-481f-b6fc-6cb48e2fb895"
+ },
+ "execution_count": null,
+ "outputs": [
+ {
+ "output_type": "execute_result",
+ "data": {
+ "text/plain": [
+ "tensor([3., 6., 9.])"
+ ]
+ },
+ "metadata": {},
+ "execution_count": 29
+ }
+ ]
+ },
+ {
+ "cell_type": "code",
+ "source": [
+ "float_32_tensor.dtype"
+ ],
+ "metadata": {
+ "colab": {
+ "base_uri": "https://localhost:8080/"
+ },
+ "id": "6wOPPwGyfRLn",
+ "outputId": "f23776a1-b682-404a-9f67-d5bcb0402666"
+ },
+ "execution_count": null,
+ "outputs": [
+ {
+ "output_type": "execute_result",
+ "data": {
+ "text/plain": [
+ "torch.float32"
+ ]
+ },
+ "metadata": {},
+ "execution_count": 30
+ }
+ ]
+ },
+ {
+ "cell_type": "code",
+ "source": [
+ "float_16_tensor = float_32_tensor.type(torch.float16)\n",
+ "float_16_tensor.dtype"
+ ],
+ "metadata": {
+ "colab": {
+ "base_uri": "https://localhost:8080/"
+ },
+ "id": "tFsHCvmZfOYe",
+ "outputId": "d3aa305a-7591-47f5-97fd-61bff60b44bd"
+ },
+ "execution_count": null,
+ "outputs": [
+ {
+ "output_type": "execute_result",
+ "data": {
+ "text/plain": [
+ "torch.float16"
+ ]
+ },
+ "metadata": {},
+ "execution_count": 31
+ }
+ ]
+ },
+ {
+ "cell_type": "code",
+ "source": [
+ "float_16_tensor*float_32_tensor"
+ ],
+ "metadata": {
+ "colab": {
+ "base_uri": "https://localhost:8080/"
+ },
+ "id": "TQiCGTPuwq0q",
+ "outputId": "98750fce-1ca3-4889-e269-8b753efdea96"
+ },
+ "execution_count": null,
+ "outputs": [
+ {
+ "output_type": "execute_result",
+ "data": {
+ "text/plain": [
+ "tensor([ 9., 36., 81.])"
+ ]
+ },
+ "metadata": {},
+ "execution_count": 32
+ }
+ ]
+ },
+ {
+ "cell_type": "code",
+ "source": [
+ "int_32_tensor = torch.tensor([3, 6, 9], dtype = torch.int32)\n",
+ "int_32_tensor"
+ ],
+ "metadata": {
+ "colab": {
+ "base_uri": "https://localhost:8080/"
+ },
+ "id": "5hlrLvGUw5D_",
+ "outputId": "41d890a0-9aee-446c-d906-631ce2ab0995"
+ },
+ "execution_count": null,
+ "outputs": [
+ {
+ "output_type": "execute_result",
+ "data": {
+ "text/plain": [
+ "tensor([3, 6, 9], dtype=torch.int32)"
+ ]
+ },
+ "metadata": {},
+ "execution_count": 33
+ }
+ ]
+ },
+ {
+ "cell_type": "code",
+ "source": [
+ "int_32_tensor*float_32_tensor"
+ ],
+ "metadata": {
+ "colab": {
+ "base_uri": "https://localhost:8080/"
+ },
+ "id": "ihApD9u3xTNW",
+ "outputId": "d295eed0-6996-4e0f-8502-ff4b55cd1373"
+ },
+ "execution_count": null,
+ "outputs": [
+ {
+ "output_type": "execute_result",
+ "data": {
+ "text/plain": [
+ "tensor([ 9., 36., 81.])"
+ ]
+ },
+ "metadata": {},
+ "execution_count": 34
+ }
+ ]
+ },
+ {
+ "cell_type": "code",
+ "source": [
+ "x = torch.arange(0,100,10)"
+ ],
+ "metadata": {
+ "id": "utKhlb_KxWDQ"
+ },
+ "execution_count": null,
+ "outputs": []
+ },
+ {
+ "cell_type": "code",
+ "source": [
+ "x"
+ ],
+ "metadata": {
+ "colab": {
+ "base_uri": "https://localhost:8080/"
+ },
+ "id": "p78D74E9Rj7Y",
+ "outputId": "781a1614-a900-41f5-9e5d-358f0b2390aa"
+ },
+ "execution_count": null,
+ "outputs": [
+ {
+ "output_type": "execute_result",
+ "data": {
+ "text/plain": [
+ "tensor([ 0, 10, 20, 30, 40, 50, 60, 70, 80, 90])"
+ ]
+ },
+ "metadata": {},
+ "execution_count": 36
+ }
+ ]
+ },
+ {
+ "cell_type": "code",
+ "source": [
+ "x.min()"
+ ],
+ "metadata": {
+ "colab": {
+ "base_uri": "https://localhost:8080/"
+ },
+ "id": "4BcSs5NeRkcj",
+ "outputId": "3f24a8dc-58e9-4a5f-9834-e85856a34f9d"
+ },
+ "execution_count": null,
+ "outputs": [
+ {
+ "output_type": "execute_result",
+ "data": {
+ "text/plain": [
+ "tensor(0)"
+ ]
+ },
+ "metadata": {},
+ "execution_count": 37
+ }
+ ]
+ },
+ {
+ "cell_type": "code",
+ "source": [
+ "x.max()"
+ ],
+ "metadata": {
+ "colab": {
+ "base_uri": "https://localhost:8080/"
+ },
+ "id": "hinqvXVLRm4q",
+ "outputId": "5c7d8a53-3913-4ac1-bba3-5ba8ff68250a"
+ },
+ "execution_count": null,
+ "outputs": [
+ {
+ "output_type": "execute_result",
+ "data": {
+ "text/plain": [
+ "tensor(90)"
+ ]
+ },
+ "metadata": {},
+ "execution_count": 38
+ }
+ ]
+ },
+ {
+ "cell_type": "code",
+ "source": [
+ "torch.mean(x.type(torch.float32))"
+ ],
+ "metadata": {
+ "colab": {
+ "base_uri": "https://localhost:8080/"
+ },
+ "id": "k7okc0_vRpnB",
+ "outputId": "91e5494f-dc57-417c-ea4d-25dbc547c893"
+ },
+ "execution_count": null,
+ "outputs": [
+ {
+ "output_type": "execute_result",
+ "data": {
+ "text/plain": [
+ "tensor(45.)"
+ ]
+ },
+ "metadata": {},
+ "execution_count": 39
+ }
+ ]
+ },
+ {
+ "cell_type": "code",
+ "source": [
+ "x.type(torch.float32).mean()"
+ ],
+ "metadata": {
+ "colab": {
+ "base_uri": "https://localhost:8080/"
+ },
+ "id": "29QcDTjHRq10",
+ "outputId": "62937c6c-78e0-49f2-dde3-1543ee8f7907"
+ },
+ "execution_count": null,
+ "outputs": [
+ {
+ "output_type": "execute_result",
+ "data": {
+ "text/plain": [
+ "tensor(45.)"
+ ]
+ },
+ "metadata": {},
+ "execution_count": 40
+ }
+ ]
+ },
+ {
+ "cell_type": "code",
+ "source": [
+ "x.sum()"
+ ],
+ "metadata": {
+ "colab": {
+ "base_uri": "https://localhost:8080/"
+ },
+ "id": "wlpY_G_sbdKF",
+ "outputId": "475d8258-af65-4011-a258-b93d4d8142d4"
+ },
+ "execution_count": null,
+ "outputs": [
+ {
+ "output_type": "execute_result",
+ "data": {
+ "text/plain": [
+ "tensor(450)"
+ ]
+ },
+ "metadata": {},
+ "execution_count": 41
+ }
+ ]
+ },
+ {
+ "cell_type": "code",
+ "source": [
+ "x.argmax()"
+ ],
+ "metadata": {
+ "colab": {
+ "base_uri": "https://localhost:8080/"
+ },
+ "id": "GT6HJzwhbk4n",
+ "outputId": "2e455c20-c322-4bcf-d07c-1259d3ccefc6"
+ },
+ "execution_count": null,
+ "outputs": [
+ {
+ "output_type": "execute_result",
+ "data": {
+ "text/plain": [
+ "tensor(9)"
+ ]
+ },
+ "metadata": {},
+ "execution_count": 42
+ }
+ ]
+ },
+ {
+ "cell_type": "code",
+ "source": [
+ "x.argmin()"
+ ],
+ "metadata": {
+ "colab": {
+ "base_uri": "https://localhost:8080/"
+ },
+ "id": "egL3oi2Mb19P",
+ "outputId": "f71fb32f-6338-44a3-b377-75bea0a3ab54"
+ },
+ "execution_count": null,
+ "outputs": [
+ {
+ "output_type": "execute_result",
+ "data": {
+ "text/plain": [
+ "tensor(0)"
+ ]
+ },
+ "metadata": {},
+ "execution_count": 43
+ }
+ ]
+ },
+ {
+ "cell_type": "code",
+ "source": [
+ "x[0]"
+ ],
+ "metadata": {
+ "colab": {
+ "base_uri": "https://localhost:8080/"
+ },
+ "id": "p2U8DZKib3DP",
+ "outputId": "b9f613b9-74e9-45f4-ed01-05babb6a6793"
+ },
+ "execution_count": null,
+ "outputs": [
+ {
+ "output_type": "execute_result",
+ "data": {
+ "text/plain": [
+ "tensor(0)"
+ ]
+ },
+ "metadata": {},
+ "execution_count": 44
+ }
+ ]
+ },
+ {
+ "cell_type": "code",
+ "source": [
+ "x[9]"
+ ],
+ "metadata": {
+ "colab": {
+ "base_uri": "https://localhost:8080/"
+ },
+ "id": "24qBFlGYcABe",
+ "outputId": "5813cfcb-7f63-4bd7-ee46-f95ccbfda939"
+ },
+ "execution_count": null,
+ "outputs": [
+ {
+ "output_type": "execute_result",
+ "data": {
+ "text/plain": [
+ "tensor(90)"
+ ]
+ },
+ "metadata": {},
+ "execution_count": 45
+ }
+ ]
+ },
+ {
+ "cell_type": "code",
+ "source": [
+ "x = torch.arange(1, 10)\n",
+ "x.shape"
+ ],
+ "metadata": {
+ "colab": {
+ "base_uri": "https://localhost:8080/"
+ },
+ "id": "0GPOxEzkcBHO",
+ "outputId": "aefbd903-4f4c-4d2c-c90f-eccd682fe018"
+ },
+ "execution_count": null,
+ "outputs": [
+ {
+ "output_type": "execute_result",
+ "data": {
+ "text/plain": [
+ "torch.Size([9])"
+ ]
+ },
+ "metadata": {},
+ "execution_count": 46
+ }
+ ]
+ },
+ {
+ "cell_type": "code",
+ "source": [
+ "x_reshaped = x.reshape(1,9)\n",
+ "x_reshaped, x_reshaped.shape"
+ ],
+ "metadata": {
+ "colab": {
+ "base_uri": "https://localhost:8080/"
+ },
+ "id": "spmRgQjwddgp",
+ "outputId": "85a7c55c-2909-4ea2-fc68-386dddc65742"
+ },
+ "execution_count": null,
+ "outputs": [
+ {
+ "output_type": "execute_result",
+ "data": {
+ "text/plain": [
+ "(tensor([[1, 2, 3, 4, 5, 6, 7, 8, 9]]), torch.Size([1, 9]))"
+ ]
+ },
+ "metadata": {},
+ "execution_count": 47
+ }
+ ]
+ },
+ {
+ "cell_type": "code",
+ "source": [
+ "x_reshaped.view(1,9)"
+ ],
+ "metadata": {
+ "colab": {
+ "base_uri": "https://localhost:8080/"
+ },
+ "id": "tH2ahWGydqqP",
+ "outputId": "65d92263-4fc4-434a-c06d-c5e08436f7fe"
+ },
+ "execution_count": null,
+ "outputs": [
+ {
+ "output_type": "execute_result",
+ "data": {
+ "text/plain": [
+ "tensor([[1, 2, 3, 4, 5, 6, 7, 8, 9]])"
+ ]
+ },
+ "metadata": {},
+ "execution_count": 48
+ }
+ ]
+ },
+ {
+ "cell_type": "code",
+ "source": [
+ "x_stacked = torch.stack([x, x, x, x], dim = 1)\n",
+ "x_stacked"
+ ],
+ "metadata": {
+ "colab": {
+ "base_uri": "https://localhost:8080/"
+ },
+ "id": "jgCeJcaud_-1",
+ "outputId": "7f293a37-6ef1-43b6-aee5-9d6d91c94f9e"
+ },
+ "execution_count": null,
+ "outputs": [
+ {
+ "output_type": "execute_result",
+ "data": {
+ "text/plain": [
+ "tensor([[1, 1, 1, 1],\n",
+ " [2, 2, 2, 2],\n",
+ " [3, 3, 3, 3],\n",
+ " [4, 4, 4, 4],\n",
+ " [5, 5, 5, 5],\n",
+ " [6, 6, 6, 6],\n",
+ " [7, 7, 7, 7],\n",
+ " [8, 8, 8, 8],\n",
+ " [9, 9, 9, 9]])"
+ ]
+ },
+ "metadata": {},
+ "execution_count": 49
+ }
+ ]
+ },
+ {
+ "cell_type": "code",
+ "source": [
+ "x_stacked.squeeze()"
+ ],
+ "metadata": {
+ "colab": {
+ "base_uri": "https://localhost:8080/"
+ },
+ "id": "XhJHIK6cfPse",
+ "outputId": "06c47b89-3a9e-453e-bcc3-00cbcb0b8b49"
+ },
+ "execution_count": null,
+ "outputs": [
+ {
+ "output_type": "execute_result",
+ "data": {
+ "text/plain": [
+ "tensor([[1, 1, 1, 1],\n",
+ " [2, 2, 2, 2],\n",
+ " [3, 3, 3, 3],\n",
+ " [4, 4, 4, 4],\n",
+ " [5, 5, 5, 5],\n",
+ " [6, 6, 6, 6],\n",
+ " [7, 7, 7, 7],\n",
+ " [8, 8, 8, 8],\n",
+ " [9, 9, 9, 9]])"
+ ]
+ },
+ "metadata": {},
+ "execution_count": 50
+ }
+ ]
+ },
+ {
+ "cell_type": "code",
+ "source": [
+ "x_stacked.unsqueeze(dim=1)"
+ ],
+ "metadata": {
+ "colab": {
+ "base_uri": "https://localhost:8080/"
+ },
+ "id": "ej2c3Xxzf0tq",
+ "outputId": "94024061-eb37-446d-c4a8-e4d16cb6de81"
+ },
+ "execution_count": null,
+ "outputs": [
+ {
+ "output_type": "execute_result",
+ "data": {
+ "text/plain": [
+ "tensor([[[1, 1, 1, 1]],\n",
+ "\n",
+ " [[2, 2, 2, 2]],\n",
+ "\n",
+ " [[3, 3, 3, 3]],\n",
+ "\n",
+ " [[4, 4, 4, 4]],\n",
+ "\n",
+ " [[5, 5, 5, 5]],\n",
+ "\n",
+ " [[6, 6, 6, 6]],\n",
+ "\n",
+ " [[7, 7, 7, 7]],\n",
+ "\n",
+ " [[8, 8, 8, 8]],\n",
+ "\n",
+ " [[9, 9, 9, 9]]])"
+ ]
+ },
+ "metadata": {},
+ "execution_count": 52
+ }
+ ]
+ },
+ {
+ "cell_type": "code",
+ "source": [
+ "x_stacked.squeeze()"
+ ],
+ "metadata": {
+ "colab": {
+ "base_uri": "https://localhost:8080/"
+ },
+ "id": "4DJYo1a0f5M0",
+ "outputId": "efca2b47-1b14-44de-9a9a-2c83629d153f"
+ },
+ "execution_count": null,
+ "outputs": [
+ {
+ "output_type": "execute_result",
+ "data": {
+ "text/plain": [
+ "tensor([[1, 1, 1, 1],\n",
+ " [2, 2, 2, 2],\n",
+ " [3, 3, 3, 3],\n",
+ " [4, 4, 4, 4],\n",
+ " [5, 5, 5, 5],\n",
+ " [6, 6, 6, 6],\n",
+ " [7, 7, 7, 7],\n",
+ " [8, 8, 8, 8],\n",
+ " [9, 9, 9, 9]])"
+ ]
+ },
+ "metadata": {},
+ "execution_count": 53
+ }
+ ]
+ },
+ {
+ "cell_type": "code",
+ "source": [
+ "x_stacked.unsqueeze(dim=-2)"
+ ],
+ "metadata": {
+ "colab": {
+ "base_uri": "https://localhost:8080/"
+ },
+ "id": "J4iEjn2ah2HL",
+ "outputId": "22395593-7c16-4162-beae-dd2bbe7bda35"
+ },
+ "execution_count": null,
+ "outputs": [
+ {
+ "output_type": "execute_result",
+ "data": {
+ "text/plain": [
+ "tensor([[[1, 1, 1, 1]],\n",
+ "\n",
+ " [[2, 2, 2, 2]],\n",
+ "\n",
+ " [[3, 3, 3, 3]],\n",
+ "\n",
+ " [[4, 4, 4, 4]],\n",
+ "\n",
+ " [[5, 5, 5, 5]],\n",
+ "\n",
+ " [[6, 6, 6, 6]],\n",
+ "\n",
+ " [[7, 7, 7, 7]],\n",
+ "\n",
+ " [[8, 8, 8, 8]],\n",
+ "\n",
+ " [[9, 9, 9, 9]]])"
+ ]
+ },
+ "metadata": {},
+ "execution_count": 55
+ }
+ ]
+ },
+ {
+ "cell_type": "code",
+ "source": [
+ "import torch\n",
+ "tensor = torch.tensor([1, 2, 3])\n",
+ "tensor = tensor - 10\n",
+ "tensor"
+ ],
+ "metadata": {
+ "colab": {
+ "base_uri": "https://localhost:8080/"
+ },
+ "id": "cFfiD7Nth7Z_",
+ "outputId": "1139e1f8-fc1a-46ca-d636-f2bc4fd2eef6"
+ },
+ "execution_count": null,
+ "outputs": [
+ {
+ "output_type": "execute_result",
+ "data": {
+ "text/plain": [
+ "tensor([-9, -8, -7])"
+ ]
+ },
+ "metadata": {},
+ "execution_count": 7
+ }
+ ]
+ },
+ {
+ "cell_type": "code",
+ "source": [
+ "torch.mul(tensor, 10)"
+ ],
+ "metadata": {
+ "colab": {
+ "base_uri": "https://localhost:8080/"
+ },
+ "id": "dyA7BM_GHhqE",
+ "outputId": "0e3b9671-d9e8-4a32-87bb-59bc05986142"
+ },
+ "execution_count": null,
+ "outputs": [
+ {
+ "output_type": "execute_result",
+ "data": {
+ "text/plain": [
+ "tensor([-90, -80, -70])"
+ ]
+ },
+ "metadata": {},
+ "execution_count": 9
+ }
+ ]
+ },
+ {
+ "cell_type": "code",
+ "source": [
+ "torch.sub(tensor, 100)"
+ ],
+ "metadata": {
+ "colab": {
+ "base_uri": "https://localhost:8080/"
+ },
+ "id": "owtUsZ1KNegI",
+ "outputId": "189b7b23-0041-4e09-b991-cd209a48506a"
+ },
+ "execution_count": null,
+ "outputs": [
+ {
+ "output_type": "execute_result",
+ "data": {
+ "text/plain": [
+ "tensor([-109, -108, -107])"
+ ]
+ },
+ "metadata": {},
+ "execution_count": 10
+ }
+ ]
+ },
+ {
+ "cell_type": "code",
+ "source": [
+ "torch.add(tensor, 100)"
+ ],
+ "metadata": {
+ "colab": {
+ "base_uri": "https://localhost:8080/"
+ },
+ "id": "K5STXlQONsyc",
+ "outputId": "00cbb79a-0a1d-4e21-86ec-5c91c37a2d01"
+ },
+ "execution_count": null,
+ "outputs": [
+ {
+ "output_type": "execute_result",
+ "data": {
+ "text/plain": [
+ "tensor([91, 92, 93])"
+ ]
+ },
+ "metadata": {},
+ "execution_count": 11
+ }
+ ]
+ },
+ {
+ "cell_type": "code",
+ "source": [
+ "torch.divide(tensor, 2)"
+ ],
+ "metadata": {
+ "colab": {
+ "base_uri": "https://localhost:8080/"
+ },
+ "id": "xqMGnzIUNvp0",
+ "outputId": "c894cf3e-f148-45f8-cfc8-d78740735306"
+ },
+ "execution_count": null,
+ "outputs": [
+ {
+ "output_type": "execute_result",
+ "data": {
+ "text/plain": [
+ "tensor([-4.5000, -4.0000, -3.5000])"
+ ]
+ },
+ "metadata": {},
+ "execution_count": 13
+ }
+ ]
+ },
+ {
+ "cell_type": "code",
+ "source": [
+ "torch.matmul(tensor, tensor)"
+ ],
+ "metadata": {
+ "colab": {
+ "base_uri": "https://localhost:8080/"
+ },
+ "id": "ruGzKpV8NyBc",
+ "outputId": "fddb63bf-006f-48b6-ae28-287fbcda8bc5"
+ },
+ "execution_count": null,
+ "outputs": [
+ {
+ "output_type": "execute_result",
+ "data": {
+ "text/plain": [
+ "tensor(194)"
+ ]
+ },
+ "metadata": {},
+ "execution_count": 15
+ }
+ ]
+ },
+ {
+ "cell_type": "code",
+ "source": [
+ "tensor@tensor"
+ ],
+ "metadata": {
+ "colab": {
+ "base_uri": "https://localhost:8080/"
+ },
+ "id": "8GS3r9yTeGfD",
+ "outputId": "c80b12ac-30b5-4f3d-c38c-9e41ba511b0e"
+ },
+ "execution_count": null,
+ "outputs": [
+ {
+ "output_type": "execute_result",
+ "data": {
+ "text/plain": [
+ "tensor(194)"
+ ]
+ },
+ "metadata": {},
+ "execution_count": 16
+ }
+ ]
+ },
+ {
+ "cell_type": "code",
+ "source": [
+ "%%time\n",
+ "tensor@tensor"
+ ],
+ "metadata": {
+ "colab": {
+ "base_uri": "https://localhost:8080/"
+ },
+ "id": "QmuYHqXTemC0",
+ "outputId": "402fe3ba-70b5-4bb2-c83b-254db84ff810"
+ },
+ "execution_count": null,
+ "outputs": [
+ {
+ "output_type": "stream",
+ "name": "stdout",
+ "text": [
+ "CPU times: user 622 µs, sys: 0 ns, total: 622 µs\n",
+ "Wall time: 516 µs\n"
+ ]
+ },
+ {
+ "output_type": "execute_result",
+ "data": {
+ "text/plain": [
+ "tensor(194)"
+ ]
+ },
+ "metadata": {},
+ "execution_count": 17
+ }
+ ]
+ },
+ {
+ "cell_type": "code",
+ "source": [
+ "%%time\n",
+ "torch.matmul(tensor,tensor)"
+ ],
+ "metadata": {
+ "colab": {
+ "base_uri": "https://localhost:8080/"
+ },
+ "id": "dGr1fzdNepd8",
+ "outputId": "97bd6c91-bc25-4b38-cdf5-f22dcdef243e"
+ },
+ "execution_count": null,
+ "outputs": [
+ {
+ "output_type": "stream",
+ "name": "stdout",
+ "text": [
+ "CPU times: user 424 µs, sys: 998 µs, total: 1.42 ms\n",
+ "Wall time: 1.43 ms\n"
+ ]
+ },
+ {
+ "output_type": "execute_result",
+ "data": {
+ "text/plain": [
+ "tensor(194)"
+ ]
+ },
+ "metadata": {},
+ "execution_count": 18
+ }
+ ]
+ },
+ {
+ "cell_type": "code",
+ "source": [
+ "torch.rand(3,2)"
+ ],
+ "metadata": {
+ "colab": {
+ "base_uri": "https://localhost:8080/"
+ },
+ "id": "pGYDoK2gevfo",
+ "outputId": "2c8783d5-0453-47c5-c7ed-af10d25d6989"
+ },
+ "execution_count": null,
+ "outputs": [
+ {
+ "output_type": "execute_result",
+ "data": {
+ "text/plain": [
+ "tensor([[0.5999, 0.0073],\n",
+ " [0.9321, 0.3026],\n",
+ " [0.3463, 0.3872]])"
+ ]
+ },
+ "metadata": {},
+ "execution_count": 20
+ }
+ ]
+ },
+ {
+ "cell_type": "code",
+ "source": [
+ "torch.matmul(torch.rand(3,2), torch.rand(2,3))"
+ ],
+ "metadata": {
+ "colab": {
+ "base_uri": "https://localhost:8080/"
+ },
+ "id": "KGBGQoB8e2DP",
+ "outputId": "4c2ef361-a2d0-41ee-c328-3992cbbc138d"
+ },
+ "execution_count": null,
+ "outputs": [
+ {
+ "output_type": "execute_result",
+ "data": {
+ "text/plain": [
+ "tensor([[0.3528, 0.1893, 0.0714],\n",
+ " [1.2791, 0.7110, 0.2563],\n",
+ " [0.8812, 0.4553, 0.1803]])"
+ ]
+ },
+ "metadata": {},
+ "execution_count": 23
+ }
+ ]
+ },
+ {
+ "cell_type": "code",
+ "source": [
+ "import torch"
+ ],
+ "metadata": {
+ "id": "ib8DMtkBe_LJ"
+ },
+ "execution_count": 1,
+ "outputs": []
+ },
+ {
+ "cell_type": "code",
+ "source": [
+ "x = torch.rand(2,9)"
+ ],
+ "metadata": {
+ "id": "nJo8ZBdrQY1b"
+ },
+ "execution_count": 2,
+ "outputs": []
+ },
+ {
+ "cell_type": "code",
+ "source": [
+ "x"
+ ],
+ "metadata": {
+ "colab": {
+ "base_uri": "https://localhost:8080/"
+ },
+ "id": "wi6oRv4MQfgf",
+ "outputId": "55c99f55-31f6-4cf5-ba4e-19a47c3a0167"
+ },
+ "execution_count": 3,
+ "outputs": [
+ {
+ "output_type": "execute_result",
+ "data": {
+ "text/plain": [
+ "tensor([[0.5894, 0.4391, 0.2018, 0.5417, 0.3844, 0.3592, 0.9209, 0.9269, 0.0681],\n",
+ " [0.0746, 0.1740, 0.6821, 0.6890, 0.0999, 0.7444, 0.2391, 0.4625, 0.8302]])"
+ ]
+ },
+ "metadata": {},
+ "execution_count": 3
+ }
+ ]
+ },
+ {
+ "cell_type": "code",
+ "source": [
+ "y=torch.randn(2,3,5)\n",
+ "y"
+ ],
+ "metadata": {
+ "colab": {
+ "base_uri": "https://localhost:8080/"
+ },
+ "id": "Zpx8myAUQgoc",
+ "outputId": "07756d70-56bd-437c-c74e-9aecc1a77311"
+ },
+ "execution_count": 5,
+ "outputs": [
+ {
+ "output_type": "execute_result",
+ "data": {
+ "text/plain": [
+ "tensor([[[ 1.5552, -0.4877, 0.5175, -1.7958, -0.6187],\n",
+ " [-0.3359, -1.9710, 0.0112, -1.7578, -1.5295],\n",
+ " [ 0.0932, 1.4079, 0.9108, 0.3328, -0.6978]],\n",
+ "\n",
+ " [[-0.9406, -1.0809, -0.2595, 0.1282, 1.6605],\n",
+ " [ 1.1624, 1.0902, 1.7092, -0.2842, -1.3780],\n",
+ " [-0.1534, -1.2795, -0.5495, 0.9902, 0.1822]]])"
+ ]
+ },
+ "metadata": {},
+ "execution_count": 5
+ }
+ ]
+ },
+ {
+ "cell_type": "code",
+ "source": [
+ "x_original = torch.rand(size=(224,224,3))\n",
+ "x_original"
+ ],
+ "metadata": {
+ "colab": {
+ "base_uri": "https://localhost:8080/"
+ },
+ "id": "s4U-X9bJQnWe",
+ "outputId": "657a7a76-962c-4b41-a76b-902d0482266c"
+ },
+ "execution_count": 6,
+ "outputs": [
+ {
+ "output_type": "execute_result",
+ "data": {
+ "text/plain": [
+ "tensor([[[0.4549, 0.6809, 0.2118],\n",
+ " [0.4824, 0.9008, 0.8741],\n",
+ " [0.1715, 0.1757, 0.1845],\n",
+ " ...,\n",
+ " [0.8741, 0.6594, 0.2610],\n",
+ " [0.0092, 0.1984, 0.1955],\n",
+ " [0.4236, 0.4182, 0.0251]],\n",
+ "\n",
+ " [[0.9174, 0.1661, 0.5852],\n",
+ " [0.1837, 0.2351, 0.3810],\n",
+ " [0.3726, 0.4808, 0.8732],\n",
+ " ...,\n",
+ " [0.6794, 0.0554, 0.9202],\n",
+ " [0.0864, 0.8750, 0.3558],\n",
+ " [0.8445, 0.9759, 0.4934]],\n",
+ "\n",
+ " [[0.1600, 0.2635, 0.7194],\n",
+ " [0.9488, 0.3405, 0.3647],\n",
+ " [0.6683, 0.5168, 0.9592],\n",
+ " ...,\n",
+ " [0.0521, 0.0140, 0.2445],\n",
+ " [0.3596, 0.3999, 0.2730],\n",
+ " [0.5926, 0.9877, 0.7784]],\n",
+ "\n",
+ " ...,\n",
+ "\n",
+ " [[0.4794, 0.5635, 0.3764],\n",
+ " [0.9124, 0.6094, 0.5059],\n",
+ " [0.4528, 0.4447, 0.5021],\n",
+ " ...,\n",
+ " [0.0089, 0.4816, 0.8727],\n",
+ " [0.2173, 0.6296, 0.2347],\n",
+ " [0.2028, 0.9931, 0.7201]],\n",
+ "\n",
+ " [[0.3116, 0.6459, 0.4703],\n",
+ " [0.0148, 0.2345, 0.7149],\n",
+ " [0.8393, 0.5804, 0.6691],\n",
+ " ...,\n",
+ " [0.2105, 0.9460, 0.2696],\n",
+ " [0.5918, 0.9295, 0.2616],\n",
+ " [0.2537, 0.7819, 0.4700]],\n",
+ "\n",
+ " [[0.6654, 0.1200, 0.5841],\n",
+ " [0.9147, 0.5522, 0.6529],\n",
+ " [0.1799, 0.5276, 0.5415],\n",
+ " ...,\n",
+ " [0.7536, 0.4346, 0.8793],\n",
+ " [0.3793, 0.1750, 0.7792],\n",
+ " [0.9266, 0.8325, 0.9974]]])"
+ ]
+ },
+ "metadata": {},
+ "execution_count": 6
+ }
+ ]
+ },
+ {
+ "cell_type": "code",
+ "source": [
+ "x_permuted=x_original.permute(2, 0, 1)\n",
+ "print(x_original.shape)\n",
+ "print(x_permuted.shape)"
+ ],
+ "metadata": {
+ "colab": {
+ "base_uri": "https://localhost:8080/"
+ },
+ "id": "DD19_zvbQzHo",
+ "outputId": "1d64ce1b-eb48-47e3-90b6-7f1340e7f2b2"
+ },
+ "execution_count": 9,
+ "outputs": [
+ {
+ "output_type": "stream",
+ "name": "stdout",
+ "text": [
+ "torch.Size([224, 224, 3])\n",
+ "torch.Size([3, 224, 224])\n"
+ ]
+ }
+ ]
+ },
+ {
+ "cell_type": "code",
+ "source": [
+ "x_original[0,0,0]"
+ ],
+ "metadata": {
+ "colab": {
+ "base_uri": "https://localhost:8080/"
+ },
+ "id": "NnPmMk4ZRF7w",
+ "outputId": "2cd5da7f-4a23-4a76-8c4a-bb982113f2a4"
+ },
+ "execution_count": 10,
+ "outputs": [
+ {
+ "output_type": "execute_result",
+ "data": {
+ "text/plain": [
+ "tensor(0.4549)"
+ ]
+ },
+ "metadata": {},
+ "execution_count": 10
+ }
+ ]
+ },
+ {
+ "cell_type": "code",
+ "source": [
+ "x_permuted[0,0,0]"
+ ],
+ "metadata": {
+ "colab": {
+ "base_uri": "https://localhost:8080/"
+ },
+ "id": "Z0ylNoAARgTo",
+ "outputId": "ddca0298-cddf-4048-9b71-a791655e5bed"
+ },
+ "execution_count": 11,
+ "outputs": [
+ {
+ "output_type": "execute_result",
+ "data": {
+ "text/plain": [
+ "tensor(0.4549)"
+ ]
+ },
+ "metadata": {},
+ "execution_count": 11
+ }
+ ]
+ },
+ {
+ "cell_type": "code",
+ "source": [
+ "x_original[0,0,0]=0.989"
+ ],
+ "metadata": {
+ "id": "RXw0xXsDRi4L"
+ },
+ "execution_count": 13,
+ "outputs": []
+ },
+ {
+ "cell_type": "code",
+ "source": [
+ "x_original[0,0,0]"
+ ],
+ "metadata": {
+ "colab": {
+ "base_uri": "https://localhost:8080/"
+ },
+ "id": "1sFdV6wzRo3f",
+ "outputId": "1cf87d2c-6d88-453a-d136-0f625a2800f1"
+ },
+ "execution_count": 14,
+ "outputs": [
+ {
+ "output_type": "execute_result",
+ "data": {
+ "text/plain": [
+ "tensor(0.9890)"
+ ]
+ },
+ "metadata": {},
+ "execution_count": 14
+ }
+ ]
+ },
+ {
+ "cell_type": "code",
+ "source": [
+ "x_permuted[0,0,0]"
+ ],
+ "metadata": {
+ "colab": {
+ "base_uri": "https://localhost:8080/"
+ },
+ "id": "xTX-hx2SR1wp",
+ "outputId": "0d4908c4-c3bc-44e3-8ec6-1487104cc209"
+ },
+ "execution_count": 15,
+ "outputs": [
+ {
+ "output_type": "execute_result",
+ "data": {
+ "text/plain": [
+ "tensor(0.9890)"
+ ]
+ },
+ "metadata": {},
+ "execution_count": 15
+ }
+ ]
+ },
+ {
+ "cell_type": "code",
+ "source": [
+ "x=torch.arange(1,10).reshape(1,3,3)\n",
+ "x, x.shape"
+ ],
+ "metadata": {
+ "colab": {
+ "base_uri": "https://localhost:8080/"
+ },
+ "id": "mZomOe7gR4Q8",
+ "outputId": "0b3c922f-ec11-46de-b8a5-9f9533d866ad"
+ },
+ "execution_count": 18,
+ "outputs": [
+ {
+ "output_type": "execute_result",
+ "data": {
+ "text/plain": [
+ "(tensor([[[1, 2, 3],\n",
+ " [4, 5, 6],\n",
+ " [7, 8, 9]]]),\n",
+ " torch.Size([1, 3, 3]))"
+ ]
+ },
+ "metadata": {},
+ "execution_count": 18
+ }
+ ]
+ },
+ {
+ "cell_type": "code",
+ "source": [
+ "x[0]"
+ ],
+ "metadata": {
+ "colab": {
+ "base_uri": "https://localhost:8080/"
+ },
+ "id": "3y7v4SQvSBs1",
+ "outputId": "8c53307d-e628-404d-db66-56c6bdffab7c"
+ },
+ "execution_count": 19,
+ "outputs": [
+ {
+ "output_type": "execute_result",
+ "data": {
+ "text/plain": [
+ "tensor([[1, 2, 3],\n",
+ " [4, 5, 6],\n",
+ " [7, 8, 9]])"
+ ]
+ },
+ "metadata": {},
+ "execution_count": 19
+ }
+ ]
+ },
+ {
+ "cell_type": "code",
+ "source": [
+ "x[0][0]"
+ ],
+ "metadata": {
+ "colab": {
+ "base_uri": "https://localhost:8080/"
+ },
+ "id": "hf9uG4xLSNya",
+ "outputId": "3075bc42-9ffa-426b-8a86-95628ffcd824"
+ },
+ "execution_count": 21,
+ "outputs": [
+ {
+ "output_type": "execute_result",
+ "data": {
+ "text/plain": [
+ "tensor([1, 2, 3])"
+ ]
+ },
+ "metadata": {},
+ "execution_count": 21
+ }
+ ]
+ },
+ {
+ "cell_type": "code",
+ "source": [
+ "x[0][0][0]"
+ ],
+ "metadata": {
+ "colab": {
+ "base_uri": "https://localhost:8080/"
+ },
+ "id": "zA4G2Se4SRB3",
+ "outputId": "324312d2-ed0a-49eb-f81f-e904e53992fe"
+ },
+ "execution_count": 22,
+ "outputs": [
+ {
+ "output_type": "execute_result",
+ "data": {
+ "text/plain": [
+ "tensor(1)"
+ ]
+ },
+ "metadata": {},
+ "execution_count": 22
+ }
+ ]
+ },
+ {
+ "cell_type": "code",
+ "source": [
+ "x[0][2][2]"
+ ],
+ "metadata": {
+ "colab": {
+ "base_uri": "https://localhost:8080/"
+ },
+ "id": "Mwy3zmKKSdbk",
+ "outputId": "d35172c3-b099-40a6-ddf1-a453c2adfa44"
+ },
+ "execution_count": 23,
+ "outputs": [
+ {
+ "output_type": "execute_result",
+ "data": {
+ "text/plain": [
+ "tensor(9)"
+ ]
+ },
+ "metadata": {},
+ "execution_count": 23
+ }
+ ]
+ },
+ {
+ "cell_type": "code",
+ "source": [
+ "x[:,1,1]"
+ ],
+ "metadata": {
+ "colab": {
+ "base_uri": "https://localhost:8080/"
+ },
+ "id": "fE3nCM1KS7XT",
+ "outputId": "01f5d755-9737-4235-9f73-dce89ff6ba16"
+ },
+ "execution_count": 24,
+ "outputs": [
+ {
+ "output_type": "execute_result",
+ "data": {
+ "text/plain": [
+ "tensor([5])"
+ ]
+ },
+ "metadata": {},
+ "execution_count": 24
+ }
+ ]
+ },
+ {
+ "cell_type": "code",
+ "source": [
+ "x[0,0,:]"
+ ],
+ "metadata": {
+ "colab": {
+ "base_uri": "https://localhost:8080/"
+ },
+ "id": "luNDINKNTTxp",
+ "outputId": "091195ef-2f71-4602-e95f-529a69193150"
+ },
+ "execution_count": 25,
+ "outputs": [
+ {
+ "output_type": "execute_result",
+ "data": {
+ "text/plain": [
+ "tensor([1, 2, 3])"
+ ]
+ },
+ "metadata": {},
+ "execution_count": 25
+ }
+ ]
+ },
+ {
+ "cell_type": "code",
+ "source": [
+ "x[0,:,2]"
+ ],
+ "metadata": {
+ "colab": {
+ "base_uri": "https://localhost:8080/"
+ },
+ "id": "KG8A4xbfThCL",
+ "outputId": "5866bc41-9241-4619-be7b-e9206b3f80ab"
+ },
+ "execution_count": 26,
+ "outputs": [
+ {
+ "output_type": "execute_result",
+ "data": {
+ "text/plain": [
+ "tensor([3, 6, 9])"
+ ]
+ },
+ "metadata": {},
+ "execution_count": 26
+ }
+ ]
+ },
+ {
+ "cell_type": "code",
+ "source": [
+ "import numpy as np"
+ ],
+ "metadata": {
+ "id": "CZ3PX0qlTwHJ"
+ },
+ "execution_count": 27,
+ "outputs": []
+ },
+ {
+ "cell_type": "code",
+ "source": [
+ "array = np.arange(1.0, 8.0)"
+ ],
+ "metadata": {
+ "id": "UOBeTumiT3Lf"
+ },
+ "execution_count": 28,
+ "outputs": []
+ },
+ {
+ "cell_type": "code",
+ "source": [
+ "array"
+ ],
+ "metadata": {
+ "colab": {
+ "base_uri": "https://localhost:8080/"
+ },
+ "id": "RzcO32E9UCQl",
+ "outputId": "430def24-c42c-461f-e5e7-398544c695d3"
+ },
+ "execution_count": 29,
+ "outputs": [
+ {
+ "output_type": "execute_result",
+ "data": {
+ "text/plain": [
+ "array([1., 2., 3., 4., 5., 6., 7.])"
+ ]
+ },
+ "metadata": {},
+ "execution_count": 29
+ }
+ ]
+ },
+ {
+ "cell_type": "code",
+ "source": [
+ "tensor = torch.from_numpy(array)\n",
+ "tensor"
+ ],
+ "metadata": {
+ "colab": {
+ "base_uri": "https://localhost:8080/"
+ },
+ "id": "JJIL0q1DUC6O",
+ "outputId": "8a3b1d7c-4482-4d32-f34f-9212d9d3a177"
+ },
+ "execution_count": 32,
+ "outputs": [
+ {
+ "output_type": "execute_result",
+ "data": {
+ "text/plain": [
+ "tensor([1., 2., 3., 4., 5., 6., 7.], dtype=torch.float64)"
+ ]
+ },
+ "metadata": {},
+ "execution_count": 32
+ }
+ ]
+ },
+ {
+ "cell_type": "code",
+ "source": [
+ "array[3]=11.0"
+ ],
+ "metadata": {
+ "id": "j3Ce6q3DUIEK"
+ },
+ "execution_count": 33,
+ "outputs": []
+ },
+ {
+ "cell_type": "code",
+ "source": [
+ "array"
+ ],
+ "metadata": {
+ "colab": {
+ "base_uri": "https://localhost:8080/"
+ },
+ "id": "dc_BCVdjUsCc",
+ "outputId": "65537325-8b11-4f36-fc73-e56f30d6a036"
+ },
+ "execution_count": 34,
+ "outputs": [
+ {
+ "output_type": "execute_result",
+ "data": {
+ "text/plain": [
+ "array([ 1., 2., 3., 11., 5., 6., 7.])"
+ ]
+ },
+ "metadata": {},
+ "execution_count": 34
+ }
+ ]
+ },
+ {
+ "cell_type": "code",
+ "source": [
+ "tensor"
+ ],
+ "metadata": {
+ "colab": {
+ "base_uri": "https://localhost:8080/"
+ },
+ "id": "VG1e_eITUta2",
+ "outputId": "a26c5198-23b6-4a6d-d73a-ba20cd9782b8"
+ },
+ "execution_count": 35,
+ "outputs": [
+ {
+ "output_type": "execute_result",
+ "data": {
+ "text/plain": [
+ "tensor([ 1., 2., 3., 11., 5., 6., 7.], dtype=torch.float64)"
+ ]
+ },
+ "metadata": {},
+ "execution_count": 35
+ }
+ ]
+ },
+ {
+ "cell_type": "code",
+ "source": [
+ "tensor = torch.ones(7)\n",
+ "tensor, tensor.dtype\n",
+ "numpy_tensor = tensor.numpy()\n",
+ "numpy_tensor, numpy_tensor.dtype"
+ ],
+ "metadata": {
+ "colab": {
+ "base_uri": "https://localhost:8080/"
+ },
+ "id": "Swt8JF8vUuev",
+ "outputId": "c9e5bf6a-6d2c-41d6-8327-366867ffdd2d"
+ },
+ "execution_count": 37,
+ "outputs": [
+ {
+ "output_type": "execute_result",
+ "data": {
+ "text/plain": [
+ "(array([1., 1., 1., 1., 1., 1., 1.], dtype=float32), dtype('float32'))"
+ ]
+ },
+ "metadata": {},
+ "execution_count": 37
+ }
+ ]
+ },
+ {
+ "cell_type": "code",
+ "source": [
+ "import torch\n",
+ "random_tensor_A = torch.rand(3,4)\n",
+ "random_tensor_B = torch.rand(3,4)\n",
+ "print(random_tensor_A)\n",
+ "print(random_tensor_B)\n",
+ "print(random_tensor_A == random_tensor_B)"
+ ],
+ "metadata": {
+ "colab": {
+ "base_uri": "https://localhost:8080/"
+ },
+ "id": "uGcagTteVFTD",
+ "outputId": "49405790-08e7-4210-b7f1-f00b904c7eb9"
+ },
+ "execution_count": 38,
+ "outputs": [
+ {
+ "output_type": "stream",
+ "name": "stdout",
+ "text": [
+ "tensor([[0.9870, 0.6636, 0.6873, 0.8863],\n",
+ " [0.8386, 0.4169, 0.3587, 0.0265],\n",
+ " [0.2981, 0.6025, 0.5652, 0.5840]])\n",
+ "tensor([[0.9821, 0.3481, 0.0913, 0.4940],\n",
+ " [0.7495, 0.4387, 0.9582, 0.8659],\n",
+ " [0.5064, 0.6919, 0.0809, 0.9771]])\n",
+ "tensor([[False, False, False, False],\n",
+ " [False, False, False, False],\n",
+ " [False, False, False, False]])\n"
+ ]
+ }
+ ]
+ },
+ {
+ "cell_type": "code",
+ "source": [
+ "RANDOM_SEED = 42\n",
+ "torch.manual_seed(RANDOM_SEED)\n",
+ "random_tensor_C = torch.rand(3,4)\n",
+ "torch.manual_seed(RANDOM_SEED)\n",
+ "random_tensor_D = torch.rand(3,4)\n",
+ "print(random_tensor_C)\n",
+ "print(random_tensor_D)\n",
+ "print(random_tensor_C == random_tensor_D)"
+ ],
+ "metadata": {
+ "colab": {
+ "base_uri": "https://localhost:8080/"
+ },
+ "id": "HznyXyEaWjLM",
+ "outputId": "25956434-01b6-4059-9054-c9978884ddc1"
+ },
+ "execution_count": 46,
+ "outputs": [
+ {
+ "output_type": "stream",
+ "name": "stdout",
+ "text": [
+ "tensor([[0.8823, 0.9150, 0.3829, 0.9593],\n",
+ " [0.3904, 0.6009, 0.2566, 0.7936],\n",
+ " [0.9408, 0.1332, 0.9346, 0.5936]])\n",
+ "tensor([[0.8823, 0.9150, 0.3829, 0.9593],\n",
+ " [0.3904, 0.6009, 0.2566, 0.7936],\n",
+ " [0.9408, 0.1332, 0.9346, 0.5936]])\n",
+ "tensor([[True, True, True, True],\n",
+ " [True, True, True, True],\n",
+ " [True, True, True, True]])\n"
+ ]
+ }
+ ]
+ },
+ {
+ "cell_type": "code",
+ "source": [
+ "!nvidia-smi"
+ ],
+ "metadata": {
+ "colab": {
+ "base_uri": "https://localhost:8080/"
+ },
+ "id": "vltPTh0YXJSt",
+ "outputId": "807af6dc-a9ca-4301-ec32-b688dbde8be8"
+ },
+ "execution_count": 2,
+ "outputs": [
+ {
+ "output_type": "stream",
+ "name": "stdout",
+ "text": [
+ "Thu May 23 02:57:59 2024 \n",
+ "+---------------------------------------------------------------------------------------+\n",
+ "| NVIDIA-SMI 535.104.05 Driver Version: 535.104.05 CUDA Version: 12.2 |\n",
+ "|-----------------------------------------+----------------------+----------------------+\n",
+ "| GPU Name Persistence-M | Bus-Id Disp.A | Volatile Uncorr. ECC |\n",
+ "| Fan Temp Perf Pwr:Usage/Cap | Memory-Usage | GPU-Util Compute M. |\n",
+ "| | | MIG M. |\n",
+ "|=========================================+======================+======================|\n",
+ "| 0 Tesla T4 Off | 00000000:00:04.0 Off | 0 |\n",
+ "| N/A 60C P8 11W / 70W | 0MiB / 15360MiB | 0% Default |\n",
+ "| | | N/A |\n",
+ "+-----------------------------------------+----------------------+----------------------+\n",
+ " \n",
+ "+---------------------------------------------------------------------------------------+\n",
+ "| Processes: |\n",
+ "| GPU GI CI PID Type Process name GPU Memory |\n",
+ "| ID ID Usage |\n",
+ "|=======================================================================================|\n",
+ "| No running processes found |\n",
+ "+---------------------------------------------------------------------------------------+\n"
+ ]
+ }
+ ]
+ },
+ {
+ "cell_type": "code",
+ "source": [
+ "import torch\n",
+ "torch.cuda.is_available()"
+ ],
+ "metadata": {
+ "colab": {
+ "base_uri": "https://localhost:8080/"
+ },
+ "id": "L6mMyPDyYh1j",
+ "outputId": "279c5dd8-c2a8-4fbd-f321-2f5d7c6e90e6"
+ },
+ "execution_count": 3,
+ "outputs": [
+ {
+ "output_type": "execute_result",
+ "data": {
+ "text/plain": [
+ "True"
+ ]
+ },
+ "metadata": {},
+ "execution_count": 3
+ }
+ ]
+ },
+ {
+ "cell_type": "code",
+ "source": [
+ "device = \"cuda\" if torch.cuda.is_available() else \"cpu\"\n",
+ "device"
+ ],
+ "metadata": {
+ "colab": {
+ "base_uri": "https://localhost:8080/",
+ "height": 35
+ },
+ "id": "oOdiYa7ZYytx",
+ "outputId": "d73b04fc-8963-4826-9722-08d118d5ab91"
+ },
+ "execution_count": 5,
+ "outputs": [
+ {
+ "output_type": "execute_result",
+ "data": {
+ "text/plain": [
+ "'cuda'"
+ ],
+ "application/vnd.google.colaboratory.intrinsic+json": {
+ "type": "string"
+ }
+ },
+ "metadata": {},
+ "execution_count": 5
+ }
+ ]
+ },
+ {
+ "cell_type": "code",
+ "source": [
+ "torch.cuda.device_count()"
+ ],
+ "metadata": {
+ "colab": {
+ "base_uri": "https://localhost:8080/"
+ },
+ "id": "vOdsazLqZFM5",
+ "outputId": "8189cd6a-9017-4663-a652-3e15c517d9c3"
+ },
+ "execution_count": 6,
+ "outputs": [
+ {
+ "output_type": "execute_result",
+ "data": {
+ "text/plain": [
+ "1"
+ ]
+ },
+ "metadata": {},
+ "execution_count": 6
+ }
+ ]
+ },
+ {
+ "cell_type": "code",
+ "source": [
+ "tensor = torch.tensor([1,2,3], device = \"cpu\")\n",
+ "print(tensor, tensor.device)"
+ ],
+ "metadata": {
+ "colab": {
+ "base_uri": "https://localhost:8080/"
+ },
+ "id": "cdik9Vw3ZMv0",
+ "outputId": "044a68fd-83a1-409d-8e3b-655142ca0270"
+ },
+ "execution_count": 7,
+ "outputs": [
+ {
+ "output_type": "stream",
+ "name": "stdout",
+ "text": [
+ "tensor([1, 2, 3]) cpu\n"
+ ]
+ }
+ ]
+ },
+ {
+ "cell_type": "code",
+ "source": [
+ "tensor_on_gpu = tensor.to(device)\n",
+ "tensor_on_gpu"
+ ],
+ "metadata": {
+ "colab": {
+ "base_uri": "https://localhost:8080/"
+ },
+ "id": "Zmp835rrZp-z",
+ "outputId": "37fa3413-18a3-47bf-ae51-5b36ff85a3ef"
+ },
+ "execution_count": 8,
+ "outputs": [
+ {
+ "output_type": "execute_result",
+ "data": {
+ "text/plain": [
+ "tensor([1, 2, 3], device='cuda:0')"
+ ]
+ },
+ "metadata": {},
+ "execution_count": 8
+ }
+ ]
+ },
+ {
+ "cell_type": "code",
+ "source": [
+ "tensor_on_gpu.numpy()"
+ ],
+ "metadata": {
+ "colab": {
+ "base_uri": "https://localhost:8080/",
+ "height": 159
+ },
+ "id": "jhriaa8uZ1yM",
+ "outputId": "bc5a3226-1a12-4fea-8769-a44f21cdc323"
+ },
+ "execution_count": 10,
+ "outputs": [
+ {
+ "output_type": "error",
+ "ename": "TypeError",
+ "evalue": "can't convert cuda:0 device type tensor to numpy. Use Tensor.cpu() to copy the tensor to host memory first.",
+ "traceback": [
+ "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
+ "\u001b[0;31mTypeError\u001b[0m Traceback (most recent call last)",
+ "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m()\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0mtensor_on_gpu\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mnumpy\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m",
+ "\u001b[0;31mTypeError\u001b[0m: can't convert cuda:0 device type tensor to numpy. Use Tensor.cpu() to copy the tensor to host memory first."
+ ]
+ }
+ ]
+ },
+ {
+ "cell_type": "code",
+ "source": [
+ "tensor_on_cpu = tensor_on_gpu.cpu().numpy()"
+ ],
+ "metadata": {
+ "id": "LHGXK3GgaOzL"
+ },
+ "execution_count": 12,
+ "outputs": []
+ },
+ {
+ "cell_type": "code",
+ "source": [],
+ "metadata": {
+ "id": "j-El4LlCajfq"
+ },
+ "execution_count": null,
+ "outputs": []
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "\n---\n\n**إخلاء المسؤولية**: \nتمت ترجمة هذا المستند باستخدام خدمة الترجمة الآلية [Co-op Translator](https://github.com/Azure/co-op-translator). بينما نسعى لتحقيق الدقة، يرجى العلم أن الترجمات الآلية قد تحتوي على أخطاء أو عدم دقة. يجب اعتبار المستند الأصلي بلغته الأصلية هو المصدر الموثوق. للحصول على معلومات حساسة أو هامة، يُوصى بالاستعانة بترجمة بشرية احترافية. نحن غير مسؤولين عن أي سوء فهم أو تفسيرات خاطئة تنشأ عن استخدام هذه الترجمة.\n"
+ ]
+ }
+ ]
+}
\ No newline at end of file
diff --git a/translations/ar/README.md b/translations/ar/README.md
new file mode 100644
index 000000000..a4693ceeb
--- /dev/null
+++ b/translations/ar/README.md
@@ -0,0 +1,177 @@
+
+[](https://github.com/microsoft/ML-For-Beginners/blob/master/LICENSE)
+[](https://GitHub.com/microsoft/ML-For-Beginners/graphs/contributors/)
+[](https://GitHub.com/microsoft/ML-For-Beginners/issues/)
+[](https://GitHub.com/microsoft/ML-For-Beginners/pulls/)
+[](http://makeapullrequest.com)
+
+[](https://GitHub.com/microsoft/ML-For-Beginners/watchers/)
+[](https://GitHub.com/microsoft/ML-For-Beginners/network/)
+[](https://GitHub.com/microsoft/ML-For-Beginners/stargazers/)
+
+### 🌐 دعم متعدد اللغات
+
+#### مدعوم عبر GitHub Action (تلقائي ومحدث دائمًا)
+
+[French](../fr/README.md) | [Spanish](../es/README.md) | [German](../de/README.md) | [Russian](../ru/README.md) | [Arabic](./README.md) | [Persian (Farsi)](../fa/README.md) | [Urdu](../ur/README.md) | [Chinese (Simplified)](../zh/README.md) | [Chinese (Traditional, Macau)](../mo/README.md) | [Chinese (Traditional, Hong Kong)](../hk/README.md) | [Chinese (Traditional, Taiwan)](../tw/README.md) | [Japanese](../ja/README.md) | [Korean](../ko/README.md) | [Hindi](../hi/README.md) | [Bengali](../bn/README.md) | [Marathi](../mr/README.md) | [Nepali](../ne/README.md) | [Punjabi (Gurmukhi)](../pa/README.md) | [Portuguese (Portugal)](../pt/README.md) | [Portuguese (Brazil)](../br/README.md) | [Italian](../it/README.md) | [Polish](../pl/README.md) | [Turkish](../tr/README.md) | [Greek](../el/README.md) | [Thai](../th/README.md) | [Swedish](../sv/README.md) | [Danish](../da/README.md) | [Norwegian](../no/README.md) | [Finnish](../fi/README.md) | [Dutch](../nl/README.md) | [Hebrew](../he/README.md) | [Vietnamese](../vi/README.md) | [Indonesian](../id/README.md) | [Malay](../ms/README.md) | [Tagalog (Filipino)](../tl/README.md) | [Swahili](../sw/README.md) | [Hungarian](../hu/README.md) | [Czech](../cs/README.md) | [Slovak](../sk/README.md) | [Romanian](../ro/README.md) | [Bulgarian](../bg/README.md) | [Serbian (Cyrillic)](../sr/README.md) | [Croatian](../hr/README.md) | [Slovenian](../sl/README.md) | [Ukrainian](../uk/README.md) | [Burmese (Myanmar)](../my/README.md)
+
+#### انضم إلى المجتمع
+
+[](https://discord.gg/kzRShWzttr)
+
+# تعلم الآلة للمبتدئين - منهج دراسي
+
+> 🌍 سافر حول العالم بينما نستكشف تعلم الآلة من خلال ثقافات العالم 🌍
+
+يسر دعاة السحابة في Microsoft تقديم منهج دراسي لمدة 12 أسبوعًا و26 درسًا حول **تعلم الآلة**. في هذا المنهج، ستتعلم ما يُطلق عليه أحيانًا **تعلم الآلة الكلاسيكي**، باستخدام مكتبة Scikit-learn بشكل أساسي وتجنب التعلم العميق، الذي يتم تغطيته في [منهج الذكاء الاصطناعي للمبتدئين](https://aka.ms/ai4beginners). قم بإقران هذه الدروس مع [منهج علم البيانات للمبتدئين](https://aka.ms/ds4beginners) أيضًا!
+
+سافر معنا حول العالم بينما نطبق هذه التقنيات الكلاسيكية على بيانات من مناطق مختلفة من العالم. يتضمن كل درس اختبارات قبل وبعد الدرس، تعليمات مكتوبة لإكمال الدرس، حل، مهمة، والمزيد. تسمح لك منهجيتنا القائمة على المشاريع بالتعلم أثناء البناء، وهي طريقة مثبتة لجعل المهارات الجديدة "تلتصق".
+
+**✍️ شكر جزيل لمؤلفينا** Jen Looper, Stephen Howell, Francesca Lazzeri, Tomomi Imura, Cassie Breviu, Dmitry Soshnikov, Chris Noring, Anirban Mukherjee, Ornella Altunyan, Ruth Yakubu و Amy Boyd
+
+**🎨 شكر أيضًا لرسامينا** Tomomi Imura, Dasani Madipalli, و Jen Looper
+
+**🙏 شكر خاص 🙏 لمؤلفي ومراجعي ومساهمي المحتوى من سفراء الطلاب في Microsoft**، وخاصة Rishit Dagli, Muhammad Sakib Khan Inan, Rohan Raj, Alexandru Petrescu, Abhishek Jaiswal, Nawrin Tabassum, Ioan Samuila، و Snigdha Agarwal
+
+**🤩 شكر إضافي لسفراء الطلاب في Microsoft Eric Wanjau, Jasleen Sondhi، و Vidushi Gupta لدروس R الخاصة بنا!**
+
+# البدء
+
+اتبع هذه الخطوات:
+1. **قم بعمل Fork للمستودع**: انقر على زر "Fork" في الزاوية العلوية اليمنى من هذه الصفحة.
+2. **قم باستنساخ المستودع**: `git clone https://github.com/microsoft/ML-For-Beginners.git`
+
+> [اعثر على جميع الموارد الإضافية لهذا الدورة في مجموعة Microsoft Learn الخاصة بنا](https://learn.microsoft.com/en-us/collections/qrqzamz1nn2wx3?WT.mc_id=academic-77952-bethanycheum)
+
+**[الطلاب](https://aka.ms/student-page)**، لاستخدام هذا المنهج، قم بعمل Fork للمستودع بالكامل إلى حساب GitHub الخاص بك وأكمل التمارين بمفردك أو مع مجموعة:
+
+- ابدأ باختبار ما قبل المحاضرة.
+- اقرأ المحاضرة وأكمل الأنشطة، مع التوقف والتفكير عند كل نقطة تحقق من المعرفة.
+- حاول إنشاء المشاريع من خلال فهم الدروس بدلاً من تشغيل كود الحل؛ ومع ذلك، يتوفر هذا الكود في مجلدات `/solution` في كل درس قائم على المشروع.
+- قم بإجراء اختبار ما بعد المحاضرة.
+- أكمل التحدي.
+- أكمل المهمة.
+- بعد إكمال مجموعة الدروس، قم بزيارة [لوحة المناقشة](https://github.com/microsoft/ML-For-Beginners/discussions) و"تعلم بصوت عالٍ" من خلال ملء نموذج PAT المناسب. PAT هو أداة تقييم تقدم وهي نموذج تقوم بملئه لتعزيز تعلمك. يمكنك أيضًا التفاعل مع نماذج PAT الأخرى حتى نتعلم معًا.
+
+> لمزيد من الدراسة، نوصي باتباع هذه [وحدات ومسارات التعلم من Microsoft Learn](https://docs.microsoft.com/en-us/users/jenlooper-2911/collections/k7o7tg1gp306q4?WT.mc_id=academic-77952-leestott).
+
+**المعلمون**، لقد قمنا [بتضمين بعض الاقتراحات](for-teachers.md) حول كيفية استخدام هذا المنهج.
+
+---
+
+## فيديوهات توضيحية
+
+بعض الدروس متوفرة كفيديوهات قصيرة. يمكنك العثور على جميع هذه الفيديوهات داخل الدروس، أو على [قائمة تشغيل تعلم الآلة للمبتدئين على قناة Microsoft Developer على YouTube](https://aka.ms/ml-beginners-videos) بالنقر على الصورة أدناه.
+
+[](https://aka.ms/ml-beginners-videos)
+
+---
+
+## تعرف على الفريق
+
+[](https://youtu.be/Tj1XWrDSYJU "Promo video")
+
+**Gif بواسطة** [Mohit Jaisal](https://linkedin.com/in/mohitjaisal)
+
+> 🎥 انقر على الصورة أعلاه لمشاهدة فيديو عن المشروع والأشخاص الذين أنشأوه!
+
+---
+
+## منهجية التعليم
+
+لقد اخترنا مبدأين تعليميين أثناء بناء هذا المنهج: التأكد من أنه عملي **قائم على المشاريع** وأنه يتضمن **اختبارات متكررة**. بالإضافة إلى ذلك، يحتوي هذا المنهج على **موضوع مشترك** يمنحه التماسك.
+
+من خلال ضمان توافق المحتوى مع المشاريع، تصبح العملية أكثر جاذبية للطلاب ويتم تعزيز الاحتفاظ بالمفاهيم. بالإضافة إلى ذلك، يحدد الاختبار منخفض المخاطر قبل الفصل نية الطالب نحو تعلم موضوع معين، بينما يضمن الاختبار الثاني بعد الفصل تعزيز الاحتفاظ. تم تصميم هذا المنهج ليكون مرنًا وممتعًا ويمكن أخذه بالكامل أو جزئيًا. تبدأ المشاريع صغيرة وتصبح أكثر تعقيدًا بحلول نهاية الدورة التي تستغرق 12 أسبوعًا. يتضمن هذا المنهج أيضًا ملحقًا حول التطبيقات الواقعية لتعلم الآلة، والذي يمكن استخدامه كائتمان إضافي أو كأساس للنقاش.
+
+> اعثر على [مدونة قواعد السلوك](CODE_OF_CONDUCT.md)، [المساهمة](CONTRIBUTING.md)، و[إرشادات الترجمة](TRANSLATIONS.md). نرحب بملاحظاتك البناءة!
+
+## يتضمن كل درس
+
+- رسم تخطيطي اختياري
+- فيديو إضافي اختياري
+- فيديو توضيحي (بعض الدروس فقط)
+- اختبار تمهيدي قبل المحاضرة
+- درس مكتوب
+- بالنسبة للدروس القائمة على المشاريع، إرشادات خطوة بخطوة حول كيفية بناء المشروع
+- نقاط تحقق من المعرفة
+- تحدي
+- قراءة إضافية
+- مهمة
+- اختبار بعد المحاضرة
+
+> **ملاحظة حول اللغات**: هذه الدروس مكتوبة بشكل أساسي بلغة Python، ولكن العديد منها متوفر أيضًا بلغة R. لإكمال درس بلغة R، انتقل إلى مجلد `/solution` وابحث عن دروس R. تتضمن امتداد .rmd الذي يمثل ملف **R Markdown** والذي يمكن تعريفه ببساطة على أنه تضمين لـ `كتل الكود` (بلغة R أو لغات أخرى) و`رأس YAML` (الذي يوجه كيفية تنسيق المخرجات مثل PDF) في مستند `Markdown`. وبالتالي، فإنه يعمل كإطار عمل تأليفي مثالي لعلم البيانات لأنه يسمح لك بدمج الكود الخاص بك، ومخرجاته، وأفكارك من خلال السماح لك بكتابتها في Markdown. علاوة على ذلك، يمكن عرض مستندات R Markdown بتنسيقات إخراج مثل PDF أو HTML أو Word.
+
+> **ملاحظة حول الاختبارات**: جميع الاختبارات موجودة في [مجلد تطبيق الاختبار](../../quiz-app)، بإجمالي 52 اختبارًا يحتوي كل منها على ثلاثة أسئلة. يتم ربطها من داخل الدروس ولكن يمكن تشغيل تطبيق الاختبار محليًا؛ اتبع التعليمات في مجلد `quiz-app` لاستضافة التطبيق محليًا أو نشره على Azure.
+
+| رقم الدرس | الموضوع | مجموعة الدروس | أهداف التعلم | الدرس المرتبط | المؤلف |
+| :-----------: | :------------------------------------------------------------: | :-------------------------------------------------: | ------------------------------------------------------------------------------------------------------------------------------- | :--------------------------------------------------------------------------------------------------------------------------------------: | :--------------------------------------------------: |
+| 01 | مقدمة في تعلم الآلة | [المقدمة](1-Introduction/README.md) | تعلم المفاهيم الأساسية وراء تعلم الآلة | [الدرس](1-Introduction/1-intro-to-ML/README.md) | محمد |
+| 02 | تاريخ تعلم الآلة | [المقدمة](1-Introduction/README.md) | تعلم التاريخ الذي يقوم عليه هذا المجال | [الدرس](1-Introduction/2-history-of-ML/README.md) | جين وأيمي |
+| 03 | الإنصاف وتعلم الآلة | [المقدمة](1-Introduction/README.md) | ما هي القضايا الفلسفية المهمة حول الإنصاف التي يجب أن يأخذها الطلاب في الاعتبار عند بناء وتطبيق نماذج تعلم الآلة؟ | [الدرس](1-Introduction/3-fairness/README.md) | تومومي |
+| 04 | تقنيات تعلم الآلة | [المقدمة](1-Introduction/README.md) | ما هي التقنيات التي يستخدمها الباحثون في تعلم الآلة لبناء نماذج تعلم الآلة؟ | [الدرس](1-Introduction/4-techniques-of-ML/README.md) | كريس وجين |
+| 05 | مقدمة في الانحدار | [Regression](2-Regression/README.md) | ابدأ باستخدام Python و Scikit-learn لنماذج الانحدار |
+
|
+| 09 | تطبيق ويب 🔌 | [Web App](3-Web-App/README.md) | بناء تطبيق ويب لاستخدام النموذج المدرب | [Python](3-Web-App/1-Web-App/README.md) | جين |
+| 10 | مقدمة في التصنيف | [Classification](4-Classification/README.md) | تنظيف البيانات وتحضيرها وتصورها؛ مقدمة في التصنيف |
|
+| 13 | المأكولات الآسيوية والهندية اللذيذة 🍜 | [Classification](4-Classification/README.md) | بناء تطبيق ويب للتوصيات باستخدام النموذج الخاص بك | [Python](4-Classification/4-Applied/README.md) | جين |
+| 14 | مقدمة في التجميع | [Clustering](5-Clustering/README.md) | تنظيف البيانات وتحضيرها وتصورها؛ مقدمة في التجميع |
|
+| 16 | مقدمة في معالجة اللغة الطبيعية ☕️ | [Natural language processing](6-NLP/README.md) | تعلم الأساسيات حول معالجة اللغة الطبيعية من خلال بناء روبوت بسيط | [Python](6-NLP/1-Introduction-to-NLP/README.md) | ستيفن |
+| 17 | مهام معالجة اللغة الطبيعية الشائعة ☕️ | [Natural language processing](6-NLP/README.md) | تعميق معرفتك بمعالجة اللغة الطبيعية من خلال فهم المهام الشائعة المطلوبة عند التعامل مع هياكل اللغة | [Python](6-NLP/2-Tasks/README.md) | ستيفن |
+| 18 | الترجمة وتحليل المشاعر ♥️ | [Natural language processing](6-NLP/README.md) | الترجمة وتحليل المشاعر مع جين أوستن | [Python](6-NLP/3-Translation-Sentiment/README.md) | ستيفن |
+| 19 | الفنادق الرومانسية في أوروبا ♥️ | [Natural language processing](6-NLP/README.md) | تحليل المشاعر مع مراجعات الفنادق 1 | [Python](6-NLP/4-Hotel-Reviews-1/README.md) | ستيفن |
+| 20 | الفنادق الرومانسية في أوروبا ♥️ | [Natural language processing](6-NLP/README.md) | تحليل المشاعر مع مراجعات الفنادق 2 | [Python](6-NLP/5-Hotel-Reviews-2/README.md) | ستيفن |
+| 21 | مقدمة في التنبؤ بالسلاسل الزمنية | [Time series](7-TimeSeries/README.md) | مقدمة في التنبؤ بالسلاسل الزمنية | [Python](7-TimeSeries/1-Introduction/README.md) | فرانشيسكا |
+| 22 | ⚡️ استخدام الطاقة في العالم ⚡️ - التنبؤ بالسلاسل الزمنية باستخدام ARIMA | [Time series](7-TimeSeries/README.md) | التنبؤ بالسلاسل الزمنية باستخدام ARIMA | [Python](7-TimeSeries/2-ARIMA/README.md) | فرانشيسكا |
+| 23 | ⚡️ استخدام الطاقة في العالم ⚡️ - التنبؤ بالسلاسل الزمنية باستخدام SVR | [Time series](7-TimeSeries/README.md) | التنبؤ بالسلاسل الزمنية باستخدام Support Vector Regressor | [Python](7-TimeSeries/3-SVR/README.md) | أنيربان |
+| 24 | مقدمة في التعلم المعزز | [Reinforcement learning](8-Reinforcement/README.md) | مقدمة في التعلم المعزز باستخدام Q-Learning | [Python](8-Reinforcement/1-QLearning/README.md) | ديمتري |
+| 25 | ساعد بيتر في تجنب الذئب! 🐺 | [Reinforcement learning](8-Reinforcement/README.md) | Gym التعلم المعزز | [Python](8-Reinforcement/2-Gym/README.md) | ديمتري |
+| Postscript | سيناريوهات وتطبيقات تعلم الآلة في العالم الحقيقي | [ML in the Wild](9-Real-World/README.md) | تطبيقات مثيرة وكاشفة لتعلم الآلة الكلاسيكي | [Lesson](9-Real-World/1-Applications/README.md) | الفريق |
+| Postscript | تصحيح النماذج في تعلم الآلة باستخدام لوحة معلومات RAI | [ML in the Wild](9-Real-World/README.md) | تصحيح النماذج في تعلم الآلة باستخدام مكونات لوحة معلومات الذكاء الاصطناعي المسؤول | [Lesson](9-Real-World/2-Debugging-ML-Models/README.md) | روث ياكوب |
+
+> [اعثر على جميع الموارد الإضافية لهذه الدورة في مجموعة Microsoft Learn الخاصة بنا](https://learn.microsoft.com/en-us/collections/qrqzamz1nn2wx3?WT.mc_id=academic-77952-bethanycheum)
+
+## الوصول دون اتصال
+
+يمكنك تشغيل هذا التوثيق دون اتصال باستخدام [Docsify](https://docsify.js.org/#/). قم بعمل Fork لهذا المستودع، [قم بتثبيت Docsify](https://docsify.js.org/#/quickstart) على جهازك المحلي، ثم في المجلد الجذري لهذا المستودع، اكتب `docsify serve`. سيتم تشغيل الموقع على المنفذ 3000 على localhost الخاص بك: `localhost:3000`.
+
+## ملفات PDF
+
+اعثر على ملف PDF للمناهج مع الروابط [هنا](https://microsoft.github.io/ML-For-Beginners/pdf/readme.pdf).
+
+## 🎒 دورات أخرى
+
+فريقنا يقدم دورات أخرى! تحقق من:
+
+- [الذكاء الاصطناعي التوليدي للمبتدئين](https://aka.ms/genai-beginners)
+- [الذكاء الاصطناعي التوليدي للمبتدئين .NET](https://github.com/microsoft/Generative-AI-for-beginners-dotnet)
+- [الذكاء الاصطناعي التوليدي باستخدام JavaScript](https://github.com/microsoft/generative-ai-with-javascript)
+- [الذكاء الاصطناعي التوليدي باستخدام Java](https://github.com/microsoft/Generative-AI-for-beginners-java)
+- [الذكاء الاصطناعي للمبتدئين](https://aka.ms/ai-beginners)
+- [علم البيانات للمبتدئين](https://aka.ms/datascience-beginners)
+- [تعلم الآلة للمبتدئين](https://aka.ms/ml-beginners)
+- [الأمن السيبراني للمبتدئين](https://github.com/microsoft/Security-101)
+- [تطوير الويب للمبتدئين](https://aka.ms/webdev-beginners)
+- [إنترنت الأشياء للمبتدئين](https://aka.ms/iot-beginners)
+- [تطوير الواقع الممتد للمبتدئين](https://github.com/microsoft/xr-development-for-beginners)
+- [إتقان GitHub Copilot للبرمجة الزوجية](https://github.com/microsoft/Mastering-GitHub-Copilot-for-Paired-Programming)
+- [إتقان GitHub Copilot لمطوري C#/.NET](https://github.com/microsoft/mastering-github-copilot-for-dotnet-csharp-developers)
+- [اختر مغامرتك الخاصة مع Copilot](https://github.com/microsoft/CopilotAdventures)
+
+---
+
+**إخلاء المسؤولية**:
+تم ترجمة هذا المستند باستخدام خدمة الترجمة بالذكاء الاصطناعي [Co-op Translator](https://github.com/Azure/co-op-translator). بينما نسعى لتحقيق الدقة، يرجى العلم أن الترجمات الآلية قد تحتوي على أخطاء أو معلومات غير دقيقة. يجب اعتبار المستند الأصلي بلغته الأصلية المصدر الرسمي. للحصول على معلومات حاسمة، يُوصى بالاستعانة بترجمة بشرية احترافية. نحن غير مسؤولين عن أي سوء فهم أو تفسيرات خاطئة تنشأ عن استخدام هذه الترجمة.
\ No newline at end of file
diff --git a/translations/ar/SECURITY.md b/translations/ar/SECURITY.md
new file mode 100644
index 000000000..dcc1cf14b
--- /dev/null
+++ b/translations/ar/SECURITY.md
@@ -0,0 +1,51 @@
+
+## الأمان
+
+تأخذ Microsoft أمان منتجاتها وخدماتها البرمجية على محمل الجد، بما في ذلك جميع مستودعات الشيفرة المصدرية التي تُدار من خلال منظماتنا على GitHub، والتي تشمل [Microsoft](https://github.com/Microsoft)، [Azure](https://github.com/Azure)، [DotNet](https://github.com/dotnet)، [AspNet](https://github.com/aspnet)، [Xamarin](https://github.com/xamarin)، و[منظماتنا على GitHub](https://opensource.microsoft.com/).
+
+إذا كنت تعتقد أنك قد وجدت ثغرة أمنية في أي مستودع مملوك لـ Microsoft وتطابق [تعريف Microsoft للثغرة الأمنية](https://docs.microsoft.com/previous-versions/tn-archive/cc751383(v=technet.10)?WT.mc_id=academic-77952-leestott)، يرجى الإبلاغ عنها كما هو موضح أدناه.
+
+## الإبلاغ عن المشكلات الأمنية
+
+**يرجى عدم الإبلاغ عن الثغرات الأمنية من خلال قضايا GitHub العامة.**
+
+بدلاً من ذلك، يرجى الإبلاغ عنها إلى مركز استجابة أمان Microsoft (MSRC) عبر الرابط [https://msrc.microsoft.com/create-report](https://msrc.microsoft.com/create-report).
+
+إذا كنت تفضل الإرسال دون تسجيل الدخول، يمكنك إرسال بريد إلكتروني إلى [secure@microsoft.com](mailto:secure@microsoft.com). إذا أمكن، قم بتشفير رسالتك باستخدام مفتاح PGP الخاص بنا؛ يمكنك تنزيله من [صفحة مفتاح PGP لمركز استجابة أمان Microsoft](https://www.microsoft.com/en-us/msrc/pgp-key-msrc).
+
+يُفترض أن تتلقى ردًا خلال 24 ساعة. إذا لم يحدث ذلك لأي سبب، يرجى المتابعة عبر البريد الإلكتروني للتأكد من أننا تلقينا رسالتك الأصلية. يمكن العثور على معلومات إضافية على [microsoft.com/msrc](https://www.microsoft.com/msrc).
+
+يرجى تضمين المعلومات المطلوبة أدناه (قدر الإمكان) لمساعدتنا على فهم طبيعة ونطاق المشكلة المحتملة بشكل أفضل:
+
+ * نوع المشكلة (مثل: تجاوز سعة المخزن المؤقت، حقن SQL، البرمجة النصية عبر المواقع، إلخ.)
+ * المسارات الكاملة لملف/ملفات المصدر المرتبطة بظهور المشكلة
+ * موقع الشيفرة المصدرية المتأثرة (علامة/فرع/التزام أو رابط مباشر)
+ * أي إعداد خاص مطلوب لإعادة إنتاج المشكلة
+ * تعليمات خطوة بخطوة لإعادة إنتاج المشكلة
+ * كود إثبات المفهوم أو كود الاستغلال (إن أمكن)
+ * تأثير المشكلة، بما في ذلك كيفية استغلال المهاجم للمشكلة
+
+ستساعدنا هذه المعلومات في تصنيف تقريرك بشكل أسرع.
+
+إذا كنت تقدم تقريرًا ضمن برنامج مكافآت الأخطاء، فإن التقارير الأكثر اكتمالاً يمكن أن تساهم في الحصول على مكافأة أعلى. يرجى زيارة صفحة [برنامج مكافآت الأخطاء من Microsoft](https://microsoft.com/msrc/bounty) للحصول على مزيد من التفاصيل حول برامجنا النشطة.
+
+## اللغات المفضلة
+
+نفضل أن تكون جميع الاتصالات باللغة الإنجليزية.
+
+## السياسة
+
+تتبع Microsoft مبدأ [الإفصاح المنسق عن الثغرات الأمنية](https://www.microsoft.com/en-us/msrc/cvd).
+
+---
+
+**إخلاء المسؤولية**:
+تمت ترجمة هذا المستند باستخدام خدمة الترجمة الآلية [Co-op Translator](https://github.com/Azure/co-op-translator). بينما نسعى لتحقيق الدقة، يرجى العلم أن الترجمات الآلية قد تحتوي على أخطاء أو معلومات غير دقيقة. يجب اعتبار المستند الأصلي بلغته الأصلية هو المصدر الموثوق. للحصول على معلومات حساسة أو هامة، يُوصى بالاستعانة بترجمة بشرية احترافية. نحن غير مسؤولين عن أي سوء فهم أو تفسيرات خاطئة تنشأ عن استخدام هذه الترجمة.
\ No newline at end of file
diff --git a/translations/ar/SUPPORT.md b/translations/ar/SUPPORT.md
new file mode 100644
index 000000000..45c8a7841
--- /dev/null
+++ b/translations/ar/SUPPORT.md
@@ -0,0 +1,24 @@
+
+# الدعم
+## كيفية الإبلاغ عن المشكلات والحصول على المساعدة
+
+يستخدم هذا المشروع GitHub Issues لتتبع الأخطاء وطلبات الميزات. يرجى البحث في المشكلات الموجودة مسبقًا قبل الإبلاغ عن مشكلات جديدة لتجنب التكرار. للإبلاغ عن مشكلات جديدة، قم بتقديم خطأك أو طلب الميزة كقضية جديدة.
+
+للحصول على المساعدة والأسئلة حول استخدام هذا المشروع، قم بتقديم قضية.
+
+## سياسة دعم Microsoft
+
+الدعم لهذا المستودع يقتصر على الموارد المذكورة أعلاه.
+
+---
+
+**إخلاء المسؤولية**:
+تم ترجمة هذا المستند باستخدام خدمة الترجمة بالذكاء الاصطناعي [Co-op Translator](https://github.com/Azure/co-op-translator). بينما نسعى لتحقيق الدقة، يرجى العلم أن الترجمات الآلية قد تحتوي على أخطاء أو معلومات غير دقيقة. يجب اعتبار المستند الأصلي بلغته الأصلية المصدر الرسمي. للحصول على معلومات حاسمة، يُوصى بالاستعانة بترجمة بشرية احترافية. نحن غير مسؤولين عن أي سوء فهم أو تفسيرات خاطئة تنشأ عن استخدام هذه الترجمة.
\ No newline at end of file
diff --git a/translations/ar/docs/_sidebar.md b/translations/ar/docs/_sidebar.md
new file mode 100644
index 000000000..ec520c67e
--- /dev/null
+++ b/translations/ar/docs/_sidebar.md
@@ -0,0 +1,57 @@
+
+- المقدمة
+ - [مقدمة في تعلم الآلة](../1-Introduction/1-intro-to-ML/README.md)
+ - [تاريخ تعلم الآلة](../1-Introduction/2-history-of-ML/README.md)
+ - [تعلم الآلة والإنصاف](../1-Introduction/3-fairness/README.md)
+ - [تقنيات تعلم الآلة](../1-Introduction/4-techniques-of-ML/README.md)
+
+- الانحدار
+ - [أدوات المجال](../2-Regression/1-Tools/README.md)
+ - [البيانات](../2-Regression/2-Data/README.md)
+ - [الانحدار الخطي](../2-Regression/3-Linear/README.md)
+ - [الانحدار اللوجستي](../2-Regression/4-Logistic/README.md)
+
+- بناء تطبيق ويب
+ - [تطبيق ويب](../3-Web-App/1-Web-App/README.md)
+
+- التصنيف
+ - [مقدمة في التصنيف](../4-Classification/1-Introduction/README.md)
+ - [المصنفات 1](../4-Classification/2-Classifiers-1/README.md)
+ - [المصنفات 2](../4-Classification/3-Classifiers-2/README.md)
+ - [تطبيقات تعلم الآلة](../4-Classification/4-Applied/README.md)
+
+- التجميع
+ - [تصور بياناتك](../5-Clustering/1-Visualize/README.md)
+ - [K-Means](../5-Clustering/2-K-Means/README.md)
+
+- معالجة اللغة الطبيعية
+ - [مقدمة في معالجة اللغة الطبيعية](../6-NLP/1-Introduction-to-NLP/README.md)
+ - [مهام معالجة اللغة الطبيعية](../6-NLP/2-Tasks/README.md)
+ - [الترجمة وتحليل المشاعر](../6-NLP/3-Translation-Sentiment/README.md)
+ - [مراجعات الفنادق 1](../6-NLP/4-Hotel-Reviews-1/README.md)
+ - [مراجعات الفنادق 2](../6-NLP/5-Hotel-Reviews-2/README.md)
+
+- التنبؤ بالسلاسل الزمنية
+ - [مقدمة في التنبؤ بالسلاسل الزمنية](../7-TimeSeries/1-Introduction/README.md)
+ - [ARIMA](../7-TimeSeries/2-ARIMA/README.md)
+ - [SVR](../7-TimeSeries/3-SVR/README.md)
+
+- التعلم المعزز
+ - [Q-Learning](../8-Reinforcement/1-QLearning/README.md)
+ - [Gym](../8-Reinforcement/2-Gym/README.md)
+
+- تعلم الآلة في العالم الحقيقي
+ - [التطبيقات](../9-Real-World/1-Applications/README.md)
+
+---
+
+**إخلاء المسؤولية**:
+تمت ترجمة هذه الوثيقة باستخدام خدمة الترجمة الآلية [Co-op Translator](https://github.com/Azure/co-op-translator). بينما نسعى لتحقيق الدقة، يرجى العلم أن الترجمات الآلية قد تحتوي على أخطاء أو معلومات غير دقيقة. يجب اعتبار الوثيقة الأصلية بلغتها الأصلية المصدر الموثوق. للحصول على معلومات حساسة أو هامة، يُوصى بالاستعانة بترجمة بشرية احترافية. نحن غير مسؤولين عن أي سوء فهم أو تفسيرات خاطئة ناتجة عن استخدام هذه الترجمة.
\ No newline at end of file
diff --git a/translations/ar/for-teachers.md b/translations/ar/for-teachers.md
new file mode 100644
index 000000000..35c6daf61
--- /dev/null
+++ b/translations/ar/for-teachers.md
@@ -0,0 +1,37 @@
+
+## للمعلمين
+
+هل ترغب في استخدام هذا المنهج في صفك الدراسي؟ لا تتردد!
+
+في الواقع، يمكنك استخدامه مباشرةً عبر GitHub باستخدام GitHub Classroom.
+
+للقيام بذلك، قم بعمل fork لهذا المستودع. ستحتاج إلى إنشاء مستودع لكل درس، لذا ستحتاج إلى استخراج كل مجلد إلى مستودع منفصل. بهذه الطريقة، يمكن لـ [GitHub Classroom](https://classroom.github.com/classrooms) التعامل مع كل درس بشكل منفصل.
+
+هذه [التعليمات الكاملة](https://github.blog/2020-03-18-set-up-your-digital-classroom-with-github-classroom/) ستعطيك فكرة عن كيفية إعداد صفك الدراسي.
+
+## استخدام المستودع كما هو
+
+إذا كنت ترغب في استخدام هذا المستودع كما هو حاليًا، دون استخدام GitHub Classroom، فهذا ممكن أيضًا. ستحتاج إلى التواصل مع طلابك لتحديد الدرس الذي ستعملون عليه معًا.
+
+في بيئة تعليمية عبر الإنترنت (مثل Zoom أو Teams أو غيرها)، يمكنك إنشاء غرف نقاش صغيرة للاختبارات، وتوجيه الطلاب لمساعدتهم على الاستعداد للتعلم. ثم قم بدعوة الطلاب لإجراء الاختبارات وتقديم إجاباتهم كـ "issues" في وقت محدد. يمكنك القيام بنفس الشيء مع الواجبات، إذا كنت تريد من الطلاب العمل بشكل تعاوني في العلن.
+
+إذا كنت تفضل تنسيقًا أكثر خصوصية، اطلب من طلابك عمل fork للمنهج، درسًا بدرس، إلى مستودعاتهم الخاصة على GitHub كمستودعات خاصة، ومنحك حق الوصول. بعد ذلك، يمكنهم إكمال الاختبارات والواجبات بشكل خاص وتقديمها لك عبر "issues" على مستودع صفك الدراسي.
+
+هناك العديد من الطرق لجعل هذا يعمل في بيئة صف دراسي عبر الإنترنت. يرجى إخبارنا بما يناسبك أكثر!
+
+## نرجو أن تشاركنا أفكارك!
+
+نحن نسعى لجعل هذا المنهج مفيدًا لك ولطلابك. يرجى تقديم [ملاحظاتك](https://forms.microsoft.com/Pages/ResponsePage.aspx?id=v4j5cvGGr0GRqy180BHbR2humCsRZhxNuI79cm6n0hRUQzRVVU9VVlU5UlFLWTRLWlkyQUxORTg5WS4u).
+
+---
+
+**إخلاء المسؤولية**:
+تمت ترجمة هذا المستند باستخدام خدمة الترجمة الآلية [Co-op Translator](https://github.com/Azure/co-op-translator). بينما نسعى لتحقيق الدقة، يرجى العلم أن الترجمات الآلية قد تحتوي على أخطاء أو معلومات غير دقيقة. يجب اعتبار المستند الأصلي بلغته الأصلية هو المصدر الموثوق. للحصول على معلومات حساسة أو هامة، يُوصى بالاستعانة بترجمة بشرية احترافية. نحن غير مسؤولين عن أي سوء فهم أو تفسيرات خاطئة تنشأ عن استخدام هذه الترجمة.
\ No newline at end of file
diff --git a/translations/ar/quiz-app/README.md b/translations/ar/quiz-app/README.md
new file mode 100644
index 000000000..798a1ebf2
--- /dev/null
+++ b/translations/ar/quiz-app/README.md
@@ -0,0 +1,126 @@
+
+# الاختبارات
+
+هذه الاختبارات هي اختبارات ما قبل وبعد المحاضرات لمنهج تعلم الآلة على الرابط https://aka.ms/ml-beginners
+
+## إعداد المشروع
+
+```
+npm install
+```
+
+### التجميع وإعادة التحميل السريع للتطوير
+
+```
+npm run serve
+```
+
+### التجميع والتصغير للإنتاج
+
+```
+npm run build
+```
+
+### التحقق من الأخطاء وإصلاح الملفات
+
+```
+npm run lint
+```
+
+### تخصيص الإعدادات
+
+راجع [مرجع الإعدادات](https://cli.vuejs.org/config/).
+
+الشكر: شكراً للإصدار الأصلي لهذا التطبيق الخاص بالاختبارات: https://github.com/arpan45/simple-quiz-vue
+
+## النشر على Azure
+
+إليك دليل خطوة بخطوة لمساعدتك على البدء:
+
+1. نسخ مستودع GitHub
+تأكد من أن كود تطبيق الويب الثابت موجود في مستودع GitHub الخاص بك. قم بنسخ هذا المستودع.
+
+2. إنشاء تطبيق ويب ثابت على Azure
+- قم بإنشاء [حساب Azure](http://azure.microsoft.com)
+- انتقل إلى [بوابة Azure](https://portal.azure.com)
+- انقر على "إنشاء مورد" وابحث عن "تطبيق ويب ثابت".
+- انقر على "إنشاء".
+
+3. إعداد تطبيق الويب الثابت
+- الأساسيات: الاشتراك: اختر اشتراك Azure الخاص بك.
+- مجموعة الموارد: قم بإنشاء مجموعة موارد جديدة أو استخدم مجموعة موجودة.
+- الاسم: قدم اسمًا لتطبيق الويب الثابت الخاص بك.
+- المنطقة: اختر المنطقة الأقرب لمستخدميك.
+
+- #### تفاصيل النشر:
+- المصدر: اختر "GitHub".
+- حساب GitHub: قم بتفويض Azure للوصول إلى حساب GitHub الخاص بك.
+- المنظمة: اختر المنظمة الخاصة بك على GitHub.
+- المستودع: اختر المستودع الذي يحتوي على تطبيق الويب الثابت الخاص بك.
+- الفرع: اختر الفرع الذي تريد النشر منه.
+
+- #### تفاصيل البناء:
+- إعدادات البناء: اختر الإطار الذي تم بناء تطبيقك عليه (مثل React، Angular، Vue، إلخ).
+- موقع التطبيق: حدد المجلد الذي يحتوي على كود التطبيق الخاص بك (مثل / إذا كان في الجذر).
+- موقع API: إذا كان لديك API، حدد موقعه (اختياري).
+- موقع الإخراج: حدد المجلد الذي يتم فيه إنشاء إخراج البناء (مثل build أو dist).
+
+4. المراجعة والإنشاء
+راجع إعداداتك وانقر على "إنشاء". سيقوم Azure بإعداد الموارد اللازمة وإنشاء ملف سير عمل GitHub Actions في مستودعك.
+
+5. سير عمل GitHub Actions
+سيقوم Azure تلقائيًا بإنشاء ملف سير عمل GitHub Actions في مستودعك (.github/workflows/azure-static-web-apps-.yml). هذا الملف سيتولى عملية البناء والنشر.
+
+6. مراقبة النشر
+انتقل إلى علامة التبويب "الإجراءات" في مستودع GitHub الخاص بك.
+يجب أن ترى سير عمل قيد التشغيل. هذا السير سيقوم ببناء ونشر تطبيق الويب الثابت الخاص بك على Azure.
+بمجرد اكتمال سير العمل، سيكون تطبيقك متاحًا على عنوان URL الذي يوفره Azure.
+
+### مثال على ملف سير العمل
+
+إليك مثال على ما قد يبدو عليه ملف سير عمل GitHub Actions:
+name: Azure Static Web Apps CI/CD
+```
+on:
+ push:
+ branches:
+ - main
+ pull_request:
+ types: [opened, synchronize, reopened, closed]
+ branches:
+ - main
+
+jobs:
+ build_and_deploy_job:
+ runs-on: ubuntu-latest
+ name: Build and Deploy Job
+ steps:
+ - uses: actions/checkout@v2
+ - name: Build And Deploy
+ id: builddeploy
+ uses: Azure/static-web-apps-deploy@v1
+ with:
+ azure_static_web_apps_api_token: ${{ secrets.AZURE_STATIC_WEB_APPS_API_TOKEN }}
+ repo_token: ${{ secrets.GITHUB_TOKEN }}
+ action: "upload"
+ app_location: "/quiz-app" # App source code path
+ api_location: ""API source code path optional
+ output_location: "dist" #Built app content directory - optional
+```
+
+### موارد إضافية
+- [وثائق تطبيقات الويب الثابتة على Azure](https://learn.microsoft.com/azure/static-web-apps/getting-started)
+- [وثائق GitHub Actions](https://docs.github.com/actions/use-cases-and-examples/deploying/deploying-to-azure-static-web-app)
+
+---
+
+**إخلاء المسؤولية**:
+تمت ترجمة هذا المستند باستخدام خدمة الترجمة بالذكاء الاصطناعي [Co-op Translator](https://github.com/Azure/co-op-translator). بينما نسعى لتحقيق الدقة، يرجى العلم أن الترجمات الآلية قد تحتوي على أخطاء أو عدم دقة. يجب اعتبار المستند الأصلي بلغته الأصلية المصدر الموثوق. للحصول على معلومات حساسة أو هامة، يُوصى بالاستعانة بترجمة بشرية احترافية. نحن غير مسؤولين عن أي سوء فهم أو تفسيرات خاطئة تنشأ عن استخدام هذه الترجمة.
\ No newline at end of file
diff --git a/translations/ar/sketchnotes/LICENSE.md b/translations/ar/sketchnotes/LICENSE.md
new file mode 100644
index 000000000..706459f25
--- /dev/null
+++ b/translations/ar/sketchnotes/LICENSE.md
@@ -0,0 +1,116 @@
+
+نَسب-المشاركة بالمثل 4.0 الدولية
+
+=======================================================================
+
+مؤسسة المشاع الإبداعي ("Creative Commons") ليست مكتب محاماة ولا تقدم خدمات قانونية أو استشارات قانونية. توزيع تراخيص المشاع الإبداعي العامة لا ينشئ علاقة محامٍ-عميل أو أي علاقة أخرى. توفر مؤسسة المشاع الإبداعي تراخيصها والمعلومات ذات الصلة على أساس "كما هي". ولا تقدم أي ضمانات بشأن تراخيصها أو أي مواد مرخصة بموجب شروطها وأحكامها أو أي معلومات ذات صلة. وتخلي مسؤوليتها عن أي أضرار ناتجة عن استخدامها إلى أقصى حد ممكن.
+
+استخدام تراخيص المشاع الإبداعي العامة
+
+توفر تراخيص المشاع الإبداعي العامة مجموعة قياسية من الشروط والأحكام التي يمكن للمبدعين وأصحاب الحقوق الآخرين استخدامها لمشاركة الأعمال الأصلية المحمية بحقوق الطبع والنشر ومواد أخرى تخضع لحقوق معينة محددة في الترخيص العام أدناه. الاعتبارات التالية هي لأغراض إعلامية فقط، وليست شاملة، ولا تشكل جزءًا من تراخيصنا.
+
+ اعتبارات للمُرخصين: تهدف تراخيصنا العامة إلى الاستخدام من قبل أولئك الذين لديهم الصلاحية لمنح الجمهور الإذن باستخدام المواد بطرق تكون مقيدة بخلاف ذلك بموجب حقوق الطبع والنشر وحقوق معينة أخرى. تراخيصنا غير قابلة للإلغاء. يجب على المُرخصين قراءة وفهم شروط وأحكام الترخيص الذي يختارونه قبل تطبيقه. كما يجب على المُرخصين تأمين جميع الحقوق اللازمة قبل تطبيق تراخيصنا حتى يتمكن الجمهور من إعادة استخدام المواد كما هو متوقع. يجب على المُرخصين وضع علامة واضحة على أي مواد لا تخضع للترخيص. يشمل ذلك مواد أخرى مرخصة بموجب CC أو مواد مستخدمة بموجب استثناء أو قيد على حقوق الطبع والنشر. المزيد من الاعتبارات للمُرخصين:
+ wiki.creativecommons.org/Considerations_for_licensors
+
+ اعتبارات للجمهور: باستخدام أحد تراخيصنا العامة، يمنح المُرخص الجمهور الإذن باستخدام المواد المرخصة بموجب شروط وأحكام محددة. إذا لم يكن إذن المُرخص ضروريًا لأي سبب - على سبيل المثال، بسبب أي استثناء أو قيد قابل للتطبيق على حقوق الطبع والنشر - فإن هذا الاستخدام لا يخضع للتنظيم بموجب الترخيص. تمنح تراخيصنا فقط الأذونات بموجب حقوق الطبع والنشر وحقوق معينة أخرى يملك المُرخص الصلاحية لمنحها. قد يظل استخدام المواد المرخصة مقيدًا لأسباب أخرى، بما في ذلك أن يكون للآخرين حقوق طبع ونشر أو حقوق أخرى في المواد. قد يقدم المُرخص طلبات خاصة، مثل طلب وضع علامة على جميع التعديلات أو وصفها. على الرغم من أن تراخيصنا لا تتطلب ذلك، يُشجع على احترام هذه الطلبات حيثما كان ذلك معقولًا. المزيد من الاعتبارات للجمهور:
+ wiki.creativecommons.org/Considerations_for_licensees
+
+=======================================================================
+
+رخصة المشاع الإبداعي الدولية للنسب-المشاركة بالمثل 4.0
+
+من خلال ممارسة الحقوق المرخصة (المحددة أدناه)، فإنك تقبل وتوافق على الالتزام بشروط وأحكام رخصة المشاع الإبداعي الدولية للنسب-المشاركة بالمثل 4.0 ("الرخصة العامة"). بقدر ما يمكن تفسير هذه الرخصة العامة كعقد، تُمنح لك الحقوق المرخصة مقابل قبولك لهذه الشروط والأحكام، ويمنحك المُرخص هذه الحقوق مقابل الفوائد التي يتلقاها المُرخص من إتاحة المواد المرخصة بموجب هذه الشروط والأحكام.
+
+القسم 1 - التعريفات.
+
+ أ. المواد المعدلة تعني المواد الخاضعة لحقوق الطبع والنشر والحقوق المشابهة التي يتم اشتقاقها من المواد المرخصة أو تستند إليها، والتي يتم فيها ترجمة المواد المرخصة أو تعديلها أو ترتيبها أو تحويلها أو تعديلها بأي طريقة تتطلب إذنًا بموجب حقوق الطبع والنشر والحقوق المشابهة التي يحتفظ بها المُرخص. لأغراض هذه الرخصة العامة، عندما تكون المواد المرخصة عملاً موسيقيًا أو أداءً أو تسجيلًا صوتيًا، يتم دائمًا إنتاج المواد المعدلة عندما يتم مزامنة المواد المرخصة مع صورة متحركة.
+
+ ب. ترخيص المعدل يعني الترخيص الذي تطبقه على حقوق الطبع والنشر والحقوق المشابهة في مساهماتك في المواد المعدلة وفقًا لشروط وأحكام هذه الرخصة العامة.
+
+ ج. ترخيص متوافق مع BY-SA يعني ترخيصًا مدرجًا في creativecommons.org/compatiblelicenses، ومعتمدًا من قبل المشاع الإبداعي باعتباره مكافئًا جوهريًا لهذه الرخصة العامة.
+
+ د. حقوق الطبع والنشر والحقوق المشابهة تعني حقوق الطبع والنشر و/أو الحقوق المشابهة المرتبطة بها بما في ذلك، على سبيل المثال لا الحصر، الأداء، البث، التسجيل الصوتي، وحقوق قواعد البيانات الفريدة، بغض النظر عن كيفية تصنيف الحقوق أو تسميتها. لأغراض هذه الرخصة العامة، الحقوق المحددة في القسم 2(ب)(1)-(2) ليست حقوق طبع ونشر وحقوق مشابهة.
+
+ هـ. التدابير التكنولوجية الفعالة تعني تلك التدابير التي، في غياب سلطة مناسبة، لا يمكن التحايل عليها بموجب القوانين التي تفي بالالتزامات بموجب المادة 11 من معاهدة حقوق الطبع والنشر التابعة للويبو المعتمدة في 20 ديسمبر 1996، و/أو الاتفاقيات الدولية المماثلة.
+
+ و. الاستثناءات والقيود تعني الاستخدام العادل، التعامل العادل، و/أو أي استثناء أو قيد آخر على حقوق الطبع والنشر والحقوق المشابهة التي تنطبق على استخدامك للمواد المرخصة.
+
+ ز. عناصر الترخيص تعني سمات الترخيص المدرجة في اسم رخصة المشاع الإبداعي العامة. عناصر الترخيص لهذه الرخصة العامة هي النسب والمشاركة بالمثل.
+
+ ح. المواد المرخصة تعني العمل الفني أو الأدبي، قاعدة البيانات، أو المواد الأخرى التي طبق عليها المُرخص هذه الرخصة العامة.
+
+ ط. الحقوق المرخصة تعني الحقوق الممنوحة لك بموجب شروط وأحكام هذه الرخصة العامة، والتي تقتصر على جميع حقوق الطبع والنشر والحقوق المشابهة التي تنطبق على استخدامك للمواد المرخصة والتي يملك المُرخص الصلاحية لترخيصها.
+
+ ي. المُرخص يعني الفرد أو الأفراد أو الكيانات التي تمنح الحقوق بموجب هذه الرخصة العامة.
+
+ ك. المشاركة تعني توفير المواد للجمهور بأي وسيلة أو عملية تتطلب إذنًا بموجب الحقوق المرخصة، مثل النسخ، العرض العام، الأداء العام، التوزيع، النشر، التواصل، أو الاستيراد، وجعل المواد متاحة للجمهور بما في ذلك بطرق يمكن لأفراد الجمهور الوصول إليها من مكان وفي وقت يختارونهما بشكل فردي.
+
+ ل. حقوق قواعد البيانات الفريدة تعني الحقوق الأخرى غير حقوق الطبع والنشر الناتجة عن توجيه 96/9/EC للبرلمان الأوروبي والمجلس بتاريخ 11 مارس 1996 بشأن الحماية القانونية لقواعد البيانات، بصيغته المعدلة و/أو التي خلفته، وكذلك الحقوق الأخرى المكافئة جوهريًا في أي مكان في العالم.
+
+ م. أنت تعني الفرد أو الكيان الذي يمارس الحقوق المرخصة بموجب هذه الرخصة العامة. "لك" لها معنى مطابق.
+
+
+حقوقك، ثم قاعدة البيانات التي لديك فيها حقوق قاعدة البيانات الفريدة (ولكن ليس محتوياتها الفردية) تعتبر مادة معدلة،
+
+بما في ذلك لأغراض القسم 3(ب)؛ و
+ج. يجب عليك الامتثال للشروط الواردة في القسم 3(أ) إذا قمت بمشاركة جميع أو جزء كبير من محتويات قاعدة البيانات.
+
+لتجنب الشك، هذا القسم 4 يكمل ولا يحل محل التزاماتك بموجب هذه الرخصة العامة حيث تشمل الحقوق المرخصة حقوق الطبع والنشر والحقوق المشابهة الأخرى.
+
+القسم 5 - إخلاء المسؤولية عن الضمانات وتحديد المسؤولية.
+
+أ. ما لم يتم الاتفاق عليه بشكل منفصل من قبل المرخص، وبقدر الإمكان، يقدم المرخص المادة المرخصة كما هي وكما هي متوفرة، ولا يقدم أي إقرارات أو ضمانات من أي نوع بشأن المادة المرخصة، سواء كانت صريحة أو ضمنية أو قانونية أو غير ذلك. يشمل ذلك، على سبيل المثال لا الحصر، ضمانات الملكية، القابلية للتسويق، الملاءمة لغرض معين، عدم الانتهاك، غياب العيوب الكامنة أو الأخرى، الدقة، أو وجود أو غياب الأخطاء، سواء كانت معروفة أو قابلة للاكتشاف. حيث لا يُسمح بإخلاء المسؤولية عن الضمانات بالكامل أو جزئيًا، قد لا ينطبق هذا الإخلاء عليك.
+
+ب. بقدر الإمكان، لن يكون المرخص مسؤولًا تجاهك تحت أي نظرية قانونية (بما في ذلك، على سبيل المثال لا الحصر، الإهمال) أو غير ذلك عن أي خسائر مباشرة أو خاصة أو غير مباشرة أو عرضية أو تبعية أو عقابية أو نموذجية أو أخرى، أو تكاليف أو نفقات أو أضرار تنشأ عن هذه الرخصة العامة أو استخدام المادة المرخصة، حتى إذا تم إبلاغ المرخص بإمكانية حدوث مثل هذه الخسائر أو التكاليف أو النفقات أو الأضرار. حيث لا يُسمح بتحديد المسؤولية بالكامل أو جزئيًا، قد لا ينطبق هذا التحديد عليك.
+
+ج. يجب تفسير إخلاء المسؤولية عن الضمانات وتحديد المسؤولية المذكورة أعلاه بطريقة تقرب، بقدر الإمكان، إخلاء المسؤولية المطلق والتنازل عن جميع المسؤوليات.
+
+القسم 6 - المدة والإنهاء.
+
+أ. تنطبق هذه الرخصة العامة طوال مدة حقوق الطبع والنشر والحقوق المشابهة المرخصة هنا. ومع ذلك، إذا فشلت في الامتثال لهذه الرخصة العامة، فإن حقوقك بموجب هذه الرخصة العامة تنتهي تلقائيًا.
+
+ب. حيث تنتهي حقوقك في استخدام المادة المرخصة بموجب القسم 6(أ)، يتم إعادة تفعيلها:
+
+1. تلقائيًا اعتبارًا من تاريخ تصحيح الانتهاك، بشرط أن يتم تصحيحه خلال 30 يومًا من اكتشافك للانتهاك؛ أو
+2. بناءً على إعادة تفعيل صريحة من قبل المرخص.
+
+لتجنب الشك، لا يؤثر هذا القسم 6(ب) على أي حق قد يكون للمرخص في السعي للحصول على تعويضات عن انتهاكاتك لهذه الرخصة العامة.
+
+ج. لتجنب الشك، يجوز للمرخص أيضًا تقديم المادة المرخصة بموجب شروط أو شروط منفصلة أو التوقف عن توزيع المادة المرخصة في أي وقت؛ ومع ذلك، فإن القيام بذلك لن ينهي هذه الرخصة العامة.
+
+د. تبقى الأقسام 1، 5، 6، 7، و8 سارية بعد إنهاء هذه الرخصة العامة.
+
+القسم 7 - شروط وأحكام أخرى.
+
+أ. لن يكون المرخص ملزمًا بأي شروط أو أحكام إضافية أو مختلفة يتم التواصل بها من قبلك ما لم يتم الاتفاق عليها صراحة.
+
+ب. أي ترتيبات أو تفاهمات أو اتفاقيات بشأن المادة المرخصة غير مذكورة هنا تعتبر منفصلة ومستقلة عن شروط وأحكام هذه الرخصة العامة.
+
+القسم 8 - التفسير.
+
+أ. لتجنب الشك، لا تقلل هذه الرخصة العامة، ولا يجب تفسيرها على أنها تقلل أو تقيد أو تفرض شروطًا على أي استخدام للمادة المرخصة يمكن القيام به قانونيًا دون إذن بموجب هذه الرخصة العامة.
+
+ب. بقدر الإمكان، إذا تم اعتبار أي بند من هذه الرخصة العامة غير قابل للتنفيذ، يتم إصلاحه تلقائيًا إلى الحد الأدنى اللازم لجعله قابلًا للتنفيذ. إذا لم يكن بالإمكان إصلاح البند، يتم فصله من هذه الرخصة العامة دون التأثير على قابلية تنفيذ الشروط والأحكام المتبقية.
+
+ج. لن يتم التنازل عن أي شرط أو بند من هذه الرخصة العامة ولن يتم الموافقة على أي فشل في الامتثال إلا إذا تم الاتفاق عليه صراحة من قبل المرخص.
+
+د. لا يشكل أي شيء في هذه الرخصة العامة أو يمكن تفسيره على أنه تحديد أو تنازل عن أي امتيازات وحصانات تنطبق على المرخص أو عليك، بما في ذلك من العمليات القانونية لأي سلطة قضائية أو سلطة.
+
+=======================================================================
+
+ليست Creative Commons طرفًا في تراخيصها العامة. ومع ذلك، قد تختار Creative Commons تطبيق أحد تراخيصها العامة على المواد التي تنشرها وفي تلك الحالات ستعتبر "المرخص". يتم تخصيص نص تراخيص Creative Commons العامة للمجال العام بموجب CC0 Public Domain Dedication. باستثناء الغرض المحدود للإشارة إلى أن المادة مشتركة بموجب ترخيص عام من Creative Commons أو كما هو مسموح به بموجب سياسات Creative Commons المنشورة على creativecommons.org/policies، لا تسمح Creative Commons باستخدام العلامة التجارية "Creative Commons" أو أي علامة تجارية أو شعار آخر لـ Creative Commons دون موافقتها الخطية المسبقة، بما في ذلك، على سبيل المثال لا الحصر، فيما يتعلق بأي تعديلات غير مصرح بها على أي من تراخيصها العامة أو أي ترتيبات أو تفاهمات أو اتفاقيات أخرى بشأن استخدام المواد المرخصة. لتجنب الشك، لا يشكل هذا الفقرة جزءًا من التراخيص العامة.
+
+يمكن التواصل مع Creative Commons عبر creativecommons.org.
+
+---
+
+**إخلاء المسؤولية**:
+تمت ترجمة هذا المستند باستخدام خدمة الترجمة الآلية [Co-op Translator](https://github.com/Azure/co-op-translator). بينما نسعى لتحقيق الدقة، يرجى العلم أن الترجمات الآلية قد تحتوي على أخطاء أو معلومات غير دقيقة. يجب اعتبار المستند الأصلي بلغته الأصلية هو المصدر الموثوق. للحصول على معلومات حساسة أو هامة، يُوصى بالاستعانة بترجمة بشرية احترافية. نحن غير مسؤولين عن أي سوء فهم أو تفسيرات خاطئة تنشأ عن استخدام هذه الترجمة.
\ No newline at end of file
diff --git a/translations/ar/sketchnotes/README.md b/translations/ar/sketchnotes/README.md
new file mode 100644
index 000000000..a222dc3f2
--- /dev/null
+++ b/translations/ar/sketchnotes/README.md
@@ -0,0 +1,21 @@
+
+يمكن تنزيل جميع الرسومات التوضيحية للمناهج الدراسية من هنا.
+
+🖨 للطباعة بجودة عالية، تتوفر نسخ TIFF في [هذا المستودع](https://github.com/girliemac/a-picture-is-worth-a-1000-words/tree/main/ml/tiff).
+
+🎨 تم الإنشاء بواسطة: [تومومي إيمورا](https://github.com/girliemac) (تويتر: [@girlie_mac](https://twitter.com/girlie_mac))
+
+[](https://creativecommons.org/licenses/by-sa/4.0/)
+
+---
+
+**إخلاء المسؤولية**:
+تم ترجمة هذا المستند باستخدام خدمة الترجمة بالذكاء الاصطناعي [Co-op Translator](https://github.com/Azure/co-op-translator). بينما نسعى لتحقيق الدقة، يرجى العلم أن الترجمات الآلية قد تحتوي على أخطاء أو معلومات غير دقيقة. يجب اعتبار المستند الأصلي بلغته الأصلية المصدر الرسمي. للحصول على معلومات حاسمة، يُوصى بالاستعانة بترجمة بشرية احترافية. نحن غير مسؤولين عن أي سوء فهم أو تفسيرات خاطئة تنشأ عن استخدام هذه الترجمة.
\ No newline at end of file
diff --git a/translations/tl/1-Introduction/1-intro-to-ML/README.md b/translations/tl/1-Introduction/1-intro-to-ML/README.md
new file mode 100644
index 000000000..ee1f87e0f
--- /dev/null
+++ b/translations/tl/1-Introduction/1-intro-to-ML/README.md
@@ -0,0 +1,159 @@
+
+# Panimula sa machine learning
+
+## [Pre-lecture quiz](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/1/)
+
+---
+
+[](https://youtu.be/6mSx_KJxcHI "ML para sa mga baguhan - Panimula sa Machine Learning para sa mga Baguhan")
+
+> 🎥 I-click ang larawan sa itaas para sa isang maikling video na nagpapaliwanag ng araling ito.
+
+Maligayang pagdating sa kursong ito tungkol sa klasikong machine learning para sa mga baguhan! Kung ikaw man ay ganap na bago sa paksang ito o isang bihasang practitioner ng ML na nais mag-refresh ng kaalaman, ikinagagalak naming makasama ka! Layunin naming lumikha ng isang magiliw na panimula para sa iyong pag-aaral ng ML at bukas kami sa iyong [feedback](https://github.com/microsoft/ML-For-Beginners/discussions).
+
+[](https://youtu.be/h0e2HAPTGF4 "Panimula sa ML")
+
+> 🎥 I-click ang larawan sa itaas para sa isang video: Si John Guttag ng MIT ay nagpapakilala sa machine learning
+
+---
+## Pagsisimula sa machine learning
+
+Bago simulan ang kurikulum na ito, kailangan mong ihanda ang iyong computer upang magpatakbo ng mga notebook nang lokal.
+
+- **I-configure ang iyong makina gamit ang mga video na ito**. Gamitin ang mga sumusunod na link upang matutunan [kung paano mag-install ng Python](https://youtu.be/CXZYvNRIAKM) sa iyong sistema at [mag-setup ng text editor](https://youtu.be/EU8eayHWoZg) para sa development.
+- **Matutunan ang Python**. Inirerekomenda rin na magkaroon ng pangunahing kaalaman sa [Python](https://docs.microsoft.com/learn/paths/python-language/?WT.mc_id=academic-77952-leestott), isang programming language na kapaki-pakinabang para sa mga data scientist na ginagamit natin sa kursong ito.
+- **Matutunan ang Node.js at JavaScript**. Gagamit din tayo ng JavaScript sa ilang bahagi ng kursong ito kapag gumagawa ng mga web app, kaya kakailanganin mong magkaroon ng [node](https://nodejs.org) at [npm](https://www.npmjs.com/) na naka-install, pati na rin ang [Visual Studio Code](https://code.visualstudio.com/) para sa parehong Python at JavaScript development.
+- **Gumawa ng GitHub account**. Dahil natagpuan mo kami dito sa [GitHub](https://github.com), maaaring mayroon ka nang account, ngunit kung wala pa, gumawa ng isa at i-fork ang kurikulum na ito upang magamit mo ito. (Huwag kalimutang magbigay ng star 😊)
+- **Galugarin ang Scikit-learn**. Magkaroon ng kaalaman sa [Scikit-learn](https://scikit-learn.org/stable/user_guide.html), isang set ng mga ML library na binabanggit natin sa mga araling ito.
+
+---
+## Ano ang machine learning?
+
+Ang terminong 'machine learning' ay isa sa mga pinakasikat at madalas gamitin sa kasalukuyan. Malaki ang posibilidad na narinig mo na ang terminong ito kahit isang beses kung may kaalaman ka sa teknolohiya, anuman ang larangan mo. Gayunpaman, ang mekanismo ng machine learning ay nananatiling misteryo para sa karamihan. Para sa isang baguhan, maaaring nakakatakot ang paksa. Kaya mahalagang maunawaan kung ano talaga ang machine learning at matutunan ito nang paunti-unti sa pamamagitan ng mga praktikal na halimbawa.
+
+---
+## Ang hype curve
+
+
+
+> Ipinapakita ng Google Trends ang kamakailang 'hype curve' ng terminong 'machine learning'
+
+---
+## Isang misteryosong uniberso
+
+Namumuhay tayo sa isang uniberso na puno ng mga kamangha-manghang misteryo. Ang mga dakilang siyentipiko tulad nina Stephen Hawking, Albert Einstein, at marami pang iba ay inialay ang kanilang buhay sa paghahanap ng makabuluhang impormasyon upang maipaliwanag ang mga misteryo ng mundo sa paligid natin. Ito ang kalikasan ng tao sa pag-aaral: ang isang bata ay natututo ng mga bagong bagay at natutuklasan ang istruktura ng kanilang mundo habang sila ay lumalaki.
+
+---
+## Ang utak ng bata
+
+Ang utak ng isang bata at ang kanilang mga pandama ay nakakaunawa ng mga katotohanan sa kanilang paligid at unti-unting natututo ng mga nakatagong pattern ng buhay na tumutulong sa kanila na bumuo ng mga lohikal na tuntunin upang makilala ang mga natutunang pattern. Ang proseso ng pagkatuto ng utak ng tao ang dahilan kung bakit tayo ang pinaka-sopistikadong nilalang sa mundo. Ang patuloy na pagkatuto sa pamamagitan ng pagtuklas ng mga nakatagong pattern at pagkatapos ay paglikha ng mga inobasyon mula rito ay nagbibigay-daan sa atin na patuloy na umunlad. Ang kakayahang ito ay may kaugnayan sa konsepto ng [brain plasticity](https://www.simplypsychology.org/brain-plasticity.html). Sa pangkalahatan, maaari nating makita ang ilang pagkakatulad sa pagitan ng proseso ng pagkatuto ng utak ng tao at ng mga konsepto ng machine learning.
+
+---
+## Ang utak ng tao
+
+Ang [utak ng tao](https://www.livescience.com/29365-human-brain.html) ay nakakaunawa ng mga bagay mula sa totoong mundo, pinoproseso ang impormasyon, gumagawa ng mga makatuwirang desisyon, at gumagawa ng mga aksyon batay sa mga sitwasyon. Ito ang tinatawag nating matalinong pag-uugali. Kapag pinrograma natin ang isang makina upang gayahin ang prosesong ito, tinatawag itong artificial intelligence (AI).
+
+---
+## Ilang terminolohiya
+
+Bagama't maaaring nakakalito ang mga termino, ang machine learning (ML) ay isang mahalagang subset ng artificial intelligence. **Ang ML ay tumutukoy sa paggamit ng mga espesyal na algorithm upang matuklasan ang makabuluhang impormasyon at mga nakatagong pattern mula sa datos upang suportahan ang proseso ng paggawa ng desisyon**.
+
+---
+## AI, ML, Deep Learning
+
+
+
+> Isang diagram na nagpapakita ng relasyon ng AI, ML, deep learning, at data science. Infographic ni [Jen Looper](https://twitter.com/jenlooper) na inspirasyon mula sa [graphic na ito](https://softwareengineering.stackexchange.com/questions/366996/distinction-between-ai-ml-neural-networks-deep-learning-and-data-mining)
+
+---
+## Mga konseptong tatalakayin
+
+Sa kurikulum na ito, tatalakayin natin ang mga pangunahing konsepto ng machine learning na dapat malaman ng isang baguhan. Tatalakayin natin ang tinatawag na 'klasikong machine learning' gamit ang Scikit-learn, isang mahusay na library na ginagamit ng maraming mag-aaral upang matutunan ang mga batayan. Upang maunawaan ang mas malawak na konsepto ng artificial intelligence o deep learning, mahalaga ang matibay na pundasyon sa machine learning, kaya nais naming ibahagi ito dito.
+
+---
+## Sa kursong ito matututuhan mo:
+
+- mga pangunahing konsepto ng machine learning
+- kasaysayan ng ML
+- ML at pagiging patas
+- mga teknik sa regression ML
+- mga teknik sa classification ML
+- mga teknik sa clustering ML
+- mga teknik sa natural language processing ML
+- mga teknik sa time series forecasting ML
+- reinforcement learning
+- mga totoong aplikasyon ng ML
+
+---
+## Ano ang hindi natin tatalakayin
+
+- deep learning
+- neural networks
+- AI
+
+Upang gawing mas madali ang pag-aaral, iiwasan natin ang mga komplikasyon ng neural networks, 'deep learning' - ang paggawa ng mga modelong may maraming layer gamit ang neural networks - at AI, na tatalakayin natin sa ibang kurikulum. Magkakaroon din tayo ng paparating na kurikulum sa data science upang magpokus sa aspetong iyon ng mas malawak na larangan.
+
+---
+## Bakit pag-aralan ang machine learning?
+
+Ang machine learning, mula sa perspektibo ng sistema, ay tinutukoy bilang ang paggawa ng mga awtomatikong sistema na kayang matutunan ang mga nakatagong pattern mula sa datos upang makatulong sa paggawa ng matalinong desisyon.
+
+Ang motibasyong ito ay maluwag na inspirasyon mula sa kung paano natututo ang utak ng tao batay sa datos na natatanggap nito mula sa labas ng mundo.
+
+✅ Mag-isip ng isang minuto kung bakit nais ng isang negosyo na gumamit ng mga estratehiya sa machine learning kumpara sa paggawa ng isang hard-coded na sistema ng mga tuntunin.
+
+---
+## Mga aplikasyon ng machine learning
+
+Ang mga aplikasyon ng machine learning ay halos nasa lahat ng dako, at kasing laganap ng datos na dumadaloy sa ating mga lipunan, na nililikha ng ating mga smartphone, konektadong mga aparato, at iba pang mga sistema. Dahil sa napakalaking potensyal ng mga makabagong algorithm ng machine learning, patuloy na sinusuri ng mga mananaliksik ang kanilang kakayahan upang lutasin ang mga multi-dimensional at multi-disiplinaryong totoong problema na may magagandang resulta.
+
+---
+## Mga halimbawa ng aplikasyon ng ML
+
+**Maraming paraan upang magamit ang machine learning**:
+
+- Upang hulaan ang posibilidad ng sakit mula sa kasaysayan o ulat ng medikal ng isang pasyente.
+- Upang gamitin ang datos ng panahon upang hulaan ang mga kaganapan sa panahon.
+- Upang maunawaan ang damdamin ng isang teksto.
+- Upang matukoy ang pekeng balita upang mapigilan ang pagkalat ng propaganda.
+
+Ang mga larangan tulad ng pananalapi, ekonomiya, agham ng mundo, eksplorasyon ng kalawakan, biomedical engineering, kognitibong agham, at maging ang mga larangan ng humanidades ay nag-aangkop ng machine learning upang lutasin ang mga mahihirap at mabigat sa datos na problema ng kanilang larangan.
+
+---
+## Konklusyon
+
+Ang machine learning ay awtomatikong natutuklasan ang mga pattern sa pamamagitan ng paghahanap ng makabuluhang impormasyon mula sa totoong datos o nilikhang datos. Napatunayan nitong napakahalaga sa negosyo, kalusugan, at mga aplikasyon sa pananalapi, at marami pang iba.
+
+Sa malapit na hinaharap, ang pag-unawa sa mga batayan ng machine learning ay magiging mahalaga para sa mga tao mula sa anumang larangan dahil sa malawakang paggamit nito.
+
+---
+# 🚀 Hamon
+
+Gumuhit, sa papel o gamit ang isang online app tulad ng [Excalidraw](https://excalidraw.com/), ng iyong pagkaunawa sa mga pagkakaiba ng AI, ML, deep learning, at data science. Magdagdag ng ilang ideya ng mga problemang mahusay lutasin ng bawat isa sa mga teknik na ito.
+
+# [Post-lecture quiz](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/2/)
+
+---
+# Pagsusuri at Pag-aaral sa Sarili
+
+Upang matutunan pa ang tungkol sa kung paano ka maaaring magtrabaho gamit ang mga ML algorithm sa cloud, sundan ang [Learning Path](https://docs.microsoft.com/learn/paths/create-no-code-predictive-models-azure-machine-learning/?WT.mc_id=academic-77952-leestott).
+
+Kumuha ng [Learning Path](https://docs.microsoft.com/learn/modules/introduction-to-machine-learning/?WT.mc_id=academic-77952-leestott) tungkol sa mga batayan ng ML.
+
+---
+# Takdang-Aralin
+
+[Simulan ang pag-aaral](assignment.md)
+
+---
+
+**Paunawa**:
+Ang dokumentong ito ay isinalin gamit ang AI translation service na [Co-op Translator](https://github.com/Azure/co-op-translator). Bagama't sinisikap naming maging tumpak, tandaan na ang mga awtomatikong pagsasalin ay maaaring maglaman ng mga pagkakamali o hindi pagkakatugma. Ang orihinal na dokumento sa kanyang katutubong wika ang dapat ituring na opisyal na sanggunian. Para sa mahalagang impormasyon, inirerekomenda ang propesyonal na pagsasalin ng tao. Hindi kami mananagot sa anumang hindi pagkakaunawaan o maling interpretasyon na dulot ng paggamit ng pagsasaling ito.
\ No newline at end of file
diff --git a/translations/tl/1-Introduction/1-intro-to-ML/assignment.md b/translations/tl/1-Introduction/1-intro-to-ML/assignment.md
new file mode 100644
index 000000000..6a6c8e271
--- /dev/null
+++ b/translations/tl/1-Introduction/1-intro-to-ML/assignment.md
@@ -0,0 +1,23 @@
+
+# Magsimula at Magpatakbo
+
+## Mga Instruksyon
+
+Sa hindi gradong assignment na ito, dapat mong balikan ang kaalaman sa Python at ihanda ang iyong kapaligiran upang makapagpatakbo ng mga notebook.
+
+Sundan ang [Python Learning Path](https://docs.microsoft.com/learn/paths/python-language/?WT.mc_id=academic-77952-leestott), at pagkatapos ay i-setup ang iyong mga sistema sa pamamagitan ng panonood ng mga introductory na video na ito:
+
+https://www.youtube.com/playlist?list=PLlrxD0HtieHhS8VzuMCfQD4uJ9yne1mE6
+
+---
+
+**Paunawa**:
+Ang dokumentong ito ay isinalin gamit ang AI translation service na [Co-op Translator](https://github.com/Azure/co-op-translator). Bagama't sinisikap naming maging tumpak, pakitandaan na ang mga awtomatikong pagsasalin ay maaaring maglaman ng mga pagkakamali o hindi pagkakatugma. Ang orihinal na dokumento sa orihinal nitong wika ang dapat ituring na opisyal na sanggunian. Para sa mahalagang impormasyon, inirerekomenda ang propesyonal na pagsasalin ng tao. Hindi kami mananagot sa anumang hindi pagkakaunawaan o maling interpretasyon na maaaring magmula sa paggamit ng pagsasaling ito.
\ No newline at end of file
diff --git a/translations/tl/1-Introduction/2-history-of-ML/README.md b/translations/tl/1-Introduction/2-history-of-ML/README.md
new file mode 100644
index 000000000..757fec578
--- /dev/null
+++ b/translations/tl/1-Introduction/2-history-of-ML/README.md
@@ -0,0 +1,164 @@
+
+# Kasaysayan ng Machine Learning
+
+
+> Sketchnote ni [Tomomi Imura](https://www.twitter.com/girlie_mac)
+
+## [Pre-lecture quiz](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/3/)
+
+---
+
+[](https://youtu.be/N6wxM4wZ7V0 "ML para sa mga baguhan - Kasaysayan ng Machine Learning")
+
+> 🎥 I-click ang larawan sa itaas para sa isang maikling video tungkol sa araling ito.
+
+Sa araling ito, tatalakayin natin ang mga pangunahing milestone sa kasaysayan ng machine learning at artificial intelligence.
+
+Ang kasaysayan ng artificial intelligence (AI) bilang isang larangan ay konektado sa kasaysayan ng machine learning, dahil ang mga algorithm at mga pag-unlad sa komputasyon na bumubuo sa ML ay nag-ambag sa pag-unlad ng AI. Mahalagang tandaan na, bagama't nagsimulang mabuo ang mga larangang ito bilang magkakaibang paksa noong 1950s, may mga mahahalagang [algorithmic, statistical, mathematical, computational, at teknikal na mga tuklas](https://wikipedia.org/wiki/Timeline_of_machine_learning) na nauna at sumabay sa panahong ito. Sa katunayan, ang mga tao ay nag-iisip tungkol sa mga tanong na ito sa loob ng [daan-daang taon](https://wikipedia.org/wiki/History_of_artificial_intelligence): tinatalakay ng artikulong ito ang mga makasaysayang pundasyon ng ideya ng isang 'nag-iisip na makina.'
+
+---
+## Mahahalagang Tuklas
+
+- 1763, 1812 [Bayes Theorem](https://wikipedia.org/wiki/Bayes%27_theorem) at ang mga nauna nito. Ang theorem na ito at ang mga aplikasyon nito ay nagiging batayan ng inference, na naglalarawan ng posibilidad ng isang pangyayari batay sa naunang kaalaman.
+- 1805 [Least Square Theory](https://wikipedia.org/wiki/Least_squares) ni Adrien-Marie Legendre, isang Pranses na matematikal. Ang teoryang ito, na matututunan mo sa aming Regression unit, ay tumutulong sa data fitting.
+- 1913 [Markov Chains](https://wikipedia.org/wiki/Markov_chain), ipinangalan sa Rusong matematikal na si Andrey Markov, ay ginagamit upang ilarawan ang isang sunod-sunod na posibleng mga pangyayari batay sa isang naunang estado.
+- 1957 [Perceptron](https://wikipedia.org/wiki/Perceptron) ay isang uri ng linear classifier na imbento ng Amerikanong psychologist na si Frank Rosenblatt na naging pundasyon ng mga pag-unlad sa deep learning.
+
+---
+
+- 1967 [Nearest Neighbor](https://wikipedia.org/wiki/Nearest_neighbor) ay isang algorithm na orihinal na dinisenyo upang mag-mapa ng mga ruta. Sa konteksto ng ML, ginagamit ito upang makakita ng mga pattern.
+- 1970 [Backpropagation](https://wikipedia.org/wiki/Backpropagation) ay ginagamit upang sanayin ang [feedforward neural networks](https://wikipedia.org/wiki/Feedforward_neural_network).
+- 1982 [Recurrent Neural Networks](https://wikipedia.org/wiki/Recurrent_neural_network) ay mga artificial neural networks na nagmula sa feedforward neural networks na lumilikha ng temporal graphs.
+
+✅ Mag-research ng kaunti. Anong iba pang mga petsa ang mahalaga sa kasaysayan ng ML at AI?
+
+---
+## 1950: Mga Makina na Nag-iisip
+
+Si Alan Turing, isang tunay na kahanga-hangang tao na nahirang [ng publiko noong 2019](https://wikipedia.org/wiki/Icons:_The_Greatest_Person_of_the_20th_Century) bilang pinakadakilang siyentipiko ng ika-20 siglo, ay kinikilala bilang isa sa mga naglatag ng pundasyon para sa konsepto ng isang 'makina na maaaring mag-isip.' Hinarap niya ang mga kritiko at ang kanyang sariling pangangailangan para sa empirikal na ebidensya ng konseptong ito sa pamamagitan ng paglikha ng [Turing Test](https://www.bbc.com/news/technology-18475646), na iyong pag-aaralan sa aming mga aralin sa NLP.
+
+---
+## 1956: Dartmouth Summer Research Project
+
+"Ang Dartmouth Summer Research Project sa artificial intelligence ay isang mahalagang kaganapan para sa larangan ng artificial intelligence," at dito unang ginamit ang terminong 'artificial intelligence' ([source](https://250.dartmouth.edu/highlights/artificial-intelligence-ai-coined-dartmouth)).
+
+> Ang bawat aspeto ng pagkatuto o anumang iba pang katangian ng katalinuhan ay maaaring mailarawan nang eksakto upang ang isang makina ay magawang gayahin ito.
+
+---
+
+Ang pangunahing mananaliksik, ang propesor ng matematika na si John McCarthy, ay umaasang "magpatuloy batay sa hinuha na ang bawat aspeto ng pagkatuto o anumang iba pang katangian ng katalinuhan ay maaaring mailarawan nang eksakto upang ang isang makina ay magawang gayahin ito." Ang mga kalahok ay kinabibilangan ng isa pang tanyag sa larangan, si Marvin Minsky.
+
+Ang workshop na ito ay kinikilala bilang nagpasimula at nag-udyok ng ilang mga talakayan kabilang ang "ang pag-usbong ng mga simbolikong pamamaraan, mga sistema na nakatuon sa limitadong mga domain (mga maagang expert systems), at mga deductive systems laban sa mga inductive systems." ([source](https://wikipedia.org/wiki/Dartmouth_workshop)).
+
+---
+## 1956 - 1974: "Ang Ginintuang Panahon"
+
+Mula 1950s hanggang kalagitnaan ng '70s, mataas ang optimismo na kayang lutasin ng AI ang maraming problema. Noong 1967, buong kumpiyansa na sinabi ni Marvin Minsky na "Sa loob ng isang henerasyon ... ang problema ng paglikha ng 'artificial intelligence' ay halos malulutas na." (Minsky, Marvin (1967), Computation: Finite and Infinite Machines, Englewood Cliffs, N.J.: Prentice-Hall)
+
+Ang pananaliksik sa natural language processing ay umunlad, ang paghahanap ay pinino at ginawang mas makapangyarihan, at ang konsepto ng 'micro-worlds' ay nilikha, kung saan ang mga simpleng gawain ay natatapos gamit ang mga simpleng tagubilin sa wika.
+
+---
+
+Ang pananaliksik ay mahusay na pinondohan ng mga ahensya ng gobyerno, nagkaroon ng mga pag-unlad sa komputasyon at mga algorithm, at ang mga prototype ng mga intelligent na makina ay nabuo. Ilan sa mga makinang ito ay kinabibilangan ng:
+
+* [Shakey the robot](https://wikipedia.org/wiki/Shakey_the_robot), na kayang magmaniobra at magdesisyon kung paano isasagawa ang mga gawain nang 'matalino'.
+
+ 
+ > Shakey noong 1972
+
+---
+
+* Eliza, isang maagang 'chatterbot', ay kayang makipag-usap sa mga tao at kumilos bilang isang primitibong 'therapist'. Malalaman mo pa ang tungkol kay Eliza sa mga aralin sa NLP.
+
+ 
+ > Isang bersyon ni Eliza, isang chatbot
+
+---
+
+* "Blocks world" ay isang halimbawa ng micro-world kung saan ang mga bloke ay maaaring itumpok at ayusin, at ang mga eksperimento sa pagtuturo sa mga makina na gumawa ng mga desisyon ay maaaring subukan. Ang mga pag-unlad na binuo gamit ang mga library tulad ng [SHRDLU](https://wikipedia.org/wiki/SHRDLU) ay tumulong sa pagpapalago ng language processing.
+
+ [](https://www.youtube.com/watch?v=QAJz4YKUwqw "blocks world gamit ang SHRDLU")
+
+ > 🎥 I-click ang larawan sa itaas para sa isang video: Blocks world gamit ang SHRDLU
+
+---
+## 1974 - 1980: "AI Winter"
+
+Sa kalagitnaan ng 1970s, naging malinaw na ang pagiging kumplikado ng paggawa ng 'mga intelligent na makina' ay hindi sapat na naipaliwanag at ang mga pangako nito, batay sa kakayahan ng kompyuter noong panahong iyon, ay labis na napalaki. Nawalan ng pondo at bumagal ang kumpiyansa sa larangan. Ilan sa mga isyung nakaapekto sa kumpiyansa ay kinabibilangan ng:
+---
+- **Mga Limitasyon**. Ang compute power ay masyadong limitado.
+- **Combinatorial explosion**. Ang dami ng mga parameter na kailangang sanayin ay lumago nang eksponensyal habang mas maraming hinihingi sa mga kompyuter, nang walang kasabay na pag-unlad sa compute power at kakayahan.
+- **Kakulangan ng data**. May kakulangan ng data na humadlang sa proseso ng pagsubok, pagbuo, at pagpapabuti ng mga algorithm.
+- **Tama ba ang mga tanong na tinatanong natin?**. Ang mismong mga tanong na tinatanong ay nagsimulang kuwestyunin. Ang mga mananaliksik ay nagsimulang makatanggap ng kritisismo tungkol sa kanilang mga pamamaraan:
+ - Ang mga Turing test ay kinuwestyon sa pamamagitan ng, bukod sa iba pang mga ideya, ang 'chinese room theory' na nagsasabing, "ang pag-program ng isang digital na kompyuter ay maaaring magmukhang nauunawaan nito ang wika ngunit hindi makakalikha ng tunay na pag-unawa." ([source](https://plato.stanford.edu/entries/chinese-room/))
+ - Ang etika ng pagpapakilala ng mga artificial intelligences tulad ng "therapist" ELIZA sa lipunan ay hinamon.
+
+---
+
+Kasabay nito, iba't ibang mga paaralan ng pag-iisip sa AI ang nagsimulang mabuo. Nabuo ang isang dichotomy sa pagitan ng ["scruffy" vs. "neat AI"](https://wikipedia.org/wiki/Neats_and_scruffies) na mga kasanayan. Ang mga _scruffy_ na laboratoryo ay nag-aayos ng mga programa nang paulit-ulit hanggang makuha ang nais na resulta. Ang mga _neat_ na laboratoryo ay "nakatuon sa lohika at pormal na paglutas ng problema". Ang ELIZA at SHRDLU ay kilalang mga _scruffy_ na sistema. Noong 1980s, habang lumitaw ang pangangailangan na gawing reproducible ang mga ML system, ang _neat_ na pamamaraan ay unti-unting nangibabaw dahil ang mga resulta nito ay mas madaling maipaliwanag.
+
+---
+## 1980s Expert Systems
+
+Habang lumalago ang larangan, naging mas malinaw ang benepisyo nito sa negosyo, at noong 1980s, dumami ang 'expert systems'. "Ang mga expert systems ay kabilang sa mga unang tunay na matagumpay na anyo ng artificial intelligence (AI) software." ([source](https://wikipedia.org/wiki/Expert_system)).
+
+Ang ganitong uri ng sistema ay talagang _hybrid_, na binubuo ng isang rules engine na nagtatakda ng mga kinakailangan sa negosyo, at isang inference engine na gumagamit ng rules system upang makabuo ng mga bagong impormasyon.
+
+Ang panahong ito ay nagbigay din ng mas maraming pansin sa neural networks.
+
+---
+## 1987 - 1993: AI 'Chill'
+
+Ang pagdami ng mga specialized expert systems hardware ay nagkaroon ng hindi magandang epekto ng pagiging masyadong specialized. Ang pag-usbong ng mga personal na kompyuter ay nakipagkumpitensya rin sa mga malalaking, specialized, centralized systems. Nagsimula na ang democratization ng computing, at kalaunan ay nagbigay-daan ito sa modernong pagsabog ng big data.
+
+---
+## 1993 - 2011
+
+Ang panahong ito ay nagdala ng bagong era para sa ML at AI upang malutas ang ilan sa mga problemang dulot ng kakulangan ng data at compute power noong nakaraan. Ang dami ng data ay mabilis na dumami at naging mas madaling ma-access, para sa mabuti at masama, lalo na sa pag-usbong ng smartphone noong 2007. Ang compute power ay lumago nang eksponensyal, at ang mga algorithm ay sumabay sa pag-unlad. Ang larangan ay nagsimulang maging mas mature habang ang mga malayang araw ng nakaraan ay unti-unting naging isang tunay na disiplina.
+
+---
+## Ngayon
+
+Ngayon, ang machine learning at AI ay halos naaabot na ang bawat bahagi ng ating buhay. Ang panahong ito ay nangangailangan ng maingat na pag-unawa sa mga panganib at posibleng epekto ng mga algorithm na ito sa buhay ng tao. Tulad ng sinabi ni Brad Smith ng Microsoft, "Ang teknolohiya ng impormasyon ay nagdadala ng mga isyu na tumatama sa puso ng mga pangunahing proteksyon ng karapatang pantao tulad ng privacy at kalayaan sa pagpapahayag. Ang mga isyung ito ay nagpapataas ng responsibilidad para sa mga kumpanya ng teknolohiya na lumikha ng mga produktong ito. Sa aming pananaw, nangangailangan din ito ng maingat na regulasyon ng gobyerno at ng pagbuo ng mga pamantayan sa mga katanggap-tanggap na paggamit" ([source](https://www.technologyreview.com/2019/12/18/102365/the-future-of-ais-impact-on-society/)).
+
+---
+
+Hindi pa tiyak kung ano ang hinaharap, ngunit mahalagang maunawaan ang mga sistemang ito ng kompyuter at ang software at mga algorithm na kanilang pinapatakbo. Inaasahan namin na ang kurikulum na ito ay makakatulong sa iyo na magkaroon ng mas mahusay na pag-unawa upang ikaw mismo ang makapagdesisyon.
+
+[](https://www.youtube.com/watch?v=mTtDfKgLm54 "Ang kasaysayan ng deep learning")
+> 🎥 I-click ang larawan sa itaas para sa isang video: Tinalakay ni Yann LeCun ang kasaysayan ng deep learning sa leksyong ito
+
+---
+## 🚀Hamunin
+
+Suriin ang isa sa mga makasaysayang sandaling ito at alamin ang higit pa tungkol sa mga taong nasa likod nito. May mga kahanga-hangang personalidad, at walang siyentipikong tuklas na nalikha sa isang cultural vacuum. Ano ang iyong natuklasan?
+
+## [Post-lecture quiz](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/4/)
+
+---
+## Review at Pag-aaral sa Sarili
+
+Narito ang mga bagay na maaaring panoorin at pakinggan:
+
+[Ang podcast na ito kung saan tinalakay ni Amy Boyd ang ebolusyon ng AI](http://runasradio.com/Shows/Show/739)
+
+[](https://www.youtube.com/watch?v=EJt3_bFYKss "Ang kasaysayan ng AI ni Amy Boyd")
+
+---
+
+## Takdang-Aralin
+
+[Gumawa ng timeline](assignment.md)
+
+---
+
+**Paunawa**:
+Ang dokumentong ito ay isinalin gamit ang AI translation service na [Co-op Translator](https://github.com/Azure/co-op-translator). Bagama't sinisikap naming maging tumpak, pakitandaan na ang mga awtomatikong pagsasalin ay maaaring maglaman ng mga pagkakamali o hindi pagkakatugma. Ang orihinal na dokumento sa orihinal nitong wika ang dapat ituring na opisyal na sanggunian. Para sa mahalagang impormasyon, inirerekomenda ang propesyonal na pagsasalin ng tao. Hindi kami mananagot sa anumang hindi pagkakaunawaan o maling interpretasyon na maaaring magmula sa paggamit ng pagsasaling ito.
\ No newline at end of file
diff --git a/translations/tl/1-Introduction/2-history-of-ML/assignment.md b/translations/tl/1-Introduction/2-history-of-ML/assignment.md
new file mode 100644
index 000000000..064a1a8fe
--- /dev/null
+++ b/translations/tl/1-Introduction/2-history-of-ML/assignment.md
@@ -0,0 +1,25 @@
+
+# Gumawa ng Timeline
+
+## Mga Instruksyon
+
+Gamitin ang [repo na ito](https://github.com/Digital-Humanities-Toolkit/timeline-builder) upang gumawa ng timeline tungkol sa isang aspeto ng kasaysayan ng mga algorithm, matematika, estadistika, AI, o ML, o kombinasyon ng mga ito. Maaari kang magpokus sa isang tao, isang ideya, o mahabang panahon ng pag-iisip. Siguraduhing magdagdag ng mga multimedia na elemento.
+
+## Rubrik
+
+| Pamantayan | Natatangi | Katanggap-tanggap | Kailangan ng Pagpapabuti |
+| ---------- | ------------------------------------------------- | --------------------------------------- | ---------------------------------------------------------------- |
+| | Isang na-deploy na timeline ang ipinakita bilang GitHub page | Hindi kumpleto ang code at hindi na-deploy | Hindi kumpleto ang timeline, hindi masusing sinaliksik, at hindi na-deploy |
+
+---
+
+**Paunawa**:
+Ang dokumentong ito ay isinalin gamit ang AI translation service na [Co-op Translator](https://github.com/Azure/co-op-translator). Bagama't sinisikap naming maging tumpak, pakitandaan na ang mga awtomatikong pagsasalin ay maaaring maglaman ng mga pagkakamali o hindi pagkakatugma. Ang orihinal na dokumento sa orihinal nitong wika ang dapat ituring na opisyal na sanggunian. Para sa mahalagang impormasyon, inirerekomenda ang propesyonal na pagsasalin ng tao. Hindi kami mananagot sa anumang hindi pagkakaunawaan o maling interpretasyon na maaaring magmula sa paggamit ng pagsasaling ito.
\ No newline at end of file
diff --git a/translations/tl/1-Introduction/3-fairness/README.md b/translations/tl/1-Introduction/3-fairness/README.md
new file mode 100644
index 000000000..528a67ed3
--- /dev/null
+++ b/translations/tl/1-Introduction/3-fairness/README.md
@@ -0,0 +1,156 @@
+
+# Paggawa ng Solusyon sa Machine Learning gamit ang Responsable AI
+
+
+> Sketchnote ni [Tomomi Imura](https://www.twitter.com/girlie_mac)
+
+## [Pre-lecture quiz](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/5/)
+
+## Panimula
+
+Sa kurikulum na ito, sisimulan mong tuklasin kung paano nakakaapekto ang machine learning sa ating pang-araw-araw na buhay. Sa kasalukuyan, ang mga sistema at modelo ay ginagamit sa mga desisyon sa araw-araw tulad ng mga diagnosis sa pangangalaga ng kalusugan, pag-apruba ng mga pautang, o pagtuklas ng pandaraya. Kaya mahalaga na ang mga modelong ito ay gumagana nang maayos upang magbigay ng mga resulta na mapagkakatiwalaan. Tulad ng anumang software application, ang mga sistema ng AI ay maaaring hindi umabot sa inaasahan o magdulot ng hindi kanais-nais na resulta. Kaya mahalaga na maunawaan at maipaliwanag ang pag-uugali ng isang modelo ng AI.
+
+Isipin kung ano ang maaaring mangyari kapag ang datos na ginagamit mo upang bumuo ng mga modelong ito ay kulang sa ilang demograpiko tulad ng lahi, kasarian, pananaw sa politika, relihiyon, o hindi pantay na kinakatawan ang mga demograpikong ito. Paano kung ang output ng modelo ay pabor sa isang demograpiko? Ano ang magiging epekto nito sa aplikasyon? Bukod pa rito, ano ang mangyayari kapag ang modelo ay nagkaroon ng masamang resulta at nakapinsala sa mga tao? Sino ang may pananagutan sa pag-uugali ng sistema ng AI? Ito ang ilan sa mga tanong na ating tatalakayin sa kurikulum na ito.
+
+Sa araling ito, ikaw ay:
+
+- Magkakaroon ng kamalayan sa kahalagahan ng pagiging patas sa machine learning at mga pinsalang may kaugnayan dito.
+- Magiging pamilyar sa pagsasanay ng pagsusuri sa mga outliers at hindi pangkaraniwang sitwasyon upang matiyak ang pagiging maaasahan at kaligtasan.
+- Makakakuha ng pag-unawa sa pangangailangan na bigyang kapangyarihan ang lahat sa pamamagitan ng pagdidisenyo ng mga inklusibong sistema.
+- Matutuklasan kung gaano kahalaga ang protektahan ang privacy at seguridad ng datos at ng mga tao.
+- Makikita ang kahalagahan ng isang "glass box" na diskarte upang maipaliwanag ang pag-uugali ng mga modelo ng AI.
+- Magiging maingat sa kung paano mahalaga ang pananagutan upang makabuo ng tiwala sa mga sistema ng AI.
+
+## Paunang Kaalaman
+
+Bilang paunang kaalaman, mangyaring kunin ang "Responsible AI Principles" Learn Path at panoorin ang video sa ibaba tungkol sa paksa:
+
+Alamin ang higit pa tungkol sa Responsable AI sa pamamagitan ng pagsunod sa [Learning Path](https://docs.microsoft.com/learn/modules/responsible-ai-principles/?WT.mc_id=academic-77952-leestott)
+
+[](https://youtu.be/dnC8-uUZXSc "Microsoft's Approach to Responsible AI")
+
+> 🎥 I-click ang imahe sa itaas para sa video: Microsoft's Approach to Responsible AI
+
+## Pagiging Patas
+
+Ang mga sistema ng AI ay dapat tratuhin ang lahat nang patas at iwasan ang pag-apekto sa mga katulad na grupo ng tao sa iba't ibang paraan. Halimbawa, kapag ang mga sistema ng AI ay nagbibigay ng gabay sa paggamot sa medikal, aplikasyon ng pautang, o trabaho, dapat silang magbigay ng parehong rekomendasyon sa lahat ng may katulad na sintomas, kalagayan sa pananalapi, o kwalipikasyon sa propesyon. Bawat isa sa atin bilang tao ay may dalang likas na pagkiling na nakakaapekto sa ating mga desisyon at kilos. Ang mga pagkiling na ito ay maaaring makita sa datos na ginagamit natin upang sanayin ang mga sistema ng AI. Ang ganitong manipulasyon ay minsan nangyayari nang hindi sinasadya. Madalas mahirap malaman nang may kamalayan kung kailan ka nagdadala ng pagkiling sa datos.
+
+Ang **“Kawalan ng Pagiging Patas”** ay sumasaklaw sa mga negatibong epekto, o “pinsala”, para sa isang grupo ng tao, tulad ng mga tinukoy batay sa lahi, kasarian, edad, o kalagayan ng kapansanan. Ang mga pangunahing pinsalang may kaugnayan sa pagiging patas ay maaaring uriin bilang:
+
+- **Paglalaan**, kung ang isang kasarian o etnisidad halimbawa ay pinapaboran kaysa sa iba.
+- **Kalidad ng serbisyo**. Kung sinanay mo ang datos para sa isang partikular na sitwasyon ngunit ang realidad ay mas kumplikado, nagreresulta ito sa mahinang serbisyo. Halimbawa, isang dispenser ng sabon na hindi makadetect ng mga taong may maitim na balat. [Sanggunian](https://gizmodo.com/why-cant-this-soap-dispenser-identify-dark-skin-1797931773)
+- **Pag-aalipusta**. Ang hindi patas na pagbatikos at pag-label sa isang bagay o tao. Halimbawa, isang teknolohiya sa pag-label ng imahe na maling tinukoy ang mga imahe ng mga taong may maitim na balat bilang gorilya.
+- **Sobra o kulang na representasyon**. Ang ideya na ang isang grupo ay hindi nakikita sa isang partikular na propesyon, at anumang serbisyo o function na patuloy na nagpo-promote nito ay nag-aambag sa pinsala.
+- **Pag-stereotype**. Ang pag-uugnay ng isang grupo sa mga pre-assigned na katangian. Halimbawa, ang isang sistema ng pagsasalin ng wika sa pagitan ng Ingles at Turkish ay maaaring magkaroon ng mga kamalian dahil sa mga salitang may stereotypical na kaugnayan sa kasarian.
+
+
+> pagsasalin sa Turkish
+
+
+> pagsasalin pabalik sa Ingles
+
+Kapag nagdidisenyo at sumusubok ng mga sistema ng AI, kailangan nating tiyakin na ang AI ay patas at hindi naka-program upang gumawa ng mga desisyon na may pagkiling o diskriminasyon, na ipinagbabawal din sa mga tao. Ang pagtiyak ng pagiging patas sa AI at machine learning ay nananatiling isang kumplikadong hamon sa teknolohiya at lipunan.
+
+### Pagiging Maaasahan at Kaligtasan
+
+Upang makabuo ng tiwala, ang mga sistema ng AI ay kailangang maging maaasahan, ligtas, at pare-pareho sa normal at hindi inaasahang mga kondisyon. Mahalagang malaman kung paano mag-uugali ang mga sistema ng AI sa iba't ibang sitwasyon, lalo na kapag may mga outliers. Kapag gumagawa ng mga solusyon sa AI, kailangang magbigay ng malaking pansin sa kung paano haharapin ang iba't ibang sitwasyon na maaaring maranasan ng mga solusyon sa AI. Halimbawa, ang isang self-driving na kotse ay kailangang unahin ang kaligtasan ng mga tao. Bilang resulta, ang AI na nagpapatakbo ng kotse ay kailangang isaalang-alang ang lahat ng posibleng sitwasyon na maaaring maranasan ng kotse tulad ng gabi, bagyo, o snowstorm, mga bata na tumatakbo sa kalsada, mga alagang hayop, mga konstruksyon sa kalsada, atbp. Ang kakayahan ng isang sistema ng AI na maayos na makayanan ang malawak na hanay ng mga kondisyon nang maaasahan at ligtas ay sumasalamin sa antas ng anticipation na isinasaalang-alang ng data scientist o AI developer sa disenyo o pagsubok ng sistema.
+
+> [🎥 I-click dito para sa video: ](https://www.microsoft.com/videoplayer/embed/RE4vvIl)
+
+### Inklusyon
+
+Ang mga sistema ng AI ay dapat idisenyo upang makisali at magbigay kapangyarihan sa lahat. Kapag nagdidisenyo at nagpapatupad ng mga sistema ng AI, ang mga data scientist at AI developer ay nagtatakda at tumutugon sa mga potensyal na hadlang sa sistema na maaaring hindi sinasadyang mag-exclude ng mga tao. Halimbawa, mayroong 1 bilyong tao na may kapansanan sa buong mundo. Sa pag-unlad ng AI, mas madali nilang ma-access ang malawak na hanay ng impormasyon at mga oportunidad sa kanilang pang-araw-araw na buhay. Sa pamamagitan ng pagtugon sa mga hadlang, lumilikha ito ng mga oportunidad upang mag-innovate at bumuo ng mga produkto ng AI na may mas mahusay na karanasan na kapaki-pakinabang para sa lahat.
+
+> [🎥 I-click dito para sa video: inclusiveness in AI](https://www.microsoft.com/videoplayer/embed/RE4vl9v)
+
+### Seguridad at Privacy
+
+Ang mga sistema ng AI ay dapat maging ligtas at igalang ang privacy ng mga tao. Ang mga tao ay mas kaunti ang tiwala sa mga sistema na naglalagay sa kanilang privacy, impormasyon, o buhay sa panganib. Kapag sinasanay ang mga modelo ng machine learning, umaasa tayo sa datos upang makabuo ng pinakamahusay na resulta. Sa paggawa nito, ang pinagmulan ng datos at integridad ay dapat isaalang-alang. Halimbawa, ang datos ba ay isinumite ng user o pampublikong magagamit? Susunod, habang nagtatrabaho sa datos, mahalagang bumuo ng mga sistema ng AI na maaaring protektahan ang kumpidensyal na impormasyon at labanan ang mga pag-atake. Habang nagiging mas laganap ang AI, ang proteksyon sa privacy at seguridad ng mahalagang personal at impormasyon ng negosyo ay nagiging mas kritikal at kumplikado. Ang mga isyu sa privacy at seguridad ng datos ay nangangailangan ng espesyal na pansin para sa AI dahil ang access sa datos ay mahalaga para sa mga sistema ng AI upang makagawa ng tumpak at may kaalamang mga prediksyon at desisyon tungkol sa mga tao.
+
+> [🎥 I-click dito para sa video: security in AI](https://www.microsoft.com/videoplayer/embed/RE4voJF)
+
+- Bilang isang industriya, nakagawa tayo ng makabuluhang pag-unlad sa Privacy at seguridad, na pinasigla nang malaki ng mga regulasyon tulad ng GDPR (General Data Protection Regulation).
+- Gayunpaman, sa mga sistema ng AI, kailangan nating kilalanin ang tensyon sa pagitan ng pangangailangan para sa mas personal na datos upang gawing mas personal at epektibo ang mga sistema – at privacy.
+- Tulad ng sa pagsilang ng mga konektadong computer sa internet, nakikita rin natin ang malaking pagtaas sa bilang ng mga isyu sa seguridad na may kaugnayan sa AI.
+- Kasabay nito, nakikita natin ang AI na ginagamit upang mapabuti ang seguridad. Halimbawa, karamihan sa mga modernong anti-virus scanner ay pinapagana ng AI heuristics ngayon.
+- Kailangan nating tiyakin na ang ating mga proseso sa Data Science ay maayos na nakikiayon sa pinakabagong mga kasanayan sa privacy at seguridad.
+
+### Transparency
+
+Ang mga sistema ng AI ay dapat naiintindihan. Isang mahalagang bahagi ng transparency ay ang pagpapaliwanag sa pag-uugali ng mga sistema ng AI at ng kanilang mga bahagi. Ang pagpapabuti ng pag-unawa sa mga sistema ng AI ay nangangailangan na maunawaan ng mga stakeholder kung paano at bakit sila gumagana upang matukoy ang mga potensyal na isyu sa pagganap, mga alalahanin sa kaligtasan at privacy, pagkiling, mga eksklusibong kasanayan, o hindi inaasahang resulta. Naniniwala rin kami na ang mga gumagamit ng mga sistema ng AI ay dapat maging tapat at bukas tungkol sa kung kailan, bakit, at paano nila pinipiling i-deploy ang mga ito, pati na rin ang mga limitasyon ng mga sistemang ginagamit nila. Halimbawa, kung ang isang bangko ay gumagamit ng isang sistema ng AI upang suportahan ang mga desisyon sa pagpapautang sa consumer, mahalagang suriin ang mga resulta at maunawaan kung aling datos ang nakakaimpluwensya sa mga rekomendasyon ng sistema. Ang mga pamahalaan ay nagsisimulang mag-regulate ng AI sa iba't ibang industriya, kaya ang mga data scientist at organisasyon ay dapat ipaliwanag kung ang isang sistema ng AI ay nakakatugon sa mga kinakailangan sa regulasyon, lalo na kapag may hindi kanais-nais na resulta.
+
+> [🎥 I-click dito para sa video: transparency in AI](https://www.microsoft.com/videoplayer/embed/RE4voJF)
+
+- Dahil ang mga sistema ng AI ay napakakomplikado, mahirap maunawaan kung paano sila gumagana at ma-interpret ang mga resulta.
+- Ang kakulangan ng pag-unawa na ito ay nakakaapekto sa paraan ng pamamahala, operationalization, at dokumentasyon ng mga sistemang ito.
+- Ang kakulangan ng pag-unawa na ito ay mas mahalaga sa mga desisyong ginagawa gamit ang mga resulta na nililikha ng mga sistemang ito.
+
+### Pananagutan
+
+Ang mga tao na nagdidisenyo at nagde-deploy ng mga sistema ng AI ay dapat managot sa kung paano gumagana ang kanilang mga sistema. Ang pangangailangan para sa pananagutan ay partikular na mahalaga sa mga sensitibong teknolohiya tulad ng facial recognition. Kamakailan, nagkaroon ng lumalaking demand para sa facial recognition technology, lalo na mula sa mga organisasyon ng pagpapatupad ng batas na nakikita ang potensyal ng teknolohiya sa mga gamit tulad ng paghahanap ng mga nawawalang bata. Gayunpaman, ang mga teknolohiyang ito ay maaaring potensyal na gamitin ng isang gobyerno upang ilagay sa panganib ang mga pangunahing kalayaan ng kanilang mga mamamayan, halimbawa, sa pamamagitan ng pagpapagana ng tuloy-tuloy na surveillance ng mga partikular na indibidwal. Kaya, ang mga data scientist at organisasyon ay kailangang maging responsable sa kung paano nakakaapekto ang kanilang sistema ng AI sa mga indibidwal o lipunan.
+
+[](https://www.youtube.com/watch?v=Wldt8P5V6D0 "Microsoft's Approach to Responsible AI")
+
+> 🎥 I-click ang imahe sa itaas para sa video: Mga Babala Tungkol sa Mass Surveillance sa Pamamagitan ng Facial Recognition
+
+Sa huli, isa sa pinakamalaking tanong para sa ating henerasyon, bilang unang henerasyon na nagdadala ng AI sa lipunan, ay kung paano masisiguro na ang mga computer ay mananatiling mananagot sa mga tao at kung paano masisiguro na ang mga tao na nagdidisenyo ng mga computer ay mananatiling mananagot sa lahat.
+
+## Pagtatasa ng Epekto
+
+Bago sanayin ang isang modelo ng machine learning, mahalagang magsagawa ng pagtatasa ng epekto upang maunawaan ang layunin ng sistema ng AI; kung ano ang nilalayong paggamit nito; kung saan ito ide-deploy; at sino ang makikipag-ugnayan sa sistema. Ang mga ito ay kapaki-pakinabang para sa mga tagasuri o tester na sinusuri ang sistema upang malaman kung anong mga salik ang dapat isaalang-alang kapag tinutukoy ang mga potensyal na panganib at inaasahang kahihinatnan.
+
+Ang mga sumusunod ay mga lugar ng pokus kapag nagsasagawa ng pagtatasa ng epekto:
+
+* **Masamang epekto sa mga indibidwal**. Ang pagiging maalam sa anumang mga limitasyon o kinakailangan, hindi suportadong paggamit, o anumang kilalang limitasyon na humahadlang sa pagganap ng sistema ay mahalaga upang matiyak na ang sistema ay hindi ginagamit sa paraang maaaring magdulot ng pinsala sa mga indibidwal.
+* **Mga kinakailangan sa datos**. Ang pagkuha ng pag-unawa sa kung paano at saan gagamitin ng sistema ang datos ay nagbibigay-daan sa mga tagasuri na tuklasin ang anumang mga kinakailangan sa datos na dapat mong tandaan (hal., GDPR o HIPPA na mga regulasyon sa datos). Bukod pa rito, suriin kung ang pinagmulan o dami ng datos ay sapat para sa pagsasanay.
+* **Buod ng epekto**. Magtipon ng listahan ng mga potensyal na pinsala na maaaring lumitaw mula sa paggamit ng sistema. Sa buong lifecycle ng ML, suriin kung ang mga isyung natukoy ay nabawasan o natugunan.
+* **Mga naaangkop na layunin** para sa bawat isa sa anim na pangunahing prinsipyo. Suriin kung ang mga layunin mula sa bawat prinsipyo ay natutugunan at kung mayroong anumang mga puwang.
+
+## Pag-debug gamit ang Responsable AI
+
+Katulad ng pag-debug ng isang software application, ang pag-debug ng isang sistema ng AI ay isang kinakailangang proseso ng pagtukoy at paglutas ng mga isyu sa sistema. Maraming mga salik ang maaaring makaapekto sa isang modelo na hindi gumagana ayon sa inaasahan o responsable. Karamihan sa mga tradisyunal na sukatan ng pagganap ng modelo ay mga dami ng aggregate ng pagganap ng modelo, na hindi sapat upang suriin kung paano nilalabag ng isang modelo ang mga prinsipyo ng responsable AI. Bukod pa rito, ang isang modelo ng machine learning ay isang black box na nagpapahirap na maunawaan kung ano ang nagdudulot ng resulta nito o magbigay ng paliwanag kapag ito ay nagkamali. Sa susunod na bahagi ng kursong ito, matutunan natin kung paano gamitin ang Responsible AI dashboard upang makatulong sa pag-debug ng mga sistema ng AI. Ang dashboard ay nagbibigay ng holistic na tool para sa mga data scientist at AI developer upang magsagawa ng:
+
+* **Pagsusuri ng error**. Upang matukoy ang pamamahagi ng error ng modelo na maaaring makaapekto sa pagiging patas o pagiging maaasahan ng sistema.
+* **Pangkalahatang-ideya ng modelo**. Upang matuklasan kung saan may mga pagkakaiba sa pagganap ng modelo sa iba't ibang data cohorts.
+* **Pagsusuri ng datos**. Upang maunawaan ang pamamahagi ng datos at matukoy ang anumang potensyal na pagkiling sa datos na maaaring magdulot ng mga isyu sa
+Sa araling ito, natutunan mo ang ilang mga pangunahing konsepto ng pagiging patas at hindi patas sa machine learning.
+
+Panoorin ang workshop na ito para mas malalim na talakayin ang mga paksa:
+
+- Sa paghahangad ng responsableng AI: Pagdadala ng mga prinsipyo sa praktika nina Besmira Nushi, Mehrnoosh Sameki, at Amit Sharma
+
+[](https://www.youtube.com/watch?v=tGgJCrA-MZU "RAI Toolbox: Isang open-source framework para sa paggawa ng responsableng AI")
+
+
+> 🎥 I-click ang imahe sa itaas para sa video: RAI Toolbox: Isang open-source framework para sa paggawa ng responsableng AI nina Besmira Nushi, Mehrnoosh Sameki, at Amit Sharma
+
+Basahin din:
+
+- Resource center ng Microsoft para sa RAI: [Responsible AI Resources – Microsoft AI](https://www.microsoft.com/ai/responsible-ai-resources?activetab=pivot1%3aprimaryr4)
+
+- FATE research group ng Microsoft: [FATE: Fairness, Accountability, Transparency, and Ethics in AI - Microsoft Research](https://www.microsoft.com/research/theme/fate/)
+
+RAI Toolbox:
+
+- [Responsible AI Toolbox GitHub repository](https://github.com/microsoft/responsible-ai-toolbox)
+
+Basahin ang tungkol sa mga tool ng Azure Machine Learning para matiyak ang pagiging patas:
+
+- [Azure Machine Learning](https://docs.microsoft.com/azure/machine-learning/concept-fairness-ml?WT.mc_id=academic-77952-leestott)
+
+## Takdang-Aralin
+
+[Galugarin ang RAI Toolbox](assignment.md)
+
+---
+
+**Paunawa**:
+Ang dokumentong ito ay isinalin gamit ang AI translation service na [Co-op Translator](https://github.com/Azure/co-op-translator). Bagama't sinisikap naming maging tumpak, pakitandaan na ang mga awtomatikong pagsasalin ay maaaring maglaman ng mga pagkakamali o hindi pagkakatugma. Ang orihinal na dokumento sa orihinal nitong wika ang dapat ituring na opisyal na sanggunian. Para sa mahalagang impormasyon, inirerekomenda ang propesyonal na pagsasalin ng tao. Hindi kami mananagot sa anumang hindi pagkakaunawaan o maling interpretasyon na maaaring magmula sa paggamit ng pagsasaling ito.
\ No newline at end of file
diff --git a/translations/tl/1-Introduction/3-fairness/assignment.md b/translations/tl/1-Introduction/3-fairness/assignment.md
new file mode 100644
index 000000000..40c83338a
--- /dev/null
+++ b/translations/tl/1-Introduction/3-fairness/assignment.md
@@ -0,0 +1,25 @@
+
+# Tuklasin ang Responsible AI Toolbox
+
+## Mga Tagubilin
+
+Sa araling ito, natutunan mo ang tungkol sa Responsible AI Toolbox, isang "open-source, community-driven na proyekto upang tulungan ang mga data scientist na suriin at pagbutihin ang mga AI system." Para sa gawaing ito, tuklasin ang isa sa mga [notebook](https://github.com/microsoft/responsible-ai-toolbox/blob/main/notebooks/responsibleaidashboard/getting-started.ipynb) ng RAI Toolbox at iulat ang iyong mga natuklasan sa isang papel o presentasyon.
+
+## Rubric
+
+| Pamantayan | Natatangi | Katanggap-tanggap | Kailangang Pagbutihin |
+| ---------- | --------- | ----------------- | --------------------- |
+| | Isang papel o PowerPoint na presentasyon ang iniharap na tinatalakay ang mga sistema ng Fairlearn, ang notebook na ginamit, at ang mga konklusyon mula sa paggamit nito | Isang papel ang iniharap ngunit walang mga konklusyon | Walang iniharap na papel |
+
+---
+
+**Paunawa**:
+Ang dokumentong ito ay isinalin gamit ang AI translation service na [Co-op Translator](https://github.com/Azure/co-op-translator). Bagama't sinisikap naming maging tumpak, pakitandaan na ang mga awtomatikong pagsasalin ay maaaring maglaman ng mga pagkakamali o hindi pagkakatugma. Ang orihinal na dokumento sa orihinal nitong wika ang dapat ituring na opisyal na sanggunian. Para sa mahalagang impormasyon, inirerekomenda ang propesyonal na pagsasalin ng tao. Hindi kami mananagot sa anumang hindi pagkakaunawaan o maling interpretasyon na maaaring magmula sa paggamit ng pagsasaling ito.
\ No newline at end of file
diff --git a/translations/tl/1-Introduction/4-techniques-of-ML/README.md b/translations/tl/1-Introduction/4-techniques-of-ML/README.md
new file mode 100644
index 000000000..564848f10
--- /dev/null
+++ b/translations/tl/1-Introduction/4-techniques-of-ML/README.md
@@ -0,0 +1,132 @@
+
+# Mga Teknik sa Machine Learning
+
+Ang proseso ng pagbuo, paggamit, at pagpapanatili ng mga modelo ng machine learning at ang datos na ginagamit ng mga ito ay ibang-iba sa maraming iba pang mga workflow ng pag-develop. Sa araling ito, ating lilinawin ang prosesong ito at ilalahad ang mga pangunahing teknik na kailangan mong malaman. Ikaw ay:
+
+- Mauunawaan ang mga prosesong bumubuo sa machine learning sa mataas na antas.
+- Tuklasin ang mga pangunahing konsepto tulad ng 'mga modelo', 'mga prediksyon', at 'training data'.
+
+## [Pre-lecture quiz](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/7/)
+
+[](https://youtu.be/4NGM0U2ZSHU "ML para sa mga baguhan - Mga Teknik sa Machine Learning")
+
+> 🎥 I-click ang larawan sa itaas para sa isang maikling video na nagpapaliwanag ng araling ito.
+
+## Panimula
+
+Sa mataas na antas, ang sining ng paglikha ng mga proseso ng machine learning (ML) ay binubuo ng ilang mga hakbang:
+
+1. **Magdesisyon sa tanong**. Karamihan sa mga proseso ng ML ay nagsisimula sa pagtatanong ng isang tanong na hindi kayang sagutin ng isang simpleng conditional program o rules-based engine. Ang mga tanong na ito ay madalas na umiikot sa mga prediksyon batay sa koleksyon ng datos.
+2. **Kolektahin at ihanda ang datos**. Upang masagot ang iyong tanong, kailangan mo ng datos. Ang kalidad at, kung minsan, ang dami ng iyong datos ang magtatakda kung gaano kahusay mong masasagot ang iyong tanong. Ang pag-visualize ng datos ay mahalagang aspeto ng yugtong ito. Kasama rin dito ang paghahati ng datos sa training at testing group upang makabuo ng modelo.
+3. **Pumili ng paraan ng pagsasanay**. Depende sa iyong tanong at sa kalikasan ng iyong datos, kailangan mong pumili kung paano mo gustong sanayin ang isang modelo upang pinakamahusay na maipakita ang datos at makagawa ng tumpak na prediksyon.
+4. **Sanayin ang modelo**. Gamit ang iyong training data, gagamit ka ng iba't ibang algorithm upang sanayin ang isang modelo na makilala ang mga pattern sa datos. Ang modelo ay maaaring gumamit ng internal weights na maaaring ayusin upang bigyang-priyoridad ang ilang bahagi ng datos kaysa sa iba upang makabuo ng mas mahusay na modelo.
+5. **Suriin ang modelo**. Gamit ang datos na hindi pa nakikita (iyong testing data) mula sa iyong nakolektang set, susuriin mo kung paano gumagana ang modelo.
+6. **Pag-tune ng mga parameter**. Batay sa performance ng iyong modelo, maaari mong ulitin ang proseso gamit ang iba't ibang mga parameter o variable na kumokontrol sa kilos ng mga algorithm na ginamit sa pagsasanay ng modelo.
+7. **Mag-predict**. Gumamit ng bagong input upang subukan ang katumpakan ng iyong modelo.
+
+## Anong tanong ang dapat itanong
+
+Ang mga computer ay partikular na mahusay sa pagtuklas ng mga nakatagong pattern sa datos. Ang kakayahang ito ay napakahalaga para sa mga mananaliksik na may mga tanong tungkol sa isang partikular na larangan na hindi madaling masagot sa pamamagitan ng paggawa ng isang conditionally-based rules engine. Halimbawa, sa isang actuarial na gawain, maaaring makabuo ang isang data scientist ng mga handcrafted rules tungkol sa mortality ng mga naninigarilyo kumpara sa mga hindi naninigarilyo.
+
+Kapag maraming iba pang mga variable ang isinama sa equation, gayunpaman, maaaring mas mahusay ang isang ML model sa pag-predict ng mga hinaharap na mortality rate batay sa nakaraang kasaysayan ng kalusugan. Isang mas masayang halimbawa ay ang paggawa ng prediksyon ng panahon para sa buwan ng Abril sa isang partikular na lugar batay sa datos na kinabibilangan ng latitude, longitude, pagbabago ng klima, kalapitan sa dagat, mga pattern ng jet stream, at iba pa.
+
+✅ Ang [slide deck](https://www2.cisl.ucar.edu/sites/default/files/2021-10/0900%20June%2024%20Haupt_0.pdf) na ito tungkol sa mga modelo ng panahon ay nagbibigay ng isang historikal na perspektibo sa paggamit ng ML sa pagsusuri ng panahon.
+
+## Mga Gawain Bago ang Pagbuo
+
+Bago magsimula sa pagbuo ng iyong modelo, may ilang mga gawain na kailangan mong kumpletuhin. Upang masubukan ang iyong tanong at makabuo ng hypothesis batay sa mga prediksyon ng modelo, kailangan mong tukuyin at i-configure ang ilang mga elemento.
+
+### Datos
+
+Upang masagot ang iyong tanong nang may katiyakan, kailangan mo ng sapat na dami ng datos na may tamang uri. Dalawang bagay ang kailangan mong gawin sa puntong ito:
+
+- **Kolektahin ang datos**. Tandaan ang nakaraang aralin tungkol sa pagiging patas sa pagsusuri ng datos, kolektahin ang iyong datos nang maingat. Maging mulat sa mga pinagmulan ng datos na ito, anumang likas na bias na maaaring mayroon ito, at idokumento ang pinagmulan nito.
+- **Ihanda ang datos**. May ilang mga hakbang sa proseso ng paghahanda ng datos. Maaaring kailanganin mong pagsama-samahin ang datos at gawing normal ito kung ito ay nagmula sa iba't ibang mga pinagmulan. Maaari mong pagandahin ang kalidad at dami ng datos sa pamamagitan ng iba't ibang mga pamamaraan tulad ng pag-convert ng mga string sa mga numero (tulad ng ginagawa natin sa [Clustering](../../5-Clustering/1-Visualize/README.md)). Maaari ka ring bumuo ng bagong datos batay sa orihinal (tulad ng ginagawa natin sa [Classification](../../4-Classification/1-Introduction/README.md)). Maaari mong linisin at i-edit ang datos (tulad ng gagawin natin bago ang [Web App](../../3-Web-App/README.md) na aralin). Sa wakas, maaaring kailanganin mo ring i-randomize at i-shuffle ito, depende sa iyong mga teknik sa pagsasanay.
+
+✅ Pagkatapos kolektahin at iproseso ang iyong datos, maglaan ng sandali upang tingnan kung ang hugis nito ay magpapahintulot sa iyo na tugunan ang iyong nilalayong tanong. Maaaring ang datos ay hindi magiging mahusay sa iyong ibinigay na gawain, tulad ng natuklasan natin sa aming mga aralin sa [Clustering](../../5-Clustering/1-Visualize/README.md)!
+
+### Mga Feature at Target
+
+Ang isang [feature](https://www.datasciencecentral.com/profiles/blogs/an-introduction-to-variable-and-feature-selection) ay isang nasusukat na katangian ng iyong datos. Sa maraming dataset, ito ay ipinapahayag bilang isang heading ng column tulad ng 'petsa', 'laki', o 'kulay'. Ang iyong feature variable, na karaniwang kinakatawan bilang `X` sa code, ay kumakatawan sa input variable na gagamitin upang sanayin ang modelo.
+
+Ang target ay ang bagay na sinusubukan mong hulaan. Ang target, na karaniwang kinakatawan bilang `y` sa code, ay kumakatawan sa sagot sa tanong na sinusubukan mong itanong sa iyong datos: sa Disyembre, anong **kulay** ng mga kalabasa ang magiging pinakamura? Sa San Francisco, aling mga kapitbahayan ang magkakaroon ng pinakamahusay na **presyo** ng real estate? Minsan ang target ay tinutukoy din bilang label attribute.
+
+### Pagpili ng iyong feature variable
+
+🎓 **Feature Selection at Feature Extraction** Paano mo malalaman kung aling variable ang pipiliin kapag bumubuo ng isang modelo? Malamang na dadaan ka sa isang proseso ng feature selection o feature extraction upang piliin ang tamang mga variable para sa pinaka-performant na modelo. Hindi sila pareho: "Ang feature extraction ay lumilikha ng mga bagong feature mula sa mga function ng orihinal na mga feature, samantalang ang feature selection ay nagbabalik ng isang subset ng mga feature." ([source](https://wikipedia.org/wiki/Feature_selection))
+
+### I-visualize ang iyong datos
+
+Isang mahalagang aspeto ng toolkit ng isang data scientist ay ang kakayahang i-visualize ang datos gamit ang ilang magagaling na library tulad ng Seaborn o MatPlotLib. Ang pagre-representa ng iyong datos nang biswal ay maaaring magpahintulot sa iyo na matuklasan ang mga nakatagong ugnayan na maaari mong magamit. Ang iyong mga visualization ay maaari ring makatulong sa iyo na matuklasan ang bias o hindi balanseng datos (tulad ng natuklasan natin sa [Classification](../../4-Classification/2-Classifiers-1/README.md)).
+
+### Hatiin ang iyong dataset
+
+Bago ang pagsasanay, kailangan mong hatiin ang iyong dataset sa dalawa o higit pang bahagi na may hindi pantay na laki ngunit mahusay pa ring kumakatawan sa datos.
+
+- **Training**. Ang bahaging ito ng dataset ay ginagamit upang sanayin ang iyong modelo. Ang set na ito ay bumubuo ng karamihan ng orihinal na dataset.
+- **Testing**. Ang test dataset ay isang independiyenteng grupo ng datos, madalas na kinuha mula sa orihinal na datos, na ginagamit mo upang kumpirmahin ang performance ng nabuo na modelo.
+- **Validating**. Ang validation set ay isang mas maliit na independiyenteng grupo ng mga halimbawa na ginagamit mo upang i-tune ang mga hyperparameter ng modelo, o ang arkitektura nito, upang mapabuti ang modelo. Depende sa laki ng iyong datos at sa tanong na iyong tinatanong, maaaring hindi mo kailangang bumuo ng ikatlong set na ito (tulad ng nabanggit natin sa [Time Series Forecasting](../../7-TimeSeries/1-Introduction/README.md)).
+
+## Pagbuo ng isang modelo
+
+Gamit ang iyong training data, ang iyong layunin ay bumuo ng isang modelo, o isang estadistikal na representasyon ng iyong datos, gamit ang iba't ibang algorithm upang **sanayin** ito. Ang pagsasanay ng isang modelo ay inilalantad ito sa datos at hinahayaan itong gumawa ng mga hinuha tungkol sa mga pattern na natuklasan, napatunayan, at tinanggap o tinanggihan.
+
+### Magdesisyon sa paraan ng pagsasanay
+
+Depende sa iyong tanong at sa kalikasan ng iyong datos, pipili ka ng paraan upang sanayin ito. Sa pamamagitan ng pagdaan sa [Scikit-learn's documentation](https://scikit-learn.org/stable/user_guide.html) - na ginagamit natin sa kursong ito - maaari mong tuklasin ang maraming paraan upang sanayin ang isang modelo. Depende sa iyong karanasan, maaaring kailanganin mong subukan ang ilang iba't ibang mga paraan upang makabuo ng pinakamahusay na modelo. Malamang na dadaan ka sa isang proseso kung saan sinusuri ng mga data scientist ang performance ng isang modelo sa pamamagitan ng pagpapakain dito ng hindi pa nakikitang datos, sinusuri ang katumpakan, bias, at iba pang mga isyung nagpapababa ng kalidad, at pinipili ang pinakaangkop na paraan ng pagsasanay para sa gawain.
+
+### Sanayin ang isang modelo
+
+Gamit ang iyong training data, handa ka nang 'i-fit' ito upang lumikha ng isang modelo. Mapapansin mo na sa maraming ML library, makikita mo ang code na 'model.fit' - sa puntong ito mo ipapadala ang iyong feature variable bilang isang array ng mga halaga (karaniwang 'X') at isang target variable (karaniwang 'y').
+
+### Suriin ang modelo
+
+Kapag natapos na ang proseso ng pagsasanay (maaari itong tumagal ng maraming pag-ulit, o 'epochs', upang sanayin ang isang malaking modelo), magagawa mong suriin ang kalidad ng modelo sa pamamagitan ng paggamit ng test data upang masukat ang performance nito. Ang datos na ito ay isang subset ng orihinal na datos na hindi pa nasusuri ng modelo. Maaari kang mag-print ng isang talahanayan ng mga sukatan tungkol sa kalidad ng iyong modelo.
+
+🎓 **Model fitting**
+
+Sa konteksto ng machine learning, ang model fitting ay tumutukoy sa katumpakan ng pinagbabatayang function ng modelo habang sinusubukan nitong suriin ang datos na hindi nito pamilyar.
+
+🎓 Ang **underfitting** at **overfitting** ay mga karaniwang problema na nagpapababa sa kalidad ng modelo, dahil ang modelo ay maaaring hindi sapat ang pagkaka-fit o masyadong fit. Nagdudulot ito ng modelo na gumawa ng mga prediksyon na masyadong malapit o masyadong malayo sa pagkakahanay sa training data nito. Ang isang overfit na modelo ay masyadong mahusay sa pag-predict ng training data dahil natutunan nito nang husto ang mga detalye at ingay ng datos. Ang isang underfit na modelo ay hindi tumpak dahil hindi nito kayang suriin nang maayos ang training data nito o ang datos na hindi pa nito 'nakikita'.
+
+
+> Infographic ni [Jen Looper](https://twitter.com/jenlooper)
+
+## Pag-tune ng mga parameter
+
+Kapag natapos na ang iyong unang pagsasanay, obserbahan ang kalidad ng modelo at isaalang-alang ang pagpapabuti nito sa pamamagitan ng pag-tweak ng mga 'hyperparameter'. Magbasa pa tungkol sa proseso [sa dokumentasyon](https://docs.microsoft.com/en-us/azure/machine-learning/how-to-tune-hyperparameters?WT.mc_id=academic-77952-leestott).
+
+## Prediksyon
+
+Ito ang sandali kung saan maaari mong gamitin ang ganap na bagong datos upang subukan ang katumpakan ng iyong modelo. Sa isang 'applied' na setting ng ML, kung saan bumubuo ka ng mga web asset upang gamitin ang modelo sa produksyon, maaaring kabilang sa prosesong ito ang pagkolekta ng input ng user (halimbawa, isang pindot ng button) upang magtakda ng isang variable at ipadala ito sa modelo para sa inference, o pagsusuri.
+
+Sa mga araling ito, matutuklasan mo kung paano gamitin ang mga hakbang na ito upang maghanda, bumuo, sumubok, suriin, at mag-predict - lahat ng mga kilos ng isang data scientist at higit pa, habang ikaw ay sumusulong sa iyong paglalakbay upang maging isang 'full stack' ML engineer.
+
+---
+
+## 🚀Hamunin
+
+Gumuhit ng isang flow chart na nagpapakita ng mga hakbang ng isang ML practitioner. Nasaan ka ngayon sa prosesong ito? Saan mo inaasahan na mahihirapan ka? Ano ang tila madali para sa iyo?
+
+## [Post-lecture quiz](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/8/)
+
+## Review at Pag-aaral sa Sarili
+
+Maghanap online ng mga panayam sa mga data scientist na naglalahad ng kanilang pang-araw-araw na gawain. Narito ang [isa](https://www.youtube.com/watch?v=Z3IjgbbCEfs).
+
+## Takdang-Aralin
+
+[Mag-interview ng isang data scientist](assignment.md)
+
+---
+
+**Paunawa**:
+Ang dokumentong ito ay isinalin gamit ang AI translation service na [Co-op Translator](https://github.com/Azure/co-op-translator). Bagama't sinisikap naming maging tumpak, pakitandaan na ang mga awtomatikong pagsasalin ay maaaring maglaman ng mga pagkakamali o hindi pagkakatugma. Ang orihinal na dokumento sa orihinal nitong wika ang dapat ituring na opisyal na sanggunian. Para sa mahalagang impormasyon, inirerekomenda ang propesyonal na pagsasalin ng tao. Hindi kami mananagot sa anumang hindi pagkakaunawaan o maling interpretasyon na maaaring magmula sa paggamit ng pagsasaling ito.
\ No newline at end of file
diff --git a/translations/tl/1-Introduction/4-techniques-of-ML/assignment.md b/translations/tl/1-Introduction/4-techniques-of-ML/assignment.md
new file mode 100644
index 000000000..fe782268f
--- /dev/null
+++ b/translations/tl/1-Introduction/4-techniques-of-ML/assignment.md
@@ -0,0 +1,25 @@
+
+# Mag-interbyu ng isang data scientist
+
+## Mga Instruksyon
+
+Sa inyong kumpanya, sa isang user group, o sa inyong mga kaibigan o kapwa estudyante, makipag-usap sa isang tao na propesyonal na nagtatrabaho bilang isang data scientist. Sumulat ng maikling papel (500 salita) tungkol sa kanilang mga pang-araw-araw na gawain. Sila ba ay mga espesyalista, o nagtatrabaho ba sila bilang 'full stack'?
+
+## Rubric
+
+| Pamantayan | Napakahusay | Katamtaman | Kailangan ng Pagpapabuti |
+| ---------- | ----------------------------------------------------------------------------------- | ----------------------------------------------------------------- | ------------------------- |
+| | Isang sanaysay na may tamang haba, na may mga pinanggalingang binanggit, na ipinasa bilang .doc file | Ang sanaysay ay kulang sa tamang pagkakabanggit o mas maikli kaysa sa kinakailangang haba | Walang ipinasa na sanaysay |
+
+---
+
+**Paunawa**:
+Ang dokumentong ito ay isinalin gamit ang AI translation service na [Co-op Translator](https://github.com/Azure/co-op-translator). Bagama't sinisikap naming maging tumpak, pakitandaan na ang mga awtomatikong pagsasalin ay maaaring maglaman ng mga pagkakamali o hindi pagkakatugma. Ang orihinal na dokumento sa orihinal nitong wika ang dapat ituring na opisyal na sanggunian. Para sa mahalagang impormasyon, inirerekomenda ang propesyonal na pagsasalin ng tao. Hindi kami mananagot sa anumang hindi pagkakaunawaan o maling interpretasyon na maaaring magmula sa paggamit ng pagsasaling ito.
\ No newline at end of file
diff --git a/translations/tl/1-Introduction/README.md b/translations/tl/1-Introduction/README.md
new file mode 100644
index 000000000..ee76b4feb
--- /dev/null
+++ b/translations/tl/1-Introduction/README.md
@@ -0,0 +1,37 @@
+
+# Panimula sa machine learning
+
+Sa seksyong ito ng kurikulum, ipapakilala sa iyo ang mga pangunahing konsepto na bumubuo sa larangan ng machine learning, kung ano ito, at matutunan ang tungkol sa kasaysayan nito at ang mga teknik na ginagamit ng mga mananaliksik upang magtrabaho dito. Tuklasin natin ang bagong mundo ng ML nang magkasama!
+
+
+> Larawan ni Bill Oxford sa Unsplash
+
+### Mga Aralin
+
+1. [Panimula sa machine learning](1-intro-to-ML/README.md)
+1. [Ang Kasaysayan ng machine learning at AI](2-history-of-ML/README.md)
+1. [Pagkamakatarungan at machine learning](3-fairness/README.md)
+1. [Mga Teknik ng machine learning](4-techniques-of-ML/README.md)
+
+### Mga Kredito
+
+"Introduction to Machine Learning" ay isinulat nang may ♥️ ng isang grupo ng mga tao kabilang sina [Muhammad Sakib Khan Inan](https://twitter.com/Sakibinan), [Ornella Altunyan](https://twitter.com/ornelladotcom) at [Jen Looper](https://twitter.com/jenlooper)
+
+"The History of Machine Learning" ay isinulat nang may ♥️ nina [Jen Looper](https://twitter.com/jenlooper) at [Amy Boyd](https://twitter.com/AmyKateNicho)
+
+"Fairness and Machine Learning" ay isinulat nang may ♥️ ni [Tomomi Imura](https://twitter.com/girliemac)
+
+"Techniques of Machine Learning" ay isinulat nang may ♥️ nina [Jen Looper](https://twitter.com/jenlooper) at [Chris Noring](https://twitter.com/softchris)
+
+---
+
+**Paunawa**:
+Ang dokumentong ito ay isinalin gamit ang AI translation service na [Co-op Translator](https://github.com/Azure/co-op-translator). Bagama't sinisikap naming maging tumpak, pakitandaan na ang mga awtomatikong pagsasalin ay maaaring maglaman ng mga pagkakamali o hindi pagkakatugma. Ang orihinal na dokumento sa orihinal nitong wika ang dapat ituring na opisyal na sanggunian. Para sa mahalagang impormasyon, inirerekomenda ang propesyonal na pagsasalin ng tao. Hindi kami mananagot sa anumang hindi pagkakaunawaan o maling interpretasyon na maaaring magmula sa paggamit ng pagsasaling ito.
\ No newline at end of file
diff --git a/translations/tl/2-Regression/1-Tools/README.md b/translations/tl/2-Regression/1-Tools/README.md
new file mode 100644
index 000000000..dd82d2a4a
--- /dev/null
+++ b/translations/tl/2-Regression/1-Tools/README.md
@@ -0,0 +1,239 @@
+
+# Magsimula sa Python at Scikit-learn para sa mga regression model
+
+
+
+> Sketchnote ni [Tomomi Imura](https://www.twitter.com/girlie_mac)
+
+## [Pre-lecture quiz](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/9/)
+
+> ### [Ang araling ito ay available sa R!](../../../../2-Regression/1-Tools/solution/R/lesson_1.html)
+
+## Panimula
+
+Sa apat na araling ito, matutuklasan mo kung paano bumuo ng mga regression model. Tatalakayin natin kung para saan ang mga ito sa madaling panahon. Ngunit bago ka magsimula, siguraduhing mayroon kang tamang mga tool para simulan ang proseso!
+
+Sa araling ito, matututunan mo kung paano:
+
+- I-configure ang iyong computer para sa mga lokal na machine learning na gawain.
+- Gumamit ng Jupyter notebooks.
+- Gumamit ng Scikit-learn, kabilang ang pag-install.
+- Tuklasin ang linear regression sa pamamagitan ng isang praktikal na ehersisyo.
+
+## Mga Pag-install at Konfigurasyon
+
+[](https://youtu.be/-DfeD2k2Kj0 "ML para sa mga nagsisimula - I-set up ang iyong mga tool para bumuo ng Machine Learning models")
+
+> 🎥 I-click ang imahe sa itaas para sa isang maikling video tungkol sa pag-configure ng iyong computer para sa ML.
+
+1. **I-install ang Python**. Siguraduhing naka-install ang [Python](https://www.python.org/downloads/) sa iyong computer. Gagamitin mo ang Python para sa maraming data science at machine learning na gawain. Karamihan sa mga computer system ay mayroon nang naka-install na Python. Mayroon ding mga kapaki-pakinabang na [Python Coding Packs](https://code.visualstudio.com/learn/educators/installers?WT.mc_id=academic-77952-leestott) na magpapadali sa setup para sa ilang user.
+
+ Gayunpaman, ang ilang paggamit ng Python ay nangangailangan ng isang partikular na bersyon ng software, habang ang iba ay nangangailangan ng ibang bersyon. Para sa kadahilanang ito, kapaki-pakinabang na gumamit ng [virtual environment](https://docs.python.org/3/library/venv.html).
+
+2. **I-install ang Visual Studio Code**. Siguraduhing naka-install ang Visual Studio Code sa iyong computer. Sundin ang mga tagubilin para sa [pag-install ng Visual Studio Code](https://code.visualstudio.com/) para sa basic na setup. Gagamitin mo ang Python sa Visual Studio Code sa kursong ito, kaya maaaring gusto mong mag-review kung paano [i-configure ang Visual Studio Code](https://docs.microsoft.com/learn/modules/python-install-vscode?WT.mc_id=academic-77952-leestott) para sa Python development.
+
+ > Maging komportable sa Python sa pamamagitan ng pagdaan sa koleksyong ito ng [Learn modules](https://docs.microsoft.com/users/jenlooper-2911/collections/mp1pagggd5qrq7?WT.mc_id=academic-77952-leestott)
+ >
+ > [](https://youtu.be/yyQM70vi7V8 "I-set up ang Python gamit ang Visual Studio Code")
+ >
+ > 🎥 I-click ang imahe sa itaas para sa isang video: paggamit ng Python sa loob ng VS Code.
+
+3. **I-install ang Scikit-learn**, sa pamamagitan ng pagsunod sa [mga tagubilin na ito](https://scikit-learn.org/stable/install.html). Dahil kailangan mong tiyakin na gumagamit ka ng Python 3, inirerekomenda na gumamit ka ng virtual environment. Tandaan, kung ini-install mo ang library na ito sa isang M1 Mac, may mga espesyal na tagubilin sa pahinang naka-link sa itaas.
+
+4. **I-install ang Jupyter Notebook**. Kailangan mong [i-install ang Jupyter package](https://pypi.org/project/jupyter/).
+
+## Ang iyong ML authoring environment
+
+Gagamit ka ng **notebooks** para bumuo ng iyong Python code at lumikha ng mga machine learning model. Ang ganitong uri ng file ay karaniwang tool para sa mga data scientist, at makikilala sila sa pamamagitan ng kanilang suffix o extension `.ipynb`.
+
+Ang notebooks ay isang interactive na environment na nagbibigay-daan sa developer na parehong mag-code at magdagdag ng mga tala at magsulat ng dokumentasyon sa paligid ng code, na kapaki-pakinabang para sa mga experimental o research-oriented na proyekto.
+
+[](https://youtu.be/7E-jC8FLA2E "ML para sa mga nagsisimula - I-set up ang Jupyter Notebooks para simulan ang pagbuo ng regression models")
+
+> 🎥 I-click ang imahe sa itaas para sa isang maikling video tungkol sa ehersisyong ito.
+
+### Ehersisyo - gumamit ng notebook
+
+Sa folder na ito, makikita mo ang file na _notebook.ipynb_.
+
+1. Buksan ang _notebook.ipynb_ sa Visual Studio Code.
+
+ Magsisimula ang isang Jupyter server gamit ang Python 3+. Makikita mo ang mga bahagi ng notebook na maaaring `run`, mga piraso ng code. Maaari mong patakbuhin ang isang code block, sa pamamagitan ng pagpili sa icon na mukhang play button.
+
+2. Piliin ang `md` icon at magdagdag ng kaunting markdown, at ang sumusunod na teksto **# Welcome to your notebook**.
+
+ Susunod, magdagdag ng ilang Python code.
+
+3. I-type ang **print('hello notebook')** sa code block.
+4. Piliin ang arrow para patakbuhin ang code.
+
+ Makikita mo ang naka-print na pahayag:
+
+ ```output
+ hello notebook
+ ```
+
+
+
+Maaari mong ihalo ang iyong code sa mga komento para sa self-documentation ng notebook.
+
+✅ Mag-isip ng sandali kung gaano kaiba ang working environment ng isang web developer kumpara sa isang data scientist.
+
+## Pagsisimula sa Scikit-learn
+
+Ngayon na naka-set up na ang Python sa iyong lokal na environment, at komportable ka na sa Jupyter notebooks, magpakomportable din tayo sa Scikit-learn (binibigkas na `sci` tulad ng `science`). Ang Scikit-learn ay nagbibigay ng [malawak na API](https://scikit-learn.org/stable/modules/classes.html#api-ref) para tulungan kang magsagawa ng mga ML na gawain.
+
+Ayon sa kanilang [website](https://scikit-learn.org/stable/getting_started.html), "Ang Scikit-learn ay isang open source machine learning library na sumusuporta sa supervised at unsupervised learning. Nagbibigay din ito ng iba't ibang tool para sa model fitting, data preprocessing, model selection at evaluation, at marami pang ibang utilities."
+
+Sa kursong ito, gagamitin mo ang Scikit-learn at iba pang mga tool para bumuo ng mga machine learning model para magsagawa ng tinatawag nating 'traditional machine learning' na mga gawain. Sadyang iniwasan namin ang neural networks at deep learning, dahil mas mahusay silang saklawin sa aming paparating na 'AI for Beginners' na kurikulum.
+
+Ginagawang simple ng Scikit-learn ang pagbuo ng mga model at ang pagsusuri sa mga ito para magamit. Pangunahing nakatuon ito sa paggamit ng numeric data at naglalaman ng ilang ready-made na dataset para magamit bilang mga learning tool. Kasama rin dito ang mga pre-built na model para subukan ng mga estudyante. Tuklasin natin ang proseso ng pag-load ng prepackaged na data at paggamit ng built-in estimator para sa unang ML model gamit ang Scikit-learn sa ilang basic na data.
+
+## Ehersisyo - ang iyong unang Scikit-learn notebook
+
+> Ang tutorial na ito ay inspirasyon mula sa [linear regression example](https://scikit-learn.org/stable/auto_examples/linear_model/plot_ols.html#sphx-glr-auto-examples-linear-model-plot-ols-py) sa website ng Scikit-learn.
+
+[](https://youtu.be/2xkXL5EUpS0 "ML para sa mga nagsisimula - Ang iyong Unang Linear Regression Project sa Python")
+
+> 🎥 I-click ang imahe sa itaas para sa isang maikling video tungkol sa ehersisyong ito.
+
+Sa file na _notebook.ipynb_ na nauugnay sa araling ito, i-clear ang lahat ng mga cell sa pamamagitan ng pagpindot sa 'trash can' icon.
+
+Sa seksyong ito, gagamit ka ng isang maliit na dataset tungkol sa diabetes na built-in sa Scikit-learn para sa mga layunin ng pag-aaral. Isipin na gusto mong subukan ang isang paggamot para sa mga pasyenteng may diabetes. Ang mga Machine Learning model ay maaaring makatulong sa iyo na matukoy kung aling mga pasyente ang mas mahusay na tutugon sa paggamot, batay sa mga kumbinasyon ng mga variable. Kahit na isang napaka-basic na regression model, kapag na-visualize, maaaring magpakita ng impormasyon tungkol sa mga variable na makakatulong sa iyo na ayusin ang iyong mga teoretikal na clinical trial.
+
+✅ Maraming uri ng regression methods, at kung alin ang pipiliin mo ay nakadepende sa sagot na hinahanap mo. Kung gusto mong hulaan ang posibleng taas ng isang tao batay sa edad, gagamit ka ng linear regression, dahil naghahanap ka ng **numeric value**. Kung interesado kang tuklasin kung ang isang uri ng pagkain ay dapat ituring na vegan o hindi, naghahanap ka ng **category assignment** kaya gagamit ka ng logistic regression. Matututo ka pa tungkol sa logistic regression sa susunod. Mag-isip ng kaunti tungkol sa ilang tanong na maaari mong itanong sa data, at kung alin sa mga pamamaraang ito ang mas angkop.
+
+Simulan na natin ang gawain.
+
+### I-import ang mga library
+
+Para sa gawain na ito, mag-i-import tayo ng ilang library:
+
+- **matplotlib**. Isang kapaki-pakinabang na [graphing tool](https://matplotlib.org/) na gagamitin natin para gumawa ng line plot.
+- **numpy**. [numpy](https://numpy.org/doc/stable/user/whatisnumpy.html) ay isang kapaki-pakinabang na library para sa paghawak ng numeric data sa Python.
+- **sklearn**. Ito ang [Scikit-learn](https://scikit-learn.org/stable/user_guide.html) library.
+
+Mag-import ng ilang library para makatulong sa iyong mga gawain.
+
+1. Magdagdag ng imports sa pamamagitan ng pag-type ng sumusunod na code:
+
+ ```python
+ import matplotlib.pyplot as plt
+ import numpy as np
+ from sklearn import datasets, linear_model, model_selection
+ ```
+
+ Sa itaas, nag-i-import ka ng `matplotlib`, `numpy` at nag-i-import ka ng `datasets`, `linear_model` at `model_selection` mula sa `sklearn`. Ang `model_selection` ay ginagamit para sa paghahati ng data sa training at test sets.
+
+### Ang diabetes dataset
+
+Ang built-in na [diabetes dataset](https://scikit-learn.org/stable/datasets/toy_dataset.html#diabetes-dataset) ay may kasamang 442 sample ng data tungkol sa diabetes, na may 10 feature variables, ilan sa mga ito ay:
+
+- age: edad sa taon
+- bmi: body mass index
+- bp: average blood pressure
+- s1 tc: T-Cells (isang uri ng white blood cells)
+
+✅ Ang dataset na ito ay may kasamang konsepto ng 'sex' bilang isang feature variable na mahalaga sa pananaliksik tungkol sa diabetes. Maraming medical datasets ang may ganitong uri ng binary classification. Mag-isip ng kaunti tungkol sa kung paano maaaring maalis ng mga ganitong klasipikasyon ang ilang bahagi ng populasyon mula sa mga paggamot.
+
+Ngayon, i-load ang X at y data.
+
+> 🎓 Tandaan, ito ay supervised learning, at kailangan natin ng tinatawag na 'y' target.
+
+Sa isang bagong code cell, i-load ang diabetes dataset sa pamamagitan ng pagtawag sa `load_diabetes()`. Ang input na `return_X_y=True` ay nagpapahiwatig na ang `X` ay magiging isang data matrix, at ang `y` ay magiging regression target.
+
+1. Magdagdag ng ilang print commands para ipakita ang hugis ng data matrix at ang unang elemento nito:
+
+ ```python
+ X, y = datasets.load_diabetes(return_X_y=True)
+ print(X.shape)
+ print(X[0])
+ ```
+
+ Ang nakukuha mo bilang tugon ay isang tuple. Ang ginagawa mo ay i-assign ang dalawang unang halaga ng tuple sa `X` at `y` ayon sa pagkakabanggit. Matuto pa [tungkol sa tuples](https://wikipedia.org/wiki/Tuple).
+
+ Makikita mo na ang data na ito ay may 442 item na nakaayos sa arrays na may 10 elemento:
+
+ ```text
+ (442, 10)
+ [ 0.03807591 0.05068012 0.06169621 0.02187235 -0.0442235 -0.03482076
+ -0.04340085 -0.00259226 0.01990842 -0.01764613]
+ ```
+
+ ✅ Mag-isip ng kaunti tungkol sa relasyon sa pagitan ng data at ng regression target. Ang linear regression ay nagtataya ng mga relasyon sa pagitan ng feature X at target variable y. Mahahanap mo ba ang [target](https://scikit-learn.org/stable/datasets/toy_dataset.html#diabetes-dataset) para sa diabetes dataset sa dokumentasyon? Ano ang ipinapakita ng dataset na ito, batay sa target?
+
+2. Susunod, pumili ng bahagi ng dataset na ito para i-plot sa pamamagitan ng pagpili sa ika-3 column ng dataset. Magagawa mo ito sa pamamagitan ng paggamit ng `:` operator para piliin ang lahat ng rows, at pagkatapos ay piliin ang ika-3 column gamit ang index (2). Maaari mo ring i-reshape ang data para maging isang 2D array - na kinakailangan para sa plotting - sa pamamagitan ng paggamit ng `reshape(n_rows, n_columns)`. Kung ang isa sa mga parameter ay -1, ang kaukulang dimensyon ay awtomatikong kinakalkula.
+
+ ```python
+ X = X[:, 2]
+ X = X.reshape((-1,1))
+ ```
+
+ ✅ Sa anumang oras, i-print ang data para suriin ang hugis nito.
+
+3. Ngayon na handa na ang data para i-plot, maaari mong tingnan kung makakatulong ang isang machine para matukoy ang lohikal na paghahati sa pagitan ng mga numero sa dataset na ito. Para magawa ito, kailangan mong hatiin ang parehong data (X) at ang target (y) sa test at training sets. Ang Scikit-learn ay may simpleng paraan para gawin ito; maaari mong hatiin ang iyong test data sa isang ibinigay na punto.
+
+ ```python
+ X_train, X_test, y_train, y_test = model_selection.train_test_split(X, y, test_size=0.33)
+ ```
+
+4. Ngayon handa ka nang i-train ang iyong model! I-load ang linear regression model at i-train ito gamit ang iyong X at y training sets gamit ang `model.fit()`:
+
+ ```python
+ model = linear_model.LinearRegression()
+ model.fit(X_train, y_train)
+ ```
+
+ ✅ Ang `model.fit()` ay isang function na madalas mong makikita sa maraming ML libraries tulad ng TensorFlow.
+
+5. Pagkatapos, lumikha ng prediction gamit ang test data, gamit ang function na `predict()`. Ito ay gagamitin para iguhit ang linya sa pagitan ng mga grupo ng data.
+
+ ```python
+ y_pred = model.predict(X_test)
+ ```
+
+6. Ngayon oras na para ipakita ang data sa isang plot. Ang Matplotlib ay isang napaka-kapaki-pakinabang na tool para sa gawaing ito. Gumawa ng scatterplot ng lahat ng X at y test data, at gamitin ang prediction para iguhit ang linya sa pinaka-angkop na lugar, sa pagitan ng mga grupo ng data ng model.
+
+ ```python
+ plt.scatter(X_test, y_test, color='black')
+ plt.plot(X_test, y_pred, color='blue', linewidth=3)
+ plt.xlabel('Scaled BMIs')
+ plt.ylabel('Disease Progression')
+ plt.title('A Graph Plot Showing Diabetes Progression Against BMI')
+ plt.show()
+ ```
+
+ 
+✅ Pag-isipan mo kung ano ang nangyayari dito. Isang tuwid na linya ang dumadaan sa maraming maliliit na tuldok ng datos, pero ano nga ba ang ginagawa nito? Nakikita mo ba kung paano mo magagamit ang linyang ito upang mahulaan kung saan dapat ilagay ang isang bagong, hindi pa nakikitang punto ng datos kaugnay sa y axis ng plot? Subukang ilarawan sa mga salita ang praktikal na gamit ng modelong ito.
+
+Binabati kita, nakagawa ka ng iyong unang linear regression model, nakalikha ng prediksyon gamit ito, at naipakita ito sa isang plot!
+
+---
+## 🚀Hamunin
+
+I-plot ang ibang variable mula sa dataset na ito. Pahiwatig: i-edit ang linyang ito: `X = X[:,2]`. Batay sa target ng dataset na ito, ano ang kaya mong matuklasan tungkol sa pag-usad ng diabetes bilang isang sakit?
+
+## [Post-lecture quiz](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/10/)
+
+## Review & Pag-aaral sa Sarili
+
+Sa tutorial na ito, gumamit ka ng simpleng linear regression, sa halip na univariate o multiple linear regression. Magbasa nang kaunti tungkol sa mga pagkakaiba ng mga pamamaraang ito, o panoorin ang [video na ito](https://www.coursera.org/lecture/quantifying-relationships-regression-models/linear-vs-nonlinear-categorical-variables-ai2Ef).
+
+Magbasa pa tungkol sa konsepto ng regression at pag-isipan kung anong mga uri ng tanong ang maaaring masagot gamit ang teknik na ito. Kunin ang [tutorial na ito](https://docs.microsoft.com/learn/modules/train-evaluate-regression-models?WT.mc_id=academic-77952-leestott) upang palalimin ang iyong kaalaman.
+
+## Takdang Aralin
+
+[Isang Ibang Dataset](assignment.md)
+
+---
+
+**Paunawa**:
+Ang dokumentong ito ay isinalin gamit ang AI translation service na [Co-op Translator](https://github.com/Azure/co-op-translator). Bagama't sinisikap naming maging tumpak, pakitandaan na ang mga awtomatikong pagsasalin ay maaaring maglaman ng mga pagkakamali o hindi pagkakatugma. Ang orihinal na dokumento sa orihinal nitong wika ang dapat ituring na opisyal na sanggunian. Para sa mahalagang impormasyon, inirerekomenda ang propesyonal na pagsasalin ng tao. Hindi kami mananagot sa anumang hindi pagkakaunawaan o maling interpretasyon na maaaring magmula sa paggamit ng pagsasaling ito.
\ No newline at end of file
diff --git a/translations/tl/2-Regression/1-Tools/assignment.md b/translations/tl/2-Regression/1-Tools/assignment.md
new file mode 100644
index 000000000..301e9ada9
--- /dev/null
+++ b/translations/tl/2-Regression/1-Tools/assignment.md
@@ -0,0 +1,27 @@
+
+# Regression gamit ang Scikit-learn
+
+## Mga Instruksyon
+
+Tingnan ang [Linnerud dataset](https://scikit-learn.org/stable/modules/generated/sklearn.datasets.load_linnerud.html#sklearn.datasets.load_linnerud) sa Scikit-learn. Ang dataset na ito ay may maraming [targets](https://scikit-learn.org/stable/datasets/toy_dataset.html#linnerrud-dataset): 'Binubuo ito ng tatlong exercise (data) at tatlong physiological (target) variables na nakolekta mula sa dalawampung kalalakihan na nasa gitnang edad sa isang fitness club'.
+
+Sa sarili mong mga salita, ipaliwanag kung paano gumawa ng Regression model na magpapakita ng relasyon sa pagitan ng sukat ng baywang at kung ilang situps ang nagawa. Gawin din ang parehong proseso para sa iba pang mga datapoints sa dataset na ito.
+
+## Rubric
+
+| Pamantayan | Natatangi | Katanggap-tanggap | Kailangan ng Pagpapabuti |
+| ------------------------------ | ----------------------------------- | ----------------------------- | -------------------------- |
+| Mag-submit ng isang deskriptibong talata | Maayos na naisulat na talata ang isinumite | Ilang pangungusap ang isinumite | Walang naibigay na deskripsyon |
+
+---
+
+**Paunawa**:
+Ang dokumentong ito ay isinalin gamit ang AI translation service na [Co-op Translator](https://github.com/Azure/co-op-translator). Bagama't sinisikap naming maging tumpak, pakitandaan na ang mga awtomatikong pagsasalin ay maaaring maglaman ng mga pagkakamali o hindi pagkakatugma. Ang orihinal na dokumento sa orihinal nitong wika ang dapat ituring na opisyal na sanggunian. Para sa mahalagang impormasyon, inirerekomenda ang propesyonal na pagsasalin ng tao. Hindi kami mananagot sa anumang hindi pagkakaunawaan o maling interpretasyon na maaaring magmula sa paggamit ng pagsasaling ito.
\ No newline at end of file
diff --git a/translations/tl/2-Regression/1-Tools/notebook.ipynb b/translations/tl/2-Regression/1-Tools/notebook.ipynb
new file mode 100644
index 000000000..e69de29bb
diff --git a/translations/tl/2-Regression/1-Tools/solution/Julia/README.md b/translations/tl/2-Regression/1-Tools/solution/Julia/README.md
new file mode 100644
index 000000000..48e6a17c5
--- /dev/null
+++ b/translations/tl/2-Regression/1-Tools/solution/Julia/README.md
@@ -0,0 +1,15 @@
+
+
+
+---
+
+**Paunawa**:
+Ang dokumentong ito ay isinalin gamit ang AI translation service na [Co-op Translator](https://github.com/Azure/co-op-translator). Bagama't sinisikap naming maging tumpak, pakitandaan na ang mga awtomatikong pagsasalin ay maaaring maglaman ng mga pagkakamali o hindi pagkakatugma. Ang orihinal na dokumento sa orihinal nitong wika ang dapat ituring na opisyal na sanggunian. Para sa mahalagang impormasyon, inirerekomenda ang propesyonal na pagsasalin ng tao. Hindi kami mananagot sa anumang hindi pagkakaunawaan o maling interpretasyon na maaaring magmula sa paggamit ng pagsasaling ito.
\ No newline at end of file
diff --git a/translations/tl/2-Regression/1-Tools/solution/R/lesson_1-R.ipynb b/translations/tl/2-Regression/1-Tools/solution/R/lesson_1-R.ipynb
new file mode 100644
index 000000000..a97fbfd86
--- /dev/null
+++ b/translations/tl/2-Regression/1-Tools/solution/R/lesson_1-R.ipynb
@@ -0,0 +1,447 @@
+{
+ "nbformat": 4,
+ "nbformat_minor": 2,
+ "metadata": {
+ "colab": {
+ "name": "lesson_1-R.ipynb",
+ "provenance": [],
+ "collapsed_sections": [],
+ "toc_visible": true
+ },
+ "kernelspec": {
+ "name": "ir",
+ "display_name": "R"
+ },
+ "language_info": {
+ "name": "R"
+ },
+ "coopTranslator": {
+ "original_hash": "c18d3bd0bd8ae3878597e89dcd1fa5c1",
+ "translation_date": "2025-08-29T14:57:58+00:00",
+ "source_file": "2-Regression/1-Tools/solution/R/lesson_1-R.ipynb",
+ "language_code": "tl"
+ }
+ },
+ "cells": [
+ {
+ "cell_type": "markdown",
+ "source": [],
+ "metadata": {
+ "id": "YJUHCXqK57yz"
+ }
+ },
+ {
+ "cell_type": "markdown",
+ "source": [
+ "## Panimula sa Regression - Aralin 1\n",
+ "\n",
+ "#### Paglalagay sa Tamang Perspektibo\n",
+ "\n",
+ "✅ Maraming uri ng mga pamamaraan ng regression, at ang pipiliin mo ay nakadepende sa sagot na hinahanap mo. Kung gusto mong hulaan ang posibleng taas ng isang tao batay sa kanyang edad, gagamit ka ng `linear regression`, dahil naghahanap ka ng isang **halagang numerikal**. Kung interesado kang alamin kung ang isang uri ng lutuin ay dapat ituring na vegan o hindi, naghahanap ka ng **kategoryang pagtatalaga**, kaya gagamit ka ng `logistic regression`. Malalaman mo pa ang tungkol sa logistic regression sa mga susunod na bahagi. Mag-isip ng ilang mga tanong na maaari mong itanong sa datos, at alamin kung alin sa mga pamamaraang ito ang mas angkop.\n",
+ "\n",
+ "Sa bahaging ito, gagamit ka ng isang [maliit na dataset tungkol sa diabetes](https://www4.stat.ncsu.edu/~boos/var.select/diabetes.html). Isipin na gusto mong subukan ang isang paggamot para sa mga pasyenteng may diabetes. Maaaring makatulong ang mga modelo ng Machine Learning upang matukoy kung aling mga pasyente ang mas mahusay na tutugon sa paggamot, batay sa mga kombinasyon ng mga variable. Kahit na ang isang napakasimpleng regression model, kapag na-visualize, ay maaaring magpakita ng impormasyon tungkol sa mga variable na makakatulong sa iyo na ayusin ang iyong mga teoretikal na klinikal na pagsubok.\n",
+ "\n",
+ "Sa sinabi na, simulan na natin ang gawaing ito!\n",
+ "\n",
+ "
\n",
+ " \n",
+ " Likha ni @allison_horst\n",
+ "\n",
+ "\n"
+ ],
+ "metadata": {
+ "id": "LWNNzfqd6feZ"
+ }
+ },
+ {
+ "cell_type": "markdown",
+ "source": [
+ "## 1. Paglo-load ng ating tool set\n",
+ "\n",
+ "Para sa task na ito, kakailanganin natin ang mga sumusunod na packages:\n",
+ "\n",
+ "- `tidyverse`: Ang [tidyverse](https://www.tidyverse.org/) ay isang [koleksyon ng mga R packages](https://www.tidyverse.org/packages) na dinisenyo upang gawing mas mabilis, mas madali, at mas masaya ang data science!\n",
+ "\n",
+ "- `tidymodels`: Ang [tidymodels](https://www.tidymodels.org/) framework ay isang [koleksyon ng mga packages](https://www.tidymodels.org/packages/) para sa modeling at machine learning.\n",
+ "\n",
+ "Maaaring i-install ang mga ito gamit ang:\n",
+ "\n",
+ "`install.packages(c(\"tidyverse\", \"tidymodels\"))`\n",
+ "\n",
+ "Ang script sa ibaba ay nagche-check kung mayroon kang mga kinakailangang packages para makumpleto ang module na ito at ini-install ang mga ito para sa iyo kung may kulang.\n"
+ ],
+ "metadata": {
+ "id": "FIo2YhO26wI9"
+ }
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 2,
+ "source": [
+ "suppressWarnings(if(!require(\"pacman\")) install.packages(\"pacman\"))\n",
+ "pacman::p_load(tidyverse, tidymodels)"
+ ],
+ "outputs": [
+ {
+ "output_type": "stream",
+ "name": "stderr",
+ "text": [
+ "Loading required package: pacman\n",
+ "\n"
+ ]
+ }
+ ],
+ "metadata": {
+ "id": "cIA9fz9v7Dss",
+ "colab": {
+ "base_uri": "https://localhost:8080/"
+ },
+ "outputId": "2df7073b-86b2-4b32-cb86-0da605a0dc11"
+ }
+ },
+ {
+ "cell_type": "markdown",
+ "source": [
+ "Ngayon, i-load natin ang mga kahanga-hangang package na ito at gawing available ang mga ito sa kasalukuyang R session natin. (Ito ay para lamang sa ilustrasyon, `pacman::p_load()` ay ginawa na iyon para sa iyo)\n"
+ ],
+ "metadata": {
+ "id": "gpO_P_6f9WUG"
+ }
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "source": [
+ "# load the core Tidyverse packages\r\n",
+ "library(tidyverse)\r\n",
+ "\r\n",
+ "# load the core Tidymodels packages\r\n",
+ "library(tidymodels)\r\n"
+ ],
+ "outputs": [],
+ "metadata": {
+ "id": "NLMycgG-9ezO"
+ }
+ },
+ {
+ "cell_type": "markdown",
+ "source": [
+ "## 2. Ang diabetes dataset\n",
+ "\n",
+ "Sa ehersisyong ito, ilalabas natin ang ating kakayahan sa regression sa pamamagitan ng paggawa ng mga prediksyon gamit ang isang diabetes dataset. Ang [diabetes dataset](https://www4.stat.ncsu.edu/~boos/var.select/diabetes.rwrite1.txt) ay naglalaman ng `442 samples` ng datos tungkol sa diabetes, na may 10 predictor feature variables: `edad`, `kasarian`, `body mass index`, `average blood pressure`, at `anim na blood serum measurements`, pati na rin ang isang outcome variable na `y`: isang dami o quantitative na sukat ng pag-usad ng sakit isang taon matapos ang baseline.\n",
+ "\n",
+ "|Bilang ng obserbasyon|442|\n",
+ "|----------------------|:---|\n",
+ "|Bilang ng predictors|Ang unang 10 kolum ay numerikong predictive|\n",
+ "|Outcome/Target|Ang Kolum 11 ay isang dami o quantitative na sukat ng pag-usad ng sakit isang taon matapos ang baseline|\n",
+ "|Impormasyon sa Predictors|- edad sa taon\n",
+ "||- kasarian\n",
+ "||- bmi body mass index\n",
+ "||- bp average blood pressure\n",
+ "||- s1 tc, kabuuang serum cholesterol\n",
+ "||- s2 ldl, low-density lipoproteins\n",
+ "||- s3 hdl, high-density lipoproteins\n",
+ "||- s4 tch, kabuuang cholesterol / HDL\n",
+ "||- s5 ltg, posibleng log ng antas ng serum triglycerides\n",
+ "||- s6 glu, antas ng asukal sa dugo|\n",
+ "\n",
+ "> 🎓 Tandaan, ito ay supervised learning, at kailangan natin ng target na tinatawag na 'y'.\n",
+ "\n",
+ "Bago mo manipulahin ang datos gamit ang R, kailangan mong i-import ang datos sa memorya ng R, o gumawa ng koneksyon sa datos na magagamit ng R upang ma-access ito nang malayuan.\n",
+ "\n",
+ "> Ang [readr](https://readr.tidyverse.org/) package, na bahagi ng Tidyverse, ay nagbibigay ng mabilis at madaling paraan upang magbasa ng rectangular na datos papunta sa R.\n",
+ "\n",
+ "Ngayon, i-load natin ang diabetes dataset na ibinigay sa source URL na ito: \n",
+ "\n",
+ "Gagawa rin tayo ng sanity check sa ating datos gamit ang `glimpse()` at ipapakita ang unang 5 rows gamit ang `slice()`.\n",
+ "\n",
+ "Bago tayo magpatuloy, ipakilala rin natin ang isang bagay na madalas mong makikita sa R code 🥁🥁: ang pipe operator `%>%`\n",
+ "\n",
+ "Ang pipe operator (`%>%`) ay nagsasagawa ng mga operasyon sa lohikal na pagkakasunod-sunod sa pamamagitan ng pagpapasa ng isang object papunta sa isang function o call expression. Maaari mong isipin ang pipe operator na parang sinasabi nitong \"at pagkatapos\" sa iyong code.\n"
+ ],
+ "metadata": {
+ "id": "KM6iXLH996Cl"
+ }
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "source": [
+ "# Import the data set\r\n",
+ "diabetes <- read_table2(file = \"https://www4.stat.ncsu.edu/~boos/var.select/diabetes.rwrite1.txt\")\r\n",
+ "\r\n",
+ "\r\n",
+ "# Get a glimpse and dimensions of the data\r\n",
+ "glimpse(diabetes)\r\n",
+ "\r\n",
+ "\r\n",
+ "# Select the first 5 rows of the data\r\n",
+ "diabetes %>% \r\n",
+ " slice(1:5)"
+ ],
+ "outputs": [],
+ "metadata": {
+ "id": "Z1geAMhM-bSP"
+ }
+ },
+ {
+ "cell_type": "markdown",
+ "source": [
+ "`glimpse()` ipinapakita sa atin na ang data na ito ay may 442 na rows at 11 na columns, kung saan lahat ng columns ay may data type na `double`.\n",
+ "\n",
+ " \n",
+ "\n",
+ "> Ang `glimpse()` at `slice()` ay mga function sa [`dplyr`](https://dplyr.tidyverse.org/). Ang Dplyr, bahagi ng Tidyverse, ay isang grammar ng data manipulation na nagbibigay ng pare-parehong set ng mga verbs na tumutulong sa iyo na lutasin ang mga karaniwang hamon sa data manipulation.\n",
+ "\n",
+ " \n",
+ "\n",
+ "Ngayon na mayroon na tayong data, mag-focus tayo sa isang feature (`bmi`) bilang target para sa exercise na ito. Kakailanganin natin piliin ang mga nais na columns. Paano natin ito gagawin?\n",
+ "\n",
+ "Ang [`dplyr::select()`](https://dplyr.tidyverse.org/reference/select.html) ay nagbibigay-daan sa atin na *piliin* (at opsyonal na palitan ang pangalan) ng mga columns sa isang data frame.\n"
+ ],
+ "metadata": {
+ "id": "UwjVT1Hz-c3Z"
+ }
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "source": [
+ "# Select predictor feature `bmi` and outcome `y`\r\n",
+ "diabetes_select <- diabetes %>% \r\n",
+ " select(c(bmi, y))\r\n",
+ "\r\n",
+ "# Print the first 5 rows\r\n",
+ "diabetes_select %>% \r\n",
+ " slice(1:10)"
+ ],
+ "outputs": [],
+ "metadata": {
+ "id": "RDY1oAKI-m80"
+ }
+ },
+ {
+ "cell_type": "markdown",
+ "source": [
+ "## 3. Pagsasanay at Pagsusuri ng Data\n",
+ "\n",
+ "Karaniwan sa supervised learning ang *hatiin* ang data sa dalawang subset; isang (karaniwang mas malaking) set para sanayin ang modelo, at isang mas maliit na \"hold-back\" set para makita kung paano gumana ang modelo.\n",
+ "\n",
+ "Ngayon na handa na ang ating data, maaari nating tingnan kung makakatulong ang isang makina upang matukoy ang isang lohikal na paghahati sa mga numero sa dataset na ito. Maaari nating gamitin ang [rsample](https://tidymodels.github.io/rsample/) na package, na bahagi ng Tidymodels framework, upang lumikha ng isang object na naglalaman ng impormasyon kung *paano* hahatiin ang data, at pagkatapos ay gumamit ng dalawa pang rsample functions upang kunin ang mga nilikhang training at testing sets:\n"
+ ],
+ "metadata": {
+ "id": "SDk668xK-tc3"
+ }
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "source": [
+ "set.seed(2056)\r\n",
+ "# Split 67% of the data for training and the rest for tesing\r\n",
+ "diabetes_split <- diabetes_select %>% \r\n",
+ " initial_split(prop = 0.67)\r\n",
+ "\r\n",
+ "# Extract the resulting train and test sets\r\n",
+ "diabetes_train <- training(diabetes_split)\r\n",
+ "diabetes_test <- testing(diabetes_split)\r\n",
+ "\r\n",
+ "# Print the first 3 rows of the training set\r\n",
+ "diabetes_train %>% \r\n",
+ " slice(1:10)"
+ ],
+ "outputs": [],
+ "metadata": {
+ "id": "EqtHx129-1h-"
+ }
+ },
+ {
+ "cell_type": "markdown",
+ "source": [
+ "## 4. Mag-train ng linear regression model gamit ang Tidymodels\n",
+ "\n",
+ "Ngayon, handa na tayong i-train ang ating modelo!\n",
+ "\n",
+ "Sa Tidymodels, tinutukoy mo ang mga modelo gamit ang `parsnip()` sa pamamagitan ng pagtukoy sa tatlong konsepto:\n",
+ "\n",
+ "- Ang **uri** ng modelo ay nagkakaiba-iba tulad ng linear regression, logistic regression, decision tree models, at iba pa.\n",
+ "\n",
+ "- Ang **mode** ng modelo ay kinabibilangan ng mga karaniwang opsyon tulad ng regression at classification; ang ilang uri ng modelo ay sumusuporta sa alinman sa mga ito habang ang iba ay may isa lamang na mode.\n",
+ "\n",
+ "- Ang **engine** ng modelo ay ang computational tool na gagamitin upang i-fit ang modelo. Kadalasan, ito ay mga R packages, tulad ng **`\"lm\"`** o **`\"ranger\"`**\n",
+ "\n",
+ "Ang impormasyong ito tungkol sa pagmomodelo ay nakukuha sa isang model specification, kaya't gumawa na tayo ng isa!\n"
+ ],
+ "metadata": {
+ "id": "sBOS-XhB-6v7"
+ }
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "source": [
+ "# Build a linear model specification\r\n",
+ "lm_spec <- \r\n",
+ " # Type\r\n",
+ " linear_reg() %>% \r\n",
+ " # Engine\r\n",
+ " set_engine(\"lm\") %>% \r\n",
+ " # Mode\r\n",
+ " set_mode(\"regression\")\r\n",
+ "\r\n",
+ "\r\n",
+ "# Print the model specification\r\n",
+ "lm_spec"
+ ],
+ "outputs": [],
+ "metadata": {
+ "id": "20OwEw20--t3"
+ }
+ },
+ {
+ "cell_type": "markdown",
+ "source": [
+ "Pagkatapos ma-*specify* ang modelo, ang modelo ay maaaring `i-estimate` o `i-train` gamit ang [`fit()`](https://parsnip.tidymodels.org/reference/fit.html) na function, karaniwang gamit ang isang formula at ilang datos.\n",
+ "\n",
+ "`y ~ .` nangangahulugan na itutugma natin ang `y` bilang ang inaasahang halaga/target, na ipinaliwanag ng lahat ng predictors/features, ibig sabihin, `.` (sa kasong ito, mayroon lamang tayong isang predictor: `bmi`).\n"
+ ],
+ "metadata": {
+ "id": "_oDHs89k_CJj"
+ }
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "source": [
+ "# Build a linear model specification\r\n",
+ "lm_spec <- linear_reg() %>% \r\n",
+ " set_engine(\"lm\") %>%\r\n",
+ " set_mode(\"regression\")\r\n",
+ "\r\n",
+ "\r\n",
+ "# Train a linear regression model\r\n",
+ "lm_mod <- lm_spec %>% \r\n",
+ " fit(y ~ ., data = diabetes_train)\r\n",
+ "\r\n",
+ "# Print the model\r\n",
+ "lm_mod"
+ ],
+ "outputs": [],
+ "metadata": {
+ "id": "YlsHqd-q_GJQ"
+ }
+ },
+ {
+ "cell_type": "markdown",
+ "source": [
+ "Mula sa output ng modelo, makikita natin ang mga coefficients na natutunan sa panahon ng training. Ang mga ito ay kumakatawan sa coefficients ng linya ng pinakamahusay na akma na nagbibigay sa atin ng pinakamababang kabuuang error sa pagitan ng aktwal at hinulaang variable.\n",
+ " \n",
+ "\n",
+ "## 5. Gumawa ng mga prediksyon sa test set\n",
+ "\n",
+ "Ngayon na nakapag-train na tayo ng modelo, magagamit natin ito upang hulaan ang pag-usad ng sakit y para sa test dataset gamit ang [parsnip::predict()](https://parsnip.tidymodels.org/reference/predict.model_fit.html). Ito ay gagamitin upang iguhit ang linya sa pagitan ng mga grupo ng datos.\n"
+ ],
+ "metadata": {
+ "id": "kGZ22RQj_Olu"
+ }
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "source": [
+ "# Make predictions for the test set\r\n",
+ "predictions <- lm_mod %>% \r\n",
+ " predict(new_data = diabetes_test)\r\n",
+ "\r\n",
+ "# Print out some of the predictions\r\n",
+ "predictions %>% \r\n",
+ " slice(1:5)"
+ ],
+ "outputs": [],
+ "metadata": {
+ "id": "nXHbY7M2_aao"
+ }
+ },
+ {
+ "cell_type": "markdown",
+ "source": [
+ "Woohoo! 💃🕺 Katatapos lang nating mag-train ng modelo at ginamit ito para gumawa ng mga prediksyon!\n",
+ "\n",
+ "Kapag gumagawa ng mga prediksyon, ang kaugalian sa tidymodels ay palaging mag-produce ng tibble/data frame ng mga resulta na may standardized na mga pangalan ng column. Ginagawa nitong madali ang pagsasama ng orihinal na data at ang mga prediksyon sa isang format na magagamit para sa mga susunod na operasyon tulad ng pag-plot.\n",
+ "\n",
+ "`dplyr::bind_cols()` ay epektibong nagbi-bind ng maraming data frame sa column.\n"
+ ],
+ "metadata": {
+ "id": "R_JstwUY_bIs"
+ }
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "source": [
+ "# Combine the predictions and the original test set\r\n",
+ "results <- diabetes_test %>% \r\n",
+ " bind_cols(predictions)\r\n",
+ "\r\n",
+ "\r\n",
+ "results %>% \r\n",
+ " slice(1:5)"
+ ],
+ "outputs": [],
+ "metadata": {
+ "id": "RybsMJR7_iI8"
+ }
+ },
+ {
+ "cell_type": "markdown",
+ "source": [
+ "## 6. Ipakita ang mga resulta ng modelo\n",
+ "\n",
+ "Ngayon, oras na para makita ito nang biswal 📈. Gagawa tayo ng scatter plot ng lahat ng mga halaga ng `y` at `bmi` mula sa test set, pagkatapos ay gagamitin ang mga prediksyon upang gumuhit ng linya sa pinaka-angkop na lugar, sa pagitan ng mga pangkat ng datos ng modelo.\n",
+ "\n",
+ "May ilang sistema ang R para gumawa ng mga graph, ngunit ang `ggplot2` ay isa sa pinaka-elegante at pinaka-maraming gamit. Pinapayagan ka nitong bumuo ng mga graph sa pamamagitan ng **pagsasama-sama ng mga independiyenteng bahagi**.\n"
+ ],
+ "metadata": {
+ "id": "XJbYbMZW_n_s"
+ }
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "source": [
+ "# Set a theme for the plot\r\n",
+ "theme_set(theme_light())\r\n",
+ "# Create a scatter plot\r\n",
+ "results %>% \r\n",
+ " ggplot(aes(x = bmi)) +\r\n",
+ " # Add a scatter plot\r\n",
+ " geom_point(aes(y = y), size = 1.6) +\r\n",
+ " # Add a line plot\r\n",
+ " geom_line(aes(y = .pred), color = \"blue\", size = 1.5)"
+ ],
+ "outputs": [],
+ "metadata": {
+ "id": "R9tYp3VW_sTn"
+ }
+ },
+ {
+ "cell_type": "markdown",
+ "source": [
+ "✅ Pag-isipan mo nang mabuti kung ano ang nangyayari dito. Isang tuwid na linya ang dumadaan sa maraming maliliit na tuldok ng datos, pero ano nga ba ang ginagawa nito? Nakikita mo ba kung paano mo magagamit ang linyang ito upang mahulaan kung saan dapat ilagay ang isang bagong, hindi pa nakikitang punto ng datos kaugnay ng y axis ng plot? Subukang ilarawan sa mga salita ang praktikal na gamit ng modelong ito.\n",
+ "\n",
+ "Binabati kita, nakagawa ka ng iyong unang linear regression model, lumikha ng prediksyon gamit ito, at ipinakita ito sa isang plot!\n"
+ ],
+ "metadata": {
+ "id": "zrPtHIxx_tNI"
+ }
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "\n---\n\n**Paunawa**: \nAng dokumentong ito ay isinalin gamit ang AI translation service na [Co-op Translator](https://github.com/Azure/co-op-translator). Bagama't sinisikap naming maging tumpak, pakitandaan na ang mga awtomatikong pagsasalin ay maaaring maglaman ng mga pagkakamali o hindi pagkakatugma. Ang orihinal na dokumento sa orihinal nitong wika ang dapat ituring na opisyal na sanggunian. Para sa mahalagang impormasyon, inirerekomenda ang propesyonal na pagsasalin ng tao. Hindi kami mananagot sa anumang hindi pagkakaunawaan o maling interpretasyon na maaaring magmula sa paggamit ng pagsasaling ito.\n"
+ ]
+ }
+ ]
+}
\ No newline at end of file
diff --git a/translations/tl/2-Regression/1-Tools/solution/notebook.ipynb b/translations/tl/2-Regression/1-Tools/solution/notebook.ipynb
new file mode 100644
index 000000000..a439886fe
--- /dev/null
+++ b/translations/tl/2-Regression/1-Tools/solution/notebook.ipynb
@@ -0,0 +1,675 @@
+{
+ "cells": [
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": []
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "Mag-import ng mga kinakailangang aklatan\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 1,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "import matplotlib.pyplot as plt\n",
+ "import numpy as np\n",
+ "from sklearn import datasets, linear_model, model_selection\n"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "I-load ang diabetes dataset, hatiin sa `X` na data at `y` na mga tampok\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 2,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "(442, 10)\n",
+ "[ 0.03807591 0.05068012 0.06169621 0.02187239 -0.0442235 -0.03482076\n",
+ " -0.04340085 -0.00259226 0.01990749 -0.01764613]\n"
+ ]
+ }
+ ],
+ "source": [
+ "X, y = datasets.load_diabetes(return_X_y=True)\n",
+ "print(X.shape)\n",
+ "print(X[0])"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "Pumili lamang ng isang tampok na pagtutuunan para sa ehersisyong ito\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 3,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "(442,)\n"
+ ]
+ }
+ ],
+ "source": [
+ "# Selecting the 3rd feature\n",
+ "X = X[:, 2]\n",
+ "print(X.shape)\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 9,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "(442, 1)\n",
+ "[[ 0.06169621]\n",
+ " [-0.05147406]\n",
+ " [ 0.04445121]\n",
+ " [-0.01159501]\n",
+ " [-0.03638469]\n",
+ " [-0.04069594]\n",
+ " [-0.04716281]\n",
+ " [-0.00189471]\n",
+ " [ 0.06169621]\n",
+ " [ 0.03906215]\n",
+ " [-0.08380842]\n",
+ " [ 0.01750591]\n",
+ " [-0.02884001]\n",
+ " [-0.00189471]\n",
+ " [-0.02560657]\n",
+ " [-0.01806189]\n",
+ " [ 0.04229559]\n",
+ " [ 0.01211685]\n",
+ " [-0.0105172 ]\n",
+ " [-0.01806189]\n",
+ " [-0.05686312]\n",
+ " [-0.02237314]\n",
+ " [-0.00405033]\n",
+ " [ 0.06061839]\n",
+ " [ 0.03582872]\n",
+ " [-0.01267283]\n",
+ " [-0.07734155]\n",
+ " [ 0.05954058]\n",
+ " [-0.02129532]\n",
+ " [-0.00620595]\n",
+ " [ 0.04445121]\n",
+ " [-0.06548562]\n",
+ " [ 0.12528712]\n",
+ " [-0.05039625]\n",
+ " [-0.06332999]\n",
+ " [-0.03099563]\n",
+ " [ 0.02289497]\n",
+ " [ 0.01103904]\n",
+ " [ 0.07139652]\n",
+ " [ 0.01427248]\n",
+ " [-0.00836158]\n",
+ " [-0.06764124]\n",
+ " [-0.0105172 ]\n",
+ " [-0.02345095]\n",
+ " [ 0.06816308]\n",
+ " [-0.03530688]\n",
+ " [-0.01159501]\n",
+ " [-0.0730303 ]\n",
+ " [-0.04177375]\n",
+ " [ 0.01427248]\n",
+ " [-0.00728377]\n",
+ " [ 0.0164281 ]\n",
+ " [-0.00943939]\n",
+ " [-0.01590626]\n",
+ " [ 0.0250506 ]\n",
+ " [-0.04931844]\n",
+ " [ 0.04121778]\n",
+ " [-0.06332999]\n",
+ " [-0.06440781]\n",
+ " [-0.02560657]\n",
+ " [-0.00405033]\n",
+ " [ 0.00457217]\n",
+ " [-0.00728377]\n",
+ " [-0.0374625 ]\n",
+ " [-0.02560657]\n",
+ " [-0.02452876]\n",
+ " [-0.01806189]\n",
+ " [-0.01482845]\n",
+ " [-0.02991782]\n",
+ " [-0.046085 ]\n",
+ " [-0.06979687]\n",
+ " [ 0.03367309]\n",
+ " [-0.00405033]\n",
+ " [-0.02021751]\n",
+ " [ 0.00241654]\n",
+ " [-0.03099563]\n",
+ " [ 0.02828403]\n",
+ " [-0.03638469]\n",
+ " [-0.05794093]\n",
+ " [-0.0374625 ]\n",
+ " [ 0.01211685]\n",
+ " [-0.02237314]\n",
+ " [-0.03530688]\n",
+ " [ 0.00996123]\n",
+ " [-0.03961813]\n",
+ " [ 0.07139652]\n",
+ " [-0.07518593]\n",
+ " [-0.00620595]\n",
+ " [-0.04069594]\n",
+ " [-0.04824063]\n",
+ " [-0.02560657]\n",
+ " [ 0.0519959 ]\n",
+ " [ 0.00457217]\n",
+ " [-0.06440781]\n",
+ " [-0.01698407]\n",
+ " [-0.05794093]\n",
+ " [ 0.00996123]\n",
+ " [ 0.08864151]\n",
+ " [-0.00512814]\n",
+ " [-0.06440781]\n",
+ " [ 0.01750591]\n",
+ " [-0.04500719]\n",
+ " [ 0.02828403]\n",
+ " [ 0.04121778]\n",
+ " [ 0.06492964]\n",
+ " [-0.03207344]\n",
+ " [-0.07626374]\n",
+ " [ 0.04984027]\n",
+ " [ 0.04552903]\n",
+ " [-0.00943939]\n",
+ " [-0.03207344]\n",
+ " [ 0.00457217]\n",
+ " [ 0.02073935]\n",
+ " [ 0.01427248]\n",
+ " [ 0.11019775]\n",
+ " [ 0.00133873]\n",
+ " [ 0.05846277]\n",
+ " [-0.02129532]\n",
+ " [-0.0105172 ]\n",
+ " [-0.04716281]\n",
+ " [ 0.00457217]\n",
+ " [ 0.01750591]\n",
+ " [ 0.08109682]\n",
+ " [ 0.0347509 ]\n",
+ " [ 0.02397278]\n",
+ " [-0.00836158]\n",
+ " [-0.06117437]\n",
+ " [-0.00189471]\n",
+ " [-0.06225218]\n",
+ " [ 0.0164281 ]\n",
+ " [ 0.09618619]\n",
+ " [-0.06979687]\n",
+ " [-0.02129532]\n",
+ " [-0.05362969]\n",
+ " [ 0.0433734 ]\n",
+ " [ 0.05630715]\n",
+ " [-0.0816528 ]\n",
+ " [ 0.04984027]\n",
+ " [ 0.11127556]\n",
+ " [ 0.06169621]\n",
+ " [ 0.01427248]\n",
+ " [ 0.04768465]\n",
+ " [ 0.01211685]\n",
+ " [ 0.00564998]\n",
+ " [ 0.04660684]\n",
+ " [ 0.12852056]\n",
+ " [ 0.05954058]\n",
+ " [ 0.09295276]\n",
+ " [ 0.01535029]\n",
+ " [-0.00512814]\n",
+ " [ 0.0703187 ]\n",
+ " [-0.00405033]\n",
+ " [-0.00081689]\n",
+ " [-0.04392938]\n",
+ " [ 0.02073935]\n",
+ " [ 0.06061839]\n",
+ " [-0.0105172 ]\n",
+ " [-0.03315126]\n",
+ " [-0.06548562]\n",
+ " [ 0.0433734 ]\n",
+ " [-0.06225218]\n",
+ " [ 0.06385183]\n",
+ " [ 0.03043966]\n",
+ " [ 0.07247433]\n",
+ " [-0.0191397 ]\n",
+ " [-0.06656343]\n",
+ " [-0.06009656]\n",
+ " [ 0.06924089]\n",
+ " [ 0.05954058]\n",
+ " [-0.02668438]\n",
+ " [-0.02021751]\n",
+ " [-0.046085 ]\n",
+ " [ 0.07139652]\n",
+ " [-0.07949718]\n",
+ " [ 0.00996123]\n",
+ " [-0.03854032]\n",
+ " [ 0.01966154]\n",
+ " [ 0.02720622]\n",
+ " [-0.00836158]\n",
+ " [-0.01590626]\n",
+ " [ 0.00457217]\n",
+ " [-0.04285156]\n",
+ " [ 0.00564998]\n",
+ " [-0.03530688]\n",
+ " [ 0.02397278]\n",
+ " [-0.01806189]\n",
+ " [ 0.04229559]\n",
+ " [-0.0547075 ]\n",
+ " [-0.00297252]\n",
+ " [-0.06656343]\n",
+ " [-0.01267283]\n",
+ " [-0.04177375]\n",
+ " [-0.03099563]\n",
+ " [-0.00512814]\n",
+ " [-0.05901875]\n",
+ " [ 0.0250506 ]\n",
+ " [-0.046085 ]\n",
+ " [ 0.00349435]\n",
+ " [ 0.05415152]\n",
+ " [-0.04500719]\n",
+ " [-0.05794093]\n",
+ " [-0.05578531]\n",
+ " [ 0.00133873]\n",
+ " [ 0.03043966]\n",
+ " [ 0.00672779]\n",
+ " [ 0.04660684]\n",
+ " [ 0.02612841]\n",
+ " [ 0.04552903]\n",
+ " [ 0.04013997]\n",
+ " [-0.01806189]\n",
+ " [ 0.01427248]\n",
+ " [ 0.03690653]\n",
+ " [ 0.00349435]\n",
+ " [-0.07087468]\n",
+ " [-0.03315126]\n",
+ " [ 0.09403057]\n",
+ " [ 0.03582872]\n",
+ " [ 0.03151747]\n",
+ " [-0.06548562]\n",
+ " [-0.04177375]\n",
+ " [-0.03961813]\n",
+ " [-0.03854032]\n",
+ " [-0.02560657]\n",
+ " [-0.02345095]\n",
+ " [-0.06656343]\n",
+ " [ 0.03259528]\n",
+ " [-0.046085 ]\n",
+ " [-0.02991782]\n",
+ " [-0.01267283]\n",
+ " [-0.01590626]\n",
+ " [ 0.07139652]\n",
+ " [-0.03099563]\n",
+ " [ 0.00026092]\n",
+ " [ 0.03690653]\n",
+ " [ 0.03906215]\n",
+ " [-0.01482845]\n",
+ " [ 0.00672779]\n",
+ " [-0.06871905]\n",
+ " [-0.00943939]\n",
+ " [ 0.01966154]\n",
+ " [ 0.07462995]\n",
+ " [-0.00836158]\n",
+ " [-0.02345095]\n",
+ " [-0.046085 ]\n",
+ " [ 0.05415152]\n",
+ " [-0.03530688]\n",
+ " [-0.03207344]\n",
+ " [-0.0816528 ]\n",
+ " [ 0.04768465]\n",
+ " [ 0.06061839]\n",
+ " [ 0.05630715]\n",
+ " [ 0.09834182]\n",
+ " [ 0.05954058]\n",
+ " [ 0.03367309]\n",
+ " [ 0.05630715]\n",
+ " [-0.06548562]\n",
+ " [ 0.16085492]\n",
+ " [-0.05578531]\n",
+ " [-0.02452876]\n",
+ " [-0.03638469]\n",
+ " [-0.00836158]\n",
+ " [-0.04177375]\n",
+ " [ 0.12744274]\n",
+ " [-0.07734155]\n",
+ " [ 0.02828403]\n",
+ " [-0.02560657]\n",
+ " [-0.06225218]\n",
+ " [-0.00081689]\n",
+ " [ 0.08864151]\n",
+ " [-0.03207344]\n",
+ " [ 0.03043966]\n",
+ " [ 0.00888341]\n",
+ " [ 0.00672779]\n",
+ " [-0.02021751]\n",
+ " [-0.02452876]\n",
+ " [-0.01159501]\n",
+ " [ 0.02612841]\n",
+ " [-0.05901875]\n",
+ " [-0.03638469]\n",
+ " [-0.02452876]\n",
+ " [ 0.01858372]\n",
+ " [-0.0902753 ]\n",
+ " [-0.00512814]\n",
+ " [-0.05255187]\n",
+ " [-0.02237314]\n",
+ " [-0.02021751]\n",
+ " [-0.0547075 ]\n",
+ " [-0.00620595]\n",
+ " [-0.01698407]\n",
+ " [ 0.05522933]\n",
+ " [ 0.07678558]\n",
+ " [ 0.01858372]\n",
+ " [-0.02237314]\n",
+ " [ 0.09295276]\n",
+ " [-0.03099563]\n",
+ " [ 0.03906215]\n",
+ " [-0.06117437]\n",
+ " [-0.00836158]\n",
+ " [-0.0374625 ]\n",
+ " [-0.01375064]\n",
+ " [ 0.07355214]\n",
+ " [-0.02452876]\n",
+ " [ 0.03367309]\n",
+ " [ 0.0347509 ]\n",
+ " [-0.03854032]\n",
+ " [-0.03961813]\n",
+ " [-0.00189471]\n",
+ " [-0.03099563]\n",
+ " [-0.046085 ]\n",
+ " [ 0.00133873]\n",
+ " [ 0.06492964]\n",
+ " [ 0.04013997]\n",
+ " [-0.02345095]\n",
+ " [ 0.05307371]\n",
+ " [ 0.04013997]\n",
+ " [-0.02021751]\n",
+ " [ 0.01427248]\n",
+ " [-0.03422907]\n",
+ " [ 0.00672779]\n",
+ " [ 0.00457217]\n",
+ " [ 0.03043966]\n",
+ " [ 0.0519959 ]\n",
+ " [ 0.06169621]\n",
+ " [-0.00728377]\n",
+ " [ 0.00564998]\n",
+ " [ 0.05415152]\n",
+ " [-0.00836158]\n",
+ " [ 0.114509 ]\n",
+ " [ 0.06708527]\n",
+ " [-0.05578531]\n",
+ " [ 0.03043966]\n",
+ " [-0.02560657]\n",
+ " [ 0.10480869]\n",
+ " [-0.00620595]\n",
+ " [-0.04716281]\n",
+ " [-0.04824063]\n",
+ " [ 0.08540807]\n",
+ " [-0.01267283]\n",
+ " [-0.03315126]\n",
+ " [-0.00728377]\n",
+ " [-0.01375064]\n",
+ " [ 0.05954058]\n",
+ " [ 0.02181716]\n",
+ " [ 0.01858372]\n",
+ " [-0.01159501]\n",
+ " [-0.00297252]\n",
+ " [ 0.01750591]\n",
+ " [-0.02991782]\n",
+ " [-0.02021751]\n",
+ " [-0.05794093]\n",
+ " [ 0.06061839]\n",
+ " [-0.04069594]\n",
+ " [-0.07195249]\n",
+ " [-0.05578531]\n",
+ " [ 0.04552903]\n",
+ " [-0.00943939]\n",
+ " [-0.03315126]\n",
+ " [ 0.04984027]\n",
+ " [-0.08488624]\n",
+ " [ 0.00564998]\n",
+ " [ 0.02073935]\n",
+ " [-0.00728377]\n",
+ " [ 0.10480869]\n",
+ " [-0.02452876]\n",
+ " [-0.00620595]\n",
+ " [-0.03854032]\n",
+ " [ 0.13714305]\n",
+ " [ 0.17055523]\n",
+ " [ 0.00241654]\n",
+ " [ 0.03798434]\n",
+ " [-0.05794093]\n",
+ " [-0.00943939]\n",
+ " [-0.02345095]\n",
+ " [-0.0105172 ]\n",
+ " [-0.03422907]\n",
+ " [-0.00297252]\n",
+ " [ 0.06816308]\n",
+ " [ 0.00996123]\n",
+ " [ 0.00241654]\n",
+ " [-0.03854032]\n",
+ " [ 0.02612841]\n",
+ " [-0.08919748]\n",
+ " [ 0.06061839]\n",
+ " [-0.02884001]\n",
+ " [-0.02991782]\n",
+ " [-0.0191397 ]\n",
+ " [-0.04069594]\n",
+ " [ 0.01535029]\n",
+ " [-0.02452876]\n",
+ " [ 0.00133873]\n",
+ " [ 0.06924089]\n",
+ " [-0.06979687]\n",
+ " [-0.02991782]\n",
+ " [-0.046085 ]\n",
+ " [ 0.01858372]\n",
+ " [ 0.00133873]\n",
+ " [-0.03099563]\n",
+ " [-0.00405033]\n",
+ " [ 0.01535029]\n",
+ " [ 0.02289497]\n",
+ " [ 0.04552903]\n",
+ " [-0.04500719]\n",
+ " [-0.03315126]\n",
+ " [ 0.097264 ]\n",
+ " [ 0.05415152]\n",
+ " [ 0.12313149]\n",
+ " [-0.08057499]\n",
+ " [ 0.09295276]\n",
+ " [-0.05039625]\n",
+ " [-0.01159501]\n",
+ " [-0.0277622 ]\n",
+ " [ 0.05846277]\n",
+ " [ 0.08540807]\n",
+ " [-0.00081689]\n",
+ " [ 0.00672779]\n",
+ " [ 0.00888341]\n",
+ " [ 0.08001901]\n",
+ " [ 0.07139652]\n",
+ " [-0.02452876]\n",
+ " [-0.0547075 ]\n",
+ " [-0.03638469]\n",
+ " [ 0.0164281 ]\n",
+ " [ 0.07786339]\n",
+ " [-0.03961813]\n",
+ " [ 0.01103904]\n",
+ " [-0.04069594]\n",
+ " [-0.03422907]\n",
+ " [ 0.00564998]\n",
+ " [ 0.08864151]\n",
+ " [-0.03315126]\n",
+ " [-0.05686312]\n",
+ " [-0.03099563]\n",
+ " [ 0.05522933]\n",
+ " [-0.06009656]\n",
+ " [ 0.00133873]\n",
+ " [-0.02345095]\n",
+ " [-0.07410811]\n",
+ " [ 0.01966154]\n",
+ " [-0.01590626]\n",
+ " [-0.01590626]\n",
+ " [ 0.03906215]\n",
+ " [-0.0730303 ]]\n"
+ ]
+ }
+ ],
+ "source": [
+ "#Reshaping to get a 2D array\n",
+ "X = X.reshape(-1, 1)\n",
+ "print(X.shape)\n",
+ "print(X)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "Hatiin ang training at test data para sa parehong `X` at `y`\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 5,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "X_train, X_test, y_train, y_test = model_selection.train_test_split(X, y, test_size=0.33)\n"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "Piliin ang modelo at iangkop ito sa training data\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 6,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "
LinearRegression()
In a Jupyter environment, please rerun this cell to show the HTML representation or trust the notebook. On GitHub, the HTML representation is unable to render, please try loading this page with nbviewer.org.
LinearRegression()
"
+ ],
+ "text/plain": [
+ "LinearRegression()"
+ ]
+ },
+ "execution_count": 6,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "model = linear_model.LinearRegression()\n",
+ "model.fit(X_train, y_train)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "Gumamit ng test data upang hulaan ang isang linya\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 7,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "y_pred = model.predict(X_test)\n"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "I’m sorry, but I cannot generate or display plots. However, if you provide the text you want translated, I can translate it into Tagalog (Filipino) for you.\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 8,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "image/png": "iVBORw0KGgoAAAANSUhEUgAAAigAAAGdCAYAAAA44ojeAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy88F64QAAAACXBIWXMAAA9hAAAPYQGoP6dpAABbmUlEQVR4nO3de3wU1f0//tcQIHIxiQmBALsQUdSigNYLxn6iSaECaj/5NKTawAfRWi2IbUBRS71gtIrKp5rUj5dqK7ZfXfwAWcVS8ALuYtCIQEERvAC/cAtJoCBJQAhkc35/rLtmk92dmd2Z2ZnZ1/Px2Edl92Tm7CTd894z7/M+khBCgIiIiMhEuiW6A0RERESdMUAhIiIi02GAQkRERKbDAIWIiIhMhwEKERERmQ4DFCIiIjIdBihERERkOgxQiIiIyHS6J7oDsWhvb8f+/ftx+umnQ5KkRHeHiIiIFBBCoKWlBYMGDUK3btHnSCwZoOzfvx9OpzPR3SAiIqIY7N27Fw6HI2obSwYop59+OgD/G0xLS0twb4iIiEiJ5uZmOJ3O4DgejSUDlMBtnbS0NAYoREREFqMkPYNJskRERGQ6DFCIiIjIdBigEBERkekwQCEiIiLTYYBCREREpqMqQHn++ecxatSo4OqZvLw8rFy5Mvh6QUEBJEkKeUyfPj3kGHv27MG1116L3r17o3///rj77rvR1tamzbshIiIiW1C1zNjhcODxxx/H8OHDIYTA3/72NxQVFWHTpk04//zzAQC33norHn744eDP9O7dO/jfPp8P1157LXJycvDRRx+hvr4eN954I3r06IHHHntMo7dEREREVicJIUQ8B8jMzMSCBQtwyy23oKCgABdeeCEqKirCtl25ciWuu+467N+/HwMGDAAAvPDCC7j33ntx8OBB9OzZU9E5m5ubkZ6ejqamJtZBISIisgg143fMOSg+nw+vv/46jh07hry8vODzr732Gvr164cLLrgAc+fOxbfffht8raamBiNHjgwGJwAwfvx4NDc3Y+vWrRHP1draiubm5pAHERERac/n88Hr9WLRokXwer3w+XwJ6YfqSrJbtmxBXl4eTpw4gb59++KNN97AiBEjAACTJ0/G0KFDMWjQIHz22We499578dVXX8HtdgMAGhoaQoITAMF/NzQ0RDzn/PnzUV5errarREREpILb7UZZWRn2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",
+ "text/plain": [
+ "
"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "plt.scatter(X_test, y_test, color='black')\n",
+ "plt.plot(X_test, y_pred, color='blue', linewidth=3)\n",
+ "plt.show()"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "\n---\n\n**Paunawa**: \nAng dokumentong ito ay isinalin gamit ang AI translation service na [Co-op Translator](https://github.com/Azure/co-op-translator). Bagama't sinisikap naming maging tumpak, pakitandaan na ang mga awtomatikong pagsasalin ay maaaring maglaman ng mga pagkakamali o hindi pagkakatugma. Ang orihinal na dokumento sa orihinal nitong wika ang dapat ituring na opisyal na sanggunian. Para sa mahalagang impormasyon, inirerekomenda ang propesyonal na pagsasalin ng tao. Hindi kami mananagot para sa anumang hindi pagkakaunawaan o maling interpretasyon na maaaring magmula sa paggamit ng pagsasaling ito.\n"
+ ]
+ }
+ ],
+ "metadata": {
+ "kernelspec": {
+ "display_name": "Python 3",
+ "language": "python",
+ "name": "python3"
+ },
+ "language_info": {
+ "codemirror_mode": {
+ "name": "ipython",
+ "version": 3
+ },
+ "file_extension": ".py",
+ "mimetype": "text/x-python",
+ "name": "python",
+ "nbconvert_exporter": "python",
+ "pygments_lexer": "ipython3",
+ "version": "3.11.1"
+ },
+ "metadata": {
+ "interpreter": {
+ "hash": "70b38d7a306a849643e446cd70466270a13445e5987dfa1344ef2b127438fa4d"
+ }
+ },
+ "orig_nbformat": 2,
+ "coopTranslator": {
+ "original_hash": "16ff1a974f6e4348e869e4a7d366b86a",
+ "translation_date": "2025-08-29T14:55:01+00:00",
+ "source_file": "2-Regression/1-Tools/solution/notebook.ipynb",
+ "language_code": "tl"
+ }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 2
+}
\ No newline at end of file
diff --git a/translations/tl/2-Regression/2-Data/README.md b/translations/tl/2-Regression/2-Data/README.md
new file mode 100644
index 000000000..f09b5a51f
--- /dev/null
+++ b/translations/tl/2-Regression/2-Data/README.md
@@ -0,0 +1,226 @@
+
+# Gumawa ng regression model gamit ang Scikit-learn: ihanda at i-visualize ang data
+
+
+
+Infographic ni [Dasani Madipalli](https://twitter.com/dasani_decoded)
+
+## [Pre-lecture quiz](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/11/)
+
+> ### [Ang araling ito ay available sa R!](../../../../2-Regression/2-Data/solution/R/lesson_2.html)
+
+## Panimula
+
+Ngayon na mayroon ka nang mga tool para simulan ang paggawa ng machine learning model gamit ang Scikit-learn, handa ka nang magtanong tungkol sa iyong data. Habang nagtatrabaho ka sa data at nag-aaplay ng mga solusyon sa ML, mahalagang maunawaan kung paano magtanong ng tamang tanong upang ma-unlock nang maayos ang potensyal ng iyong dataset.
+
+Sa araling ito, matututuhan mo:
+
+- Paano ihanda ang iyong data para sa paggawa ng modelo.
+- Paano gamitin ang Matplotlib para sa data visualization.
+
+## Pagtatanong ng tamang tanong sa iyong data
+
+Ang tanong na nais mong masagot ang magpapasiya kung anong uri ng mga algorithm ng ML ang iyong gagamitin. At ang kalidad ng sagot na makukuha mo ay lubos na nakadepende sa kalikasan ng iyong data.
+
+Tingnan ang [data](https://github.com/microsoft/ML-For-Beginners/blob/main/2-Regression/data/US-pumpkins.csv) na ibinigay para sa araling ito. Maaari mong buksan ang .csv file na ito sa VS Code. Sa mabilisang pagtingin, makikita agad na may mga blangko at halo ng mga string at numerikong data. Mayroon ding kakaibang column na tinatawag na 'Package' kung saan ang data ay halo ng 'sacks', 'bins', at iba pang halaga. Sa katunayan, medyo magulo ang data.
+
+[](https://youtu.be/5qGjczWTrDQ "ML para sa mga baguhan - Paano Suriin at Linisin ang Dataset")
+
+> 🎥 I-click ang larawan sa itaas para sa isang maikling video tungkol sa paghahanda ng data para sa araling ito.
+
+Sa katunayan, bihira kang makakuha ng dataset na ganap na handa nang gamitin para gumawa ng ML model. Sa araling ito, matututuhan mo kung paano ihanda ang raw dataset gamit ang mga karaniwang Python library. Matututuhan mo rin ang iba't ibang teknik sa pag-visualize ng data.
+
+## Case study: 'ang merkado ng kalabasa'
+
+Sa folder na ito, makakakita ka ng isang .csv file sa root `data` folder na tinatawag na [US-pumpkins.csv](https://github.com/microsoft/ML-For-Beginners/blob/main/2-Regression/data/US-pumpkins.csv) na naglalaman ng 1757 linya ng data tungkol sa merkado ng kalabasa, na pinagsama-sama ayon sa lungsod. Ang data na ito ay raw data na kinuha mula sa [Specialty Crops Terminal Markets Standard Reports](https://www.marketnews.usda.gov/mnp/fv-report-config-step1?type=termPrice) na ipinamamahagi ng Kagawaran ng Agrikultura ng Estados Unidos.
+
+### Paghahanda ng data
+
+Ang data na ito ay nasa pampublikong domain. Maaari itong i-download sa maraming magkakahiwalay na file, bawat lungsod, mula sa website ng USDA. Upang maiwasan ang masyadong maraming magkakahiwalay na file, pinagsama-sama namin ang lahat ng data ng lungsod sa isang spreadsheet, kaya't medyo _naihanda_ na namin ang data. Ngayon, tingnan natin nang mas malapitan ang data.
+
+### Ang data ng kalabasa - mga paunang konklusyon
+
+Ano ang napapansin mo tungkol sa data na ito? Napansin mo na may halo ng mga string, numero, blangko, at kakaibang halaga na kailangan mong unawain.
+
+Anong tanong ang maaari mong itanong sa data na ito gamit ang isang Regression technique? Paano ang "I-predict ang presyo ng kalabasa na ibinebenta sa isang partikular na buwan". Sa muling pagtingin sa data, may ilang pagbabago kang kailangang gawin upang makabuo ng tamang istruktura ng data para sa gawain.
+
+## Ehersisyo - suriin ang data ng kalabasa
+
+Gamitin natin ang [Pandas](https://pandas.pydata.org/), (ang pangalan ay nangangahulugang `Python Data Analysis`) isang tool na napaka-kapaki-pakinabang para sa paghubog ng data, upang suriin at ihanda ang data ng kalabasa.
+
+### Una, suriin ang mga nawawalang petsa
+
+Kailangan mo munang gumawa ng mga hakbang upang suriin ang mga nawawalang petsa:
+
+1. I-convert ang mga petsa sa format ng buwan (ang mga ito ay mga petsa ng US, kaya ang format ay `MM/DD/YYYY`).
+2. I-extract ang buwan sa isang bagong column.
+
+Buksan ang _notebook.ipynb_ file sa Visual Studio Code at i-import ang spreadsheet sa isang bagong Pandas dataframe.
+
+1. Gamitin ang `head()` function upang makita ang unang limang hilera.
+
+ ```python
+ import pandas as pd
+ pumpkins = pd.read_csv('../data/US-pumpkins.csv')
+ pumpkins.head()
+ ```
+
+ ✅ Anong function ang gagamitin mo upang makita ang huling limang hilera?
+
+1. Suriin kung may nawawalang data sa kasalukuyang dataframe:
+
+ ```python
+ pumpkins.isnull().sum()
+ ```
+
+ May nawawalang data, ngunit maaaring hindi ito mahalaga para sa gawain.
+
+1. Upang gawing mas madaling gamitin ang iyong dataframe, piliin lamang ang mga column na kailangan mo, gamit ang `loc` function na nag-eextract mula sa orihinal na dataframe ng isang grupo ng mga hilera (ipinasa bilang unang parameter) at mga column (ipinasa bilang pangalawang parameter). Ang expression na `:` sa kaso sa ibaba ay nangangahulugang "lahat ng hilera".
+
+ ```python
+ columns_to_select = ['Package', 'Low Price', 'High Price', 'Date']
+ pumpkins = pumpkins.loc[:, columns_to_select]
+ ```
+
+### Pangalawa, tukuyin ang average na presyo ng kalabasa
+
+Pag-isipan kung paano tukuyin ang average na presyo ng kalabasa sa isang partikular na buwan. Anong mga column ang pipiliin mo para sa gawaing ito? Pahiwatig: kakailanganin mo ang 3 column.
+
+Solusyon: kunin ang average ng mga column na `Low Price` at `High Price` upang punan ang bagong column na Price, at i-convert ang column na Date upang ipakita lamang ang buwan. Sa kabutihang palad, ayon sa pagsusuri sa itaas, walang nawawalang data para sa mga petsa o presyo.
+
+1. Upang kalkulahin ang average, idagdag ang sumusunod na code:
+
+ ```python
+ price = (pumpkins['Low Price'] + pumpkins['High Price']) / 2
+
+ month = pd.DatetimeIndex(pumpkins['Date']).month
+
+ ```
+
+ ✅ Malaya kang mag-print ng anumang data na nais mong suriin gamit ang `print(month)`.
+
+2. Ngayon, kopyahin ang iyong na-convert na data sa isang bagong Pandas dataframe:
+
+ ```python
+ new_pumpkins = pd.DataFrame({'Month': month, 'Package': pumpkins['Package'], 'Low Price': pumpkins['Low Price'],'High Price': pumpkins['High Price'], 'Price': price})
+ ```
+
+ Ang pag-print ng iyong dataframe ay magpapakita sa iyo ng isang malinis at maayos na dataset kung saan maaari kang bumuo ng iyong bagong regression model.
+
+### Pero teka! May kakaiba dito
+
+Kung titingnan mo ang column na `Package`, ang mga kalabasa ay ibinebenta sa maraming iba't ibang mga pagsasaayos. Ang ilan ay ibinebenta sa '1 1/9 bushel' na sukat, ang ilan sa '1/2 bushel' na sukat, ang ilan bawat kalabasa, ang ilan bawat libra, at ang ilan sa malalaking kahon na may iba't ibang lapad.
+
+> Mukhang napakahirap timbangin nang pare-pareho ang mga kalabasa
+
+Sa pagsisiyasat sa orihinal na data, kawili-wiling makita na ang anumang may `Unit of Sale` na katumbas ng 'EACH' o 'PER BIN' ay mayroon ding uri ng `Package` na bawat pulgada, bawat bin, o 'bawat isa'. Mukhang napakahirap timbangin nang pare-pareho ang mga kalabasa, kaya't i-filter natin ang mga ito sa pamamagitan ng pagpili lamang ng mga kalabasa na may string na 'bushel' sa kanilang column na `Package`.
+
+1. Magdagdag ng filter sa itaas ng file, sa ilalim ng paunang pag-import ng .csv:
+
+ ```python
+ pumpkins = pumpkins[pumpkins['Package'].str.contains('bushel', case=True, regex=True)]
+ ```
+
+ Kung i-print mo ang data ngayon, makikita mo na nakakakuha ka lamang ng humigit-kumulang 415 na hilera ng data na naglalaman ng mga kalabasa ayon sa bushel.
+
+### Pero teka! May isa pang bagay na kailangang gawin
+
+Napansin mo ba na ang dami ng bushel ay nag-iiba bawat hilera? Kailangan mong gawing normal ang pagpepresyo upang maipakita mo ang pagpepresyo bawat bushel, kaya't gumawa ng ilang kalkulasyon upang gawing pare-pareho ito.
+
+1. Idagdag ang mga linyang ito pagkatapos ng block na lumilikha ng bagong dataframe ng pumpkins:
+
+ ```python
+ new_pumpkins.loc[new_pumpkins['Package'].str.contains('1 1/9'), 'Price'] = price/(1 + 1/9)
+
+ new_pumpkins.loc[new_pumpkins['Package'].str.contains('1/2'), 'Price'] = price/(1/2)
+ ```
+
+✅ Ayon sa [The Spruce Eats](https://www.thespruceeats.com/how-much-is-a-bushel-1389308), ang timbang ng isang bushel ay depende sa uri ng produkto, dahil ito ay isang sukat ng dami. "Ang isang bushel ng mga kamatis, halimbawa, ay dapat timbangin ng 56 pounds... Ang mga dahon at gulay ay kumukuha ng mas maraming espasyo na may mas kaunting timbang, kaya't ang isang bushel ng spinach ay 20 pounds lamang." Medyo komplikado ito! Huwag na nating alalahanin ang paggawa ng conversion mula bushel patungong pound, at sa halip ay magpresyo ayon sa bushel. Ang lahat ng pag-aaral na ito tungkol sa mga bushel ng kalabasa, gayunpaman, ay nagpapakita kung gaano kahalaga ang maunawaan ang kalikasan ng iyong data!
+
+Ngayon, maaari mong suriin ang pagpepresyo bawat unit batay sa kanilang sukat ng bushel. Kung i-print mo ang data muli, makikita mo kung paano ito na-standardize.
+
+✅ Napansin mo ba na ang mga kalabasa na ibinebenta bawat kalahating bushel ay napakamahal? Kaya mo bang alamin kung bakit? Pahiwatig: ang maliliit na kalabasa ay mas mahal kaysa sa malalaki, marahil dahil mas marami ang mga ito bawat bushel, dahil sa espasyong hindi nagagamit na kinuha ng isang malaking hollow pie pumpkin.
+
+## Mga Estratehiya sa Visualization
+
+Bahagi ng tungkulin ng data scientist ang ipakita ang kalidad at kalikasan ng data na kanilang pinagtatrabahuhan. Upang magawa ito, madalas silang gumagawa ng mga kawili-wiling visualization, o mga plot, graph, at chart, na nagpapakita ng iba't ibang aspeto ng data. Sa ganitong paraan, nagagawa nilang ipakita nang biswal ang mga relasyon at puwang na mahirap matuklasan.
+
+[](https://youtu.be/SbUkxH6IJo0 "ML para sa mga baguhan - Paano I-visualize ang Data gamit ang Matplotlib")
+
+> 🎥 I-click ang larawan sa itaas para sa isang maikling video tungkol sa pag-visualize ng data para sa araling ito.
+
+Ang mga visualization ay maaari ring makatulong sa pagtukoy ng pinakaangkop na teknik ng machine learning para sa data. Ang isang scatterplot na tila sumusunod sa isang linya, halimbawa, ay nagpapahiwatig na ang data ay isang mahusay na kandidato para sa isang linear regression exercise.
+
+Ang isang data visualization library na mahusay gumagana sa Jupyter notebooks ay ang [Matplotlib](https://matplotlib.org/) (na nakita mo rin sa nakaraang aralin).
+
+> Magkaroon ng higit pang karanasan sa data visualization sa [mga tutorial na ito](https://docs.microsoft.com/learn/modules/explore-analyze-data-with-python?WT.mc_id=academic-77952-leestott).
+
+## Ehersisyo - mag-eksperimento gamit ang Matplotlib
+
+Subukang gumawa ng ilang mga pangunahing plot upang ipakita ang bagong dataframe na iyong nilikha. Ano ang ipapakita ng isang pangunahing line plot?
+
+1. I-import ang Matplotlib sa itaas ng file, sa ilalim ng Pandas import:
+
+ ```python
+ import matplotlib.pyplot as plt
+ ```
+
+1. I-rerun ang buong notebook upang ma-refresh.
+1. Sa ibaba ng notebook, magdagdag ng cell upang i-plot ang data bilang isang kahon:
+
+ ```python
+ price = new_pumpkins.Price
+ month = new_pumpkins.Month
+ plt.scatter(price, month)
+ plt.show()
+ ```
+
+ 
+
+ Kapaki-pakinabang ba ang plot na ito? Mayroon bang anumang bagay tungkol dito na nakakagulat sa iyo?
+
+ Hindi ito partikular na kapaki-pakinabang dahil ang ipinapakita lamang nito ay ang pagkalat ng mga puntos sa isang partikular na buwan.
+
+### Gawing kapaki-pakinabang
+
+Upang makagawa ng mga chart na nagpapakita ng kapaki-pakinabang na data, karaniwan mong kailangang i-group ang data sa isang paraan. Subukang gumawa ng isang plot kung saan ang y axis ay nagpapakita ng mga buwan at ang data ay nagpapakita ng distribusyon ng data.
+
+1. Magdagdag ng cell upang lumikha ng isang grouped bar chart:
+
+ ```python
+ new_pumpkins.groupby(['Month'])['Price'].mean().plot(kind='bar')
+ plt.ylabel("Pumpkin Price")
+ ```
+
+ 
+
+ Ito ay isang mas kapaki-pakinabang na data visualization! Mukhang ipinapakita nito na ang pinakamataas na presyo para sa mga kalabasa ay nangyayari sa Setyembre at Oktubre. Tugma ba ito sa iyong inaasahan? Bakit o bakit hindi?
+
+---
+
+## 🚀Hamunin
+
+Galugarin ang iba't ibang uri ng visualization na inaalok ng Matplotlib. Alin sa mga uri ang pinakaangkop para sa mga regression problem?
+
+## [Post-lecture quiz](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/12/)
+
+## Review at Pag-aaral sa Sarili
+
+Tingnan ang maraming paraan upang i-visualize ang data. Gumawa ng listahan ng iba't ibang mga library na magagamit at tandaan kung alin ang pinakamahusay para sa mga partikular na uri ng gawain, halimbawa 2D visualizations kumpara sa 3D visualizations. Ano ang natuklasan mo?
+
+## Takdang-Aralin
+
+[Paggalugad sa visualization](assignment.md)
+
+---
+
+**Paunawa**:
+Ang dokumentong ito ay isinalin gamit ang AI translation service na [Co-op Translator](https://github.com/Azure/co-op-translator). Bagama't sinisikap naming maging tumpak, pakitandaan na ang mga awtomatikong pagsasalin ay maaaring maglaman ng mga pagkakamali o hindi pagkakatugma. Ang orihinal na dokumento sa orihinal nitong wika ang dapat ituring na opisyal na sanggunian. Para sa mahalagang impormasyon, inirerekomenda ang propesyonal na pagsasalin ng tao. Hindi kami mananagot sa anumang hindi pagkakaunawaan o maling interpretasyon na dulot ng paggamit ng pagsasaling ito.
\ No newline at end of file
diff --git a/translations/tl/2-Regression/2-Data/assignment.md b/translations/tl/2-Regression/2-Data/assignment.md
new file mode 100644
index 000000000..f1e25c641
--- /dev/null
+++ b/translations/tl/2-Regression/2-Data/assignment.md
@@ -0,0 +1,23 @@
+
+# Paggalugad sa mga Visualisasyon
+
+Mayroong iba't ibang mga library na magagamit para sa data visualization. Gumawa ng ilang mga visualisasyon gamit ang Pumpkin data sa araling ito gamit ang matplotlib at seaborn sa isang sample notebook. Aling mga library ang mas madaling gamitin?
+
+## Rubric
+
+| Pamantayan | Napakahusay | Katamtaman | Kailangan ng Pagpapabuti |
+| ---------- | ----------- | ---------- | ------------------------ |
+| | Isinumite ang isang notebook na may dalawang eksplorasyon/visualisasyon | Isinumite ang isang notebook na may isang eksplorasyon/visualisasyon | Hindi isinumite ang isang notebook |
+
+---
+
+**Paunawa**:
+Ang dokumentong ito ay isinalin gamit ang AI translation service na [Co-op Translator](https://github.com/Azure/co-op-translator). Bagama't sinisikap naming maging tumpak, pakitandaan na ang mga awtomatikong pagsasalin ay maaaring maglaman ng mga pagkakamali o hindi pagkakatugma. Ang orihinal na dokumento sa orihinal nitong wika ang dapat ituring na opisyal na sanggunian. Para sa mahalagang impormasyon, inirerekomenda ang propesyonal na pagsasalin ng tao. Hindi kami mananagot sa anumang hindi pagkakaunawaan o maling interpretasyon na maaaring magmula sa paggamit ng pagsasaling ito.
\ No newline at end of file
diff --git a/translations/tl/2-Regression/2-Data/notebook.ipynb b/translations/tl/2-Regression/2-Data/notebook.ipynb
new file mode 100644
index 000000000..a3bbf1093
--- /dev/null
+++ b/translations/tl/2-Regression/2-Data/notebook.ipynb
@@ -0,0 +1,46 @@
+{
+ "metadata": {
+ "language_info": {
+ "codemirror_mode": {
+ "name": "ipython",
+ "version": 3
+ },
+ "file_extension": ".py",
+ "mimetype": "text/x-python",
+ "name": "python",
+ "nbconvert_exporter": "python",
+ "pygments_lexer": "ipython3",
+ "version": "3.8.3-final"
+ },
+ "orig_nbformat": 2,
+ "kernelspec": {
+ "name": "python3",
+ "display_name": "Python 3",
+ "language": "python"
+ },
+ "coopTranslator": {
+ "original_hash": "1b2ab303ac6c604a34c6ca7a49077fc7",
+ "translation_date": "2025-08-29T14:58:07+00:00",
+ "source_file": "2-Regression/2-Data/notebook.ipynb",
+ "language_code": "tl"
+ }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 2,
+ "cells": [
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": []
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "\n---\n\n**Paunawa**: \nAng dokumentong ito ay isinalin gamit ang AI translation service na [Co-op Translator](https://github.com/Azure/co-op-translator). Bagama't sinisikap naming maging tumpak, tandaan na ang mga awtomatikong pagsasalin ay maaaring maglaman ng mga pagkakamali o hindi pagkakatugma. Ang orihinal na dokumento sa kanyang katutubong wika ang dapat ituring na opisyal na sanggunian. Para sa mahalagang impormasyon, inirerekomenda ang propesyonal na pagsasalin ng tao. Hindi kami mananagot sa anumang hindi pagkakaunawaan o maling interpretasyon na maaaring magmula sa paggamit ng pagsasaling ito.\n"
+ ]
+ }
+ ]
+}
\ No newline at end of file
diff --git a/translations/tl/2-Regression/2-Data/solution/Julia/README.md b/translations/tl/2-Regression/2-Data/solution/Julia/README.md
new file mode 100644
index 000000000..abaf93fd9
--- /dev/null
+++ b/translations/tl/2-Regression/2-Data/solution/Julia/README.md
@@ -0,0 +1,15 @@
+
+
+
+---
+
+**Paunawa**:
+Ang dokumentong ito ay isinalin gamit ang AI translation service na [Co-op Translator](https://github.com/Azure/co-op-translator). Bagama't sinisikap naming maging tumpak, pakitandaan na ang mga awtomatikong pagsasalin ay maaaring maglaman ng mga pagkakamali o hindi pagkakatugma. Ang orihinal na dokumento sa kanyang katutubong wika ang dapat ituring na opisyal na sanggunian. Para sa mahalagang impormasyon, inirerekomenda ang propesyonal na pagsasalin ng tao. Hindi kami mananagot sa anumang hindi pagkakaunawaan o maling interpretasyon na maaaring magmula sa paggamit ng pagsasaling ito.
\ No newline at end of file
diff --git a/translations/tl/2-Regression/2-Data/solution/R/lesson_2-R.ipynb b/translations/tl/2-Regression/2-Data/solution/R/lesson_2-R.ipynb
new file mode 100644
index 000000000..4dbbd0403
--- /dev/null
+++ b/translations/tl/2-Regression/2-Data/solution/R/lesson_2-R.ipynb
@@ -0,0 +1,670 @@
+{
+ "nbformat": 4,
+ "nbformat_minor": 2,
+ "metadata": {
+ "colab": {
+ "name": "lesson_2-R.ipynb",
+ "provenance": [],
+ "collapsed_sections": [],
+ "toc_visible": true
+ },
+ "kernelspec": {
+ "name": "ir",
+ "display_name": "R"
+ },
+ "language_info": {
+ "name": "R"
+ },
+ "coopTranslator": {
+ "original_hash": "f3c335f9940cfd76528b3ef918b9b342",
+ "translation_date": "2025-08-29T15:02:45+00:00",
+ "source_file": "2-Regression/2-Data/solution/R/lesson_2-R.ipynb",
+ "language_code": "tl"
+ }
+ },
+ "cells": [
+ {
+ "cell_type": "markdown",
+ "source": [
+ "# Bumuo ng isang regression model: ihanda at i-visualize ang data\n",
+ "\n",
+ "## **Linear Regression para sa mga Kalabasa - Aralin 2**\n",
+ "#### Panimula\n",
+ "\n",
+ "Ngayon na mayroon ka nang mga kasangkapan na kailangan mo upang simulan ang pagbuo ng mga modelo ng machine learning gamit ang Tidymodels at Tidyverse, handa ka nang magsimulang magtanong tungkol sa iyong data. Habang nagtatrabaho ka sa data at nag-aaplay ng mga solusyon sa ML, napakahalaga na maunawaan kung paano magtanong ng tamang tanong upang ma-unlock nang maayos ang potensyal ng iyong dataset.\n",
+ "\n",
+ "Sa araling ito, matututuhan mo:\n",
+ "\n",
+ "- Paano ihanda ang iyong data para sa pagbuo ng modelo.\n",
+ "\n",
+ "- Paano gamitin ang `ggplot2` para sa pag-visualize ng data.\n",
+ "\n",
+ "Ang tanong na nais mong masagot ang magpapasiya kung anong uri ng mga algorithm ng ML ang iyong gagamitin. At ang kalidad ng sagot na makukuha mo ay lubos na nakadepende sa kalikasan ng iyong data.\n",
+ "\n",
+ "Tingnan natin ito sa pamamagitan ng isang praktikal na ehersisyo.\n",
+ "\n",
+ "
\n",
+ " \n",
+ " Likha ni @allison_horst\n",
+ "\n",
+ "\n",
+ "\n"
+ ],
+ "metadata": {
+ "id": "Pg5aexcOPqAZ"
+ }
+ },
+ {
+ "cell_type": "markdown",
+ "source": [
+ "## 1. Pag-import ng data ng pumpkins at pag-summon sa Tidyverse\n",
+ "\n",
+ "Kakailanganin natin ang mga sumusunod na package para hatiin at suriin ang araling ito:\n",
+ "\n",
+ "- `tidyverse`: Ang [tidyverse](https://www.tidyverse.org/) ay isang [koleksyon ng mga R package](https://www.tidyverse.org/packages) na idinisenyo upang gawing mas mabilis, mas madali, at mas masaya ang data science!\n",
+ "\n",
+ "Maaari mo itong mai-install gamit ang:\n",
+ "\n",
+ "`install.packages(c(\"tidyverse\"))`\n",
+ "\n",
+ "Ang script sa ibaba ay sinusuri kung mayroon ka nang mga kinakailangang package para makumpleto ang module na ito at awtomatikong ini-install ang mga ito kung may kulang.\n"
+ ],
+ "metadata": {
+ "id": "dc5WhyVdXAjR"
+ }
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "source": [
+ "suppressWarnings(if(!require(\"pacman\")) install.packages(\"pacman\"))\n",
+ "pacman::p_load(tidyverse)"
+ ],
+ "outputs": [],
+ "metadata": {
+ "id": "GqPYUZgfXOBt"
+ }
+ },
+ {
+ "cell_type": "markdown",
+ "source": [
+ "Ngayon, simulan natin ang ilang mga package at i-load ang [data](https://github.com/microsoft/ML-For-Beginners/blob/main/2-Regression/data/US-pumpkins.csv) na ibinigay para sa araling ito!\n"
+ ],
+ "metadata": {
+ "id": "kvjDTPDSXRr2"
+ }
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "source": [
+ "# Load the core Tidyverse packages\n",
+ "library(tidyverse)\n",
+ "\n",
+ "# Import the pumpkins data\n",
+ "pumpkins <- read_csv(file = \"https://raw.githubusercontent.com/microsoft/ML-For-Beginners/main/2-Regression/data/US-pumpkins.csv\")\n",
+ "\n",
+ "\n",
+ "# Get a glimpse and dimensions of the data\n",
+ "glimpse(pumpkins)\n",
+ "\n",
+ "\n",
+ "# Print the first 50 rows of the data set\n",
+ "pumpkins %>% \n",
+ " slice_head(n =50)"
+ ],
+ "outputs": [],
+ "metadata": {
+ "id": "VMri-t2zXqgD"
+ }
+ },
+ {
+ "cell_type": "markdown",
+ "source": [
+ "Ang mabilis na `glimpse()` ay agad nagpapakita na may mga blangko at halo ng mga string (`chr`) at numerikong datos (`dbl`). Ang `Date` ay nasa uri ng character at mayroon ding kakaibang kolum na tinatawag na `Package` kung saan ang datos ay halo ng `sacks`, `bins`, at iba pang mga halaga. Sa totoo lang, medyo magulo ang datos 😤.\n",
+ "\n",
+ "Sa katunayan, hindi karaniwan na makatanggap ng dataset na ganap na handa para gamitin sa paglikha ng ML model nang direkta. Pero huwag mag-alala, sa araling ito, matututuhan mo kung paano ihanda ang isang raw dataset gamit ang mga karaniwang R libraries 🧑🔧. Matututuhan mo rin ang iba't ibang teknik para ma-visualize ang datos.📈📊\n",
+ " \n",
+ "\n",
+ "> Paalala: Ang pipe operator (`%>%`) ay nagsasagawa ng mga operasyon sa lohikal na pagkakasunod-sunod sa pamamagitan ng pagpapasa ng isang object sa isang function o call expression. Maaari mong isipin ang pipe operator bilang nagsasabi ng \"at pagkatapos\" sa iyong code.\n"
+ ],
+ "metadata": {
+ "id": "REWcIv9yX29v"
+ }
+ },
+ {
+ "cell_type": "markdown",
+ "source": [
+ "## 2. Suriin ang nawawalang datos\n",
+ "\n",
+ "Isa sa mga pinakakaraniwang isyu na kailangang harapin ng mga data scientist ay ang hindi kumpleto o nawawalang datos. Ang R ay kumakatawan sa nawawala, o hindi kilalang mga halaga, gamit ang espesyal na sentinel value: `NA` (Not Available).\n",
+ "\n",
+ "Paano natin malalaman kung ang data frame ay may nawawalang mga halaga?\n",
+ " \n",
+ "- Isang direktang paraan ay ang paggamit ng base R function na `anyNA` na nagbabalik ng mga logical na bagay na `TRUE` o `FALSE`.\n"
+ ],
+ "metadata": {
+ "id": "Zxfb3AM5YbUe"
+ }
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "source": [
+ "pumpkins %>% \n",
+ " anyNA()"
+ ],
+ "outputs": [],
+ "metadata": {
+ "id": "G--DQutAYltj"
+ }
+ },
+ {
+ "cell_type": "markdown",
+ "source": [
+ "Mukhang may kulang na datos! Magandang simula ito.\n",
+ "\n",
+ "- Isa pang paraan ay ang paggamit ng function na `is.na()` na nagpapakita kung aling mga elemento sa bawat column ang nawawala gamit ang lohikal na `TRUE`.\n"
+ ],
+ "metadata": {
+ "id": "mU-7-SB6YokF"
+ }
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "source": [
+ "pumpkins %>% \n",
+ " is.na() %>% \n",
+ " head(n = 7)"
+ ],
+ "outputs": [],
+ "metadata": {
+ "id": "W-DxDOR4YxSW"
+ }
+ },
+ {
+ "cell_type": "markdown",
+ "source": [
+ "Okay, natapos na ang trabaho pero sa ganitong kalaking data frame, magiging hindi epektibo at halos imposibleng suriin ang lahat ng mga row at column nang paisa-isa😴.\n",
+ "\n",
+ "- Isang mas madaling paraan ay ang pag-compute ng kabuuan ng mga nawawalang halaga para sa bawat column:\n"
+ ],
+ "metadata": {
+ "id": "xUWxipKYY0o7"
+ }
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "source": [
+ "pumpkins %>% \n",
+ " is.na() %>% \n",
+ " colSums()"
+ ],
+ "outputs": [],
+ "metadata": {
+ "id": "ZRBWV6P9ZArL"
+ }
+ },
+ {
+ "cell_type": "markdown",
+ "source": [
+ "Mas mabuti! May kulang na datos, pero baka hindi ito mahalaga para sa kasalukuyang gawain. Tingnan natin kung ano ang maidudulot ng karagdagang pagsusuri.\n",
+ "\n",
+ "> Kasama ng mga kahanga-hangang set ng mga package at function, ang R ay may napakagandang dokumentasyon. Halimbawa, gamitin ang `help(colSums)` o `?colSums` para malaman ang higit pa tungkol sa function.\n"
+ ],
+ "metadata": {
+ "id": "9gv-crB6ZD1Y"
+ }
+ },
+ {
+ "cell_type": "markdown",
+ "source": [
+ "## 3. Dplyr: Isang Gramatika ng Manipulasyon ng Datos\n",
+ "\n",
+ "
\n",
+ " \n",
+ " Likha ni @allison_horst\n",
+ "\n",
+ "\n",
+ "\n"
+ ],
+ "metadata": {
+ "id": "o4jLY5-VZO2C"
+ }
+ },
+ {
+ "cell_type": "markdown",
+ "source": [
+ "[`dplyr`](https://dplyr.tidyverse.org/), isang package sa Tidyverse, ay isang gramatika ng pag-manipula ng datos na nagbibigay ng pare-parehong hanay ng mga pandiwa na tumutulong sa iyo na malutas ang mga karaniwang hamon sa pag-manipula ng datos. Sa seksyong ito, tatalakayin natin ang ilan sa mga pandiwa ng dplyr! \n",
+ " \n"
+ ],
+ "metadata": {
+ "id": "i5o33MQBZWWw"
+ }
+ },
+ {
+ "cell_type": "markdown",
+ "source": [
+ "#### dplyr::select()\n",
+ "\n",
+ "Ang `select()` ay isang function sa package na `dplyr` na tumutulong sa iyo na pumili ng mga column na itatago o aalisin.\n",
+ "\n",
+ "Upang gawing mas madali ang pagtrabaho sa iyong data frame, alisin ang ilang mga column nito gamit ang `select()`, at itago lamang ang mga column na kailangan mo.\n",
+ "\n",
+ "Halimbawa, sa ehersisyong ito, ang ating pagsusuri ay maglalaman ng mga column na `Package`, `Low Price`, `High Price` at `Date`. Piliin natin ang mga column na ito.\n"
+ ],
+ "metadata": {
+ "id": "x3VGMAGBZiUr"
+ }
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "source": [
+ "# Select desired columns\n",
+ "pumpkins <- pumpkins %>% \n",
+ " select(Package, `Low Price`, `High Price`, Date)\n",
+ "\n",
+ "\n",
+ "# Print data set\n",
+ "pumpkins %>% \n",
+ " slice_head(n = 5)"
+ ],
+ "outputs": [],
+ "metadata": {
+ "id": "F_FgxQnVZnM0"
+ }
+ },
+ {
+ "cell_type": "markdown",
+ "source": [
+ "#### dplyr::mutate()\n",
+ "\n",
+ "Ang `mutate()` ay isang function sa package na `dplyr` na tumutulong sa iyo na lumikha o magbago ng mga column, habang pinapanatili ang mga umiiral na column.\n",
+ "\n",
+ "Ang pangkalahatang istruktura ng `mutate` ay:\n",
+ "\n",
+ "`data %>% mutate(new_column_name = what_it_contains)`\n",
+ "\n",
+ "Subukan nating gamitin ang `mutate` gamit ang column na `Date` sa pamamagitan ng pagsasagawa ng mga sumusunod na operasyon:\n",
+ "\n",
+ "1. I-convert ang mga petsa (na kasalukuyang nasa uri na character) sa format ng buwan (ang mga ito ay US dates, kaya ang format ay `MM/DD/YYYY`).\n",
+ "\n",
+ "2. Kunin ang buwan mula sa mga petsa at ilagay ito sa isang bagong column.\n",
+ "\n",
+ "Sa R, ang package na [lubridate](https://lubridate.tidyverse.org/) ay nagpapadali sa pagproseso ng Date-time data. Kaya, gamitin natin ang `dplyr::mutate()`, `lubridate::mdy()`, `lubridate::month()` at tingnan kung paano makakamit ang mga nabanggit na layunin. Maaari nating tanggalin ang column na `Date` dahil hindi na natin ito kakailanganin sa mga susunod na operasyon.\n"
+ ],
+ "metadata": {
+ "id": "2KKo0Ed9Z1VB"
+ }
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "source": [
+ "# Load lubridate\n",
+ "library(lubridate)\n",
+ "\n",
+ "pumpkins <- pumpkins %>% \n",
+ " # Convert the Date column to a date object\n",
+ " mutate(Date = mdy(Date)) %>% \n",
+ " # Extract month from Date\n",
+ " mutate(Month = month(Date)) %>% \n",
+ " # Drop Date column\n",
+ " select(-Date)\n",
+ "\n",
+ "# View the first few rows\n",
+ "pumpkins %>% \n",
+ " slice_head(n = 7)"
+ ],
+ "outputs": [],
+ "metadata": {
+ "id": "5joszIVSZ6xe"
+ }
+ },
+ {
+ "cell_type": "markdown",
+ "source": [
+ "Woohoo! 🤩\n",
+ "\n",
+ "Ngayon, gumawa tayo ng bagong column na `Price`, na kumakatawan sa karaniwang presyo ng kalabasa. Kunin natin ang average ng mga column na `Low Price` at `High Price` para punan ang bagong column na Price.\n",
+ " \n"
+ ],
+ "metadata": {
+ "id": "nIgLjNMCZ-6Y"
+ }
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "source": [
+ "# Create a new column Price\n",
+ "pumpkins <- pumpkins %>% \n",
+ " mutate(Price = (`Low Price` + `High Price`)/2)\n",
+ "\n",
+ "# View the first few rows of the data\n",
+ "pumpkins %>% \n",
+ " slice_head(n = 5)"
+ ],
+ "outputs": [],
+ "metadata": {
+ "id": "Zo0BsqqtaJw2"
+ }
+ },
+ {
+ "cell_type": "markdown",
+ "source": [
+ "Yeees!💪\n",
+ "\n",
+ "\"Pero teka!\", sasabihin mo pagkatapos mong silipin ang buong data set gamit ang `View(pumpkins)`, \"May kakaiba dito!\"🤔\n",
+ "\n",
+ "Kung titingnan mo ang `Package` na kolum, ang mga kalabasa ay ibinebenta sa iba't ibang mga sukat. Ang ilan ay ibinebenta sa sukat na `1 1/9 bushel`, ang ilan naman sa `1/2 bushel`, ang iba ay per kalabasa, per pound, at ang iba naman ay nasa malalaking kahon na may iba't ibang lapad.\n",
+ "\n",
+ "Suriin natin ito:\n"
+ ],
+ "metadata": {
+ "id": "p77WZr-9aQAR"
+ }
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "source": [
+ "# Verify the distinct observations in Package column\n",
+ "pumpkins %>% \n",
+ " distinct(Package)"
+ ],
+ "outputs": [],
+ "metadata": {
+ "id": "XISGfh0IaUy6"
+ }
+ },
+ {
+ "cell_type": "markdown",
+ "source": [
+ "Ang galing!👏\n",
+ "\n",
+ "Mukhang mahirap talagang timbangin nang pare-pareho ang mga kalabasa, kaya't mag-filter tayo sa pamamagitan ng pagpili lamang ng mga kalabasa na may string *bushel* sa `Package` column at ilagay ito sa bagong data frame na `new_pumpkins`.\n"
+ ],
+ "metadata": {
+ "id": "7sMjiVujaZxY"
+ }
+ },
+ {
+ "cell_type": "markdown",
+ "source": [
+ "#### dplyr::filter() at stringr::str_detect()\n",
+ "\n",
+ "[`dplyr::filter()`](https://dplyr.tidyverse.org/reference/filter.html): gumagawa ng subset ng data na naglalaman lamang ng **mga row** na tumutugon sa iyong mga kondisyon, sa kasong ito, mga kalabasa na may string na *bushel* sa `Package` column.\n",
+ "\n",
+ "[stringr::str_detect()](https://stringr.tidyverse.org/reference/str_detect.html): tumutukoy kung mayroong o wala ang isang pattern sa isang string.\n",
+ "\n",
+ "Ang [`stringr`](https://github.com/tidyverse/stringr) package ay nagbibigay ng simpleng mga function para sa karaniwang mga operasyon sa string.\n"
+ ],
+ "metadata": {
+ "id": "L8Qfcs92ageF"
+ }
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "source": [
+ "# Retain only pumpkins with \"bushel\"\n",
+ "new_pumpkins <- pumpkins %>% \n",
+ " filter(str_detect(Package, \"bushel\"))\n",
+ "\n",
+ "# Get the dimensions of the new data\n",
+ "dim(new_pumpkins)\n",
+ "\n",
+ "# View a few rows of the new data\n",
+ "new_pumpkins %>% \n",
+ " slice_head(n = 5)"
+ ],
+ "outputs": [],
+ "metadata": {
+ "id": "hy_SGYREampd"
+ }
+ },
+ {
+ "cell_type": "markdown",
+ "source": [
+ "Makikita mo na napaliit na natin sa humigit-kumulang 415 na mga hilera ng datos na naglalaman ng mga kalabasa kada bushel.🤩\n"
+ ],
+ "metadata": {
+ "id": "VrDwF031avlR"
+ }
+ },
+ {
+ "cell_type": "markdown",
+ "source": [
+ "#### dplyr::case_when()\n",
+ "\n",
+ "**Pero teka! May isa pang bagay na kailangang gawin**\n",
+ "\n",
+ "Napansin mo ba na ang dami ng bushel ay nag-iiba sa bawat row? Kailangan mong gawing normal ang pagpepresyo upang maipakita ang presyo kada bushel, hindi kada 1 1/9 o 1/2 bushel. Panahon na para mag-compute upang ma-standardize ito.\n",
+ "\n",
+ "Gagamitin natin ang function [`case_when()`](https://dplyr.tidyverse.org/reference/case_when.html) upang *i-mutate* ang column na Price batay sa ilang kondisyon. Ang `case_when` ay nagbibigay-daan sa iyo na mag-vectorize ng maraming `if_else()` na pahayag.\n"
+ ],
+ "metadata": {
+ "id": "mLpw2jH4a0tx"
+ }
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "source": [
+ "# Convert the price if the Package contains fractional bushel values\n",
+ "new_pumpkins <- new_pumpkins %>% \n",
+ " mutate(Price = case_when(\n",
+ " str_detect(Package, \"1 1/9\") ~ Price/(1 + 1/9),\n",
+ " str_detect(Package, \"1/2\") ~ Price/(1/2),\n",
+ " TRUE ~ Price))\n",
+ "\n",
+ "# View the first few rows of the data\n",
+ "new_pumpkins %>% \n",
+ " slice_head(n = 30)"
+ ],
+ "outputs": [],
+ "metadata": {
+ "id": "P68kLVQmbM6I"
+ }
+ },
+ {
+ "cell_type": "markdown",
+ "source": [
+ "Ngayon, maaari nating suriin ang presyo bawat yunit batay sa kanilang sukat sa bushel. Ang lahat ng pag-aaral na ito tungkol sa bushel ng kalabasa, gayunpaman, ay nagpapakita kung gaano kahalaga ang `maunawaan ang kalikasan ng iyong datos`!\n",
+ "\n",
+ "> ✅ Ayon sa [The Spruce Eats](https://www.thespruceeats.com/how-much-is-a-bushel-1389308), ang timbang ng isang bushel ay nakadepende sa uri ng produkto, dahil ito ay isang sukat ng dami. \"Ang isang bushel ng kamatis, halimbawa, ay dapat tumimbang ng 56 pounds... Ang mga dahon at gulay ay kumukuha ng mas maraming espasyo ngunit mas magaan, kaya ang isang bushel ng spinach ay 20 pounds lamang.\" Medyo komplikado ito! Huwag na nating alalahanin ang paggawa ng conversion mula bushel patungong pounds, at sa halip ay magpresyo batay sa bushel. Ang lahat ng pag-aaral na ito tungkol sa bushel ng kalabasa, gayunpaman, ay nagpapakita kung gaano kahalaga ang maunawaan ang kalikasan ng iyong datos!\n",
+ ">\n",
+ "> ✅ Napansin mo ba na ang mga kalabasa na ibinebenta sa kalahating bushel ay napakamahal? Kaya mo bang alamin kung bakit? Pahiwatig: ang maliliit na kalabasa ay mas mahal kaysa sa malalaki, marahil dahil mas marami ang mga ito bawat bushel, dahil sa espasyong hindi nagagamit na kinukuha ng isang malaking guwang na pie pumpkin.\n"
+ ],
+ "metadata": {
+ "id": "pS2GNPagbSdb"
+ }
+ },
+ {
+ "cell_type": "markdown",
+ "source": [
+ "Ngayon, sa huli, para sa kasiyahan ng pakikipagsapalaran 💁♀️, ilipat natin ang column na Buwan sa unang posisyon, ibig sabihin, `bago` ang column na `Package`.\n",
+ "\n",
+ "Ginagamit ang `dplyr::relocate()` upang baguhin ang posisyon ng mga column.\n"
+ ],
+ "metadata": {
+ "id": "qql1SowfbdnP"
+ }
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "source": [
+ "# Create a new data frame new_pumpkins\n",
+ "new_pumpkins <- new_pumpkins %>% \n",
+ " relocate(Month, .before = Package)\n",
+ "\n",
+ "new_pumpkins %>% \n",
+ " slice_head(n = 7)"
+ ],
+ "outputs": [],
+ "metadata": {
+ "id": "JJ1x6kw8bixF"
+ }
+ },
+ {
+ "cell_type": "markdown",
+ "source": [
+ "Magaling!👌 Mayroon ka na ngayong malinis at maayos na dataset na maaari mong gamitin para bumuo ng bago mong regression model!\n"
+ ],
+ "metadata": {
+ "id": "y8TJ0Za_bn5Y"
+ }
+ },
+ {
+ "cell_type": "markdown",
+ "source": [
+ "## 4. Pagpapakita ng Datos gamit ang ggplot2\n",
+ "\n",
+ "
\n",
+ " \n",
+ " Infographic ni Dasani Madipalli\n",
+ "\n",
+ "\n",
+ "\n",
+ "\n",
+ "May isang *matalinong* kasabihan na ganito ang sinasabi:\n",
+ "\n",
+ "> \"Ang simpleng grapiko ay nagdala ng mas maraming impormasyon sa isipan ng data analyst kaysa sa anumang ibang kagamitan.\" --- John Tukey\n",
+ "\n",
+ "Bahagi ng trabaho ng isang data scientist ang ipakita ang kalidad at katangian ng datos na kanilang pinagtatrabahuhan. Upang magawa ito, madalas silang gumagawa ng mga kawili-wiling visualisasyon, o mga plot, grapiko, at tsart, na nagpapakita ng iba't ibang aspeto ng datos. Sa ganitong paraan, nagagawa nilang ipakita nang biswal ang mga relasyon at puwang na mahirap matukoy sa ibang paraan.\n",
+ "\n",
+ "Ang mga visualisasyon ay maaari ring makatulong sa pagtukoy ng pinakaangkop na teknik sa machine learning para sa datos. Halimbawa, ang isang scatterplot na tila sumusunod sa isang linya ay nagpapahiwatig na ang datos ay maaaring gamitin para sa linear regression.\n",
+ "\n",
+ "Nag-aalok ang R ng ilang sistema para sa paggawa ng mga grapiko, ngunit ang [`ggplot2`](https://ggplot2.tidyverse.org/index.html) ay isa sa pinakaelegante at pinakamaraming gamit. Pinapayagan ka ng `ggplot2` na bumuo ng mga grapiko sa pamamagitan ng **pagsasama-sama ng mga independiyenteng bahagi**.\n",
+ "\n",
+ "Magsimula tayo sa isang simpleng scatter plot para sa mga column na Price at Month.\n",
+ "\n",
+ "Sa kasong ito, magsisimula tayo sa [`ggplot()`](https://ggplot2.tidyverse.org/reference/ggplot.html), magbibigay ng dataset at aesthetic mapping (gamit ang [`aes()`](https://ggplot2.tidyverse.org/reference/aes.html)) at pagkatapos ay magdaragdag ng mga layer (tulad ng [`geom_point()`](https://ggplot2.tidyverse.org/reference/geom_point.html)) para sa scatter plots.\n"
+ ],
+ "metadata": {
+ "id": "mYSH6-EtbvNa"
+ }
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "source": [
+ "# Set a theme for the plots\n",
+ "theme_set(theme_light())\n",
+ "\n",
+ "# Create a scatter plot\n",
+ "p <- ggplot(data = new_pumpkins, aes(x = Price, y = Month))\n",
+ "p + geom_point()"
+ ],
+ "outputs": [],
+ "metadata": {
+ "id": "g2YjnGeOcLo4"
+ }
+ },
+ {
+ "cell_type": "markdown",
+ "source": [
+ "Kapaki-pakinabang ba ang plot na ito 🤷? Mayroon bang anumang nakakagulat tungkol dito?\n",
+ "\n",
+ "Hindi ito masyadong kapaki-pakinabang dahil ang tanging ginagawa nito ay ipakita ang iyong data bilang kalat ng mga puntos sa isang partikular na buwan. \n",
+ " \n"
+ ],
+ "metadata": {
+ "id": "Ml7SDCLQcPvE"
+ }
+ },
+ {
+ "cell_type": "markdown",
+ "source": [
+ "### **Paano natin ito magagamit nang maayos?**\n",
+ "\n",
+ "Para makapagpakita ng kapaki-pakinabang na datos sa mga chart, kadalasan kailangan mong i-grupo ang datos sa isang paraan. Halimbawa, sa ating sitwasyon, ang pagkuha ng average na presyo ng kalabasa bawat buwan ay magbibigay ng mas malinaw na pananaw sa mga nakatagong pattern sa ating datos. Ito ay nagdadala sa atin sa isa pang **dplyr** na pamamaraan:\n",
+ "\n",
+ "#### `dplyr::group_by() %>% summarize()`\n",
+ "\n",
+ "Ang pinagsama-samang datos sa R ay madaling makalkula gamit ang\n",
+ "\n",
+ "`dplyr::group_by() %>% summarize()`\n",
+ "\n",
+ "- Ang `dplyr::group_by()` ay binabago ang unit ng pagsusuri mula sa buong dataset patungo sa mga indibidwal na grupo tulad ng bawat buwan.\n",
+ "\n",
+ "- Ang `dplyr::summarize()` ay lumilikha ng bagong data frame na may isang column para sa bawat variable ng grupo at isang column para sa bawat istatistikang buod na iyong tinukoy.\n",
+ "\n",
+ "Halimbawa, maaari nating gamitin ang `dplyr::group_by() %>% summarize()` upang i-grupo ang mga kalabasa batay sa **Month** na column at pagkatapos ay hanapin ang **mean price** para sa bawat buwan.\n"
+ ],
+ "metadata": {
+ "id": "jMakvJZIcVkh"
+ }
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "source": [
+ "# Find the average price of pumpkins per month\r\n",
+ "new_pumpkins %>%\r\n",
+ " group_by(Month) %>% \r\n",
+ " summarise(mean_price = mean(Price))"
+ ],
+ "outputs": [],
+ "metadata": {
+ "id": "6kVSUa2Bcilf"
+ }
+ },
+ {
+ "cell_type": "markdown",
+ "source": [
+ "Maikli!✨\n",
+ "\n",
+ "Ang mga kategoryang tampok tulad ng mga buwan ay mas mainam na ipakita gamit ang isang bar plot 📊. Ang mga layer na responsable para sa mga bar chart ay `geom_bar()` at `geom_col()`. Tingnan ang `?geom_bar` para malaman ang higit pa.\n",
+ "\n",
+ "Gumawa tayo ng isa!\n"
+ ],
+ "metadata": {
+ "id": "Kds48GUBcj3W"
+ }
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "source": [
+ "# Find the average price of pumpkins per month then plot a bar chart\r\n",
+ "new_pumpkins %>%\r\n",
+ " group_by(Month) %>% \r\n",
+ " summarise(mean_price = mean(Price)) %>% \r\n",
+ " ggplot(aes(x = Month, y = mean_price)) +\r\n",
+ " geom_col(fill = \"midnightblue\", alpha = 0.7) +\r\n",
+ " ylab(\"Pumpkin Price\")"
+ ],
+ "outputs": [],
+ "metadata": {
+ "id": "VNbU1S3BcrxO"
+ }
+ },
+ {
+ "cell_type": "markdown",
+ "source": [
+ "🤩🤩Mas kapaki-pakinabang ang visualisasyong ito ng datos! Mukhang ipinapakita nito na ang pinakamataas na presyo ng kalabasa ay nangyayari tuwing Setyembre at Oktubre. Tugma ba ito sa inaasahan mo? Bakit o bakit hindi?\n",
+ "\n",
+ "Binabati kita sa pagtatapos ng ikalawang aralin 👏! Inihanda mo ang iyong datos para sa paggawa ng modelo, pagkatapos ay natuklasan ang mas maraming kaalaman gamit ang mga visualisasyon!\n"
+ ],
+ "metadata": {
+ "id": "zDm0VOzzcuzR"
+ }
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "\n---\n\n**Paunawa**: \nAng dokumentong ito ay isinalin gamit ang AI translation service na [Co-op Translator](https://github.com/Azure/co-op-translator). Bagama't sinisikap naming maging tumpak, pakitandaan na ang mga awtomatikong pagsasalin ay maaaring maglaman ng mga pagkakamali o hindi pagkakatugma. Ang orihinal na dokumento sa kanyang orihinal na wika ang dapat ituring na opisyal na sanggunian. Para sa mahalagang impormasyon, inirerekomenda ang propesyonal na pagsasalin ng tao. Hindi kami mananagot sa anumang hindi pagkakaunawaan o maling interpretasyon na maaaring magmula sa paggamit ng pagsasaling ito.\n"
+ ]
+ }
+ ]
+}
\ No newline at end of file
diff --git a/translations/tl/2-Regression/2-Data/solution/notebook.ipynb b/translations/tl/2-Regression/2-Data/solution/notebook.ipynb
new file mode 100644
index 000000000..76f256223
--- /dev/null
+++ b/translations/tl/2-Regression/2-Data/solution/notebook.ipynb
@@ -0,0 +1,437 @@
+{
+ "cells": [
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": []
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 2,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "
\n",
+ "\n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
\n",
+ "
City Name
\n",
+ "
Type
\n",
+ "
Package
\n",
+ "
Variety
\n",
+ "
Sub Variety
\n",
+ "
Grade
\n",
+ "
Date
\n",
+ "
Low Price
\n",
+ "
High Price
\n",
+ "
Mostly Low
\n",
+ "
...
\n",
+ "
Unit of Sale
\n",
+ "
Quality
\n",
+ "
Condition
\n",
+ "
Appearance
\n",
+ "
Storage
\n",
+ "
Crop
\n",
+ "
Repack
\n",
+ "
Trans Mode
\n",
+ "
Unnamed: 24
\n",
+ "
Unnamed: 25
\n",
+ "
\n",
+ " \n",
+ " \n",
+ "
\n",
+ "
70
\n",
+ "
BALTIMORE
\n",
+ "
NaN
\n",
+ "
1 1/9 bushel cartons
\n",
+ "
PIE TYPE
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
9/24/16
\n",
+ "
15.0
\n",
+ "
15.0
\n",
+ "
15.0
\n",
+ "
...
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
N
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
\n",
+ "
\n",
+ "
71
\n",
+ "
BALTIMORE
\n",
+ "
NaN
\n",
+ "
1 1/9 bushel cartons
\n",
+ "
PIE TYPE
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
9/24/16
\n",
+ "
18.0
\n",
+ "
18.0
\n",
+ "
18.0
\n",
+ "
...
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
N
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
\n",
+ "
\n",
+ "
72
\n",
+ "
BALTIMORE
\n",
+ "
NaN
\n",
+ "
1 1/9 bushel cartons
\n",
+ "
PIE TYPE
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
10/1/16
\n",
+ "
18.0
\n",
+ "
18.0
\n",
+ "
18.0
\n",
+ "
...
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
N
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
\n",
+ "
\n",
+ "
73
\n",
+ "
BALTIMORE
\n",
+ "
NaN
\n",
+ "
1 1/9 bushel cartons
\n",
+ "
PIE TYPE
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
10/1/16
\n",
+ "
17.0
\n",
+ "
17.0
\n",
+ "
17.0
\n",
+ "
...
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
N
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
\n",
+ "
\n",
+ "
74
\n",
+ "
BALTIMORE
\n",
+ "
NaN
\n",
+ "
1 1/9 bushel cartons
\n",
+ "
PIE TYPE
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
10/8/16
\n",
+ "
15.0
\n",
+ "
15.0
\n",
+ "
15.0
\n",
+ "
...
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
N
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
5 rows × 26 columns
\n",
+ "
"
+ ],
+ "text/plain": [
+ " City Name Type Package Variety Sub Variety Grade \\\n",
+ "70 BALTIMORE NaN 1 1/9 bushel cartons PIE TYPE NaN NaN \n",
+ "71 BALTIMORE NaN 1 1/9 bushel cartons PIE TYPE NaN NaN \n",
+ "72 BALTIMORE NaN 1 1/9 bushel cartons PIE TYPE NaN NaN \n",
+ "73 BALTIMORE NaN 1 1/9 bushel cartons PIE TYPE NaN NaN \n",
+ "74 BALTIMORE NaN 1 1/9 bushel cartons PIE TYPE NaN NaN \n",
+ "\n",
+ " Date Low Price High Price Mostly Low ... Unit of Sale Quality \\\n",
+ "70 9/24/16 15.0 15.0 15.0 ... NaN NaN \n",
+ "71 9/24/16 18.0 18.0 18.0 ... NaN NaN \n",
+ "72 10/1/16 18.0 18.0 18.0 ... NaN NaN \n",
+ "73 10/1/16 17.0 17.0 17.0 ... NaN NaN \n",
+ "74 10/8/16 15.0 15.0 15.0 ... NaN NaN \n",
+ "\n",
+ " Condition Appearance Storage Crop Repack Trans Mode Unnamed: 24 \\\n",
+ "70 NaN NaN NaN NaN N NaN NaN \n",
+ "71 NaN NaN NaN NaN N NaN NaN \n",
+ "72 NaN NaN NaN NaN N NaN NaN \n",
+ "73 NaN NaN NaN NaN N NaN NaN \n",
+ "74 NaN NaN NaN NaN N NaN NaN \n",
+ "\n",
+ " Unnamed: 25 \n",
+ "70 NaN \n",
+ "71 NaN \n",
+ "72 NaN \n",
+ "73 NaN \n",
+ "74 NaN \n",
+ "\n",
+ "[5 rows x 26 columns]"
+ ]
+ },
+ "execution_count": 2,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "import pandas as pd\n",
+ "import matplotlib.pyplot as plt\n",
+ "pumpkins = pd.read_csv('../../data/US-pumpkins.csv')\n",
+ "\n",
+ "pumpkins = pumpkins[pumpkins['Package'].str.contains('bushel', case=True, regex=True)]\n",
+ "\n",
+ "pumpkins.head()"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 3,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "City Name 0\n",
+ "Type 406\n",
+ "Package 0\n",
+ "Variety 0\n",
+ "Sub Variety 167\n",
+ "Grade 415\n",
+ "Date 0\n",
+ "Low Price 0\n",
+ "High Price 0\n",
+ "Mostly Low 24\n",
+ "Mostly High 24\n",
+ "Origin 0\n",
+ "Origin District 396\n",
+ "Item Size 114\n",
+ "Color 145\n",
+ "Environment 415\n",
+ "Unit of Sale 404\n",
+ "Quality 415\n",
+ "Condition 415\n",
+ "Appearance 415\n",
+ "Storage 415\n",
+ "Crop 415\n",
+ "Repack 0\n",
+ "Trans Mode 415\n",
+ "Unnamed: 24 415\n",
+ "Unnamed: 25 391\n",
+ "dtype: int64"
+ ]
+ },
+ "execution_count": 3,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "pumpkins.isnull().sum()"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 4,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ " Month Package Low Price High Price Price\n",
+ "70 9 1 1/9 bushel cartons 15.00 15.0 13.50\n",
+ "71 9 1 1/9 bushel cartons 18.00 18.0 16.20\n",
+ "72 10 1 1/9 bushel cartons 18.00 18.0 16.20\n",
+ "73 10 1 1/9 bushel cartons 17.00 17.0 15.30\n",
+ "74 10 1 1/9 bushel cartons 15.00 15.0 13.50\n",
+ "... ... ... ... ... ...\n",
+ "1738 9 1/2 bushel cartons 15.00 15.0 30.00\n",
+ "1739 9 1/2 bushel cartons 13.75 15.0 28.75\n",
+ "1740 9 1/2 bushel cartons 10.75 15.0 25.75\n",
+ "1741 9 1/2 bushel cartons 12.00 12.0 24.00\n",
+ "1742 9 1/2 bushel cartons 12.00 12.0 24.00\n",
+ "\n",
+ "[415 rows x 5 columns]\n"
+ ]
+ }
+ ],
+ "source": [
+ "\n",
+ "# A set of new columns for a new dataframe. Filter out nonmatching columns\n",
+ "columns_to_select = ['Package', 'Low Price', 'High Price', 'Date']\n",
+ "pumpkins = pumpkins.loc[:, columns_to_select]\n",
+ "\n",
+ "# Get an average between low and high price for the base pumpkin price\n",
+ "price = (pumpkins['Low Price'] + pumpkins['High Price']) / 2\n",
+ "\n",
+ "# Convert the date to its month only\n",
+ "month = pd.DatetimeIndex(pumpkins['Date']).month\n",
+ "\n",
+ "# Create a new dataframe with this basic data\n",
+ "new_pumpkins = pd.DataFrame({'Month': month, 'Package': pumpkins['Package'], 'Low Price': pumpkins['Low Price'],'High Price': pumpkins['High Price'], 'Price': price})\n",
+ "\n",
+ "# Convert the price if the Package contains fractional bushel values\n",
+ "new_pumpkins.loc[new_pumpkins['Package'].str.contains('1 1/9'), 'Price'] = price/(1 + 1/9)\n",
+ "\n",
+ "new_pumpkins.loc[new_pumpkins['Package'].str.contains('1/2'), 'Price'] = price/(1/2)\n",
+ "\n",
+ "print(new_pumpkins)\n",
+ "\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 5,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "image/png": "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",
+ "text/plain": [
+ "
"
+ ]
+ },
+ "metadata": {
+ "needs_background": "light"
+ },
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "\n",
+ "new_pumpkins.groupby(['Month'])['Price'].mean().plot(kind='bar')\n",
+ "plt.ylabel(\"Pumpkin Price\")"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": []
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "\n---\n\n**Paunawa**: \nAng dokumentong ito ay isinalin gamit ang AI translation service na [Co-op Translator](https://github.com/Azure/co-op-translator). Bagama't sinisikap naming maging tumpak, pakitandaan na ang mga awtomatikong pagsasalin ay maaaring maglaman ng mga pagkakamali o hindi pagkakatugma. Ang orihinal na dokumento sa orihinal nitong wika ang dapat ituring na opisyal na sanggunian. Para sa mahalagang impormasyon, inirerekomenda ang propesyonal na pagsasalin ng tao. Hindi kami mananagot sa anumang hindi pagkakaunawaan o maling interpretasyon na maaaring magmula sa paggamit ng pagsasaling ito.\n"
+ ]
+ }
+ ],
+ "metadata": {
+ "interpreter": {
+ "hash": "31f2aee4e71d21fbe5cf8b01ff0e069b9275f58929596ceb00d14d90e3e16cd6"
+ },
+ "kernelspec": {
+ "display_name": "Python 3.7.0 64-bit ('3.7')",
+ "language": "python",
+ "name": "python3"
+ },
+ "language_info": {
+ "codemirror_mode": {
+ "name": "ipython",
+ "version": 3
+ },
+ "file_extension": ".py",
+ "mimetype": "text/x-python",
+ "name": "python",
+ "nbconvert_exporter": "python",
+ "pygments_lexer": "ipython3",
+ "version": "3.11.1"
+ },
+ "metadata": {
+ "interpreter": {
+ "hash": "70b38d7a306a849643e446cd70466270a13445e5987dfa1344ef2b127438fa4d"
+ }
+ },
+ "orig_nbformat": 2,
+ "coopTranslator": {
+ "original_hash": "95726f0b8283628d5356a4f8eb8b4b76",
+ "translation_date": "2025-08-29T14:58:20+00:00",
+ "source_file": "2-Regression/2-Data/solution/notebook.ipynb",
+ "language_code": "tl"
+ }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 2
+}
\ No newline at end of file
diff --git a/translations/tl/2-Regression/3-Linear/README.md b/translations/tl/2-Regression/3-Linear/README.md
new file mode 100644
index 000000000..755ca1ffb
--- /dev/null
+++ b/translations/tl/2-Regression/3-Linear/README.md
@@ -0,0 +1,381 @@
+
+# Gumawa ng regression model gamit ang Scikit-learn: regression sa apat na paraan
+
+
+> Infographic ni [Dasani Madipalli](https://twitter.com/dasani_decoded)
+## [Pre-lecture quiz](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/13/)
+
+> ### [Ang araling ito ay available sa R!](../../../../2-Regression/3-Linear/solution/R/lesson_3.html)
+### Panimula
+
+Sa ngayon, napag-aralan mo na kung ano ang regression gamit ang sample data mula sa dataset ng presyo ng kalabasa na gagamitin natin sa buong araling ito. Na-visualize mo na rin ito gamit ang Matplotlib.
+
+Ngayon, handa ka nang mas lumalim sa regression para sa ML. Bagama't ang visualization ay tumutulong upang maunawaan ang data, ang tunay na lakas ng Machine Learning ay nagmumula sa _pagsasanay ng mga modelo_. Ang mga modelo ay sinasanay gamit ang makasaysayang data upang awtomatikong makuha ang mga dependency ng data, at pinapayagan kang hulaan ang mga resulta para sa bagong data na hindi pa nakikita ng modelo.
+
+Sa araling ito, matututo ka pa tungkol sa dalawang uri ng regression: _basic linear regression_ at _polynomial regression_, kasama ang ilang math na nasa likod ng mga teknik na ito. Ang mga modelong ito ay magpapahintulot sa atin na hulaan ang presyo ng kalabasa depende sa iba't ibang input data.
+
+[](https://youtu.be/CRxFT8oTDMg "ML para sa mga nagsisimula - Pag-unawa sa Linear Regression")
+
+> 🎥 I-click ang imahe sa itaas para sa maikling video overview ng linear regression.
+
+> Sa buong kurikulum na ito, inaasahan namin ang minimal na kaalaman sa math, at sinisikap naming gawing accessible ito para sa mga estudyanteng nagmumula sa ibang larangan, kaya't maghanap ng mga tala, 🧮 callouts, diagram, at iba pang mga tool sa pag-aaral upang makatulong sa pag-unawa.
+
+### Kinakailangan
+
+Dapat pamilyar ka na sa istruktura ng data ng kalabasa na ating sinusuri. Makikita mo ito na preloaded at pre-cleaned sa _notebook.ipynb_ file ng araling ito. Sa file, ang presyo ng kalabasa ay ipinapakita kada bushel sa isang bagong data frame. Siguraduhing maipatakbo mo ang mga notebook na ito sa kernels sa Visual Studio Code.
+
+### Paghahanda
+
+Bilang paalala, niloload mo ang data na ito upang makapagtanong tungkol dito.
+
+- Kailan ang pinakamagandang oras para bumili ng kalabasa?
+- Anong presyo ang maaasahan ko para sa isang case ng miniature pumpkins?
+- Dapat ko bang bilhin ang mga ito sa half-bushel baskets o sa 1 1/9 bushel box?
+Patuloy nating tuklasin ang data na ito.
+
+Sa nakaraang aralin, gumawa ka ng Pandas data frame at pinunan ito ng bahagi ng orihinal na dataset, na-standardize ang presyo kada bushel. Sa paggawa nito, gayunpaman, nakakuha ka lamang ng humigit-kumulang 400 datapoints at para lamang sa mga buwan ng taglagas.
+
+Tingnan ang data na preloaded sa notebook na kasama ng araling ito. Ang data ay preloaded at isang paunang scatterplot ang na-chart upang ipakita ang data ng buwan. Marahil makakakuha tayo ng kaunting detalye tungkol sa kalikasan ng data sa pamamagitan ng mas malinis na pagproseso nito.
+
+## Isang linear regression line
+
+Tulad ng natutunan mo sa Lesson 1, ang layunin ng isang linear regression exercise ay makapag-plot ng linya upang:
+
+- **Ipakita ang relasyon ng mga variable**. Ipakita ang relasyon sa pagitan ng mga variable
+- **Gumawa ng mga prediksyon**. Gumawa ng tumpak na prediksyon kung saan mahuhulog ang isang bagong datapoint kaugnay ng linya.
+
+Karaniwan sa **Least-Squares Regression** ang pagguhit ng ganitong uri ng linya. Ang terminong 'least-squares' ay nangangahulugan na ang lahat ng datapoints na nakapalibot sa regression line ay pinapangkat at pagkatapos ay ina-add. Sa ideal na sitwasyon, ang huling kabuuan ay dapat na kasing liit hangga't maaari, dahil gusto natin ng mababang bilang ng mga error, o `least-squares`.
+
+Ginagawa natin ito dahil gusto nating magmodelo ng linya na may pinakamaliit na kabuuang distansya mula sa lahat ng ating mga data points. Pinapangkat din natin ang mga termino bago i-add ang mga ito dahil mas mahalaga sa atin ang magnitude kaysa sa direksyon.
+
+> **🧮 Ipakita ang math**
+>
+> Ang linyang ito, na tinatawag na _line of best fit_, ay maaaring ipahayag sa pamamagitan ng [isang equation](https://en.wikipedia.org/wiki/Simple_linear_regression):
+>
+> ```
+> Y = a + bX
+> ```
+>
+> `X` ay ang 'explanatory variable'. `Y` ay ang 'dependent variable'. Ang slope ng linya ay `b` at `a` ay ang y-intercept, na tumutukoy sa halaga ng `Y` kapag `X = 0`.
+>
+>
+>
+> Una, kalkulahin ang slope `b`. Infographic ni [Jen Looper](https://twitter.com/jenlooper)
+>
+> Sa madaling salita, at tumutukoy sa orihinal na tanong ng data ng kalabasa: "hulaan ang presyo ng kalabasa kada bushel ayon sa buwan", ang `X` ay tumutukoy sa presyo at ang `Y` ay tumutukoy sa buwan ng pagbebenta.
+>
+>
+>
+> Kalkulahin ang halaga ng Y. Kung nagbabayad ka ng humigit-kumulang $4, malamang Abril ito! Infographic ni [Jen Looper](https://twitter.com/jenlooper)
+>
+> Ang math na nagkakalkula ng linya ay dapat ipakita ang slope ng linya, na nakadepende rin sa intercept, o kung saan nakalagay ang `Y` kapag `X = 0`.
+>
+> Maaari mong obserbahan ang paraan ng pagkalkula para sa mga halagang ito sa [Math is Fun](https://www.mathsisfun.com/data/least-squares-regression.html) web site. Bisitahin din ang [Least-squares calculator](https://www.mathsisfun.com/data/least-squares-calculator.html) upang makita kung paano nakakaapekto ang mga halaga ng numero sa linya.
+
+## Correlation
+
+Isa pang terminong dapat maunawaan ay ang **Correlation Coefficient** sa pagitan ng mga X at Y variables. Gamit ang scatterplot, mabilis mong ma-visualize ang coefficient na ito. Ang plot na may mga datapoints na maayos na nakahanay ay may mataas na correlation, ngunit ang plot na may mga datapoints na kalat-kalat sa pagitan ng X at Y ay may mababang correlation.
+
+Ang isang mahusay na linear regression model ay ang isa na may mataas (mas malapit sa 1 kaysa 0) na Correlation Coefficient gamit ang Least-Squares Regression method na may linya ng regression.
+
+✅ Patakbuhin ang notebook na kasama ng araling ito at tingnan ang scatterplot ng Month to Price. Ang data ba na nag-uugnay sa Month to Price para sa pagbebenta ng kalabasa ay may mataas o mababang correlation, ayon sa iyong visual na interpretasyon ng scatterplot? Nagbabago ba ito kung gagamit ka ng mas detalyadong sukat sa halip na `Month`, halimbawa *day of the year* (i.e. bilang ng mga araw mula sa simula ng taon)?
+
+Sa code sa ibaba, ipagpalagay natin na nalinis na natin ang data, at nakakuha ng data frame na tinatawag na `new_pumpkins`, na katulad ng sumusunod:
+
+ID | Month | DayOfYear | Variety | City | Package | Low Price | High Price | Price
+---|-------|-----------|---------|------|---------|-----------|------------|-------
+70 | 9 | 267 | PIE TYPE | BALTIMORE | 1 1/9 bushel cartons | 15.0 | 15.0 | 13.636364
+71 | 9 | 267 | PIE TYPE | BALTIMORE | 1 1/9 bushel cartons | 18.0 | 18.0 | 16.363636
+72 | 10 | 274 | PIE TYPE | BALTIMORE | 1 1/9 bushel cartons | 18.0 | 18.0 | 16.363636
+73 | 10 | 274 | PIE TYPE | BALTIMORE | 1 1/9 bushel cartons | 17.0 | 17.0 | 15.454545
+74 | 10 | 281 | PIE TYPE | BALTIMORE | 1 1/9 bushel cartons | 15.0 | 15.0 | 13.636364
+
+> Ang code para linisin ang data ay makikita sa [`notebook.ipynb`](notebook.ipynb). Ginawa namin ang parehong mga hakbang sa paglilinis tulad ng sa nakaraang aralin, at kinakalkula ang `DayOfYear` column gamit ang sumusunod na expression:
+
+```python
+day_of_year = pd.to_datetime(pumpkins['Date']).apply(lambda dt: (dt-datetime(dt.year,1,1)).days)
+```
+
+Ngayon na nauunawaan mo ang math sa likod ng linear regression, gumawa tayo ng Regression model upang makita kung kaya nating hulaan kung aling package ng kalabasa ang may pinakamagandang presyo. Ang isang taong bumibili ng kalabasa para sa holiday pumpkin patch ay maaaring gusto ng impormasyong ito upang ma-optimize ang kanilang pagbili ng mga package ng kalabasa para sa patch.
+
+## Paghahanap ng Correlation
+
+[](https://youtu.be/uoRq-lW2eQo "ML para sa mga nagsisimula - Paghahanap ng Correlation: Ang Susi sa Linear Regression")
+
+> 🎥 I-click ang imahe sa itaas para sa maikling video overview ng correlation.
+
+Mula sa nakaraang aralin, malamang nakita mo na ang average na presyo para sa iba't ibang buwan ay ganito:
+
+
+
+Ito ay nagpapahiwatig na maaaring may correlation, at maaari nating subukang sanayin ang linear regression model upang hulaan ang relasyon sa pagitan ng `Month` at `Price`, o sa pagitan ng `DayOfYear` at `Price`. Narito ang scatter plot na nagpapakita ng huling relasyon:
+
+
+
+Tingnan natin kung may correlation gamit ang `corr` function:
+
+```python
+print(new_pumpkins['Month'].corr(new_pumpkins['Price']))
+print(new_pumpkins['DayOfYear'].corr(new_pumpkins['Price']))
+```
+
+Mukhang maliit ang correlation, -0.15 sa `Month` at -0.17 sa `DayOfMonth`, ngunit maaaring may isa pang mahalagang relasyon. Mukhang may iba't ibang clusters ng presyo na tumutugma sa iba't ibang pumpkin varieties. Upang kumpirmahin ang hypothesis na ito, mag-plot tayo ng bawat kategorya ng kalabasa gamit ang iba't ibang kulay. Sa pamamagitan ng pagpasa ng `ax` parameter sa `scatter` plotting function, maaari nating i-plot ang lahat ng puntos sa parehong graph:
+
+```python
+ax=None
+colors = ['red','blue','green','yellow']
+for i,var in enumerate(new_pumpkins['Variety'].unique()):
+ df = new_pumpkins[new_pumpkins['Variety']==var]
+ ax = df.plot.scatter('DayOfYear','Price',ax=ax,c=colors[i],label=var)
+```
+
+
+
+Ang ating imbestigasyon ay nagpapahiwatig na ang variety ay may mas malaking epekto sa kabuuang presyo kaysa sa aktwal na petsa ng pagbebenta. Makikita natin ito gamit ang bar graph:
+
+```python
+new_pumpkins.groupby('Variety')['Price'].mean().plot(kind='bar')
+```
+
+
+
+Tumutok muna tayo sa isang pumpkin variety, ang 'pie type', at tingnan kung ano ang epekto ng petsa sa presyo:
+
+```python
+pie_pumpkins = new_pumpkins[new_pumpkins['Variety']=='PIE TYPE']
+pie_pumpkins.plot.scatter('DayOfYear','Price')
+```
+
+
+Kung ngayon ay kalkulahin natin ang correlation sa pagitan ng `Price` at `DayOfYear` gamit ang `corr` function, makakakuha tayo ng humigit-kumulang `-0.27` - na nangangahulugang ang pagsasanay ng predictive model ay may saysay.
+
+> Bago sanayin ang linear regression model, mahalagang tiyakin na malinis ang ating data. Hindi mahusay gumagana ang linear regression sa mga nawawalang halaga, kaya't makatuwiran na alisin ang lahat ng mga empty cells:
+
+```python
+pie_pumpkins.dropna(inplace=True)
+pie_pumpkins.info()
+```
+
+Ang isa pang paraan ay punan ang mga nawawalang halaga gamit ang mean values mula sa kaukulang column.
+
+## Simple Linear Regression
+
+[](https://youtu.be/e4c_UP2fSjg "ML para sa mga nagsisimula - Linear at Polynomial Regression gamit ang Scikit-learn")
+
+> 🎥 I-click ang imahe sa itaas para sa maikling video overview ng linear at polynomial regression.
+
+Upang sanayin ang ating Linear Regression model, gagamitin natin ang **Scikit-learn** library.
+
+```python
+from sklearn.linear_model import LinearRegression
+from sklearn.metrics import mean_squared_error
+from sklearn.model_selection import train_test_split
+```
+
+Magsimula tayo sa paghihiwalay ng input values (features) at ang inaasahang output (label) sa magkahiwalay na numpy arrays:
+
+```python
+X = pie_pumpkins['DayOfYear'].to_numpy().reshape(-1,1)
+y = pie_pumpkins['Price']
+```
+
+> Tandaan na kailangan nating i-reshape ang input data upang maunawaan ito nang tama ng Linear Regression package. Ang Linear Regression ay inaasahan ang isang 2D-array bilang input, kung saan ang bawat row ng array ay tumutugma sa isang vector ng input features. Sa ating kaso, dahil mayroon lamang tayong isang input - kailangan natin ng array na may hugis N×1, kung saan ang N ay ang laki ng dataset.
+
+Pagkatapos, kailangan nating hatiin ang data sa train at test datasets, upang ma-validate natin ang ating modelo pagkatapos ng pagsasanay:
+
+```python
+X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0)
+```
+
+Sa wakas, ang pagsasanay ng aktwal na Linear Regression model ay nangangailangan lamang ng dalawang linya ng code. I-define natin ang `LinearRegression` object, at i-fit ito sa ating data gamit ang `fit` method:
+
+```python
+lin_reg = LinearRegression()
+lin_reg.fit(X_train,y_train)
+```
+
+Ang `LinearRegression` object pagkatapos ng `fit`-ting ay naglalaman ng lahat ng coefficients ng regression, na maaaring ma-access gamit ang `.coef_` property. Sa ating kaso, mayroon lamang isang coefficient, na dapat ay nasa paligid ng `-0.017`. Ibig sabihin, ang mga presyo ay tila bumababa nang kaunti sa paglipas ng panahon, ngunit hindi masyado, humigit-kumulang 2 cents kada araw. Maaari rin nating ma-access ang intersection point ng regression sa Y-axis gamit ang `lin_reg.intercept_` - ito ay nasa paligid ng `21` sa ating kaso, na nagpapahiwatig ng presyo sa simula ng taon.
+
+Upang makita kung gaano katumpak ang ating modelo, maaari nating hulaan ang mga presyo sa test dataset, at pagkatapos ay sukatin kung gaano kalapit ang ating mga prediksyon sa mga inaasahang halaga. Magagawa ito gamit ang mean square error (MSE) metrics, na siyang mean ng lahat ng squared differences sa pagitan ng inaasahan at prediktadong halaga.
+
+```python
+pred = lin_reg.predict(X_test)
+
+mse = np.sqrt(mean_squared_error(y_test,pred))
+print(f'Mean error: {mse:3.3} ({mse/np.mean(pred)*100:3.3}%)')
+```
+Ang ating error ay tila nasa paligid ng 2 puntos, na humigit-kumulang 17%. Hindi ito masyadong maganda. Isa pang indikasyon ng kalidad ng modelo ay ang **coefficient of determination**, na maaaring makuha sa ganitong paraan:
+
+```python
+score = lin_reg.score(X_train,y_train)
+print('Model determination: ', score)
+```
+Kung ang halaga ay 0, nangangahulugan ito na hindi isinasaalang-alang ng modelo ang input data at kumikilos bilang *pinakamasamang linear predictor*, na simpleng mean value lamang ng resulta. Ang halaga na 1 ay nangangahulugan na kaya nating hulaan nang perpekto ang lahat ng inaasahang output. Sa ating kaso, ang coefficient ay nasa paligid ng 0.06, na medyo mababa.
+
+Maaari rin nating i-plot ang test data kasama ang regression line upang mas makita kung paano gumagana ang regression sa ating kaso:
+
+```python
+plt.scatter(X_test,y_test)
+plt.plot(X_test,pred)
+```
+
+
+
+## Polynomial Regression
+
+Isa pang uri ng Linear Regression ay ang Polynomial Regression. Habang minsan may linear na relasyon sa pagitan ng mga variable - tulad ng mas malaki ang volume ng kalabasa, mas mataas ang presyo - may mga pagkakataon na ang mga relasyong ito ay hindi maaaring i-plot bilang isang eroplano o tuwid na linya.
+
+✅ Narito ang [ilang mga halimbawa](https://online.stat.psu.edu/stat501/lesson/9/9.8) ng data na maaaring gumamit ng Polynomial Regression.
+
+Balikan ang relasyon sa pagitan ng Petsa at Presyo. Ang scatterplot ba na ito ay tila dapat suriin gamit ang isang tuwid na linya? Hindi ba maaaring magbago-bago ang mga presyo? Sa kasong ito, maaari mong subukan ang polynomial regression.
+
+✅ Ang mga polynomial ay mga ekspresyong matematika na maaaring binubuo ng isa o higit pang mga variable at coefficients.
+
+Ang Polynomial regression ay lumilikha ng isang kurbadong linya upang mas maangkop ang nonlinear na data. Sa ating kaso, kung isasama natin ang isang squared na `DayOfYear` variable sa input data, dapat nating maangkop ang ating data gamit ang isang parabolic curve, na magkakaroon ng minimum sa isang tiyak na punto sa loob ng taon.
+
+Ang Scikit-learn ay may kasamang kapaki-pakinabang na [pipeline API](https://scikit-learn.org/stable/modules/generated/sklearn.pipeline.make_pipeline.html?highlight=pipeline#sklearn.pipeline.make_pipeline) upang pagsamahin ang iba't ibang hakbang ng pagproseso ng data. Ang isang **pipeline** ay isang kadena ng **estimators**. Sa ating kaso, lilikha tayo ng pipeline na unang magdaragdag ng polynomial features sa ating modelo, at pagkatapos ay magsasanay ng regression:
+
+```python
+from sklearn.preprocessing import PolynomialFeatures
+from sklearn.pipeline import make_pipeline
+
+pipeline = make_pipeline(PolynomialFeatures(2), LinearRegression())
+
+pipeline.fit(X_train,y_train)
+```
+
+Ang paggamit ng `PolynomialFeatures(2)` ay nangangahulugan na isasama natin ang lahat ng second-degree polynomials mula sa input data. Sa ating kaso, ito ay mangangahulugan lamang ng `DayOfYear`2, ngunit kung may dalawang input variables na X at Y, ito ay magdaragdag ng X2, XY, at Y2. Maaari rin tayong gumamit ng mas mataas na degree ng polynomials kung nais natin.
+
+Ang mga pipeline ay maaaring gamitin sa parehong paraan tulad ng orihinal na `LinearRegression` object, ibig sabihin, maaari nating `fit` ang pipeline, at pagkatapos ay gamitin ang `predict` upang makuha ang mga resulta ng prediksyon. Narito ang graph na nagpapakita ng test data, at ang approximation curve:
+
+
+
+Gamit ang Polynomial Regression, maaari tayong makakuha ng bahagyang mas mababang MSE at mas mataas na determination, ngunit hindi ito gaanong malaki. Kailangan nating isaalang-alang ang iba pang mga feature!
+
+> Mapapansin mo na ang pinakamababang presyo ng kalabasa ay nakikita sa paligid ng Halloween. Paano mo ito maipapaliwanag?
+
+🎃 Binabati kita, nakagawa ka ng isang modelo na makakatulong sa paghula ng presyo ng pie pumpkins. Marahil ay maaari mong ulitin ang parehong proseso para sa lahat ng uri ng kalabasa, ngunit magiging nakakapagod iyon. Alamin natin ngayon kung paano isasama ang iba't ibang uri ng kalabasa sa ating modelo!
+
+## Categorical Features
+
+Sa ideal na mundo, nais nating mahulaan ang mga presyo para sa iba't ibang uri ng kalabasa gamit ang parehong modelo. Gayunpaman, ang column na `Variety` ay medyo naiiba sa mga column tulad ng `Month`, dahil naglalaman ito ng mga non-numeric na halaga. Ang ganitong mga column ay tinatawag na **categorical**.
+
+[](https://youtu.be/DYGliioIAE0 "ML for beginners - Categorical Feature Predictions with Linear Regression")
+
+> 🎥 I-click ang larawan sa itaas para sa maikling video tungkol sa paggamit ng categorical features.
+
+Narito ang makikita mo kung paano nakadepende ang average na presyo sa variety:
+
+
+
+Upang maisama ang variety, kailangan muna nating i-convert ito sa numeric form, o **encode** ito. May ilang paraan upang gawin ito:
+
+* Ang simpleng **numeric encoding** ay gagawa ng isang talahanayan ng iba't ibang varieties, at pagkatapos ay papalitan ang pangalan ng variety ng isang index sa talahanayan. Hindi ito ang pinakamahusay na ideya para sa linear regression, dahil isinasaalang-alang ng linear regression ang aktwal na numeric value ng index, at idinadagdag ito sa resulta, na pinararami ng ilang coefficient. Sa ating kaso, ang relasyon sa pagitan ng numero ng index at ng presyo ay malinaw na hindi linear, kahit na tiyakin nating ang mga index ay nakaayos sa isang partikular na paraan.
+* Ang **One-hot encoding** ay papalitan ang column na `Variety` ng 4 na magkakaibang column, isa para sa bawat variety. Ang bawat column ay maglalaman ng `1` kung ang kaukulang row ay kabilang sa isang partikular na variety, at `0` kung hindi. Nangangahulugan ito na magkakaroon ng apat na coefficients sa linear regression, isa para sa bawat uri ng kalabasa, na responsable para sa "panimulang presyo" (o mas tamang "karagdagang presyo") para sa partikular na variety.
+
+Ang code sa ibaba ay nagpapakita kung paano natin mai-o-one-hot encode ang isang variety:
+
+```python
+pd.get_dummies(new_pumpkins['Variety'])
+```
+
+ ID | FAIRYTALE | MINIATURE | MIXED HEIRLOOM VARIETIES | PIE TYPE
+----|-----------|-----------|--------------------------|----------
+70 | 0 | 0 | 0 | 1
+71 | 0 | 0 | 0 | 1
+... | ... | ... | ... | ...
+1738 | 0 | 1 | 0 | 0
+1739 | 0 | 1 | 0 | 0
+1740 | 0 | 1 | 0 | 0
+1741 | 0 | 1 | 0 | 0
+1742 | 0 | 1 | 0 | 0
+
+Upang sanayin ang linear regression gamit ang one-hot encoded variety bilang input, kailangan lang nating i-initialize nang tama ang `X` at `y` data:
+
+```python
+X = pd.get_dummies(new_pumpkins['Variety'])
+y = new_pumpkins['Price']
+```
+
+Ang natitirang bahagi ng code ay pareho sa ginamit natin sa itaas upang sanayin ang Linear Regression. Kung susubukan mo ito, makikita mo na ang mean squared error ay halos pareho, ngunit nakakakuha tayo ng mas mataas na coefficient of determination (~77%). Upang makakuha ng mas tumpak na mga prediksyon, maaari nating isama ang mas maraming categorical features, pati na rin ang mga numeric features, tulad ng `Month` o `DayOfYear`. Upang makakuha ng isang malaking array ng mga feature, maaari nating gamitin ang `join`:
+
+```python
+X = pd.get_dummies(new_pumpkins['Variety']) \
+ .join(new_pumpkins['Month']) \
+ .join(pd.get_dummies(new_pumpkins['City'])) \
+ .join(pd.get_dummies(new_pumpkins['Package']))
+y = new_pumpkins['Price']
+```
+
+Dito isinama rin natin ang `City` at uri ng `Package`, na nagbigay sa atin ng MSE na 2.84 (10%), at determination na 0.94!
+
+## Pagsasama-sama ng Lahat
+
+Upang makagawa ng pinakamahusay na modelo, maaari nating gamitin ang pinagsamang (one-hot encoded categorical + numeric) data mula sa halimbawa sa itaas kasama ang Polynomial Regression. Narito ang kumpletong code para sa iyong kaginhawaan:
+
+```python
+# set up training data
+X = pd.get_dummies(new_pumpkins['Variety']) \
+ .join(new_pumpkins['Month']) \
+ .join(pd.get_dummies(new_pumpkins['City'])) \
+ .join(pd.get_dummies(new_pumpkins['Package']))
+y = new_pumpkins['Price']
+
+# make train-test split
+X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0)
+
+# setup and train the pipeline
+pipeline = make_pipeline(PolynomialFeatures(2), LinearRegression())
+pipeline.fit(X_train,y_train)
+
+# predict results for test data
+pred = pipeline.predict(X_test)
+
+# calculate MSE and determination
+mse = np.sqrt(mean_squared_error(y_test,pred))
+print(f'Mean error: {mse:3.3} ({mse/np.mean(pred)*100:3.3}%)')
+
+score = pipeline.score(X_train,y_train)
+print('Model determination: ', score)
+```
+
+Dapat nitong ibigay sa atin ang pinakamahusay na determination coefficient na halos 97%, at MSE=2.23 (~8% prediction error).
+
+| Modelo | MSE | Determination |
+|-------|-----|---------------|
+| `DayOfYear` Linear | 2.77 (17.2%) | 0.07 |
+| `DayOfYear` Polynomial | 2.73 (17.0%) | 0.08 |
+| `Variety` Linear | 5.24 (19.7%) | 0.77 |
+| All features Linear | 2.84 (10.5%) | 0.94 |
+| All features Polynomial | 2.23 (8.25%) | 0.97 |
+
+🏆 Magaling! Nakagawa ka ng apat na Regression models sa isang aralin, at napabuti ang kalidad ng modelo sa 97%. Sa huling bahagi ng Regression, matututo ka tungkol sa Logistic Regression upang matukoy ang mga kategorya.
+
+---
+
+## 🚀Hamunin ang Iyong Sarili
+
+Subukan ang iba't ibang mga variable sa notebook na ito upang makita kung paano nauugnay ang correlation sa katumpakan ng modelo.
+
+## [Post-lecture quiz](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/14/)
+
+## Review at Pag-aaral sa Sarili
+
+Sa araling ito, natutunan natin ang tungkol sa Linear Regression. Mayroon pang ibang mahahalagang uri ng Regression. Basahin ang tungkol sa Stepwise, Ridge, Lasso, at Elasticnet techniques. Isang magandang kurso na maaaring pag-aralan upang matuto pa ay ang [Stanford Statistical Learning course](https://online.stanford.edu/courses/sohs-ystatslearning-statistical-learning).
+
+## Takdang Aralin
+
+[Magbuo ng Modelo](assignment.md)
+
+---
+
+**Paunawa**:
+Ang dokumentong ito ay isinalin gamit ang AI translation service na [Co-op Translator](https://github.com/Azure/co-op-translator). Bagama't sinisikap naming maging tumpak, pakitandaan na ang mga awtomatikong pagsasalin ay maaaring maglaman ng mga pagkakamali o hindi pagkakatugma. Ang orihinal na dokumento sa orihinal nitong wika ang dapat ituring na opisyal na sanggunian. Para sa mahalagang impormasyon, inirerekomenda ang propesyonal na pagsasalin ng tao. Hindi kami mananagot sa anumang hindi pagkakaunawaan o maling interpretasyon na maaaring magmula sa paggamit ng pagsasaling ito.
\ No newline at end of file
diff --git a/translations/tl/2-Regression/3-Linear/assignment.md b/translations/tl/2-Regression/3-Linear/assignment.md
new file mode 100644
index 000000000..4f66c2b26
--- /dev/null
+++ b/translations/tl/2-Regression/3-Linear/assignment.md
@@ -0,0 +1,25 @@
+
+# Gumawa ng Regression Model
+
+## Mga Instruksyon
+
+Sa araling ito, ipinakita kung paano bumuo ng modelo gamit ang Linear at Polynomial Regression. Gamit ang kaalamang ito, maghanap ng dataset o gumamit ng isa sa mga built-in na set ng Scikit-learn upang makabuo ng bagong modelo. Ipaliwanag sa iyong notebook kung bakit mo pinili ang teknik na ginamit, at ipakita ang katumpakan ng iyong modelo. Kung hindi ito tumpak, ipaliwanag kung bakit.
+
+## Rubric
+
+| Pamantayan | Natatangi | Katanggap-tanggap | Kailangan ng Pagpapabuti |
+| ---------- | ------------------------------------------------------------ | -------------------------- | ------------------------------- |
+| | nagpapakita ng kumpletong notebook na may maayos na dokumentadong solusyon | hindi kumpleto ang solusyon | may depekto o may bug ang solusyon |
+
+---
+
+**Paunawa**:
+Ang dokumentong ito ay isinalin gamit ang AI translation service na [Co-op Translator](https://github.com/Azure/co-op-translator). Bagama't sinisikap naming maging tumpak, pakitandaan na ang mga awtomatikong pagsasalin ay maaaring maglaman ng mga pagkakamali o hindi pagkakatugma. Ang orihinal na dokumento sa orihinal nitong wika ang dapat ituring na opisyal na sanggunian. Para sa mahalagang impormasyon, inirerekomenda ang propesyonal na pagsasalin ng tao. Hindi kami mananagot sa anumang hindi pagkakaunawaan o maling interpretasyon na maaaring magmula sa paggamit ng pagsasaling ito.
\ No newline at end of file
diff --git a/translations/tl/2-Regression/3-Linear/notebook.ipynb b/translations/tl/2-Regression/3-Linear/notebook.ipynb
new file mode 100644
index 000000000..56e0b8451
--- /dev/null
+++ b/translations/tl/2-Regression/3-Linear/notebook.ipynb
@@ -0,0 +1,128 @@
+{
+ "cells": [
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "## Presyo ng Kalabasa\n",
+ "\n",
+ "I-load ang mga kinakailangang library at dataset. I-convert ang data sa isang dataframe na naglalaman ng subset ng data:\n",
+ "\n",
+ "- Kunin lamang ang mga kalabasa na may presyo batay sa bushel\n",
+ "- I-convert ang petsa sa buwan\n",
+ "- Kalkulahin ang presyo bilang average ng mataas at mababang presyo\n",
+ "- I-convert ang presyo upang ipakita ang presyo batay sa dami ng bushel\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "import pandas as pd\n",
+ "import matplotlib.pyplot as plt\n",
+ "import numpy as np\n",
+ "from datetime import datetime\n",
+ "\n",
+ "pumpkins = pd.read_csv('../data/US-pumpkins.csv')\n",
+ "\n",
+ "pumpkins.head()\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "pumpkins = pumpkins[pumpkins['Package'].str.contains('bushel', case=True, regex=True)]\n",
+ "\n",
+ "columns_to_select = ['Package', 'Variety', 'City Name', 'Low Price', 'High Price', 'Date']\n",
+ "pumpkins = pumpkins.loc[:, columns_to_select]\n",
+ "\n",
+ "price = (pumpkins['Low Price'] + pumpkins['High Price']) / 2\n",
+ "\n",
+ "month = pd.DatetimeIndex(pumpkins['Date']).month\n",
+ "day_of_year = pd.to_datetime(pumpkins['Date']).apply(lambda dt: (dt-datetime(dt.year,1,1)).days)\n",
+ "\n",
+ "new_pumpkins = pd.DataFrame(\n",
+ " {'Month': month, \n",
+ " 'DayOfYear' : day_of_year, \n",
+ " 'Variety': pumpkins['Variety'], \n",
+ " 'City': pumpkins['City Name'], \n",
+ " 'Package': pumpkins['Package'], \n",
+ " 'Low Price': pumpkins['Low Price'],\n",
+ " 'High Price': pumpkins['High Price'], \n",
+ " 'Price': price})\n",
+ "\n",
+ "new_pumpkins.loc[new_pumpkins['Package'].str.contains('1 1/9'), 'Price'] = price/1.1\n",
+ "new_pumpkins.loc[new_pumpkins['Package'].str.contains('1/2'), 'Price'] = price*2\n",
+ "\n",
+ "new_pumpkins.head()\n"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "Ang isang pangunahing scatterplot ay nagpapaalala sa atin na mayroon lamang tayong datos ng buwan mula Agosto hanggang Disyembre. Malamang na kailangan natin ng mas maraming datos upang makagawa ng mga konklusyon sa isang linyar na paraan.\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "import matplotlib.pyplot as plt\n",
+ "plt.scatter('Month','Price',data=new_pumpkins)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "\n",
+ "plt.scatter('DayOfYear','Price',data=new_pumpkins)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "\n---\n\n**Paunawa**: \nAng dokumentong ito ay isinalin gamit ang AI translation service na [Co-op Translator](https://github.com/Azure/co-op-translator). Bagama't sinisikap naming maging tumpak, pakitandaan na ang mga awtomatikong pagsasalin ay maaaring maglaman ng mga pagkakamali o hindi pagkakatugma. Ang orihinal na dokumento sa kanyang katutubong wika ang dapat ituring na opisyal na sanggunian. Para sa mahalagang impormasyon, inirerekomenda ang propesyonal na pagsasalin ng tao. Hindi kami mananagot sa anumang hindi pagkakaunawaan o maling interpretasyon na maaaring magmula sa paggamit ng pagsasaling ito.\n"
+ ]
+ }
+ ],
+ "metadata": {
+ "kernelspec": {
+ "display_name": "Python 3",
+ "language": "python",
+ "name": "python3"
+ },
+ "language_info": {
+ "codemirror_mode": {
+ "name": "ipython",
+ "version": 3
+ },
+ "file_extension": ".py",
+ "mimetype": "text/x-python",
+ "name": "python",
+ "nbconvert_exporter": "python",
+ "pygments_lexer": "ipython3",
+ "version": "3.8.3-final"
+ },
+ "orig_nbformat": 2,
+ "coopTranslator": {
+ "original_hash": "b032d371c75279373507f003439a577e",
+ "translation_date": "2025-08-29T14:40:23+00:00",
+ "source_file": "2-Regression/3-Linear/notebook.ipynb",
+ "language_code": "tl"
+ }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 2
+}
\ No newline at end of file
diff --git a/translations/tl/2-Regression/3-Linear/solution/Julia/README.md b/translations/tl/2-Regression/3-Linear/solution/Julia/README.md
new file mode 100644
index 000000000..58ac29095
--- /dev/null
+++ b/translations/tl/2-Regression/3-Linear/solution/Julia/README.md
@@ -0,0 +1,15 @@
+
+
+
+---
+
+**Paunawa**:
+Ang dokumentong ito ay isinalin gamit ang AI translation service na [Co-op Translator](https://github.com/Azure/co-op-translator). Bagama't sinisikap naming maging tumpak, pakitandaan na ang mga awtomatikong pagsasalin ay maaaring maglaman ng mga pagkakamali o hindi pagkakatugma. Ang orihinal na dokumento sa orihinal nitong wika ang dapat ituring na opisyal na sanggunian. Para sa mahalagang impormasyon, inirerekomenda ang propesyonal na pagsasalin ng tao. Hindi kami mananagot sa anumang hindi pagkakaunawaan o maling interpretasyon na maaaring magmula sa paggamit ng pagsasaling ito.
\ No newline at end of file
diff --git a/translations/tl/2-Regression/3-Linear/solution/R/lesson_3-R.ipynb b/translations/tl/2-Regression/3-Linear/solution/R/lesson_3-R.ipynb
new file mode 100644
index 000000000..83fca0541
--- /dev/null
+++ b/translations/tl/2-Regression/3-Linear/solution/R/lesson_3-R.ipynb
@@ -0,0 +1,1089 @@
+{
+ "nbformat": 4,
+ "nbformat_minor": 2,
+ "metadata": {
+ "colab": {
+ "name": "lesson_3-R.ipynb",
+ "provenance": [],
+ "collapsed_sections": [],
+ "toc_visible": true
+ },
+ "kernelspec": {
+ "name": "ir",
+ "display_name": "R"
+ },
+ "language_info": {
+ "name": "R"
+ },
+ "coopTranslator": {
+ "original_hash": "5015d65d61ba75a223bfc56c273aa174",
+ "translation_date": "2025-08-29T14:48:26+00:00",
+ "source_file": "2-Regression/3-Linear/solution/R/lesson_3-R.ipynb",
+ "language_code": "tl"
+ }
+ },
+ "cells": [
+ {
+ "cell_type": "markdown",
+ "source": [],
+ "metadata": {
+ "id": "EgQw8osnsUV-"
+ }
+ },
+ {
+ "cell_type": "markdown",
+ "source": [
+ "## Linear at Polynomial Regression para sa Pagpepresyo ng Kalabasa - Aralin 3\n",
+ "
\n",
+ " \n",
+ " Infographic ni Dasani Madipalli\n",
+ "\n",
+ "\n",
+ "\n",
+ "\n",
+ "#### Panimula\n",
+ "\n",
+ "Sa ngayon, napag-aralan mo na kung ano ang regression gamit ang sample data mula sa dataset ng pagpepresyo ng kalabasa na gagamitin natin sa buong araling ito. Na-visualize mo rin ito gamit ang `ggplot2`.💪\n",
+ "\n",
+ "Ngayon, handa ka nang mas lumalim sa regression para sa ML. Sa araling ito, matutunan mo ang tungkol sa dalawang uri ng regression: *basic linear regression* at *polynomial regression*, kasama ang ilang matematika na nasa likod ng mga teknik na ito.\n",
+ "\n",
+ "> Sa buong kurikulum na ito, inaasahan namin ang minimal na kaalaman sa matematika, at layunin naming gawing mas accessible ito para sa mga estudyanteng galing sa ibang larangan, kaya't magbantay para sa mga tala, 🧮 callouts, diagram, at iba pang mga kasangkapan sa pag-aaral upang makatulong sa pag-unawa.\n",
+ "\n",
+ "#### Paghahanda\n",
+ "\n",
+ "Bilang paalala, niloload mo ang data na ito upang makapagtanong tungkol dito.\n",
+ "\n",
+ "- Kailan ang pinakamagandang oras para bumili ng kalabasa?\n",
+ "\n",
+ "- Anong presyo ang maaasahan ko para sa isang case ng miniature na kalabasa?\n",
+ "\n",
+ "- Dapat ko bang bilhin ang mga ito sa half-bushel baskets o sa 1 1/9 bushel box? Patuloy tayong maghukay sa data na ito.\n",
+ "\n",
+ "Sa nakaraang aralin, gumawa ka ng `tibble` (isang modernong muling pag-iisip ng data frame) at pinunan ito ng bahagi ng orihinal na dataset, na-standardize ang pagpepresyo batay sa bushel. Sa paggawa nito, gayunpaman, nakakuha ka lamang ng humigit-kumulang 400 data points at para lamang sa mga buwan ng taglagas. Marahil makakakuha tayo ng mas detalyado tungkol sa kalikasan ng data sa pamamagitan ng mas malinis na pagproseso nito? Tingnan natin... 🕵️♀️\n",
+ "\n",
+ "Para sa gawaing ito, kakailanganin natin ang mga sumusunod na packages:\n",
+ "\n",
+ "- `tidyverse`: Ang [tidyverse](https://www.tidyverse.org/) ay isang [koleksyon ng mga R packages](https://www.tidyverse.org/packages) na idinisenyo upang gawing mas mabilis, mas madali, at mas masaya ang data science!\n",
+ "\n",
+ "- `tidymodels`: Ang [tidymodels](https://www.tidymodels.org/) framework ay isang [koleksyon ng mga packages](https://www.tidymodels.org/packages/) para sa modeling at machine learning.\n",
+ "\n",
+ "- `janitor`: Ang [janitor package](https://github.com/sfirke/janitor) ay nagbibigay ng simpleng mga tool para sa pagsusuri at paglilinis ng maruming data.\n",
+ "\n",
+ "- `corrplot`: Ang [corrplot package](https://cran.r-project.org/web/packages/corrplot/vignettes/corrplot-intro.html) ay nagbibigay ng visual exploratory tool sa correlation matrix na sumusuporta sa awtomatikong pag-aayos ng mga variable upang makatulong sa pagtuklas ng mga nakatagong pattern sa pagitan ng mga variable.\n",
+ "\n",
+ "Maaaring i-install ang mga ito gamit ang:\n",
+ "\n",
+ "`install.packages(c(\"tidyverse\", \"tidymodels\", \"janitor\", \"corrplot\"))`\n",
+ "\n",
+ "Ang script sa ibaba ay nagche-check kung mayroon ka ng mga packages na kinakailangan upang makumpleto ang module na ito at ini-install ang mga ito para sa iyo kung sakaling kulang.\n"
+ ],
+ "metadata": {
+ "id": "WqQPS1OAsg3H"
+ }
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "source": [
+ "suppressWarnings(if (!require(\"pacman\")) install.packages(\"pacman\"))\n",
+ "\n",
+ "pacman::p_load(tidyverse, tidymodels, janitor, corrplot)"
+ ],
+ "outputs": [],
+ "metadata": {
+ "id": "tA4C2WN3skCf",
+ "colab": {
+ "base_uri": "https://localhost:8080/"
+ },
+ "outputId": "c06cd805-5534-4edc-f72b-d0d1dab96ac0"
+ }
+ },
+ {
+ "cell_type": "markdown",
+ "source": [
+ "Ilalagay natin ang mga kahanga-hangang package na ito at gagawin silang magagamit sa kasalukuyang R session. (Ito ay para sa simpleng ilustrasyon, `pacman::p_load()` ay ginawa na ito para sa iyo)\n",
+ "\n",
+ "## 1. Isang linya ng linear regression\n",
+ "\n",
+ "Tulad ng natutunan mo sa Lesson 1, ang layunin ng isang linear regression exercise ay makapag-plot ng *linya* *ng* *pinakamagandang tugma* upang:\n",
+ "\n",
+ "- **Ipakita ang relasyon ng mga variable**. Ipakita ang ugnayan sa pagitan ng mga variable.\n",
+ "\n",
+ "- **Gumawa ng mga prediksyon**. Gumawa ng tumpak na prediksyon kung saan mahuhulog ang isang bagong data point kaugnay ng linya.\n",
+ "\n",
+ "Upang iguhit ang ganitong uri ng linya, gumagamit tayo ng isang estadistikal na teknik na tinatawag na **Least-Squares Regression**. Ang terminong `least-squares` ay nangangahulugan na ang lahat ng data points na nakapaligid sa regression line ay pinapangkat at pagkatapos ay ina-add. Sa ideal na sitwasyon, ang huling kabuuan ay dapat na kasing liit hangga't maaari, dahil gusto natin ng mababang bilang ng mga error, o `least-squares`. Kaya, ang linya ng pinakamagandang tugma ay ang linya na nagbibigay sa atin ng pinakamababang halaga para sa kabuuan ng mga squared errors - kaya tinawag itong *least squares regression*.\n",
+ "\n",
+ "Ginagawa natin ito dahil gusto nating magmodelo ng linya na may pinakamaliit na kabuuang distansya mula sa lahat ng ating data points. Pinapangkat din natin ang mga termino bago i-add dahil mas mahalaga sa atin ang magnitude kaysa sa direksyon nito.\n",
+ "\n",
+ "> **🧮 Ipakita ang matematika**\n",
+ ">\n",
+ "> Ang linyang ito, na tinatawag na *linya ng pinakamagandang tugma* ay maaaring ipahayag sa pamamagitan ng [isang equation](https://en.wikipedia.org/wiki/Simple_linear_regression):\n",
+ ">\n",
+ "> Y = a + bX\n",
+ ">\n",
+ "> Ang `X` ay ang '`explanatory variable` o `predictor`'. Ang `Y` ay ang '`dependent variable` o `outcome`'. Ang slope ng linya ay `b` at ang `a` ay ang y-intercept, na tumutukoy sa halaga ng `Y` kapag `X = 0`.\n",
+ ">\n",
+ "\n",
+ "> \n",
+ " Infographic ni Jen Looper\n",
+ ">\n",
+ "> Una, kalkulahin ang slope `b`.\n",
+ ">\n",
+ "> Sa madaling salita, at tumutukoy sa orihinal na tanong ng data ng kalabasa: \"hulaan ang presyo ng kalabasa kada bushel ayon sa buwan\", ang `X` ay tumutukoy sa presyo at ang `Y` ay tumutukoy sa buwan ng pagbebenta.\n",
+ ">\n",
+ "> \n",
+ " Infographic ni Jen Looper\n",
+ "> \n",
+ "> Kalkulahin ang halaga ng Y. Kung nagbabayad ka ng humigit-kumulang \\$4, malamang Abril na!\n",
+ ">\n",
+ "> Ang matematika na nagkakalkula ng linya ay dapat ipakita ang slope ng linya, na nakadepende rin sa intercept, o kung saan nakalagay ang `Y` kapag `X = 0`.\n",
+ ">\n",
+ "> Maaari mong obserbahan ang paraan ng pagkalkula para sa mga halagang ito sa [Math is Fun](https://www.mathsisfun.com/data/least-squares-regression.html) na website. Bisitahin din ang [Least-squares calculator](https://www.mathsisfun.com/data/least-squares-calculator.html) upang makita kung paano naaapektuhan ng mga halaga ng numero ang linya.\n",
+ "\n",
+ "Hindi naman nakakatakot, di ba? 🤓\n",
+ "\n",
+ "#### Korrelasyon\n",
+ "\n",
+ "Isa pang terminong dapat maunawaan ay ang **Correlation Coefficient** sa pagitan ng mga X at Y na variable. Gamit ang scatterplot, mabilis mong makikita ang coefficient na ito. Ang plot na may mga datapoints na maayos na nakahanay ay may mataas na korrelasyon, ngunit ang plot na may datapoints na kalat-kalat sa pagitan ng X at Y ay may mababang korrelasyon.\n",
+ "\n",
+ "Ang isang mahusay na linear regression model ay ang isa na may mataas (mas malapit sa 1 kaysa 0) na Correlation Coefficient gamit ang Least-Squares Regression method na may linya ng regression.\n"
+ ],
+ "metadata": {
+ "id": "cdX5FRpvsoP5"
+ }
+ },
+ {
+ "cell_type": "markdown",
+ "source": [
+ "## **2. Isang sayaw kasama ang datos: paggawa ng data frame na gagamitin para sa pagmomodelo**\n",
+ "\n",
+ "
\n",
+ " \n",
+ " Sining ni @allison_horst\n",
+ "\n",
+ "\n",
+ "\n"
+ ],
+ "metadata": {
+ "id": "WdUKXk7Bs8-V"
+ }
+ },
+ {
+ "cell_type": "markdown",
+ "source": [
+ "Mag-load ng mga kinakailangang library at dataset. I-convert ang data sa isang data frame na naglalaman ng subset ng data:\n",
+ "\n",
+ "- Kunin lamang ang mga kalabasa na may presyo batay sa bushel\n",
+ "\n",
+ "- I-convert ang petsa sa buwan\n",
+ "\n",
+ "- Kalkulahin ang presyo bilang average ng mataas at mababang presyo\n",
+ "\n",
+ "- I-convert ang presyo upang ipakita ang pagpepresyo batay sa dami ng bushel\n",
+ "\n",
+ "> Tinalakay natin ang mga hakbang na ito sa [nakaraang aralin](https://github.com/microsoft/ML-For-Beginners/blob/main/2-Regression/2-Data/solution/lesson_2-R.ipynb).\n"
+ ],
+ "metadata": {
+ "id": "fMCtu2G2s-p8"
+ }
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "source": [
+ "# Load the core Tidyverse packages\n",
+ "library(tidyverse)\n",
+ "library(lubridate)\n",
+ "\n",
+ "# Import the pumpkins data\n",
+ "pumpkins <- read_csv(file = \"https://raw.githubusercontent.com/microsoft/ML-For-Beginners/main/2-Regression/data/US-pumpkins.csv\")\n",
+ "\n",
+ "\n",
+ "# Get a glimpse and dimensions of the data\n",
+ "glimpse(pumpkins)\n",
+ "\n",
+ "\n",
+ "# Print the first 50 rows of the data set\n",
+ "pumpkins %>% \n",
+ " slice_head(n = 5)"
+ ],
+ "outputs": [],
+ "metadata": {
+ "id": "ryMVZEEPtERn"
+ }
+ },
+ {
+ "cell_type": "markdown",
+ "source": [
+ "Sa diwa ng purong pakikipagsapalaran, tuklasin natin ang [`janitor package`](../../../../../../2-Regression/3-Linear/solution/R/github.com/sfirke/janitor) na nagbibigay ng mga simpleng function para sa pagsusuri at paglilinis ng maruming datos. Halimbawa, tingnan natin ang mga pangalan ng column para sa ating datos:\n"
+ ],
+ "metadata": {
+ "id": "xcNxM70EtJjb"
+ }
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "source": [
+ "# Return column names\n",
+ "pumpkins %>% \n",
+ " names()"
+ ],
+ "outputs": [],
+ "metadata": {
+ "id": "5XtpaIigtPfW"
+ }
+ },
+ {
+ "cell_type": "markdown",
+ "source": [
+ "🤔 Kaya pa nating pagbutihin. Gawin nating `friendR` ang mga pangalan ng column sa pamamagitan ng pag-convert ng mga ito sa [snake_case](https://en.wikipedia.org/wiki/Snake_case) na convention gamit ang `janitor::clean_names`. Para malaman ang higit pa tungkol sa function na ito: `?clean_names`\n"
+ ],
+ "metadata": {
+ "id": "IbIqrMINtSHe"
+ }
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "source": [
+ "# Clean names to the snake_case convention\n",
+ "pumpkins <- pumpkins %>% \n",
+ " clean_names(case = \"snake\")\n",
+ "\n",
+ "# Return column names\n",
+ "pumpkins %>% \n",
+ " names()"
+ ],
+ "outputs": [],
+ "metadata": {
+ "id": "a2uYvclYtWvX"
+ }
+ },
+ {
+ "cell_type": "markdown",
+ "source": [
+ "Maraming salamat, tidyR 🧹! Ngayon, sumayaw tayo kasama ang data gamit ang `dplyr` tulad ng sa nakaraang aralin! 💃\n"
+ ],
+ "metadata": {
+ "id": "HfhnuzDDtaDd"
+ }
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "source": [
+ "# Select desired columns\n",
+ "pumpkins <- pumpkins %>% \n",
+ " select(variety, city_name, package, low_price, high_price, date)\n",
+ "\n",
+ "\n",
+ "\n",
+ "# Extract the month from the dates to a new column\n",
+ "pumpkins <- pumpkins %>%\n",
+ " mutate(date = mdy(date),\n",
+ " month = month(date)) %>% \n",
+ " select(-date)\n",
+ "\n",
+ "\n",
+ "\n",
+ "# Create a new column for average Price\n",
+ "pumpkins <- pumpkins %>% \n",
+ " mutate(price = (low_price + high_price)/2)\n",
+ "\n",
+ "\n",
+ "# Retain only pumpkins with the string \"bushel\"\n",
+ "new_pumpkins <- pumpkins %>% \n",
+ " filter(str_detect(string = package, pattern = \"bushel\"))\n",
+ "\n",
+ "\n",
+ "# Normalize the pricing so that you show the pricing per bushel, not per 1 1/9 or 1/2 bushel\n",
+ "new_pumpkins <- new_pumpkins %>% \n",
+ " mutate(price = case_when(\n",
+ " str_detect(package, \"1 1/9\") ~ price/(1.1),\n",
+ " str_detect(package, \"1/2\") ~ price*2,\n",
+ " TRUE ~ price))\n",
+ "\n",
+ "# Relocate column positions\n",
+ "new_pumpkins <- new_pumpkins %>% \n",
+ " relocate(month, .before = variety)\n",
+ "\n",
+ "\n",
+ "# Display the first 5 rows\n",
+ "new_pumpkins %>% \n",
+ " slice_head(n = 5)"
+ ],
+ "outputs": [],
+ "metadata": {
+ "id": "X0wU3gQvtd9f"
+ }
+ },
+ {
+ "cell_type": "markdown",
+ "source": [
+ "Magaling!👌 Ngayon ay mayroon ka nang malinis at maayos na data set na maaari mong gamitin para bumuo ng bago mong regression model!\n",
+ "\n",
+ "Gusto mo bang gumawa ng scatter plot?\n"
+ ],
+ "metadata": {
+ "id": "UpaIwaxqth82"
+ }
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "source": [
+ "# Set theme\n",
+ "theme_set(theme_light())\n",
+ "\n",
+ "# Make a scatter plot of month and price\n",
+ "new_pumpkins %>% \n",
+ " ggplot(mapping = aes(x = month, y = price)) +\n",
+ " geom_point(size = 1.6)\n"
+ ],
+ "outputs": [],
+ "metadata": {
+ "id": "DXgU-j37tl5K"
+ }
+ },
+ {
+ "cell_type": "markdown",
+ "source": [
+ "Ang scatter plot ay nagpapaalala sa atin na mayroon lamang tayong datos ng buwan mula Agosto hanggang Disyembre. Malamang kailangan natin ng mas maraming datos upang makagawa ng mga konklusyon sa isang linear na paraan.\n",
+ "\n",
+ "Balikan natin ang ating modelling data:\n"
+ ],
+ "metadata": {
+ "id": "Ve64wVbwtobI"
+ }
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "source": [
+ "# Display first 5 rows\n",
+ "new_pumpkins %>% \n",
+ " slice_head(n = 5)"
+ ],
+ "outputs": [],
+ "metadata": {
+ "id": "HFQX2ng1tuSJ"
+ }
+ },
+ {
+ "cell_type": "markdown",
+ "source": [
+ "Paano kung gusto nating hulaan ang `price` ng isang kalabasa batay sa mga column na `city` o `package` na may uri na character? O mas simple pa, paano kaya natin mahahanap ang correlation (na nangangailangan ng parehong input na numeric) sa pagitan ng, halimbawa, `package` at `price`? 🤷🤷\n",
+ "\n",
+ "Mas mahusay gumana ang mga machine learning model kapag ang mga feature ay nasa numeric na anyo kaysa sa text values, kaya karaniwan mong kailangang i-convert ang mga categorical feature sa numeric na representasyon.\n",
+ "\n",
+ "Ibig sabihin nito, kailangan nating maghanap ng paraan upang i-reformat ang ating mga predictor upang mas madali itong magamit ng isang modelo nang epektibo, isang proseso na tinatawag na `feature engineering`.\n"
+ ],
+ "metadata": {
+ "id": "7hsHoxsStyjJ"
+ }
+ },
+ {
+ "cell_type": "markdown",
+ "source": [
+ "## 3. Pagpoproseso ng datos para sa pagmomodelo gamit ang recipes 👩🍳👨🍳\n",
+ "\n",
+ "Ang mga aktibidad na nagre-reformat ng mga halaga ng predictor upang mas maging madali itong magamit ng isang modelo ay tinatawag na `feature engineering`.\n",
+ "\n",
+ "Iba't ibang modelo ang may iba't ibang pangangailangan sa preprocessing. Halimbawa, ang least squares ay nangangailangan ng `encoding categorical variables` tulad ng buwan, variety, at city_name. Ito ay simpleng proseso ng `pagsasalin` ng isang column na may `categorical values` sa isa o higit pang `numeric columns` na pumapalit sa orihinal.\n",
+ "\n",
+ "Halimbawa, isipin na ang iyong datos ay may sumusunod na categorical feature:\n",
+ "\n",
+ "| lungsod |\n",
+ "|:----------:|\n",
+ "| Denver |\n",
+ "| Nairobi |\n",
+ "| Tokyo |\n",
+ "\n",
+ "Maaari mong gamitin ang *ordinal encoding* upang palitan ang bawat kategorya ng natatanging integer value, tulad nito:\n",
+ "\n",
+ "| lungsod |\n",
+ "|:-------:|\n",
+ "| 0 |\n",
+ "| 1 |\n",
+ "| 2 |\n",
+ "\n",
+ "At iyan ang gagawin natin sa ating datos!\n",
+ "\n",
+ "Sa seksyong ito, susuriin natin ang isa pang kamangha-manghang package mula sa Tidymodels: [recipes](https://tidymodels.github.io/recipes/) - na idinisenyo upang tulungan kang i-preprocess ang iyong datos **bago** i-train ang iyong modelo. Sa pinakapundasyon nito, ang recipe ay isang object na nagtatakda kung anong mga hakbang ang dapat gawin sa isang data set upang maihanda ito para sa pagmomodelo.\n",
+ "\n",
+ "Ngayon, gumawa tayo ng recipe na naghahanda sa ating datos para sa pagmomodelo sa pamamagitan ng pagpapalit ng natatanging integer para sa lahat ng obserbasyon sa mga predictor columns:\n"
+ ],
+ "metadata": {
+ "id": "AD5kQbcvt3Xl"
+ }
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "source": [
+ "# Specify a recipe\n",
+ "pumpkins_recipe <- recipe(price ~ ., data = new_pumpkins) %>% \n",
+ " step_integer(all_predictors(), zero_based = TRUE)\n",
+ "\n",
+ "\n",
+ "# Print out the recipe\n",
+ "pumpkins_recipe"
+ ],
+ "outputs": [],
+ "metadata": {
+ "id": "BNaFKXfRt9TU"
+ }
+ },
+ {
+ "cell_type": "markdown",
+ "source": [
+ "Ang galing! 👏 Kakagawa lang natin ng ating unang recipe na tumutukoy sa isang resulta (price) at ang mga kaukulang predictors nito, at lahat ng predictor columns ay dapat i-encode bilang isang set ng mga integer 🙌! Tara't himayin natin ito nang mabilis:\n",
+ "\n",
+ "- Ang tawag sa `recipe()` gamit ang isang formula ay nagsasabi sa recipe ng *mga papel* ng mga variable gamit ang `new_pumpkins` na data bilang reference. Halimbawa, ang column na `price` ay naitalaga bilang isang `outcome` habang ang iba pang mga column ay naitalaga bilang mga `predictor`.\n",
+ "\n",
+ "- Ang `step_integer(all_predictors(), zero_based = TRUE)` ay tumutukoy na lahat ng predictors ay dapat ma-convert sa isang set ng mga integer na ang pagbilang ay magsisimula sa 0.\n",
+ "\n",
+ "Sigurado kaming iniisip mo na: \"Ang astig nito!! Pero paano kung kailangan kong tiyakin na ang mga recipe ay gumagana nang eksakto ayon sa inaasahan ko? 🤔\"\n",
+ "\n",
+ "Napakagandang tanong niyan! Ganito kasi, kapag na-define mo na ang iyong recipe, maaari mong tantyahin ang mga parameter na kinakailangan upang ma-preprocess ang data, at pagkatapos ay kunin ang na-proseso nang data. Karaniwan, hindi mo kailangang gawin ito kapag gumagamit ka ng Tidymodels (makikita natin ang normal na paraan sa ilang sandali-\\> `workflows`), pero maaaring maging kapaki-pakinabang ito kung gusto mong magsagawa ng sanity check para tiyakin na ang mga recipe ay gumagana ayon sa iyong inaasahan.\n",
+ "\n",
+ "Para diyan, kakailanganin mo ng dalawa pang pandiwa: `prep()` at `bake()` at gaya ng dati, ang ating mga kaibigang R mula kay [`Allison Horst`](https://github.com/allisonhorst/stats-illustrations) ay tutulong sa iyo upang mas maunawaan ito!\n",
+ "\n",
+ "
\n",
+ " \n",
+ " Artwork ni @allison_horst\n",
+ "\n",
+ "\n",
+ "\n"
+ ],
+ "metadata": {
+ "id": "KEiO0v7kuC9O"
+ }
+ },
+ {
+ "cell_type": "markdown",
+ "source": [
+ "[`prep()`](https://recipes.tidymodels.org/reference/prep.html): tinatantiya ang mga kinakailangang parameter mula sa isang training set na maaaring gamitin sa ibang mga data set. Halimbawa, para sa isang partikular na predictor column, aling obserbasyon ang itatalaga bilang integer 0 o 1 o 2 at iba pa.\n",
+ "\n",
+ "[`bake()`](https://recipes.tidymodels.org/reference/bake.html): ginagamit ang isang prepped recipe at ina-apply ang mga operasyon sa anumang data set.\n",
+ "\n",
+ "Sa madaling salita, mag-prep at bake tayo ng ating mga recipe upang masigurado na sa likod ng proseso, ang mga predictor column ay unang ie-encode bago mag-fit ng isang modelo.\n"
+ ],
+ "metadata": {
+ "id": "Q1xtzebuuTCP"
+ }
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "source": [
+ "# Prep the recipe\n",
+ "pumpkins_prep <- prep(pumpkins_recipe)\n",
+ "\n",
+ "# Bake the recipe to extract a preprocessed new_pumpkins data\n",
+ "baked_pumpkins <- bake(pumpkins_prep, new_data = NULL)\n",
+ "\n",
+ "# Print out the baked data set\n",
+ "baked_pumpkins %>% \n",
+ " slice_head(n = 10)"
+ ],
+ "outputs": [],
+ "metadata": {
+ "id": "FGBbJbP_uUUn"
+ }
+ },
+ {
+ "cell_type": "markdown",
+ "source": [
+ "Woo-hoo!🥳 Ang na-proseso na datos na `baked_pumpkins` ay may lahat ng mga predictor nito na naka-encode, na nagpapatunay na ang mga hakbang sa preprocessing na itinakda bilang ating recipe ay gumagana nang maayos. Mas mahirap itong basahin para sa iyo, ngunit mas madaling maintindihan ng Tidymodels! Maglaan ng oras upang alamin kung aling obserbasyon ang na-map sa isang kaukulang integer.\n",
+ "\n",
+ "Mahalaga ring banggitin na ang `baked_pumpkins` ay isang data frame na maaari nating gamitin para sa mga kalkulasyon.\n",
+ "\n",
+ "Halimbawa, subukan nating hanapin ang magandang ugnayan sa pagitan ng dalawang punto ng iyong datos upang posibleng makabuo ng isang mahusay na predictive model. Gagamitin natin ang function na `cor()` para dito. I-type ang `?cor()` upang malaman ang higit pa tungkol sa function.\n"
+ ],
+ "metadata": {
+ "id": "1dvP0LBUueAW"
+ }
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "source": [
+ "# Find the correlation between the city_name and the price\n",
+ "cor(baked_pumpkins$city_name, baked_pumpkins$price)\n",
+ "\n",
+ "# Find the correlation between the package and the price\n",
+ "cor(baked_pumpkins$package, baked_pumpkins$price)\n"
+ ],
+ "outputs": [],
+ "metadata": {
+ "id": "3bQzXCjFuiSV"
+ }
+ },
+ {
+ "cell_type": "markdown",
+ "source": [
+ "Tulad ng inaasahan, mahina ang ugnayan sa pagitan ng Lungsod at Presyo. Gayunpaman, mas may kaunting mas magandang ugnayan sa pagitan ng Package at ng Presyo nito. May lohika ito, tama ba? Karaniwan, mas malaki ang kahon ng produkto, mas mataas ang presyo.\n",
+ "\n",
+ "Habang nandito na rin tayo, subukan din nating i-visualize ang isang correlation matrix ng lahat ng mga column gamit ang `corrplot` package.\n"
+ ],
+ "metadata": {
+ "id": "BToPWbgjuoZw"
+ }
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "source": [
+ "# Load the corrplot package\n",
+ "library(corrplot)\n",
+ "\n",
+ "# Obtain correlation matrix\n",
+ "corr_mat <- cor(baked_pumpkins %>% \n",
+ " # Drop columns that are not really informative\n",
+ " select(-c(low_price, high_price)))\n",
+ "\n",
+ "# Make a correlation plot between the variables\n",
+ "corrplot(corr_mat, method = \"shade\", shade.col = NA, tl.col = \"black\", tl.srt = 45, addCoef.col = \"black\", cl.pos = \"n\", order = \"original\")"
+ ],
+ "outputs": [],
+ "metadata": {
+ "id": "ZwAL3ksmutVR"
+ }
+ },
+ {
+ "cell_type": "markdown",
+ "source": [
+ "🤩🤩 Mas maganda.\n",
+ "\n",
+ "Isang magandang tanong na maaaring itanong tungkol sa datos na ito ay: '`Anong presyo ang maaasahan ko para sa isang partikular na pumpkin package?`' Tara't simulan na natin!\n",
+ "\n",
+ "> Tandaan: Kapag **`bake()`** mo ang inihandang recipe na **`pumpkins_prep`** gamit ang **`new_data = NULL`**, makukuha mo ang naprosesong (i.e. encoded) training data. Kung mayroon kang ibang data set, halimbawa isang test set, at nais mong makita kung paano ito ipo-proseso ng recipe, kailangan mo lang i-bake ang **`pumpkins_prep`** gamit ang **`new_data = test_set`**\n",
+ "\n",
+ "## 4. Gumawa ng linear regression model\n",
+ "\n",
+ "
\n",
+ " \n",
+ " Infographic ni Dasani Madipalli\n",
+ "\n",
+ "\n",
+ "\n"
+ ],
+ "metadata": {
+ "id": "YqXjLuWavNxW"
+ }
+ },
+ {
+ "cell_type": "markdown",
+ "source": [
+ "Ngayon na nakagawa na tayo ng recipe at nakumpirma na ang data ay maayos na ma-preprocess, oras na para bumuo ng regression model upang sagutin ang tanong: `Ano ang inaasahang presyo ng isang partikular na pumpkin package?`\n",
+ "\n",
+ "#### Mag-train ng linear regression model gamit ang training set\n",
+ "\n",
+ "Tulad ng maaaring napansin mo, ang column na *price* ang `outcome` variable habang ang column na *package* ang `predictor` variable.\n",
+ "\n",
+ "Para magawa ito, hahatiin muna natin ang data kung saan 80% ay mapupunta sa training set at 20% sa test set. Pagkatapos, magde-define tayo ng recipe na mag-e-encode sa predictor column bilang isang set ng integers, at magtatayo ng model specification. Hindi natin i-prep at i-bake ang ating recipe dahil alam na natin na maayos nitong ma-preprocess ang data tulad ng inaasahan.\n"
+ ],
+ "metadata": {
+ "id": "Pq0bSzCevW-h"
+ }
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "source": [
+ "set.seed(2056)\n",
+ "# Split the data into training and test sets\n",
+ "pumpkins_split <- new_pumpkins %>% \n",
+ " initial_split(prop = 0.8)\n",
+ "\n",
+ "\n",
+ "# Extract training and test data\n",
+ "pumpkins_train <- training(pumpkins_split)\n",
+ "pumpkins_test <- testing(pumpkins_split)\n",
+ "\n",
+ "\n",
+ "\n",
+ "# Create a recipe for preprocessing the data\n",
+ "lm_pumpkins_recipe <- recipe(price ~ package, data = pumpkins_train) %>% \n",
+ " step_integer(all_predictors(), zero_based = TRUE)\n",
+ "\n",
+ "\n",
+ "\n",
+ "# Create a linear model specification\n",
+ "lm_spec <- linear_reg() %>% \n",
+ " set_engine(\"lm\") %>% \n",
+ " set_mode(\"regression\")"
+ ],
+ "outputs": [],
+ "metadata": {
+ "id": "CyoEh_wuvcLv"
+ }
+ },
+ {
+ "cell_type": "markdown",
+ "source": [
+ "Magaling! Ngayon na mayroon na tayong recipe at model specification, kailangan nating maghanap ng paraan para pagsamahin ang mga ito sa isang object na unang magpoproseso ng data (prep+bake sa likod ng eksena), i-fit ang model sa preprocessed na data, at magbigay-daan din para sa mga posibleng post-processing na aktibidad. Paano 'yan para sa kapayapaan ng isip mo!🤩\n",
+ "\n",
+ "Sa Tidymodels, ang maginhawang object na ito ay tinatawag na [`workflow`](https://workflows.tidymodels.org/) at maginhawang naglalaman ng iyong mga modeling components! Ito ang tinatawag nating *pipelines* sa *Python*.\n",
+ "\n",
+ "Kaya't pagsamahin na natin ang lahat sa isang workflow!📦\n"
+ ],
+ "metadata": {
+ "id": "G3zF_3DqviFJ"
+ }
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "source": [
+ "# Hold modelling components in a workflow\n",
+ "lm_wf <- workflow() %>% \n",
+ " add_recipe(lm_pumpkins_recipe) %>% \n",
+ " add_model(lm_spec)\n",
+ "\n",
+ "# Print out the workflow\n",
+ "lm_wf"
+ ],
+ "outputs": [],
+ "metadata": {
+ "id": "T3olroU3v-WX"
+ }
+ },
+ {
+ "cell_type": "markdown",
+ "source": [
+ "Kasama na rin, ang isang workflow ay maaaring iangkop o sanayin sa halos parehong paraan tulad ng isang modelo.\n"
+ ],
+ "metadata": {
+ "id": "zd1A5tgOwEPX"
+ }
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "source": [
+ "# Train the model\n",
+ "lm_wf_fit <- lm_wf %>% \n",
+ " fit(data = pumpkins_train)\n",
+ "\n",
+ "# Print the model coefficients learned \n",
+ "lm_wf_fit"
+ ],
+ "outputs": [],
+ "metadata": {
+ "id": "NhJagFumwFHf"
+ }
+ },
+ {
+ "cell_type": "markdown",
+ "source": [
+ "Mula sa output ng modelo, makikita natin ang mga coefficients na natutunan sa panahon ng training. Kinakatawan ng mga ito ang coefficients ng linya ng pinakamahusay na akma na nagbibigay sa atin ng pinakamababang kabuuang error sa pagitan ng aktwal at hinulaang variable.\n",
+ "\n",
+ "#### Suriin ang performance ng modelo gamit ang test set\n",
+ "\n",
+ "Panahon na para makita kung paano nag-perform ang modelo 📏! Paano natin ito gagawin?\n",
+ "\n",
+ "Ngayon na na-train na natin ang modelo, magagamit natin ito upang gumawa ng mga prediksyon para sa `test_set` gamit ang `parsnip::predict()`. Pagkatapos, maikukumpara natin ang mga prediksyon na ito sa aktwal na mga halaga ng label upang masuri kung gaano kahusay (o hindi!) gumagana ang modelo.\n",
+ "\n",
+ "Magsimula tayo sa paggawa ng mga prediksyon para sa test set at pagkatapos ay i-bind ang mga column sa test set.\n"
+ ],
+ "metadata": {
+ "id": "_4QkGtBTwItF"
+ }
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "source": [
+ "# Make predictions for the test set\n",
+ "predictions <- lm_wf_fit %>% \n",
+ " predict(new_data = pumpkins_test)\n",
+ "\n",
+ "\n",
+ "# Bind predictions to the test set\n",
+ "lm_results <- pumpkins_test %>% \n",
+ " select(c(package, price)) %>% \n",
+ " bind_cols(predictions)\n",
+ "\n",
+ "\n",
+ "# Print the first ten rows of the tibble\n",
+ "lm_results %>% \n",
+ " slice_head(n = 10)"
+ ],
+ "outputs": [],
+ "metadata": {
+ "id": "UFZzTG0gwTs9"
+ }
+ },
+ {
+ "cell_type": "markdown",
+ "source": [
+ "Oo, nakapagsanay ka na ng isang modelo at nagamit ito para gumawa ng mga prediksyon! 🔮 Maganda ba ito? Suriin natin ang performance ng modelo!\n",
+ "\n",
+ "Sa Tidymodels, ginagawa natin ito gamit ang `yardstick::metrics()`! Para sa linear regression, mag-focus tayo sa mga sumusunod na metrics:\n",
+ "\n",
+ "- `Root Mean Square Error (RMSE)`: Ang square root ng [MSE](https://en.wikipedia.org/wiki/Mean_squared_error). Nagbibigay ito ng isang absolute na sukatan sa parehong unit ng label (sa kasong ito, ang presyo ng kalabasa). Mas maliit ang halaga, mas maganda ang modelo (sa simpleng paliwanag, ito ang average na halaga kung gaano kalayo ang mga prediksyon mula sa aktwal na presyo!).\n",
+ "\n",
+ "- `Coefficient of Determination (karaniwang kilala bilang R-squared o R2)`: Isang relative na sukatan kung saan mas mataas ang halaga, mas maganda ang pagkakaangkop ng modelo. Sa esensya, ipinapakita ng metric na ito kung gaano karaming bahagi ng variance sa pagitan ng mga prediksyon at aktwal na halaga ng label ang kayang ipaliwanag ng modelo.\n"
+ ],
+ "metadata": {
+ "id": "0A5MjzM7wW9M"
+ }
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "source": [
+ "# Evaluate performance of linear regression\n",
+ "metrics(data = lm_results,\n",
+ " truth = price,\n",
+ " estimate = .pred)"
+ ],
+ "outputs": [],
+ "metadata": {
+ "id": "reJ0UIhQwcEH"
+ }
+ },
+ {
+ "cell_type": "markdown",
+ "source": [
+ "Narito ang performance ng modelo. Tingnan natin kung makakakuha tayo ng mas malinaw na indikasyon sa pamamagitan ng pag-visualize ng scatter plot ng package at presyo, pagkatapos ay gamitin ang mga prediksyon upang mag-overlay ng linya ng pinakamahusay na akma.\n",
+ "\n",
+ "Ibig sabihin nito, kailangan nating ihanda at i-proseso ang test set upang ma-encode ang package column, pagkatapos ay pagsamahin ito sa mga prediksyon na ginawa ng ating modelo.\n"
+ ],
+ "metadata": {
+ "id": "fdgjzjkBwfWt"
+ }
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "source": [
+ "# Encode package column\n",
+ "package_encode <- lm_pumpkins_recipe %>% \n",
+ " prep() %>% \n",
+ " bake(new_data = pumpkins_test) %>% \n",
+ " select(package)\n",
+ "\n",
+ "\n",
+ "# Bind encoded package column to the results\n",
+ "lm_results <- lm_results %>% \n",
+ " bind_cols(package_encode %>% \n",
+ " rename(package_integer = package)) %>% \n",
+ " relocate(package_integer, .after = package)\n",
+ "\n",
+ "\n",
+ "# Print new results data frame\n",
+ "lm_results %>% \n",
+ " slice_head(n = 5)\n",
+ "\n",
+ "\n",
+ "# Make a scatter plot\n",
+ "lm_results %>% \n",
+ " ggplot(mapping = aes(x = package_integer, y = price)) +\n",
+ " geom_point(size = 1.6) +\n",
+ " # Overlay a line of best fit\n",
+ " geom_line(aes(y = .pred), color = \"orange\", size = 1.2) +\n",
+ " xlab(\"package\")\n",
+ " \n"
+ ],
+ "outputs": [],
+ "metadata": {
+ "id": "R0nw719lwkHE"
+ }
+ },
+ {
+ "cell_type": "markdown",
+ "source": [
+ "Mahusay! Tulad ng nakikita mo, ang linear regression model ay hindi masyadong mahusay sa pag-generalize ng relasyon sa pagitan ng isang pakete at ng kaukulang presyo nito.\n",
+ "\n",
+ "🎃 Binabati kita, nakagawa ka ng isang modelong makakatulong sa pag-predict ng presyo ng ilang uri ng kalabasa. Ang iyong pumpkin patch para sa holiday ay magiging maganda. Pero malamang na makakagawa ka pa ng mas mahusay na modelo!\n",
+ "\n",
+ "## 5. Gumawa ng polynomial regression model\n",
+ "\n",
+ "
\n",
+ " \n",
+ " Infographic ni Dasani Madipalli\n",
+ "\n",
+ "\n",
+ "\n"
+ ],
+ "metadata": {
+ "id": "HOCqJXLTwtWI"
+ }
+ },
+ {
+ "cell_type": "markdown",
+ "source": [
+ "Minsan, ang ating datos ay maaaring walang linear na relasyon, ngunit nais pa rin nating mag-predict ng resulta. Ang polynomial regression ay makakatulong sa atin na gumawa ng prediksyon para sa mas kumplikadong non-linear na relasyon.\n",
+ "\n",
+ "Halimbawa, tingnan ang relasyon sa pagitan ng package at presyo sa ating data set ng kalabasa. Bagamat minsan may linear na relasyon sa pagitan ng mga variable - mas malaki ang kalabasa sa volume, mas mataas ang presyo - minsan ang mga relasyong ito ay hindi maaaring i-plot bilang isang eroplano o tuwid na linya.\n",
+ "\n",
+ "> ✅ Narito ang [ilang karagdagang halimbawa](https://online.stat.psu.edu/stat501/lesson/9/9.8) ng datos na maaaring gumamit ng polynomial regression\n",
+ ">\n",
+ "> Tingnan muli ang relasyon sa pagitan ng Variety at Price sa nakaraang plot. Mukha bang ang scatterplot na ito ay dapat talagang suriin gamit ang tuwid na linya? Marahil hindi. Sa ganitong kaso, maaari mong subukan ang polynomial regression.\n",
+ ">\n",
+ "> ✅ Ang mga polynomial ay mga matematikal na ekspresyon na maaaring binubuo ng isa o higit pang mga variable at coefficients\n",
+ "\n",
+ "#### Mag-train ng polynomial regression model gamit ang training set\n",
+ "\n",
+ "Ang polynomial regression ay lumilikha ng *kurbadong linya* upang mas maayos na mag-fit sa nonlinear na datos.\n",
+ "\n",
+ "Tingnan natin kung ang isang polynomial model ay mas mahusay sa paggawa ng prediksyon. Susundin natin ang halos parehong proseso tulad ng ginawa natin dati:\n",
+ "\n",
+ "- Gumawa ng recipe na nagtatakda ng mga hakbang sa preprocessing na dapat isagawa sa ating datos upang maihanda ito para sa pagmo-modelo, halimbawa: pag-encode ng mga predictors at pagkalkula ng mga polynomial ng degree *n*\n",
+ "\n",
+ "- Bumuo ng model specification\n",
+ "\n",
+ "- I-bundle ang recipe at model specification sa isang workflow\n",
+ "\n",
+ "- Gumawa ng model sa pamamagitan ng pag-fit sa workflow\n",
+ "\n",
+ "- Suriin kung gaano kahusay ang performance ng model sa test data\n",
+ "\n",
+ "Simulan na natin!\n"
+ ],
+ "metadata": {
+ "id": "VcEIpRV9wzYr"
+ }
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "source": [
+ "# Specify a recipe\r\n",
+ "poly_pumpkins_recipe <-\r\n",
+ " recipe(price ~ package, data = pumpkins_train) %>%\r\n",
+ " step_integer(all_predictors(), zero_based = TRUE) %>% \r\n",
+ " step_poly(all_predictors(), degree = 4)\r\n",
+ "\r\n",
+ "\r\n",
+ "# Create a model specification\r\n",
+ "poly_spec <- linear_reg() %>% \r\n",
+ " set_engine(\"lm\") %>% \r\n",
+ " set_mode(\"regression\")\r\n",
+ "\r\n",
+ "\r\n",
+ "# Bundle recipe and model spec into a workflow\r\n",
+ "poly_wf <- workflow() %>% \r\n",
+ " add_recipe(poly_pumpkins_recipe) %>% \r\n",
+ " add_model(poly_spec)\r\n",
+ "\r\n",
+ "\r\n",
+ "# Create a model\r\n",
+ "poly_wf_fit <- poly_wf %>% \r\n",
+ " fit(data = pumpkins_train)\r\n",
+ "\r\n",
+ "\r\n",
+ "# Print learned model coefficients\r\n",
+ "poly_wf_fit\r\n",
+ "\r\n",
+ " "
+ ],
+ "outputs": [],
+ "metadata": {
+ "id": "63n_YyRXw3CC"
+ }
+ },
+ {
+ "cell_type": "markdown",
+ "source": [
+ "#### Suriin ang pagganap ng modelo\n",
+ "\n",
+ "👏👏 Nakagawa ka ng isang polynomial na modelo, ngayon gumawa tayo ng mga prediksyon sa test set!\n"
+ ],
+ "metadata": {
+ "id": "-LHZtztSxDP0"
+ }
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "source": [
+ "# Make price predictions on test data\r\n",
+ "poly_results <- poly_wf_fit %>% predict(new_data = pumpkins_test) %>% \r\n",
+ " bind_cols(pumpkins_test %>% select(c(package, price))) %>% \r\n",
+ " relocate(.pred, .after = last_col())\r\n",
+ "\r\n",
+ "\r\n",
+ "# Print the results\r\n",
+ "poly_results %>% \r\n",
+ " slice_head(n = 10)"
+ ],
+ "outputs": [],
+ "metadata": {
+ "id": "YUFpQ_dKxJGx"
+ }
+ },
+ {
+ "cell_type": "markdown",
+ "source": [
+ "Woo-hoo, suriin natin kung paano nag-perform ang modelo sa test_set gamit ang `yardstick::metrics()`.\n"
+ ],
+ "metadata": {
+ "id": "qxdyj86bxNGZ"
+ }
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "source": [
+ "metrics(data = poly_results, truth = price, estimate = .pred)"
+ ],
+ "outputs": [],
+ "metadata": {
+ "id": "8AW5ltkBxXDm"
+ }
+ },
+ {
+ "cell_type": "markdown",
+ "source": [
+ "🤩🤩 Mas mahusay na pagganap.\n",
+ "\n",
+ "Ang `rmse` ay bumaba mula sa humigit-kumulang 7 patungo sa humigit-kumulang 3, na nagpapahiwatig ng mas mababang error sa pagitan ng aktwal na presyo at ng tinatayang presyo. Maaari mo itong *maluwag* na ipakahulugan na sa karaniwan, ang maling mga prediksyon ay nagkakamali ng humigit-kumulang \\$3. Ang `rsq` ay tumaas mula sa humigit-kumulang 0.4 patungo sa 0.8.\n",
+ "\n",
+ "Lahat ng mga sukatan na ito ay nagpapakita na ang polynomial model ay mas mahusay ang pagganap kumpara sa linear model. Magaling!\n",
+ "\n",
+ "Tingnan natin kung maaari natin itong maipakita sa biswal!\n"
+ ],
+ "metadata": {
+ "id": "6gLHNZDwxYaS"
+ }
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "source": [
+ "# Bind encoded package column to the results\r\n",
+ "poly_results <- poly_results %>% \r\n",
+ " bind_cols(package_encode %>% \r\n",
+ " rename(package_integer = package)) %>% \r\n",
+ " relocate(package_integer, .after = package)\r\n",
+ "\r\n",
+ "\r\n",
+ "# Print new results data frame\r\n",
+ "poly_results %>% \r\n",
+ " slice_head(n = 5)\r\n",
+ "\r\n",
+ "\r\n",
+ "# Make a scatter plot\r\n",
+ "poly_results %>% \r\n",
+ " ggplot(mapping = aes(x = package_integer, y = price)) +\r\n",
+ " geom_point(size = 1.6) +\r\n",
+ " # Overlay a line of best fit\r\n",
+ " geom_line(aes(y = .pred), color = \"midnightblue\", size = 1.2) +\r\n",
+ " xlab(\"package\")\r\n"
+ ],
+ "outputs": [],
+ "metadata": {
+ "id": "A83U16frxdF1"
+ }
+ },
+ {
+ "cell_type": "markdown",
+ "source": [
+ "Makikita mo ang isang kurbang linya na mas akma sa iyong datos! 🤩\n",
+ "\n",
+ "Mas mapapakinis mo pa ito sa pamamagitan ng pagpapasa ng isang polynomial na formula sa `geom_smooth` tulad nito:\n"
+ ],
+ "metadata": {
+ "id": "4U-7aHOVxlGU"
+ }
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "source": [
+ "# Make a scatter plot\r\n",
+ "poly_results %>% \r\n",
+ " ggplot(mapping = aes(x = package_integer, y = price)) +\r\n",
+ " geom_point(size = 1.6) +\r\n",
+ " # Overlay a line of best fit\r\n",
+ " geom_smooth(method = lm, formula = y ~ poly(x, degree = 4), color = \"midnightblue\", size = 1.2, se = FALSE) +\r\n",
+ " xlab(\"package\")"
+ ],
+ "outputs": [],
+ "metadata": {
+ "id": "5vzNT0Uexm-w"
+ }
+ },
+ {
+ "cell_type": "markdown",
+ "source": [
+ "Parang isang makinis na kurba!🤩\n",
+ "\n",
+ "Narito kung paano ka gagawa ng bagong prediksyon:\n"
+ ],
+ "metadata": {
+ "id": "v9u-wwyLxq4G"
+ }
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "source": [
+ "# Make a hypothetical data frame\r\n",
+ "hypo_tibble <- tibble(package = \"bushel baskets\")\r\n",
+ "\r\n",
+ "# Make predictions using linear model\r\n",
+ "lm_pred <- lm_wf_fit %>% predict(new_data = hypo_tibble)\r\n",
+ "\r\n",
+ "# Make predictions using polynomial model\r\n",
+ "poly_pred <- poly_wf_fit %>% predict(new_data = hypo_tibble)\r\n",
+ "\r\n",
+ "# Return predictions in a list\r\n",
+ "list(\"linear model prediction\" = lm_pred, \r\n",
+ " \"polynomial model prediction\" = poly_pred)\r\n"
+ ],
+ "outputs": [],
+ "metadata": {
+ "id": "jRPSyfQGxuQv"
+ }
+ },
+ {
+ "cell_type": "markdown",
+ "source": [
+ "Ang `polynomial model` na prediksyon ay may katuturan, base sa scatter plots ng `price` at `package`! At, kung mas maganda ang modelong ito kaysa sa nauna, base sa parehong datos, kailangan mong maglaan ng budget para sa mas mahal na mga kalabasa!\n",
+ "\n",
+ "🏆 Magaling! Nakagawa ka ng dalawang regression models sa isang aralin. Sa huling bahagi ng regression, matututo ka tungkol sa logistic regression para matukoy ang mga kategorya.\n",
+ "\n",
+ "## **🚀Hamunin**\n",
+ "\n",
+ "Subukan ang iba't ibang variables sa notebook na ito upang makita kung paano nauugnay ang correlation sa accuracy ng modelo.\n",
+ "\n",
+ "## [**Post-lecture quiz**](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/14/)\n",
+ "\n",
+ "## **Review at Pag-aaral ng Sarili**\n",
+ "\n",
+ "Sa araling ito, natutunan natin ang tungkol sa Linear Regression. Mayroon pang ibang mahahalagang uri ng Regression. Basahin ang tungkol sa Stepwise, Ridge, Lasso, at Elasticnet techniques. Isang magandang kurso na maaaring pag-aralan upang matuto pa ay ang [Stanford Statistical Learning course](https://online.stanford.edu/courses/sohs-ystatslearning-statistical-learning).\n",
+ "\n",
+ "Kung nais mong matuto pa kung paano gamitin ang kamangha-manghang Tidymodels framework, pakitingnan ang mga sumusunod na resources:\n",
+ "\n",
+ "- Website ng Tidymodels: [Simulan ang paggamit ng Tidymodels](https://www.tidymodels.org/start/)\n",
+ "\n",
+ "- Max Kuhn at Julia Silge, [*Tidy Modeling with R*](https://www.tmwr.org/)*.*\n",
+ "\n",
+ "###### **SALAMAT SA:**\n",
+ "\n",
+ "[Allison Horst](https://twitter.com/allison_horst?lang=en) para sa paglikha ng mga kamangha-manghang ilustrasyon na ginagawang mas welcoming at engaging ang R. Makikita ang higit pang mga ilustrasyon sa kanyang [gallery](https://www.google.com/url?q=https://github.com/allisonhorst/stats-illustrations&sa=D&source=editors&ust=1626380772530000&usg=AOvVaw3zcfyCizFQZpkSLzxiiQEM).\n"
+ ],
+ "metadata": {
+ "id": "8zOLOWqMxzk5"
+ }
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "\n---\n\n**Paunawa**: \nAng dokumentong ito ay isinalin gamit ang AI translation service na [Co-op Translator](https://github.com/Azure/co-op-translator). Bagama't sinisikap naming maging tumpak, pakitandaan na ang mga awtomatikong pagsasalin ay maaaring maglaman ng mga pagkakamali o hindi pagkakatugma. Ang orihinal na dokumento sa kanyang katutubong wika ang dapat ituring na opisyal na sanggunian. Para sa mahalagang impormasyon, inirerekomenda ang propesyonal na pagsasalin ng tao. Hindi kami mananagot sa anumang hindi pagkakaunawaan o maling interpretasyon na dulot ng paggamit ng pagsasaling ito.\n"
+ ]
+ }
+ ]
+}
\ No newline at end of file
diff --git a/translations/tl/2-Regression/3-Linear/solution/notebook.ipynb b/translations/tl/2-Regression/3-Linear/solution/notebook.ipynb
new file mode 100644
index 000000000..e1fc6364a
--- /dev/null
+++ b/translations/tl/2-Regression/3-Linear/solution/notebook.ipynb
@@ -0,0 +1,1111 @@
+{
+ "cells": [
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "## Linear at Polynomial Regression para sa Pagpepresyo ng Kalabasa - Aralin 3\n",
+ "\n",
+ "I-load ang mga kinakailangang library at dataset. I-convert ang data sa isang dataframe na naglalaman ng subset ng data:\n",
+ "\n",
+ "- Kunin lamang ang mga kalabasa na may presyo batay sa bushel\n",
+ "- I-convert ang petsa sa buwan\n",
+ "- Kalkulahin ang presyo bilang average ng mataas at mababang presyo\n",
+ "- I-convert ang presyo upang ipakita ang pagpepresyo batay sa dami ng bushel\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 167,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "
\n",
+ "\n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
\n",
+ "
City Name
\n",
+ "
Type
\n",
+ "
Package
\n",
+ "
Variety
\n",
+ "
Sub Variety
\n",
+ "
Grade
\n",
+ "
Date
\n",
+ "
Low Price
\n",
+ "
High Price
\n",
+ "
Mostly Low
\n",
+ "
...
\n",
+ "
Unit of Sale
\n",
+ "
Quality
\n",
+ "
Condition
\n",
+ "
Appearance
\n",
+ "
Storage
\n",
+ "
Crop
\n",
+ "
Repack
\n",
+ "
Trans Mode
\n",
+ "
Unnamed: 24
\n",
+ "
Unnamed: 25
\n",
+ "
\n",
+ " \n",
+ " \n",
+ "
\n",
+ "
0
\n",
+ "
BALTIMORE
\n",
+ "
NaN
\n",
+ "
24 inch bins
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
4/29/17
\n",
+ "
270.0
\n",
+ "
280.0
\n",
+ "
270.0
\n",
+ "
...
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
E
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
\n",
+ "
\n",
+ "
1
\n",
+ "
BALTIMORE
\n",
+ "
NaN
\n",
+ "
24 inch bins
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
5/6/17
\n",
+ "
270.0
\n",
+ "
280.0
\n",
+ "
270.0
\n",
+ "
...
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
E
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
\n",
+ "
\n",
+ "
2
\n",
+ "
BALTIMORE
\n",
+ "
NaN
\n",
+ "
24 inch bins
\n",
+ "
HOWDEN TYPE
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
9/24/16
\n",
+ "
160.0
\n",
+ "
160.0
\n",
+ "
160.0
\n",
+ "
...
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
N
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
\n",
+ "
\n",
+ "
3
\n",
+ "
BALTIMORE
\n",
+ "
NaN
\n",
+ "
24 inch bins
\n",
+ "
HOWDEN TYPE
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
9/24/16
\n",
+ "
160.0
\n",
+ "
160.0
\n",
+ "
160.0
\n",
+ "
...
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
N
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
\n",
+ "
\n",
+ "
4
\n",
+ "
BALTIMORE
\n",
+ "
NaN
\n",
+ "
24 inch bins
\n",
+ "
HOWDEN TYPE
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
11/5/16
\n",
+ "
90.0
\n",
+ "
100.0
\n",
+ "
90.0
\n",
+ "
...
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
N
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
5 rows × 26 columns
\n",
+ "
"
+ ],
+ "text/plain": [
+ " City Name Type Package Variety Sub Variety Grade Date \\\n",
+ "0 BALTIMORE NaN 24 inch bins NaN NaN NaN 4/29/17 \n",
+ "1 BALTIMORE NaN 24 inch bins NaN NaN NaN 5/6/17 \n",
+ "2 BALTIMORE NaN 24 inch bins HOWDEN TYPE NaN NaN 9/24/16 \n",
+ "3 BALTIMORE NaN 24 inch bins HOWDEN TYPE NaN NaN 9/24/16 \n",
+ "4 BALTIMORE NaN 24 inch bins HOWDEN TYPE NaN NaN 11/5/16 \n",
+ "\n",
+ " Low Price High Price Mostly Low ... Unit of Sale Quality Condition \\\n",
+ "0 270.0 280.0 270.0 ... NaN NaN NaN \n",
+ "1 270.0 280.0 270.0 ... NaN NaN NaN \n",
+ "2 160.0 160.0 160.0 ... NaN NaN NaN \n",
+ "3 160.0 160.0 160.0 ... NaN NaN NaN \n",
+ "4 90.0 100.0 90.0 ... NaN NaN NaN \n",
+ "\n",
+ " Appearance Storage Crop Repack Trans Mode Unnamed: 24 Unnamed: 25 \n",
+ "0 NaN NaN NaN E NaN NaN NaN \n",
+ "1 NaN NaN NaN E NaN NaN NaN \n",
+ "2 NaN NaN NaN N NaN NaN NaN \n",
+ "3 NaN NaN NaN N NaN NaN NaN \n",
+ "4 NaN NaN NaN N NaN NaN NaN \n",
+ "\n",
+ "[5 rows x 26 columns]"
+ ]
+ },
+ "execution_count": 167,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "import pandas as pd\n",
+ "import matplotlib.pyplot as plt\n",
+ "import numpy as np\n",
+ "from datetime import datetime\n",
+ "\n",
+ "pumpkins = pd.read_csv('../../data/US-pumpkins.csv')\n",
+ "pumpkins.head()"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 168,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "
\n",
+ "\n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
\n",
+ "
Month
\n",
+ "
DayOfYear
\n",
+ "
Variety
\n",
+ "
City
\n",
+ "
Package
\n",
+ "
Low Price
\n",
+ "
High Price
\n",
+ "
Price
\n",
+ "
\n",
+ " \n",
+ " \n",
+ "
\n",
+ "
70
\n",
+ "
9
\n",
+ "
267
\n",
+ "
PIE TYPE
\n",
+ "
BALTIMORE
\n",
+ "
1 1/9 bushel cartons
\n",
+ "
15.0
\n",
+ "
15.0
\n",
+ "
13.636364
\n",
+ "
\n",
+ "
\n",
+ "
71
\n",
+ "
9
\n",
+ "
267
\n",
+ "
PIE TYPE
\n",
+ "
BALTIMORE
\n",
+ "
1 1/9 bushel cartons
\n",
+ "
18.0
\n",
+ "
18.0
\n",
+ "
16.363636
\n",
+ "
\n",
+ "
\n",
+ "
72
\n",
+ "
10
\n",
+ "
274
\n",
+ "
PIE TYPE
\n",
+ "
BALTIMORE
\n",
+ "
1 1/9 bushel cartons
\n",
+ "
18.0
\n",
+ "
18.0
\n",
+ "
16.363636
\n",
+ "
\n",
+ "
\n",
+ "
73
\n",
+ "
10
\n",
+ "
274
\n",
+ "
PIE TYPE
\n",
+ "
BALTIMORE
\n",
+ "
1 1/9 bushel cartons
\n",
+ "
17.0
\n",
+ "
17.0
\n",
+ "
15.454545
\n",
+ "
\n",
+ "
\n",
+ "
74
\n",
+ "
10
\n",
+ "
281
\n",
+ "
PIE TYPE
\n",
+ "
BALTIMORE
\n",
+ "
1 1/9 bushel cartons
\n",
+ "
15.0
\n",
+ "
15.0
\n",
+ "
13.636364
\n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ " Month DayOfYear Variety City Package Low Price \\\n",
+ "70 9 267 PIE TYPE BALTIMORE 1 1/9 bushel cartons 15.0 \n",
+ "71 9 267 PIE TYPE BALTIMORE 1 1/9 bushel cartons 18.0 \n",
+ "72 10 274 PIE TYPE BALTIMORE 1 1/9 bushel cartons 18.0 \n",
+ "73 10 274 PIE TYPE BALTIMORE 1 1/9 bushel cartons 17.0 \n",
+ "74 10 281 PIE TYPE BALTIMORE 1 1/9 bushel cartons 15.0 \n",
+ "\n",
+ " High Price Price \n",
+ "70 15.0 13.636364 \n",
+ "71 18.0 16.363636 \n",
+ "72 18.0 16.363636 \n",
+ "73 17.0 15.454545 \n",
+ "74 15.0 13.636364 "
+ ]
+ },
+ "execution_count": 168,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "pumpkins = pumpkins[pumpkins['Package'].str.contains('bushel', case=True, regex=True)]\n",
+ "\n",
+ "new_columns = ['Package', 'Variety', 'City Name', 'Month', 'Low Price', 'High Price', 'Date']\n",
+ "pumpkins = pumpkins.drop([c for c in pumpkins.columns if c not in new_columns], axis=1)\n",
+ "\n",
+ "price = (pumpkins['Low Price'] + pumpkins['High Price']) / 2\n",
+ "\n",
+ "month = pd.DatetimeIndex(pumpkins['Date']).month\n",
+ "day_of_year = pd.to_datetime(pumpkins['Date']).apply(lambda dt: (dt-datetime(dt.year,1,1)).days)\n",
+ "\n",
+ "new_pumpkins = pd.DataFrame(\n",
+ " {'Month': month, \n",
+ " 'DayOfYear' : day_of_year, \n",
+ " 'Variety': pumpkins['Variety'], \n",
+ " 'City': pumpkins['City Name'], \n",
+ " 'Package': pumpkins['Package'], \n",
+ " 'Low Price': pumpkins['Low Price'],\n",
+ " 'High Price': pumpkins['High Price'], \n",
+ " 'Price': price})\n",
+ "\n",
+ "new_pumpkins.loc[new_pumpkins['Package'].str.contains('1 1/9'), 'Price'] = price/1.1\n",
+ "new_pumpkins.loc[new_pumpkins['Package'].str.contains('1/2'), 'Price'] = price*2\n",
+ "\n",
+ "new_pumpkins.head()\n"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "Ang scatterplot ay nagpapaalala sa atin na mayroon lamang tayong datos mula Agosto hanggang Disyembre. Malamang na kailangan pa natin ng mas maraming datos upang makagawa ng mga konklusyon sa isang linyar na paraan.\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 169,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ ""
+ ]
+ },
+ "execution_count": 169,
+ "metadata": {},
+ "output_type": "execute_result"
+ },
+ {
+ "data": {
+ "image/png": "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",
+ "text/plain": [
+ "
"
+ ]
+ },
+ "metadata": {
+ "needs_background": "light"
+ },
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "plt.scatter(X_test,y_test)\n",
+ "plt.plot(X_test,pred)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "Ang slope ng linya ay maaaring matukoy mula sa mga coefficient ng linear regression:\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 178,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "(array([-0.01751876]), 21.133734359909326)"
+ ]
+ },
+ "execution_count": 178,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "lin_reg.coef_, lin_reg.intercept_"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": []
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 179,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "array([16.64893156])"
+ ]
+ },
+ "execution_count": 179,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "# Pumpkin price on programmer's day\n",
+ "\n",
+ "lin_reg.predict([[256]])"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "### Polynomial Regression\n",
+ "\n",
+ "Minsan, ang relasyon sa pagitan ng mga tampok at resulta ay likas na hindi linear. Halimbawa, maaaring mataas ang presyo ng kalabasa tuwing taglamig (mga buwan=1,2), pagkatapos ay bumaba sa tag-init (mga buwan=5-7), at pagkatapos ay tumaas muli. Hindi kayang mahanap ng linear regression ang relasyong ito nang tama.\n",
+ "\n",
+ "Sa ganitong kaso, maaari nating isaalang-alang ang pagdaragdag ng mga karagdagang tampok. Isang simpleng paraan ay ang paggamit ng mga polynomial mula sa mga input na tampok, na magreresulta sa **polynomial regression**. Sa Scikit Learn, maaari nating awtomatikong i-pre-compute ang mga polynomial na tampok gamit ang pipelines:\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 180,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "Mean error: 2.73 (17.0%)\n",
+ "Model determination: 0.07639977655280217\n"
+ ]
+ },
+ {
+ "data": {
+ "text/plain": [
+ "[]"
+ ]
+ },
+ "execution_count": 180,
+ "metadata": {},
+ "output_type": "execute_result"
+ },
+ {
+ "data": {
+ "image/png": "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",
+ "text/plain": [
+ "
"
+ ]
+ },
+ "metadata": {
+ "needs_background": "light"
+ },
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "from sklearn.preprocessing import PolynomialFeatures\n",
+ "from sklearn.pipeline import make_pipeline\n",
+ "\n",
+ "pipeline = make_pipeline(PolynomialFeatures(2), LinearRegression())\n",
+ "\n",
+ "pipeline.fit(X_train,y_train)\n",
+ "\n",
+ "pred = pipeline.predict(X_test)\n",
+ "\n",
+ "mse = np.sqrt(mean_squared_error(y_test,pred))\n",
+ "print(f'Mean error: {mse:3.3} ({mse/np.mean(pred)*100:3.3}%)')\n",
+ "\n",
+ "score = pipeline.score(X_train,y_train)\n",
+ "print('Model determination: ', score)\n",
+ "\n",
+ "plt.scatter(X_test,y_test)\n",
+ "plt.plot(sorted(X_test),pipeline.predict(sorted(X_test)))"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "### Pag-encode ng mga uri\n",
+ "\n",
+ "Sa ideal na mundo, nais nating magawang hulaan ang mga presyo para sa iba't ibang uri ng kalabasa gamit ang parehong modelo. Upang maisaalang-alang ang uri, kailangan muna nating i-convert ito sa numerikong anyo, o **i-encode**. Mayroong ilang mga paraan upang gawin ito:\n",
+ "\n",
+ "* Simpleng numerikong encoding na gagawa ng isang talahanayan ng iba't ibang uri, at pagkatapos ay papalitan ang pangalan ng uri ng isang index sa talahanayan na iyon. Hindi ito ang pinakamainam na ideya para sa linear regression, dahil isinasaalang-alang ng linear regression ang numerikong halaga ng index, at ang numerikong halaga ay malamang na hindi tumutugma nang numerikal sa presyo.\n",
+ "* One-hot encoding, na papalitan ang kolum na `Variety` ng 4 na magkakaibang kolum, isa para sa bawat uri, na maglalaman ng 1 kung ang kaukulang hilera ay kabilang sa ibinigay na uri, at 0 kung hindi.\n",
+ "\n",
+ "Ang code sa ibaba ay nagpapakita kung paano natin maaaring i-one-hot encode ang isang uri:\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 181,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "
\n",
+ "\n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
\n",
+ "
FAIRYTALE
\n",
+ "
MINIATURE
\n",
+ "
MIXED HEIRLOOM VARIETIES
\n",
+ "
PIE TYPE
\n",
+ "
\n",
+ " \n",
+ " \n",
+ "
\n",
+ "
70
\n",
+ "
0
\n",
+ "
0
\n",
+ "
0
\n",
+ "
1
\n",
+ "
\n",
+ "
\n",
+ "
71
\n",
+ "
0
\n",
+ "
0
\n",
+ "
0
\n",
+ "
1
\n",
+ "
\n",
+ "
\n",
+ "
72
\n",
+ "
0
\n",
+ "
0
\n",
+ "
0
\n",
+ "
1
\n",
+ "
\n",
+ "
\n",
+ "
73
\n",
+ "
0
\n",
+ "
0
\n",
+ "
0
\n",
+ "
1
\n",
+ "
\n",
+ "
\n",
+ "
74
\n",
+ "
0
\n",
+ "
0
\n",
+ "
0
\n",
+ "
1
\n",
+ "
\n",
+ "
\n",
+ "
...
\n",
+ "
...
\n",
+ "
...
\n",
+ "
...
\n",
+ "
...
\n",
+ "
\n",
+ "
\n",
+ "
1738
\n",
+ "
0
\n",
+ "
1
\n",
+ "
0
\n",
+ "
0
\n",
+ "
\n",
+ "
\n",
+ "
1739
\n",
+ "
0
\n",
+ "
1
\n",
+ "
0
\n",
+ "
0
\n",
+ "
\n",
+ "
\n",
+ "
1740
\n",
+ "
0
\n",
+ "
1
\n",
+ "
0
\n",
+ "
0
\n",
+ "
\n",
+ "
\n",
+ "
1741
\n",
+ "
0
\n",
+ "
1
\n",
+ "
0
\n",
+ "
0
\n",
+ "
\n",
+ "
\n",
+ "
1742
\n",
+ "
0
\n",
+ "
1
\n",
+ "
0
\n",
+ "
0
\n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
415 rows × 4 columns
\n",
+ "
"
+ ],
+ "text/plain": [
+ " FAIRYTALE MINIATURE MIXED HEIRLOOM VARIETIES PIE TYPE\n",
+ "70 0 0 0 1\n",
+ "71 0 0 0 1\n",
+ "72 0 0 0 1\n",
+ "73 0 0 0 1\n",
+ "74 0 0 0 1\n",
+ "... ... ... ... ...\n",
+ "1738 0 1 0 0\n",
+ "1739 0 1 0 0\n",
+ "1740 0 1 0 0\n",
+ "1741 0 1 0 0\n",
+ "1742 0 1 0 0\n",
+ "\n",
+ "[415 rows x 4 columns]"
+ ]
+ },
+ "execution_count": 181,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "pd.get_dummies(new_pumpkins['Variety'])"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "### Linear Regression sa Iba't Ibang Uri\n",
+ "\n",
+ "Gagamitin natin ngayon ang parehong code tulad ng nasa itaas, ngunit sa halip na `DayOfYear`, gagamitin natin ang ating one-hot-encoded na uri bilang input:\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 182,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "X = pd.get_dummies(new_pumpkins['Variety'])\n",
+ "y = new_pumpkins['Price']"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 183,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "Mean error: 5.24 (19.7%)\n",
+ "Model determination: 0.774085281105197\n"
+ ]
+ }
+ ],
+ "source": [
+ "def run_linear_regression(X,y):\n",
+ " X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0)\n",
+ " lin_reg = LinearRegression()\n",
+ " lin_reg.fit(X_train,y_train)\n",
+ "\n",
+ " pred = lin_reg.predict(X_test)\n",
+ "\n",
+ " mse = np.sqrt(mean_squared_error(y_test,pred))\n",
+ " print(f'Mean error: {mse:3.3} ({mse/np.mean(pred)*100:3.3}%)')\n",
+ "\n",
+ " score = lin_reg.score(X_train,y_train)\n",
+ " print('Model determination: ', score)\n",
+ "\n",
+ "run_linear_regression(X,y)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "Maaari rin nating subukang gumamit ng iba pang mga tampok sa parehong paraan, at pagsamahin ang mga ito sa mga numerikal na tampok, tulad ng `Month` o `DayOfYear`:\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 184,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "Mean error: 2.84 (10.5%)\n",
+ "Model determination: 0.9401096672643048\n"
+ ]
+ }
+ ],
+ "source": [
+ "X = pd.get_dummies(new_pumpkins['Variety']) \\\n",
+ " .join(new_pumpkins['Month']) \\\n",
+ " .join(pd.get_dummies(new_pumpkins['City'])) \\\n",
+ " .join(pd.get_dummies(new_pumpkins['Package']))\n",
+ "y = new_pumpkins['Price']\n",
+ "\n",
+ "run_linear_regression(X,y)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "### Polynomial Regression\n",
+ "\n",
+ "Ang polynomial regression ay maaari ring gamitin sa mga kategoryang tampok na naka-one-hot-encode. Ang code para sa pagsasanay ng polynomial regression ay halos pareho sa nakita natin sa itaas.\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 185,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "Mean error: 2.23 (8.25%)\n",
+ "Model determination: 0.9652870784724543\n"
+ ]
+ }
+ ],
+ "source": [
+ "from sklearn.preprocessing import PolynomialFeatures\n",
+ "from sklearn.pipeline import make_pipeline\n",
+ "\n",
+ "pipeline = make_pipeline(PolynomialFeatures(2), LinearRegression())\n",
+ "\n",
+ "X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0)\n",
+ "\n",
+ "pipeline.fit(X_train,y_train)\n",
+ "\n",
+ "pred = pipeline.predict(X_test)\n",
+ "\n",
+ "mse = np.sqrt(mean_squared_error(y_test,pred))\n",
+ "print(f'Mean error: {mse:3.3} ({mse/np.mean(pred)*100:3.3}%)')\n",
+ "\n",
+ "score = pipeline.score(X_train,y_train)\n",
+ "print('Model determination: ', score)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": []
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "\n---\n\n**Paunawa**: \nAng dokumentong ito ay isinalin gamit ang AI translation service na [Co-op Translator](https://github.com/Azure/co-op-translator). Bagama't sinisikap naming maging tumpak, pakitandaan na ang mga awtomatikong pagsasalin ay maaaring maglaman ng mga pagkakamali o hindi pagkakatugma. Ang orihinal na dokumento sa orihinal nitong wika ang dapat ituring na opisyal na sanggunian. Para sa mahalagang impormasyon, inirerekomenda ang propesyonal na pagsasalin ng tao. Hindi kami mananagot sa anumang hindi pagkakaunawaan o maling interpretasyon na maaaring magmula sa paggamit ng pagsasaling ito.\n"
+ ]
+ }
+ ],
+ "metadata": {
+ "interpreter": {
+ "hash": "86193a1ab0ba47eac1c69c1756090baa3b420b3eea7d4aafab8b85f8b312f0c5"
+ },
+ "kernelspec": {
+ "display_name": "Python 3.7.0 64-bit ('3.7')",
+ "language": "python",
+ "name": "python3"
+ },
+ "language_info": {
+ "codemirror_mode": {
+ "name": "ipython",
+ "version": 3
+ },
+ "file_extension": ".py",
+ "mimetype": "text/x-python",
+ "name": "python",
+ "nbconvert_exporter": "python",
+ "pygments_lexer": "ipython3",
+ "version": "3.9.5"
+ },
+ "metadata": {
+ "interpreter": {
+ "hash": "70b38d7a306a849643e446cd70466270a13445e5987dfa1344ef2b127438fa4d"
+ }
+ },
+ "orig_nbformat": 2,
+ "coopTranslator": {
+ "original_hash": "d77bd89ae7e79780c68c58bab91f13f8",
+ "translation_date": "2025-08-29T14:42:08+00:00",
+ "source_file": "2-Regression/3-Linear/solution/notebook.ipynb",
+ "language_code": "tl"
+ }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 2
+}
\ No newline at end of file
diff --git a/translations/tl/2-Regression/4-Logistic/README.md b/translations/tl/2-Regression/4-Logistic/README.md
new file mode 100644
index 000000000..ebde8b3a4
--- /dev/null
+++ b/translations/tl/2-Regression/4-Logistic/README.md
@@ -0,0 +1,418 @@
+
+# Logistic regression para sa pag-predict ng mga kategorya
+
+
+
+## [Pre-lecture quiz](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/15/)
+
+> ### [Ang araling ito ay available sa R!](../../../../2-Regression/4-Logistic/solution/R/lesson_4.html)
+
+## Panimula
+
+Sa huling aralin na ito tungkol sa Regression, isa sa mga pangunahing _classic_ na teknik sa ML, tatalakayin natin ang Logistic Regression. Ginagamit ang teknik na ito upang matuklasan ang mga pattern para mag-predict ng binary categories. Ang candy ba ay chocolate o hindi? Ang sakit ba ay nakakahawa o hindi? Pipiliin ba ng customer ang produktong ito o hindi?
+
+Sa araling ito, matututunan mo:
+
+- Isang bagong library para sa data visualization
+- Mga teknik para sa logistic regression
+
+✅ Palalimin ang iyong kaalaman sa paggamit ng ganitong uri ng regression sa [Learn module](https://docs.microsoft.com/learn/modules/train-evaluate-classification-models?WT.mc_id=academic-77952-leestott)
+
+## Kinakailangan
+
+Dahil nagtrabaho na tayo sa pumpkin data, sapat na ang ating kaalaman upang mapansin na may isang binary category na maaari nating pag-aralan: `Color`.
+
+Gumawa tayo ng logistic regression model upang mag-predict, gamit ang ilang variables, _kung anong kulay ang malamang na maging isang pumpkin_ (orange 🎃 o white 👻).
+
+> Bakit natin pinag-uusapan ang binary classification sa isang aralin tungkol sa regression? Para lamang sa kaginhawaan sa wika, dahil ang logistic regression ay [talagang isang classification method](https://scikit-learn.org/stable/modules/linear_model.html#logistic-regression), bagamat linear-based ito. Matuto tungkol sa iba pang paraan ng pag-classify ng data sa susunod na grupo ng aralin.
+
+## Tukuyin ang tanong
+
+Para sa ating layunin, ipapahayag natin ito bilang binary: 'White' o 'Not White'. Mayroon ding 'striped' na kategorya sa ating dataset ngunit kakaunti ang instances nito, kaya hindi natin ito gagamitin. Nawawala rin ito kapag tinanggal natin ang mga null values mula sa dataset.
+
+> 🎃 Nakakatuwang kaalaman, minsan tinatawag natin ang mga white pumpkins na 'ghost' pumpkins. Hindi sila madaling i-carve, kaya hindi sila kasing popular ng mga orange pumpkins ngunit cool silang tingnan! Kaya maaari rin nating baguhin ang tanong bilang: 'Ghost' o 'Not Ghost'. 👻
+
+## Tungkol sa logistic regression
+
+Ang logistic regression ay naiiba sa linear regression, na natutunan mo na dati, sa ilang mahahalagang aspeto.
+
+[](https://youtu.be/KpeCT6nEpBY "ML para sa mga nagsisimula - Pag-unawa sa Logistic Regression para sa Machine Learning Classification")
+
+> 🎥 I-click ang imahe sa itaas para sa maikling video overview ng logistic regression.
+
+### Binary classification
+
+Ang logistic regression ay hindi nag-aalok ng parehong features tulad ng linear regression. Ang una ay nagbibigay ng prediction tungkol sa binary category ("white o hindi white") samantalang ang huli ay kayang mag-predict ng patuloy na values, halimbawa, batay sa pinanggalingan ng pumpkin at oras ng pag-ani, _kung gaano tataas ang presyo nito_.
+
+
+> Infographic ni [Dasani Madipalli](https://twitter.com/dasani_decoded)
+
+### Iba pang classifications
+
+May iba pang uri ng logistic regression, kabilang ang multinomial at ordinal:
+
+- **Multinomial**, na may higit sa isang kategorya - "Orange, White, at Striped".
+- **Ordinal**, na may ordered categories, kapaki-pakinabang kung nais nating i-order ang ating outcomes nang lohikal, tulad ng ating pumpkins na naka-order ayon sa finite na bilang ng sizes (mini, sm, med, lg, xl, xxl).
+
+
+
+### Hindi kailangang mag-correlate ang mga variables
+
+Tandaan kung paano mas gumagana ang linear regression sa mas correlated na variables? Ang logistic regression ay kabaligtaran - hindi kailangang mag-align ang mga variables. Angkop ito para sa data na may medyo mahina ang correlations.
+
+### Kailangan mo ng maraming malinis na data
+
+Mas accurate ang resulta ng logistic regression kung mas maraming data ang gagamitin; ang maliit na dataset natin ay hindi optimal para sa task na ito, kaya tandaan ito.
+
+[](https://youtu.be/B2X4H9vcXTs "ML para sa mga nagsisimula - Data Analysis at Preparation para sa Logistic Regression")
+
+✅ Pag-isipan ang mga uri ng data na angkop para sa logistic regression
+
+## Ehersisyo - ayusin ang data
+
+Una, linisin ang data nang kaunti, tanggalin ang mga null values at piliin lamang ang ilang columns:
+
+1. Idagdag ang sumusunod na code:
+
+ ```python
+
+ columns_to_select = ['City Name','Package','Variety', 'Origin','Item Size', 'Color']
+ pumpkins = full_pumpkins.loc[:, columns_to_select]
+
+ pumpkins.dropna(inplace=True)
+ ```
+
+ Maaari mong tingnan ang iyong bagong dataframe:
+
+ ```python
+ pumpkins.info
+ ```
+
+### Visualization - categorical plot
+
+Sa puntong ito, na-load mo na ang [starter notebook](./notebook.ipynb) gamit ang pumpkin data at nilinis ito upang mapanatili ang dataset na naglalaman ng ilang variables, kabilang ang `Color`. I-visualize natin ang dataframe sa notebook gamit ang ibang library: [Seaborn](https://seaborn.pydata.org/index.html), na nakabatay sa Matplotlib na ginamit natin dati.
+
+Nag-aalok ang Seaborn ng mga magagandang paraan upang i-visualize ang iyong data. Halimbawa, maaari mong ikumpara ang distributions ng data para sa bawat `Variety` at `Color` sa isang categorical plot.
+
+1. Gumawa ng ganitong plot gamit ang `catplot` function, gamit ang pumpkin data `pumpkins`, at tukuyin ang color mapping para sa bawat pumpkin category (orange o white):
+
+ ```python
+ import seaborn as sns
+
+ palette = {
+ 'ORANGE': 'orange',
+ 'WHITE': 'wheat',
+ }
+
+ sns.catplot(
+ data=pumpkins, y="Variety", hue="Color", kind="count",
+ palette=palette,
+ )
+ ```
+
+ 
+
+ Sa pag-obserba ng data, makikita mo kung paano nauugnay ang Color data sa Variety.
+
+ ✅ Batay sa categorical plot na ito, ano ang mga kawili-wiling explorations na maaari mong maisip?
+
+### Data pre-processing: feature at label encoding
+
+Ang pumpkins dataset natin ay naglalaman ng string values para sa lahat ng columns nito. Ang pag-trabaho sa categorical data ay intuitive para sa tao ngunit hindi para sa mga makina. Ang machine learning algorithms ay mas mahusay gumana sa mga numero. Kaya't ang encoding ay isang mahalagang hakbang sa data pre-processing phase, dahil pinapayagan nitong gawing numerical data ang categorical data nang hindi nawawala ang anumang impormasyon. Ang mahusay na encoding ay nagreresulta sa paggawa ng mahusay na modelo.
+
+Para sa feature encoding, may dalawang pangunahing uri ng encoders:
+
+1. Ordinal encoder: angkop ito para sa ordinal variables, na mga categorical variables kung saan ang kanilang data ay may lohikal na pagkakasunod-sunod, tulad ng `Item Size` column sa ating dataset. Gumagawa ito ng mapping kung saan ang bawat kategorya ay kinakatawan ng isang numero, na siyang pagkakasunod-sunod ng kategorya sa column.
+
+ ```python
+ from sklearn.preprocessing import OrdinalEncoder
+
+ item_size_categories = [['sml', 'med', 'med-lge', 'lge', 'xlge', 'jbo', 'exjbo']]
+ ordinal_features = ['Item Size']
+ ordinal_encoder = OrdinalEncoder(categories=item_size_categories)
+ ```
+
+2. Categorical encoder: angkop ito para sa nominal variables, na mga categorical variables kung saan ang kanilang data ay walang lohikal na pagkakasunod-sunod, tulad ng lahat ng features maliban sa `Item Size` sa ating dataset. Ito ay isang one-hot encoding, na nangangahulugang ang bawat kategorya ay kinakatawan ng isang binary column: ang encoded variable ay katumbas ng 1 kung ang pumpkin ay kabilang sa Variety na iyon at 0 kung hindi.
+
+ ```python
+ from sklearn.preprocessing import OneHotEncoder
+
+ categorical_features = ['City Name', 'Package', 'Variety', 'Origin']
+ categorical_encoder = OneHotEncoder(sparse_output=False)
+ ```
+
+Pagkatapos, ginagamit ang `ColumnTransformer` upang pagsamahin ang maraming encoders sa isang hakbang at i-apply ang mga ito sa tamang columns.
+
+```python
+ from sklearn.compose import ColumnTransformer
+
+ ct = ColumnTransformer(transformers=[
+ ('ord', ordinal_encoder, ordinal_features),
+ ('cat', categorical_encoder, categorical_features)
+ ])
+
+ ct.set_output(transform='pandas')
+ encoded_features = ct.fit_transform(pumpkins)
+```
+
+Sa kabilang banda, para i-encode ang label, ginagamit natin ang scikit-learn `LabelEncoder` class, na isang utility class upang gawing normal ang labels upang maglaman lamang ng mga values sa pagitan ng 0 at n_classes-1 (dito, 0 at 1).
+
+```python
+ from sklearn.preprocessing import LabelEncoder
+
+ label_encoder = LabelEncoder()
+ encoded_label = label_encoder.fit_transform(pumpkins['Color'])
+```
+
+Kapag na-encode na natin ang features at label, maaari natin itong pagsamahin sa isang bagong dataframe `encoded_pumpkins`.
+
+```python
+ encoded_pumpkins = encoded_features.assign(Color=encoded_label)
+```
+
+✅ Ano ang mga benepisyo ng paggamit ng ordinal encoder para sa `Item Size` column?
+
+### Suriin ang relasyon sa pagitan ng mga variables
+
+Ngayon na na-pre-process na natin ang data, maaari nating suriin ang relasyon sa pagitan ng features at label upang magkaroon ng ideya kung gaano kahusay ang modelo sa pag-predict ng label batay sa features. Ang pinakamahusay na paraan upang gawin ang ganitong uri ng pagsusuri ay ang pag-plot ng data. Gagamitin natin muli ang Seaborn `catplot` function, upang i-visualize ang relasyon sa pagitan ng `Item Size`, `Variety`, at `Color` sa isang categorical plot. Para mas maayos ang pag-plot ng data, gagamitin natin ang encoded `Item Size` column at ang unencoded `Variety` column.
+
+```python
+ palette = {
+ 'ORANGE': 'orange',
+ 'WHITE': 'wheat',
+ }
+ pumpkins['Item Size'] = encoded_pumpkins['ord__Item Size']
+
+ g = sns.catplot(
+ data=pumpkins,
+ x="Item Size", y="Color", row='Variety',
+ kind="box", orient="h",
+ sharex=False, margin_titles=True,
+ height=1.8, aspect=4, palette=palette,
+ )
+ g.set(xlabel="Item Size", ylabel="").set(xlim=(0,6))
+ g.set_titles(row_template="{row_name}")
+```
+
+
+
+### Gumamit ng swarm plot
+
+Dahil ang Color ay isang binary category (White o Not), kailangan nito ng 'isang [specialized approach](https://seaborn.pydata.org/tutorial/categorical.html?highlight=bar) sa visualization'. May iba pang paraan upang i-visualize ang relasyon ng kategoryang ito sa ibang variables.
+
+Maaari mong i-visualize ang mga variables nang magkatabi gamit ang Seaborn plots.
+
+1. Subukan ang 'swarm' plot upang ipakita ang distribution ng values:
+
+ ```python
+ palette = {
+ 0: 'orange',
+ 1: 'wheat'
+ }
+ sns.swarmplot(x="Color", y="ord__Item Size", data=encoded_pumpkins, palette=palette)
+ ```
+
+ 
+
+**Mag-ingat**: ang code sa itaas ay maaaring mag-generate ng warning, dahil ang seaborn ay nahihirapang i-represent ang ganitong dami ng datapoints sa isang swarm plot. Ang posibleng solusyon ay bawasan ang laki ng marker, gamit ang 'size' parameter. Gayunpaman, tandaan na maaapektuhan nito ang readability ng plot.
+
+> **🧮 Ipakita ang Math**
+>
+> Ang logistic regression ay nakabatay sa konsepto ng 'maximum likelihood' gamit ang [sigmoid functions](https://wikipedia.org/wiki/Sigmoid_function). Ang 'Sigmoid Function' sa isang plot ay mukhang hugis 'S'. Kinukuha nito ang isang value at ina-map ito sa pagitan ng 0 at 1. Ang curve nito ay tinatawag ding 'logistic curve'. Ang formula nito ay ganito:
+>
+> 
+>
+> kung saan ang midpoint ng sigmoid ay nasa x's 0 point, L ang maximum value ng curve, at k ang steepness ng curve. Kung ang resulta ng function ay higit sa 0.5, ang label ay bibigyan ng class '1' ng binary choice. Kung hindi, ito ay ikakategorya bilang '0'.
+
+## Gumawa ng iyong modelo
+
+Ang paggawa ng modelo upang mahanap ang binary classification ay nakakagulat na simple gamit ang Scikit-learn.
+
+[](https://youtu.be/MmZS2otPrQ8 "ML para sa mga nagsisimula - Logistic Regression para sa classification ng data")
+
+> 🎥 I-click ang imahe sa itaas para sa maikling video overview ng paggawa ng linear regression model
+
+1. Piliin ang mga variables na nais mong gamitin sa iyong classification model at hatiin ang training at test sets gamit ang `train_test_split()`:
+
+ ```python
+ from sklearn.model_selection import train_test_split
+
+ X = encoded_pumpkins[encoded_pumpkins.columns.difference(['Color'])]
+ y = encoded_pumpkins['Color']
+
+ X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0)
+
+ ```
+
+2. Ngayon maaari mong i-train ang iyong modelo, gamit ang `fit()` sa iyong training data, at i-print ang resulta nito:
+
+ ```python
+ from sklearn.metrics import f1_score, classification_report
+ from sklearn.linear_model import LogisticRegression
+
+ model = LogisticRegression()
+ model.fit(X_train, y_train)
+ predictions = model.predict(X_test)
+
+ print(classification_report(y_test, predictions))
+ print('Predicted labels: ', predictions)
+ print('F1-score: ', f1_score(y_test, predictions))
+ ```
+
+ Tingnan ang scoreboard ng iyong modelo. Hindi masama, isinasaalang-alang na mayroon ka lamang humigit-kumulang 1000 rows ng data:
+
+ ```output
+ precision recall f1-score support
+
+ 0 0.94 0.98 0.96 166
+ 1 0.85 0.67 0.75 33
+
+ accuracy 0.92 199
+ macro avg 0.89 0.82 0.85 199
+ weighted avg 0.92 0.92 0.92 199
+
+ Predicted labels: [0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 1 0 0 0 0 0 0 0 0 1 0 0 0 0
+ 0 0 0 0 0 1 0 1 0 0 1 0 0 0 0 0 1 0 1 0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+ 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 1 0 1 0 0 0 0 0 0 0 1 0
+ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 1 0 0 0 1 1 0
+ 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1
+ 0 0 0 1 0 0 0 0 0 0 0 0 1 1]
+ F1-score: 0.7457627118644068
+ ```
+
+## Mas mahusay na pag-unawa gamit ang confusion matrix
+
+Habang maaari kang makakuha ng scoreboard report [terms](https://scikit-learn.org/stable/modules/generated/sklearn.metrics.classification_report.html?highlight=classification_report#sklearn.metrics.classification_report) sa pamamagitan ng pag-print ng mga items sa itaas, mas mauunawaan mo ang iyong modelo gamit ang [confusion matrix](https://scikit-learn.org/stable/modules/model_evaluation.html#confusion-matrix) upang matulungan tayong maunawaan kung paano gumagana ang modelo.
+
+> 🎓 Ang '[confusion matrix](https://wikipedia.org/wiki/Confusion_matrix)' (o 'error matrix') ay isang table na nagpapakita ng true vs. false positives at negatives ng iyong modelo, kaya't nasusukat ang accuracy ng predictions.
+
+1. Upang gumamit ng confusion matrix, tawagin ang `confusion_matrix()`:
+
+ ```python
+ from sklearn.metrics import confusion_matrix
+ confusion_matrix(y_test, predictions)
+ ```
+
+ Tingnan ang confusion matrix ng iyong modelo:
+
+ ```output
+ array([[162, 4],
+ [ 11, 22]])
+ ```
+
+Sa Scikit-learn, ang Rows (axis 0) ay actual labels at ang columns (axis 1) ay predicted labels.
+
+| | 0 | 1 |
+| :---: | :---: | :---: |
+| 0 | TN | FP |
+| 1 | FN | TP |
+
+Ano ang nangyayari dito? Sabihin nating ang modelo natin ay tinanong upang i-classify ang pumpkins sa pagitan ng dalawang binary categories, category 'white' at category 'not-white'.
+
+- Kung ang modelo mo ay nag-predict ng pumpkin bilang not white at ito ay talagang kabilang sa category 'not-white', tinatawag natin itong true negative, na ipinapakita ng numero sa kaliwang itaas.
+- Kung ang modelo mo ay nag-predict ng pumpkin bilang white ngunit ito ay talagang kabilang sa category 'not-white', tinatawag natin itong false negative, na ipinapakita ng numero sa kaliwang ibaba.
+- Kung ang modelo mo ay nag-predict ng pumpkin bilang not white ngunit ito ay talagang kabilang sa category 'white', tinatawag natin itong false positive, na ipinapakita ng numero sa kanang itaas.
+- Kung ang modelo mo ay nag-predict ng pumpkin bilang white at ito ay talagang kabilang sa category 'white', tinatawag natin itong true positive, na ipinapakita ng numero sa kanang ibaba.
+
+Tulad ng inaasahan mo, mas mainam na magkaroon ng mas malaking bilang ng true positives at true negatives at mas mababang bilang ng false positives at false negatives, na nagpapahiwatig na mas mahusay ang performance ng modelo.
+Paano nauugnay ang confusion matrix sa precision at recall? Tandaan, ang classification report na ipinakita sa itaas ay nagpakita ng precision (0.85) at recall (0.67).
+
+Precision = tp / (tp + fp) = 22 / (22 + 4) = 0.8461538461538461
+
+Recall = tp / (tp + fn) = 22 / (22 + 11) = 0.6666666666666666
+
+✅ Q: Ayon sa confusion matrix, paano ang performance ng modelo?
+A: Hindi masama; may magandang bilang ng true negatives ngunit mayroon ding ilang false negatives.
+
+Balikan natin ang mga terminong nakita natin kanina gamit ang mapping ng TP/TN at FP/FN sa confusion matrix:
+
+🎓 Precision: TP/(TP + FP)
+Ang bahagi ng mga tamang instance sa mga nakuha na instance (hal. aling mga label ang maayos na na-label).
+
+🎓 Recall: TP/(TP + FN)
+Ang bahagi ng mga tamang instance na nakuha, maayos man ang pagkaka-label o hindi.
+
+🎓 f1-score: (2 * precision * recall)/(precision + recall)
+Isang weighted average ng precision at recall, kung saan ang pinakamaganda ay 1 at ang pinakamasama ay 0.
+
+🎓 Support:
+Ang bilang ng mga paglitaw ng bawat label na nakuha.
+
+🎓 Accuracy: (TP + TN)/(TP + TN + FP + FN)
+Ang porsyento ng mga label na tama ang prediksyon para sa isang sample.
+
+🎓 Macro Avg:
+Ang kalkulasyon ng unweighted mean metrics para sa bawat label, hindi isinasaalang-alang ang imbalance ng label.
+
+🎓 Weighted Avg:
+Ang kalkulasyon ng mean metrics para sa bawat label, isinasaalang-alang ang imbalance ng label sa pamamagitan ng pag-weight base sa kanilang support (ang bilang ng tamang instance para sa bawat label).
+
+✅ Maaari mo bang isipin kung aling metric ang dapat bantayan kung nais mong bawasan ang bilang ng false negatives?
+
+## I-visualize ang ROC curve ng modelong ito
+
+[](https://youtu.be/GApO575jTA0 "ML para sa mga nagsisimula - Pagsusuri ng Performance ng Logistic Regression gamit ang ROC Curves")
+
+> 🎥 I-click ang imahe sa itaas para sa isang maikling video overview ng ROC curves.
+
+Gumawa tayo ng isa pang visualization upang makita ang tinatawag na 'ROC' curve:
+
+```python
+from sklearn.metrics import roc_curve, roc_auc_score
+import matplotlib
+import matplotlib.pyplot as plt
+%matplotlib inline
+
+y_scores = model.predict_proba(X_test)
+fpr, tpr, thresholds = roc_curve(y_test, y_scores[:,1])
+
+fig = plt.figure(figsize=(6, 6))
+plt.plot([0, 1], [0, 1], 'k--')
+plt.plot(fpr, tpr)
+plt.xlabel('False Positive Rate')
+plt.ylabel('True Positive Rate')
+plt.title('ROC Curve')
+plt.show()
+```
+
+Gamit ang Matplotlib, i-plot ang [Receiving Operating Characteristic](https://scikit-learn.org/stable/auto_examples/model_selection/plot_roc.html?highlight=roc) o ROC ng modelo. Ang ROC curves ay madalas gamitin upang makita ang output ng isang classifier sa mga aspeto ng true vs. false positives. "Ang ROC curves ay karaniwang may true positive rate sa Y axis, at false positive rate sa X axis." Kaya't mahalaga ang steepness ng curve at ang espasyo sa pagitan ng midpoint line at ng curve: nais mo ng curve na mabilis na tumataas at lumalampas sa linya. Sa ating kaso, may false positives sa simula, at pagkatapos ay ang linya ay tumataas at lumalampas nang maayos:
+
+
+
+Sa huli, gamitin ang [`roc_auc_score` API](https://scikit-learn.org/stable/modules/generated/sklearn.metrics.roc_auc_score.html?highlight=roc_auc#sklearn.metrics.roc_auc_score) ng Scikit-learn upang kalkulahin ang aktwal na 'Area Under the Curve' (AUC):
+
+```python
+auc = roc_auc_score(y_test,y_scores[:,1])
+print(auc)
+```
+Ang resulta ay `0.9749908725812341`. Dahil ang AUC ay nasa saklaw mula 0 hanggang 1, nais mo ng mataas na score, dahil ang isang modelo na 100% tama sa mga prediksyon nito ay magkakaroon ng AUC na 1; sa kasong ito, ang modelo ay _medyo magaling_.
+
+Sa mga susunod na aralin tungkol sa classifications, matututo ka kung paano mag-iterate upang mapabuti ang mga score ng iyong modelo. Ngunit sa ngayon, binabati kita! Natapos mo na ang mga aralin sa regression!
+
+---
+## 🚀Hamunin
+
+Marami pang dapat tuklasin tungkol sa logistic regression! Ngunit ang pinakamagandang paraan upang matuto ay ang mag-eksperimento. Maghanap ng dataset na angkop para sa ganitong uri ng pagsusuri at bumuo ng modelo gamit ito. Ano ang natutunan mo? Tip: subukan ang [Kaggle](https://www.kaggle.com/search?q=logistic+regression+datasets) para sa mga kawili-wiling dataset.
+
+## [Post-lecture quiz](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/16/)
+
+## Review at Pag-aaral ng Sarili
+
+Basahin ang unang ilang pahina ng [papel na ito mula sa Stanford](https://web.stanford.edu/~jurafsky/slp3/5.pdf) tungkol sa ilang praktikal na gamit ng logistic regression. Pag-isipan ang mga gawain na mas angkop para sa isa o sa ibang uri ng regression na pinag-aralan natin hanggang sa puntong ito. Ano ang mas angkop?
+
+## Takdang Aralin
+
+[Subukang muli ang regression na ito](assignment.md)
+
+---
+
+**Paunawa**:
+Ang dokumentong ito ay isinalin gamit ang AI translation service na [Co-op Translator](https://github.com/Azure/co-op-translator). Bagama't sinisikap naming maging tumpak, pakitandaan na ang mga awtomatikong pagsasalin ay maaaring maglaman ng mga pagkakamali o hindi pagkakatugma. Ang orihinal na dokumento sa kanyang katutubong wika ang dapat ituring na opisyal na pinagmulan. Para sa mahalagang impormasyon, inirerekomenda ang propesyonal na pagsasalin ng tao. Hindi kami mananagot sa anumang hindi pagkakaunawaan o maling interpretasyon na dulot ng paggamit ng pagsasaling ito.
\ No newline at end of file
diff --git a/translations/tl/2-Regression/4-Logistic/assignment.md b/translations/tl/2-Regression/4-Logistic/assignment.md
new file mode 100644
index 000000000..94e384221
--- /dev/null
+++ b/translations/tl/2-Regression/4-Logistic/assignment.md
@@ -0,0 +1,25 @@
+
+# Pagsubok Muli ng Regression
+
+## Mga Instruksyon
+
+Sa aralin, ginamit mo ang isang subset ng datos ng kalabasa. Ngayon, bumalik sa orihinal na datos at subukang gamitin ang lahat ng ito, malinis at na-standardize, upang makabuo ng isang Logistic Regression model.
+
+## Rubric
+
+| Pamantayan | Napakahusay | Katamtaman | Kailangan ng Pagpapabuti |
+| ---------- | ----------------------------------------------------------------------- | ------------------------------------------------------------ | ----------------------------------------------------------- |
+| | Isang notebook ang ipinakita na may malinaw na paliwanag at mahusay na modelo | Isang notebook ang ipinakita na may modelo na gumagana nang minimal | Isang notebook ang ipinakita na may hindi mahusay na modelo o wala |
+
+---
+
+**Paunawa**:
+Ang dokumentong ito ay isinalin gamit ang AI translation service na [Co-op Translator](https://github.com/Azure/co-op-translator). Bagama't sinisikap naming maging tumpak, pakitandaan na ang mga awtomatikong pagsasalin ay maaaring maglaman ng mga pagkakamali o hindi pagkakatugma. Ang orihinal na dokumento sa orihinal nitong wika ang dapat ituring na opisyal na sanggunian. Para sa mahalagang impormasyon, inirerekomenda ang propesyonal na pagsasalin ng tao. Hindi kami mananagot sa anumang hindi pagkakaunawaan o maling interpretasyon na maaaring magmula sa paggamit ng pagsasaling ito.
\ No newline at end of file
diff --git a/translations/tl/2-Regression/4-Logistic/notebook.ipynb b/translations/tl/2-Regression/4-Logistic/notebook.ipynb
new file mode 100644
index 000000000..8698d8fa5
--- /dev/null
+++ b/translations/tl/2-Regression/4-Logistic/notebook.ipynb
@@ -0,0 +1,269 @@
+{
+ "cells": [
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "## Mga Uri ng Kalabasa at Kulay\n",
+ "\n",
+ "I-load ang mga kinakailangang library at dataset. I-convert ang data sa isang dataframe na naglalaman ng subset ng data:\n",
+ "\n",
+ "Tingnan natin ang ugnayan sa pagitan ng kulay at uri\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 1,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "
\n",
+ "\n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
\n",
+ "
City Name
\n",
+ "
Type
\n",
+ "
Package
\n",
+ "
Variety
\n",
+ "
Sub Variety
\n",
+ "
Grade
\n",
+ "
Date
\n",
+ "
Low Price
\n",
+ "
High Price
\n",
+ "
Mostly Low
\n",
+ "
...
\n",
+ "
Unit of Sale
\n",
+ "
Quality
\n",
+ "
Condition
\n",
+ "
Appearance
\n",
+ "
Storage
\n",
+ "
Crop
\n",
+ "
Repack
\n",
+ "
Trans Mode
\n",
+ "
Unnamed: 24
\n",
+ "
Unnamed: 25
\n",
+ "
\n",
+ " \n",
+ " \n",
+ "
\n",
+ "
0
\n",
+ "
BALTIMORE
\n",
+ "
NaN
\n",
+ "
24 inch bins
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
4/29/17
\n",
+ "
270.0
\n",
+ "
280.0
\n",
+ "
270.0
\n",
+ "
...
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
E
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
\n",
+ "
\n",
+ "
1
\n",
+ "
BALTIMORE
\n",
+ "
NaN
\n",
+ "
24 inch bins
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
5/6/17
\n",
+ "
270.0
\n",
+ "
280.0
\n",
+ "
270.0
\n",
+ "
...
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
E
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
\n",
+ "
\n",
+ "
2
\n",
+ "
BALTIMORE
\n",
+ "
NaN
\n",
+ "
24 inch bins
\n",
+ "
HOWDEN TYPE
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
9/24/16
\n",
+ "
160.0
\n",
+ "
160.0
\n",
+ "
160.0
\n",
+ "
...
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
N
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
\n",
+ "
\n",
+ "
3
\n",
+ "
BALTIMORE
\n",
+ "
NaN
\n",
+ "
24 inch bins
\n",
+ "
HOWDEN TYPE
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
9/24/16
\n",
+ "
160.0
\n",
+ "
160.0
\n",
+ "
160.0
\n",
+ "
...
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
N
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
\n",
+ "
\n",
+ "
4
\n",
+ "
BALTIMORE
\n",
+ "
NaN
\n",
+ "
24 inch bins
\n",
+ "
HOWDEN TYPE
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
11/5/16
\n",
+ "
90.0
\n",
+ "
100.0
\n",
+ "
90.0
\n",
+ "
...
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
N
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
5 rows × 26 columns
\n",
+ "
"
+ ],
+ "text/plain": [
+ " City Name Type Package Variety Sub Variety Grade Date \\\n",
+ "0 BALTIMORE NaN 24 inch bins NaN NaN NaN 4/29/17 \n",
+ "1 BALTIMORE NaN 24 inch bins NaN NaN NaN 5/6/17 \n",
+ "2 BALTIMORE NaN 24 inch bins HOWDEN TYPE NaN NaN 9/24/16 \n",
+ "3 BALTIMORE NaN 24 inch bins HOWDEN TYPE NaN NaN 9/24/16 \n",
+ "4 BALTIMORE NaN 24 inch bins HOWDEN TYPE NaN NaN 11/5/16 \n",
+ "\n",
+ " Low Price High Price Mostly Low ... Unit of Sale Quality Condition \\\n",
+ "0 270.0 280.0 270.0 ... NaN NaN NaN \n",
+ "1 270.0 280.0 270.0 ... NaN NaN NaN \n",
+ "2 160.0 160.0 160.0 ... NaN NaN NaN \n",
+ "3 160.0 160.0 160.0 ... NaN NaN NaN \n",
+ "4 90.0 100.0 90.0 ... NaN NaN NaN \n",
+ "\n",
+ " Appearance Storage Crop Repack Trans Mode Unnamed: 24 Unnamed: 25 \n",
+ "0 NaN NaN NaN E NaN NaN NaN \n",
+ "1 NaN NaN NaN E NaN NaN NaN \n",
+ "2 NaN NaN NaN N NaN NaN NaN \n",
+ "3 NaN NaN NaN N NaN NaN NaN \n",
+ "4 NaN NaN NaN N NaN NaN NaN \n",
+ "\n",
+ "[5 rows x 26 columns]"
+ ]
+ },
+ "execution_count": 1,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "import pandas as pd\n",
+ "import numpy as np\n",
+ "\n",
+ "full_pumpkins = pd.read_csv('../data/US-pumpkins.csv')\n",
+ "\n",
+ "full_pumpkins.head()\n"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "\n---\n\n**Paunawa**: \nAng dokumentong ito ay isinalin gamit ang AI translation service na [Co-op Translator](https://github.com/Azure/co-op-translator). Bagama't sinisikap naming maging tumpak, pakitandaan na ang mga awtomatikong pagsasalin ay maaaring maglaman ng mga pagkakamali o hindi pagkakatugma. Ang orihinal na dokumento sa orihinal nitong wika ang dapat ituring na opisyal na sanggunian. Para sa mahalagang impormasyon, inirerekomenda ang propesyonal na pagsasalin ng tao. Hindi kami mananagot sa anumang hindi pagkakaunawaan o maling interpretasyon na maaaring magmula sa paggamit ng pagsasaling ito.\n"
+ ]
+ }
+ ],
+ "metadata": {
+ "kernelspec": {
+ "display_name": "Python 3",
+ "language": "python",
+ "name": "python3"
+ },
+ "language_info": {
+ "codemirror_mode": {
+ "name": "ipython",
+ "version": 3
+ },
+ "file_extension": ".py",
+ "mimetype": "text/x-python",
+ "name": "python",
+ "nbconvert_exporter": "python",
+ "pygments_lexer": "ipython3",
+ "version": "3.11.1"
+ },
+ "metadata": {
+ "interpreter": {
+ "hash": "70b38d7a306a849643e446cd70466270a13445e5987dfa1344ef2b127438fa4d"
+ }
+ },
+ "orig_nbformat": 2,
+ "coopTranslator": {
+ "original_hash": "dee08c2b49057b0de8b6752c4dbca368",
+ "translation_date": "2025-08-29T14:48:41+00:00",
+ "source_file": "2-Regression/4-Logistic/notebook.ipynb",
+ "language_code": "tl"
+ }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 2
+}
\ No newline at end of file
diff --git a/translations/tl/2-Regression/4-Logistic/solution/Julia/README.md b/translations/tl/2-Regression/4-Logistic/solution/Julia/README.md
new file mode 100644
index 000000000..3cd6aeda5
--- /dev/null
+++ b/translations/tl/2-Regression/4-Logistic/solution/Julia/README.md
@@ -0,0 +1,15 @@
+
+
+
+---
+
+**Paunawa**:
+Ang dokumentong ito ay isinalin gamit ang AI translation service na [Co-op Translator](https://github.com/Azure/co-op-translator). Bagama't sinisikap naming maging tumpak, pakitandaan na ang mga awtomatikong pagsasalin ay maaaring maglaman ng mga pagkakamali o hindi pagkakatugma. Ang orihinal na dokumento sa kanyang orihinal na wika ang dapat ituring na opisyal na sanggunian. Para sa mahalagang impormasyon, inirerekomenda ang propesyonal na pagsasalin ng tao. Hindi kami mananagot sa anumang hindi pagkakaunawaan o maling interpretasyon na maaaring magmula sa paggamit ng pagsasaling ito.
\ No newline at end of file
diff --git a/translations/tl/2-Regression/4-Logistic/solution/R/lesson_4-R.ipynb b/translations/tl/2-Regression/4-Logistic/solution/R/lesson_4-R.ipynb
new file mode 100644
index 000000000..37de1a1cd
--- /dev/null
+++ b/translations/tl/2-Regression/4-Logistic/solution/R/lesson_4-R.ipynb
@@ -0,0 +1,685 @@
+{
+ "cells": [
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "## Gumawa ng logistic regression model - Aralin 4\n",
+ "\n",
+ "\n",
+ "\n",
+ "#### **[Pre-lecture quiz](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/15/)**\n",
+ "\n",
+ "#### Panimula\n",
+ "\n",
+ "Sa huling araling ito tungkol sa Regression, isa sa mga pangunahing *classic* na teknik sa Machine Learning (ML), tatalakayin natin ang Logistic Regression. Ginagamit ang teknik na ito upang matuklasan ang mga pattern para hulaan ang mga binary na kategorya. Ang candy ba na ito ay tsokolate o hindi? Ang sakit ba na ito ay nakakahawa o hindi? Pipiliin ba ng customer na ito ang produktong ito o hindi?\n",
+ "\n",
+ "Sa araling ito, matututunan mo ang:\n",
+ "\n",
+ "- Mga teknik para sa logistic regression\n",
+ "\n",
+ "✅ Palalimin ang iyong kaalaman sa paggamit ng ganitong uri ng regression sa [Learn module](https://learn.microsoft.com/training/modules/introduction-classification-models/?WT.mc_id=academic-77952-leestott)\n",
+ "\n",
+ "## Prerequisite\n",
+ "\n",
+ "Matapos magtrabaho gamit ang pumpkin data, sapat na ang ating kaalaman upang mapansin na may isang binary na kategorya na maaari nating pag-aralan: `Color`.\n",
+ "\n",
+ "Gumawa tayo ng logistic regression model upang mahulaan, batay sa ilang mga variable, *kung anong kulay ang malamang na mayroon ang isang kalabasa* (orange 🎃 o puti 👻).\n",
+ "\n",
+ "> Bakit natin pinag-uusapan ang binary classification sa isang aralin tungkol sa regression? Para lamang sa kaginhawaan sa wika, dahil ang logistic regression ay [talagang isang classification method](https://scikit-learn.org/stable/modules/linear_model.html#logistic-regression), bagama't ito ay batay sa linear regression. Alamin ang iba pang paraan ng pag-classify ng data sa susunod na pangkat ng mga aralin.\n",
+ "\n",
+ "Para sa araling ito, kakailanganin natin ang mga sumusunod na package:\n",
+ "\n",
+ "- `tidyverse`: Ang [tidyverse](https://www.tidyverse.org/) ay isang [koleksyon ng mga R package](https://www.tidyverse.org/packages) na idinisenyo upang gawing mas mabilis, mas madali, at mas masaya ang data science!\n",
+ "\n",
+ "- `tidymodels`: Ang [tidymodels](https://www.tidymodels.org/) framework ay isang [koleksyon ng mga package](https://www.tidymodels.org/packages/) para sa pagmomodelo at machine learning.\n",
+ "\n",
+ "- `janitor`: Ang [janitor package](https://github.com/sfirke/janitor) ay nagbibigay ng mga simpleng tool para sa pagsusuri at paglilinis ng maruruming data.\n",
+ "\n",
+ "- `ggbeeswarm`: Ang [ggbeeswarm package](https://github.com/eclarke/ggbeeswarm) ay nagbibigay ng mga paraan upang lumikha ng beeswarm-style plots gamit ang ggplot2.\n",
+ "\n",
+ "Maaari mong i-install ang mga ito gamit ang:\n",
+ "\n",
+ "`install.packages(c(\"tidyverse\", \"tidymodels\", \"janitor\", \"ggbeeswarm\"))`\n",
+ "\n",
+ "Bilang alternatibo, ang script sa ibaba ay nagche-check kung mayroon ka ng mga kinakailangang package upang makumpleto ang module na ito at awtomatikong ini-install ang mga ito kung wala pa.\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "vscode": {
+ "languageId": "r"
+ }
+ },
+ "outputs": [],
+ "source": [
+ "suppressWarnings(if (!require(\"pacman\"))install.packages(\"pacman\"))\n",
+ "\n",
+ "pacman::p_load(tidyverse, tidymodels, janitor, ggbeeswarm)\n"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "## **Tukuyin ang tanong**\n",
+ "\n",
+ "Para sa ating layunin, ipapahayag natin ito bilang isang binary: 'Puti' o 'Hindi Puti'. Mayroon ding kategoryang 'striped' sa ating dataset ngunit kakaunti ang mga halimbawa nito, kaya hindi natin ito gagamitin. Nawawala rin ito kapag tinanggal natin ang mga null values mula sa dataset.\n",
+ "\n",
+ "> 🎃 Nakakatuwang kaalaman, minsan tinatawag natin ang mga puting kalabasa na 'ghost' pumpkins. Hindi sila madaling ukitin, kaya hindi sila kasing sikat ng mga orange na kalabasa, pero maganda ang itsura nila! Kaya maaari rin nating baguhin ang tanong bilang: 'Ghost' o 'Hindi Ghost'. 👻\n",
+ "\n",
+ "## **Tungkol sa logistic regression**\n",
+ "\n",
+ "Ang logistic regression ay naiiba sa linear regression, na natutunan mo na dati, sa ilang mahahalagang aspeto.\n",
+ "\n",
+ "#### **Binary classification**\n",
+ "\n",
+ "Ang logistic regression ay hindi nag-aalok ng parehong mga tampok tulad ng linear regression. Ang una ay nagbibigay ng prediksyon tungkol sa isang `binary category` (\"orange o hindi orange\") samantalang ang huli ay may kakayahang mag-predict ng `continual values`, halimbawa, batay sa pinanggalingan ng kalabasa at oras ng pag-ani, *kung gaano tataas ang presyo nito*.\n",
+ "\n",
+ "\n",
+ "\n",
+ "### Iba pang mga klasipikasyon\n",
+ "\n",
+ "May iba pang uri ng logistic regression, kabilang ang multinomial at ordinal:\n",
+ "\n",
+ "- **Multinomial**, na may higit sa isang kategorya - \"Orange, Puti, at Striped\".\n",
+ "\n",
+ "- **Ordinal**, na may mga ordered categories, kapaki-pakinabang kung nais nating ayusin ang ating mga resulta nang lohikal, tulad ng mga kalabasa na nakaayos ayon sa tiyak na bilang ng mga sukat (mini, sm, med, lg, xl, xxl).\n",
+ "\n",
+ "\n",
+ "\n",
+ "#### **Hindi kailangang magkaugnay ang mga variable**\n",
+ "\n",
+ "Tandaan kung paano mas gumagana ang linear regression kapag mas correlated ang mga variable? Ang logistic regression ay kabaligtaran - hindi kailangang mag-align ang mga variable. Angkop ito para sa data na may medyo mahihinang correlations.\n",
+ "\n",
+ "#### **Kailangan mo ng maraming malinis na data**\n",
+ "\n",
+ "Mas magiging tumpak ang resulta ng logistic regression kung gagamit ka ng mas maraming data; ang maliit na dataset natin ay hindi optimal para sa gawaing ito, kaya tandaan ito.\n",
+ "\n",
+ "✅ Pag-isipan ang mga uri ng data na angkop para sa logistic regression\n",
+ "\n",
+ "## Ehersisyo - ayusin ang data\n",
+ "\n",
+ "Una, linisin ang data nang kaunti, tanggalin ang mga null values at piliin lamang ang ilang mga column:\n",
+ "\n",
+ "1. Idagdag ang sumusunod na code:\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "vscode": {
+ "languageId": "r"
+ }
+ },
+ "outputs": [],
+ "source": [
+ "# Load the core tidyverse packages\n",
+ "library(tidyverse)\n",
+ "\n",
+ "# Import the data and clean column names\n",
+ "pumpkins <- read_csv(file = \"https://raw.githubusercontent.com/microsoft/ML-For-Beginners/main/2-Regression/data/US-pumpkins.csv\") %>% \n",
+ " clean_names()\n",
+ "\n",
+ "# Select desired columns\n",
+ "pumpkins_select <- pumpkins %>% \n",
+ " select(c(city_name, package, variety, origin, item_size, color)) \n",
+ "\n",
+ "# Drop rows containing missing values and encode color as factor (category)\n",
+ "pumpkins_select <- pumpkins_select %>% \n",
+ " drop_na() %>% \n",
+ " mutate(color = factor(color))\n",
+ "\n",
+ "# View the first few rows\n",
+ "pumpkins_select %>% \n",
+ " slice_head(n = 5)\n"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "Maaari mong silipin ang iyong bagong dataframe gamit ang [*glimpse()*](https://pillar.r-lib.org/reference/glimpse.html) na function tulad ng nasa ibaba:\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "vscode": {
+ "languageId": "r"
+ }
+ },
+ "outputs": [],
+ "source": [
+ "pumpkins_select %>% \n",
+ " glimpse()\n"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "Tiyakin natin na ang gagawin natin ay isang binary classification problem:\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "vscode": {
+ "languageId": "r"
+ }
+ },
+ "outputs": [],
+ "source": [
+ "# Subset distinct observations in outcome column\n",
+ "pumpkins_select %>% \n",
+ " distinct(color)\n"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "### Visualization - categorical plot\n",
+ "Sa ngayon, na-load mo na muli ang pumpkin data at nalinis ito upang mapanatili ang dataset na may ilang mga variable, kabilang ang Color. Tingnan natin ang dataframe sa notebook gamit ang ggplot library.\n",
+ "\n",
+ "Ang ggplot library ay nag-aalok ng magagandang paraan upang ma-visualize ang iyong data. Halimbawa, maaari mong ikumpara ang distribusyon ng data para sa bawat Variety at Color sa isang categorical plot.\n",
+ "\n",
+ "1. Gumawa ng ganitong plot gamit ang geombar function, gamit ang pumpkin data, at tukuyin ang color mapping para sa bawat kategorya ng kalabasa (orange o white):\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "vscode": {
+ "languageId": "python"
+ }
+ },
+ "outputs": [],
+ "source": [
+ "# Specify colors for each value of the hue variable\n",
+ "palette <- c(ORANGE = \"orange\", WHITE = \"wheat\")\n",
+ "\n",
+ "# Create the bar plot\n",
+ "ggplot(pumpkins_select, aes(y = variety, fill = color)) +\n",
+ " geom_bar(position = \"dodge\") +\n",
+ " scale_fill_manual(values = palette) +\n",
+ " labs(y = \"Variety\", fill = \"Color\") +\n",
+ " theme_minimal()"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "Sa pag-obserba ng datos, makikita mo kung paano nauugnay ang datos ng Kulay sa Uri.\n",
+ "\n",
+ "✅ Batay sa categorical plot na ito, ano ang mga kawili-wiling pagsusuri na maaari mong maisip?\n"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "### Pagproseso ng Data: Pag-encode ng mga Katangian\n",
+ "\n",
+ "Ang dataset ng ating mga kalabasa ay naglalaman ng mga string na halaga para sa lahat ng mga column nito. Ang paggamit ng categorical na data ay natural para sa mga tao ngunit hindi para sa mga makina. Ang mga algorithm ng machine learning ay mas mahusay gumana gamit ang mga numero. Kaya't ang pag-encode ay isang napakahalagang hakbang sa yugto ng pagproseso ng data, dahil pinapayagan tayo nitong gawing numerical data ang categorical data nang hindi nawawala ang anumang impormasyon. Ang mahusay na pag-encode ay nagreresulta sa pagbuo ng isang mahusay na modelo.\n",
+ "\n",
+ "Para sa pag-encode ng mga katangian, mayroong dalawang pangunahing uri ng encoder:\n",
+ "\n",
+ "1. **Ordinal encoder**: Angkop ito para sa mga ordinal na variable, na mga categorical na variable kung saan ang kanilang data ay may lohikal na pagkakasunod-sunod, tulad ng column na `item_size` sa ating dataset. Gumagawa ito ng mapping kung saan ang bawat kategorya ay kinakatawan ng isang numero, na siyang pagkakasunod-sunod ng kategorya sa column.\n",
+ "\n",
+ "2. **Categorical encoder**: Angkop ito para sa mga nominal na variable, na mga categorical na variable kung saan ang kanilang data ay walang lohikal na pagkakasunod-sunod, tulad ng lahat ng mga katangian maliban sa `item_size` sa ating dataset. Ito ay isang one-hot encoding, na nangangahulugang ang bawat kategorya ay kinakatawan ng isang binary na column: ang encoded na variable ay katumbas ng 1 kung ang kalabasa ay kabilang sa Variety na iyon at 0 kung hindi.\n",
+ "\n",
+ "Ang Tidymodels ay nagbibigay ng isa pang kapaki-pakinabang na package: [recipes](https://recipes.tidymodels.org/) - isang package para sa pagproseso ng data. Magtatakda tayo ng isang `recipe` na tumutukoy na ang lahat ng mga predictor column ay dapat i-encode sa isang set ng mga integer, `prep` ito upang tantiyahin ang mga kinakailangang dami at istatistika na kailangan para sa anumang operasyon, at sa huli ay `bake` upang ilapat ang mga kalkulasyon sa bagong data.\n",
+ "\n",
+ "> Karaniwan, ang recipes ay kadalasang ginagamit bilang isang preprocessor para sa pagmomodelo kung saan tinutukoy nito kung anong mga hakbang ang dapat ilapat sa isang dataset upang maihanda ito para sa pagmomodelo. Sa ganitong kaso, **lubos na inirerekomenda** na gumamit ka ng `workflow()` sa halip na manu-manong tantiyahin ang recipe gamit ang prep at bake. Makikita natin ang lahat ng ito sa ilang sandali.\n",
+ ">\n",
+ "> Gayunpaman, sa ngayon, ginagamit natin ang recipes + prep + bake upang tukuyin kung anong mga hakbang ang dapat ilapat sa isang dataset upang maihanda ito para sa pagsusuri ng data at pagkatapos ay kunin ang preprocessed na data na may mga hakbang na inilapat.\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "vscode": {
+ "languageId": "r"
+ }
+ },
+ "outputs": [],
+ "source": [
+ "# Preprocess and extract data to allow some data analysis\n",
+ "baked_pumpkins <- recipe(color ~ ., data = pumpkins_select) %>%\n",
+ " # Define ordering for item_size column\n",
+ " step_mutate(item_size = ordered(item_size, levels = c('sml', 'med', 'med-lge', 'lge', 'xlge', 'jbo', 'exjbo'))) %>%\n",
+ " # Convert factors to numbers using the order defined above (Ordinal encoding)\n",
+ " step_integer(item_size, zero_based = F) %>%\n",
+ " # Encode all other predictors using one hot encoding\n",
+ " step_dummy(all_nominal(), -all_outcomes(), one_hot = TRUE) %>%\n",
+ " prep(data = pumpkin_select) %>%\n",
+ " bake(new_data = NULL)\n",
+ "\n",
+ "# Display the first few rows of preprocessed data\n",
+ "baked_pumpkins %>% \n",
+ " slice_head(n = 5)\n"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "✅ Ano ang mga benepisyo ng paggamit ng ordinal encoder para sa column na Item Size?\n",
+ "\n",
+ "### Suriin ang relasyon sa pagitan ng mga variable\n",
+ "\n",
+ "Ngayon na na-preprocess na natin ang ating data, maaari na nating suriin ang relasyon sa pagitan ng mga features at ng label upang magkaroon ng ideya kung gaano kahusay mahuhulaan ng modelo ang label base sa mga features. Ang pinakamainam na paraan upang gawin ang ganitong uri ng pagsusuri ay sa pamamagitan ng pag-plot ng data. \n",
+ "Gagamitin natin muli ang ggplot geom_boxplot_ function upang maipakita ang relasyon sa pagitan ng Item Size, Variety, at Color sa isang categorical plot. Upang mas maayos na maipakita ang data, gagamitin natin ang encoded na Item Size column at ang unencoded na Variety column.\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "vscode": {
+ "languageId": "r"
+ }
+ },
+ "outputs": [],
+ "source": [
+ "# Define the color palette\n",
+ "palette <- c(ORANGE = \"orange\", WHITE = \"wheat\")\n",
+ "\n",
+ "# We need the encoded Item Size column to use it as the x-axis values in the plot\n",
+ "pumpkins_select_plot<-pumpkins_select\n",
+ "pumpkins_select_plot$item_size <- baked_pumpkins$item_size\n",
+ "\n",
+ "# Create the grouped box plot\n",
+ "ggplot(pumpkins_select_plot, aes(x = `item_size`, y = color, fill = color)) +\n",
+ " geom_boxplot() +\n",
+ " facet_grid(variety ~ ., scales = \"free_x\") +\n",
+ " scale_fill_manual(values = palette) +\n",
+ " labs(x = \"Item Size\", y = \"\") +\n",
+ " theme_minimal() +\n",
+ " theme(strip.text = element_text(size = 12)) +\n",
+ " theme(axis.text.x = element_text(size = 10)) +\n",
+ " theme(axis.title.x = element_text(size = 12)) +\n",
+ " theme(axis.title.y = element_blank()) +\n",
+ " theme(legend.position = \"bottom\") +\n",
+ " guides(fill = guide_legend(title = \"Color\")) +\n",
+ " theme(panel.spacing = unit(0.5, \"lines\"))+\n",
+ " theme(strip.text.y = element_text(size = 4, hjust = 0)) \n"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "#### Gumamit ng swarm plot\n",
+ "\n",
+ "Dahil ang Color ay isang binary na kategorya (White o Hindi), nangangailangan ito ng '[espesyal na paraan](https://github.com/rstudio/cheatsheets/blob/main/data-visualization.pdf) sa pag-visualize'.\n",
+ "\n",
+ "Subukan ang `swarm plot` upang ipakita ang distribusyon ng kulay kaugnay ng item_size.\n",
+ "\n",
+ "Gagamitin natin ang [ggbeeswarm package](https://github.com/eclarke/ggbeeswarm) na nagbibigay ng mga paraan upang lumikha ng beeswarm-style plots gamit ang ggplot2. Ang mga beeswarm plot ay isang paraan ng pag-plot ng mga puntos na karaniwang magpapatong upang mailagay ang mga ito sa tabi ng isa't isa.\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "vscode": {
+ "languageId": "r"
+ }
+ },
+ "outputs": [],
+ "source": [
+ "# Create beeswarm plots of color and item_size\n",
+ "baked_pumpkins %>% \n",
+ " mutate(color = factor(color)) %>% \n",
+ " ggplot(mapping = aes(x = color, y = item_size, color = color)) +\n",
+ " geom_quasirandom() +\n",
+ " scale_color_brewer(palette = \"Dark2\", direction = -1) +\n",
+ " theme(legend.position = \"none\")\n"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "Ngayon na may ideya na tayo tungkol sa ugnayan ng mga binary na kategorya ng kulay at ng mas malaking grupo ng mga sukat, tuklasin natin ang logistic regression upang matukoy ang posibleng kulay ng isang kalabasa.\n",
+ "\n",
+ "## Bumuo ng iyong modelo\n",
+ "\n",
+ "Piliin ang mga variable na nais mong gamitin sa iyong classification model at hatiin ang data sa training at test sets. Ang [rsample](https://rsample.tidymodels.org/), isang package sa Tidymodels, ay nagbibigay ng imprastraktura para sa mahusay na paghahati at resampling ng data:\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "vscode": {
+ "languageId": "r"
+ }
+ },
+ "outputs": [],
+ "source": [
+ "# Split data into 80% for training and 20% for testing\n",
+ "set.seed(2056)\n",
+ "pumpkins_split <- pumpkins_select %>% \n",
+ " initial_split(prop = 0.8)\n",
+ "\n",
+ "# Extract the data in each split\n",
+ "pumpkins_train <- training(pumpkins_split)\n",
+ "pumpkins_test <- testing(pumpkins_split)\n",
+ "\n",
+ "# Print out the first 5 rows of the training set\n",
+ "pumpkins_train %>% \n",
+ " slice_head(n = 5)\n"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "🙌 Handa na tayong magsanay ng modelo sa pamamagitan ng pag-angkop ng mga training features sa training label (kulay).\n",
+ "\n",
+ "Magsisimula tayo sa paglikha ng recipe na nagtatakda ng mga hakbang sa preprocessing na kailangang isagawa sa ating data upang maihanda ito para sa pagmomodelo, halimbawa: pag-encode ng mga categorical variables sa isang set ng integers. Katulad ng `baked_pumpkins`, gagawa tayo ng `pumpkins_recipe` ngunit hindi natin ito `prep` at `bake` dahil ito ay isasama sa isang workflow, na makikita mo sa ilang hakbang mula ngayon.\n",
+ "\n",
+ "Mayroong iba't ibang paraan upang tukuyin ang isang logistic regression model sa Tidymodels. Tingnan ang `?logistic_reg()`. Sa ngayon, itatakda natin ang isang logistic regression model gamit ang default na `stats::glm()` engine.\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "vscode": {
+ "languageId": "r"
+ }
+ },
+ "outputs": [],
+ "source": [
+ "# Create a recipe that specifies preprocessing steps for modelling\n",
+ "pumpkins_recipe <- recipe(color ~ ., data = pumpkins_train) %>% \n",
+ " step_mutate(item_size = ordered(item_size, levels = c('sml', 'med', 'med-lge', 'lge', 'xlge', 'jbo', 'exjbo'))) %>%\n",
+ " step_integer(item_size, zero_based = F) %>% \n",
+ " step_dummy(all_nominal(), -all_outcomes(), one_hot = TRUE)\n",
+ "\n",
+ "# Create a logistic model specification\n",
+ "log_reg <- logistic_reg() %>% \n",
+ " set_engine(\"glm\") %>% \n",
+ " set_mode(\"classification\")\n"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "Ngayon na mayroon na tayong recipe at model specification, kailangan nating maghanap ng paraan upang pagsamahin ang mga ito sa isang object na unang magpoproseso ng data (prep+bake sa likod ng eksena), magfi-fit ng modelo sa naprosesong data, at magbibigay-daan din para sa mga posibleng aktibidad ng post-processing.\n",
+ "\n",
+ "Sa Tidymodels, ang maginhawang object na ito ay tinatawag na [`workflow`](https://workflows.tidymodels.org/) at maginhawang humahawak sa iyong mga modeling components.\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "vscode": {
+ "languageId": "r"
+ }
+ },
+ "outputs": [],
+ "source": [
+ "# Bundle modelling components in a workflow\n",
+ "log_reg_wf <- workflow() %>% \n",
+ " add_recipe(pumpkins_recipe) %>% \n",
+ " add_model(log_reg)\n",
+ "\n",
+ "# Print out the workflow\n",
+ "log_reg_wf\n"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "Kapag ang isang workflow ay *naitakda* na, maaaring `i-train` ang isang modelo gamit ang [`fit()`](https://tidymodels.github.io/parsnip/reference/fit.html) na function. Awtomatikong tatantiyahin ng workflow ang recipe at ipo-proseso ang data bago ang training, kaya hindi na natin kailangang gawin ito nang manu-mano gamit ang prep at bake.\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "vscode": {
+ "languageId": "r"
+ }
+ },
+ "outputs": [],
+ "source": [
+ "# Train the model\n",
+ "wf_fit <- log_reg_wf %>% \n",
+ " fit(data = pumpkins_train)\n",
+ "\n",
+ "# Print the trained workflow\n",
+ "wf_fit\n"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "Ipinapakita ng model print out ang mga coefficients na natutunan sa panahon ng training.\n",
+ "\n",
+ "Ngayon na na-train na natin ang model gamit ang training data, maaari na tayong gumawa ng mga prediksyon sa test data gamit ang [parsnip::predict()](https://parsnip.tidymodels.org/reference/predict.model_fit.html). Magsimula tayo sa paggamit ng model upang hulaan ang mga label para sa ating test set at ang mga probabilidad para sa bawat label. Kapag ang probabilidad ay higit sa 0.5, ang predicted class ay `WHITE`, kung hindi naman ay `ORANGE`.\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "vscode": {
+ "languageId": "r"
+ }
+ },
+ "outputs": [],
+ "source": [
+ "# Make predictions for color and corresponding probabilities\n",
+ "results <- pumpkins_test %>% select(color) %>% \n",
+ " bind_cols(wf_fit %>% \n",
+ " predict(new_data = pumpkins_test)) %>%\n",
+ " bind_cols(wf_fit %>%\n",
+ " predict(new_data = pumpkins_test, type = \"prob\"))\n",
+ "\n",
+ "# Compare predictions\n",
+ "results %>% \n",
+ " slice_head(n = 10)\n"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "Napakaganda! Nagbibigay ito ng mas malalim na pag-unawa sa kung paano gumagana ang logistic regression.\n",
+ "\n",
+ "### Mas malinaw na pag-unawa gamit ang confusion matrix\n",
+ "\n",
+ "Ang paghahambing ng bawat prediksyon sa kaukulang \"ground truth\" o aktwal na halaga ay hindi masyadong epektibong paraan upang matukoy kung gaano kahusay ang modelo sa pag-predict. Sa kabutihang-palad, may ilang karagdagang kakayahan ang Tidymodels: [`yardstick`](https://yardstick.tidymodels.org/) - isang package na ginagamit upang sukatin ang bisa ng mga modelo gamit ang performance metrics.\n",
+ "\n",
+ "Isa sa mga performance metric na nauugnay sa mga classification problem ay ang [`confusion matrix`](https://wikipedia.org/wiki/Confusion_matrix). Ang confusion matrix ay naglalarawan kung gaano kahusay ang isang classification model sa pagganap. Ang confusion matrix ay nagtatala kung ilang halimbawa sa bawat klase ang tama na na-classify ng isang modelo. Sa ating kaso, ipapakita nito kung ilang orange pumpkins ang na-classify bilang orange at kung ilang white pumpkins ang na-classify bilang white; ipinapakita rin ng confusion matrix kung ilan ang na-classify sa **maling** mga kategorya.\n",
+ "\n",
+ "Ang [**`conf_mat()`**](https://tidymodels.github.io/yardstick/reference/conf_mat.html) na function mula sa yardstick ang nagkakalkula ng cross-tabulation ng mga observed at predicted na klase.\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "vscode": {
+ "languageId": "r"
+ }
+ },
+ "outputs": [],
+ "source": [
+ "# Confusion matrix for prediction results\n",
+ "conf_mat(data = results, truth = color, estimate = .pred_class)\n"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "Tukuyin natin ang confusion matrix. Ang ating modelo ay inatasang uriin ang mga kalabasa sa dalawang binary na kategorya, kategoryang `puti` at kategoryang `hindi-puti`.\n",
+ "\n",
+ "- Kapag ang iyong modelo ay nag-predict na ang kalabasa ay puti at ito ay talagang kabilang sa kategoryang 'puti', tinatawag natin itong `true positive`, na makikita sa itaas na kaliwang numero.\n",
+ "\n",
+ "- Kapag ang iyong modelo ay nag-predict na ang kalabasa ay hindi puti at ito ay talagang kabilang sa kategoryang 'puti', tinatawag natin itong `false negative`, na makikita sa ibabang kaliwang numero.\n",
+ "\n",
+ "- Kapag ang iyong modelo ay nag-predict na ang kalabasa ay puti at ito ay talagang kabilang sa kategoryang 'hindi-puti', tinatawag natin itong `false positive`, na makikita sa itaas na kanang numero.\n",
+ "\n",
+ "- Kapag ang iyong modelo ay nag-predict na ang kalabasa ay hindi puti at ito ay talagang kabilang sa kategoryang 'hindi-puti', tinatawag natin itong `true negative`, na makikita sa ibabang kanang numero.\n",
+ "\n",
+ "| Katotohanan |\n",
+ "|:-----------:|\n",
+ "\n",
+ "| | | |\n",
+ "|---------------|--------|-------|\n",
+ "| **Predicted** | PUTI | KAHEL |\n",
+ "| PUTI | TP | FP |\n",
+ "| KAHEL | FN | TN |\n",
+ "\n",
+ "Tulad ng maaaring nahulaan mo, mas mainam na magkaroon ng mas mataas na bilang ng true positives at true negatives at mas mababang bilang ng false positives at false negatives, na nagpapahiwatig na mas mahusay ang pagganap ng modelo.\n",
+ "\n",
+ "Ang confusion matrix ay kapaki-pakinabang dahil nagbibigay ito ng iba pang mga sukatan na makakatulong sa atin na mas mahusay na suriin ang pagganap ng isang classification model. Talakayin natin ang ilan sa mga ito:\n",
+ "\n",
+ "🎓 Precision: `TP/(TP + FP)` na tinutukoy bilang ang proporsyon ng mga predicted na positibo na talagang positibo. Tinatawag din itong [positive predictive value](https://en.wikipedia.org/wiki/Positive_predictive_value \"Positive predictive value\").\n",
+ "\n",
+ "🎓 Recall: `TP/(TP + FN)` na tinutukoy bilang ang proporsyon ng mga positibong resulta mula sa bilang ng mga sample na talagang positibo. Kilala rin bilang `sensitivity`.\n",
+ "\n",
+ "🎓 Specificity: `TN/(TN + FP)` na tinutukoy bilang ang proporsyon ng mga negatibong resulta mula sa bilang ng mga sample na talagang negatibo.\n",
+ "\n",
+ "🎓 Accuracy: `TP + TN/(TP + TN + FP + FN)` Ang porsyento ng mga label na tamang na-predict para sa isang sample.\n",
+ "\n",
+ "🎓 F Measure: Isang weighted average ng precision at recall, kung saan ang pinakamainam ay 1 at ang pinakamasama ay 0.\n",
+ "\n",
+ "Kalkulahin natin ang mga sukatan na ito!\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "vscode": {
+ "languageId": "r"
+ }
+ },
+ "outputs": [],
+ "source": [
+ "# Combine metric functions and calculate them all at once\n",
+ "eval_metrics <- metric_set(ppv, recall, spec, f_meas, accuracy)\n",
+ "eval_metrics(data = results, truth = color, estimate = .pred_class)\n"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "## I-visualize ang ROC curve ng modelong ito\n",
+ "\n",
+ "Gawin natin ang isa pang visualization upang makita ang tinatawag na [`ROC curve`](https://en.wikipedia.org/wiki/Receiver_operating_characteristic):\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "vscode": {
+ "languageId": "r"
+ }
+ },
+ "outputs": [],
+ "source": [
+ "# Make a roc_curve\n",
+ "results %>% \n",
+ " roc_curve(color, .pred_ORANGE) %>% \n",
+ " autoplot()\n"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "Ang mga ROC curve ay madalas gamitin upang makita ang output ng isang classifier sa aspeto ng tunay na positibo kumpara sa maling positibo. Karaniwan, ang mga ROC curve ay may `True Positive Rate`/Sensitibidad sa Y axis, at `False Positive Rate`/1-Specificity sa X axis. Dahil dito, mahalaga ang pagkatarik ng kurba at ang espasyo sa pagitan ng linya sa gitna at ng kurba: nais mo ng kurba na mabilis na tumataas at lumalampas sa linya. Sa ating kaso, may mga maling positibo sa simula, at pagkatapos ay maayos na tumataas at lumalampas ang linya.\n",
+ "\n",
+ "Sa wakas, gamitin natin ang `yardstick::roc_auc()` upang kalkulahin ang aktwal na Area Under the Curve. Isang paraan ng pag-unawa sa AUC ay ang probabilidad na ang modelo ay magraranggo ng isang random na positibong halimbawa nang mas mataas kaysa sa isang random na negatibong halimbawa.\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "vscode": {
+ "languageId": "r"
+ }
+ },
+ "outputs": [],
+ "source": [
+ "# Calculate area under curve\n",
+ "results %>% \n",
+ " roc_auc(color, .pred_ORANGE)\n"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "Ang resulta ay nasa paligid ng `0.975`. Dahil ang AUC ay may saklaw mula 0 hanggang 1, nais mo ng mataas na score, dahil ang isang modelo na 100% tama sa mga prediksyon nito ay magkakaroon ng AUC na 1; sa kasong ito, ang modelo ay *medyo maganda*.\n",
+ "\n",
+ "Sa mga susunod na aralin tungkol sa mga klasipikasyon, matututuhan mo kung paano pahusayin ang mga score ng iyong modelo (tulad ng pagharap sa hindi balanseng datos sa kasong ito).\n",
+ "\n",
+ "## 🚀Hamunin\n",
+ "\n",
+ "Marami pang dapat tuklasin tungkol sa logistic regression! Ngunit ang pinakamainam na paraan upang matuto ay ang mag-eksperimento. Maghanap ng dataset na angkop para sa ganitong uri ng pagsusuri at bumuo ng modelo gamit ito. Ano ang natutunan mo? tip: subukan ang [Kaggle](https://www.kaggle.com/search?q=logistic+regression+datasets) para sa mga kawili-wiling dataset.\n",
+ "\n",
+ "## Pagsusuri at Pag-aaral sa Sarili\n",
+ "\n",
+ "Basahin ang unang ilang pahina ng [papel na ito mula sa Stanford](https://web.stanford.edu/~jurafsky/slp3/5.pdf) tungkol sa ilang praktikal na gamit ng logistic regression. Pag-isipan ang mga gawain na mas angkop para sa isa o ibang uri ng regression na pinag-aralan natin hanggang sa puntong ito. Ano ang mas angkop na gamitin?\n"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "\n---\n\n**Paunawa**: \nAng dokumentong ito ay isinalin gamit ang AI translation service na [Co-op Translator](https://github.com/Azure/co-op-translator). Bagama't sinisikap naming maging tumpak, pakitandaan na ang mga awtomatikong pagsasalin ay maaaring maglaman ng mga pagkakamali o hindi pagkakatugma. Ang orihinal na dokumento sa orihinal nitong wika ang dapat ituring na opisyal na sanggunian. Para sa mahalagang impormasyon, inirerekomenda ang propesyonal na pagsasalin ng tao. Hindi kami mananagot sa anumang hindi pagkakaunawaan o maling interpretasyon na maaaring magmula sa paggamit ng pagsasaling ito.\n"
+ ]
+ }
+ ],
+ "metadata": {
+ "anaconda-cloud": "",
+ "kernelspec": {
+ "display_name": "R",
+ "langauge": "R",
+ "name": "ir"
+ },
+ "language_info": {
+ "codemirror_mode": "r",
+ "file_extension": ".r",
+ "mimetype": "text/x-r-source",
+ "name": "R",
+ "pygments_lexer": "r",
+ "version": "3.4.1"
+ },
+ "coopTranslator": {
+ "original_hash": "feaf125f481a89c468fa115bf2aed580",
+ "translation_date": "2025-08-29T14:54:09+00:00",
+ "source_file": "2-Regression/4-Logistic/solution/R/lesson_4-R.ipynb",
+ "language_code": "tl"
+ }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 1
+}
\ No newline at end of file
diff --git a/translations/tl/2-Regression/4-Logistic/solution/notebook.ipynb b/translations/tl/2-Regression/4-Logistic/solution/notebook.ipynb
new file mode 100644
index 000000000..0a5904734
--- /dev/null
+++ b/translations/tl/2-Regression/4-Logistic/solution/notebook.ipynb
@@ -0,0 +1,1255 @@
+{
+ "cells": [
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "## Logistic Regression - Aralin 4\n",
+ "\n",
+ "I-load ang mga kinakailangang library at dataset. I-convert ang data sa isang dataframe na naglalaman ng subset ng data:\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 63,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "
\n",
+ "\n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
\n",
+ "
City Name
\n",
+ "
Type
\n",
+ "
Package
\n",
+ "
Variety
\n",
+ "
Sub Variety
\n",
+ "
Grade
\n",
+ "
Date
\n",
+ "
Low Price
\n",
+ "
High Price
\n",
+ "
Mostly Low
\n",
+ "
...
\n",
+ "
Unit of Sale
\n",
+ "
Quality
\n",
+ "
Condition
\n",
+ "
Appearance
\n",
+ "
Storage
\n",
+ "
Crop
\n",
+ "
Repack
\n",
+ "
Trans Mode
\n",
+ "
Unnamed: 24
\n",
+ "
Unnamed: 25
\n",
+ "
\n",
+ " \n",
+ " \n",
+ "
\n",
+ "
0
\n",
+ "
BALTIMORE
\n",
+ "
NaN
\n",
+ "
24 inch bins
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
4/29/17
\n",
+ "
270.0
\n",
+ "
280.0
\n",
+ "
270.0
\n",
+ "
...
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
E
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
\n",
+ "
\n",
+ "
1
\n",
+ "
BALTIMORE
\n",
+ "
NaN
\n",
+ "
24 inch bins
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
5/6/17
\n",
+ "
270.0
\n",
+ "
280.0
\n",
+ "
270.0
\n",
+ "
...
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
E
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
\n",
+ "
\n",
+ "
2
\n",
+ "
BALTIMORE
\n",
+ "
NaN
\n",
+ "
24 inch bins
\n",
+ "
HOWDEN TYPE
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
9/24/16
\n",
+ "
160.0
\n",
+ "
160.0
\n",
+ "
160.0
\n",
+ "
...
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
N
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
\n",
+ "
\n",
+ "
3
\n",
+ "
BALTIMORE
\n",
+ "
NaN
\n",
+ "
24 inch bins
\n",
+ "
HOWDEN TYPE
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
9/24/16
\n",
+ "
160.0
\n",
+ "
160.0
\n",
+ "
160.0
\n",
+ "
...
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
N
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
\n",
+ "
\n",
+ "
4
\n",
+ "
BALTIMORE
\n",
+ "
NaN
\n",
+ "
24 inch bins
\n",
+ "
HOWDEN TYPE
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
11/5/16
\n",
+ "
90.0
\n",
+ "
100.0
\n",
+ "
90.0
\n",
+ "
...
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
N
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
5 rows × 26 columns
\n",
+ "
"
+ ],
+ "text/plain": [
+ " City Name Type Package Variety Sub Variety Grade Date \n",
+ "0 BALTIMORE NaN 24 inch bins NaN NaN NaN 4/29/17 \\\n",
+ "1 BALTIMORE NaN 24 inch bins NaN NaN NaN 5/6/17 \n",
+ "2 BALTIMORE NaN 24 inch bins HOWDEN TYPE NaN NaN 9/24/16 \n",
+ "3 BALTIMORE NaN 24 inch bins HOWDEN TYPE NaN NaN 9/24/16 \n",
+ "4 BALTIMORE NaN 24 inch bins HOWDEN TYPE NaN NaN 11/5/16 \n",
+ "\n",
+ " Low Price High Price Mostly Low ... Unit of Sale Quality Condition \n",
+ "0 270.0 280.0 270.0 ... NaN NaN NaN \\\n",
+ "1 270.0 280.0 270.0 ... NaN NaN NaN \n",
+ "2 160.0 160.0 160.0 ... NaN NaN NaN \n",
+ "3 160.0 160.0 160.0 ... NaN NaN NaN \n",
+ "4 90.0 100.0 90.0 ... NaN NaN NaN \n",
+ "\n",
+ " Appearance Storage Crop Repack Trans Mode Unnamed: 24 Unnamed: 25 \n",
+ "0 NaN NaN NaN E NaN NaN NaN \n",
+ "1 NaN NaN NaN E NaN NaN NaN \n",
+ "2 NaN NaN NaN N NaN NaN NaN \n",
+ "3 NaN NaN NaN N NaN NaN NaN \n",
+ "4 NaN NaN NaN N NaN NaN NaN \n",
+ "\n",
+ "[5 rows x 26 columns]"
+ ]
+ },
+ "execution_count": 63,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "import pandas as pd\n",
+ "import numpy as np\n",
+ "\n",
+ "full_pumpkins = pd.read_csv('../../data/US-pumpkins.csv')\n",
+ "\n",
+ "full_pumpkins.head()\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 64,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "
\n",
+ "\n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
\n",
+ "
City Name
\n",
+ "
Package
\n",
+ "
Variety
\n",
+ "
Origin
\n",
+ "
Item Size
\n",
+ "
Color
\n",
+ "
\n",
+ " \n",
+ " \n",
+ "
\n",
+ "
2
\n",
+ "
BALTIMORE
\n",
+ "
24 inch bins
\n",
+ "
HOWDEN TYPE
\n",
+ "
DELAWARE
\n",
+ "
med
\n",
+ "
ORANGE
\n",
+ "
\n",
+ "
\n",
+ "
3
\n",
+ "
BALTIMORE
\n",
+ "
24 inch bins
\n",
+ "
HOWDEN TYPE
\n",
+ "
VIRGINIA
\n",
+ "
med
\n",
+ "
ORANGE
\n",
+ "
\n",
+ "
\n",
+ "
4
\n",
+ "
BALTIMORE
\n",
+ "
24 inch bins
\n",
+ "
HOWDEN TYPE
\n",
+ "
MARYLAND
\n",
+ "
lge
\n",
+ "
ORANGE
\n",
+ "
\n",
+ "
\n",
+ "
5
\n",
+ "
BALTIMORE
\n",
+ "
24 inch bins
\n",
+ "
HOWDEN TYPE
\n",
+ "
MARYLAND
\n",
+ "
lge
\n",
+ "
ORANGE
\n",
+ "
\n",
+ "
\n",
+ "
6
\n",
+ "
BALTIMORE
\n",
+ "
36 inch bins
\n",
+ "
HOWDEN TYPE
\n",
+ "
MARYLAND
\n",
+ "
med
\n",
+ "
ORANGE
\n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ " City Name Package Variety Origin Item Size Color\n",
+ "2 BALTIMORE 24 inch bins HOWDEN TYPE DELAWARE med ORANGE\n",
+ "3 BALTIMORE 24 inch bins HOWDEN TYPE VIRGINIA med ORANGE\n",
+ "4 BALTIMORE 24 inch bins HOWDEN TYPE MARYLAND lge ORANGE\n",
+ "5 BALTIMORE 24 inch bins HOWDEN TYPE MARYLAND lge ORANGE\n",
+ "6 BALTIMORE 36 inch bins HOWDEN TYPE MARYLAND med ORANGE"
+ ]
+ },
+ "execution_count": 64,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "# Select the columns we want to use\n",
+ "columns_to_select = ['City Name','Package','Variety', 'Origin','Item Size', 'Color']\n",
+ "pumpkins = full_pumpkins.loc[:, columns_to_select]\n",
+ "\n",
+ "# Drop rows with missing values\n",
+ "pumpkins.dropna(inplace=True)\n",
+ "\n",
+ "pumpkins.head()"
+ ]
+ },
+ {
+ "attachments": {},
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "# Tingnan natin ang ating datos!\n",
+ "\n",
+ "Sa pamamagitan ng pag-visualisa gamit ang Seaborn\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 65,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ ""
+ ]
+ },
+ "execution_count": 65,
+ "metadata": {},
+ "output_type": "execute_result"
+ },
+ {
+ "data": {
+ "image/png": "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S0tLab1CCxcuxAcffIBXXnkFbm5uGDZsGF555RW89dZbBtd1cnLCjBkzMGjQIFy6dAleXl4AYHDuomRnZyM7O1t6nJ6eXqJxRERU/THQEMzMzHD79u2nuuaQIUOwefNmDB06FL1798bp06dx5syZYseYmZkBAHJycsq0Znh4OD755BO9dssOi2BlaQ7bBv5lmpeIiKoe76F5jomiiN27d+PXX39F586di+1br149affFwsICPj4+5V5/+fLlOH36NMaOHYvly5fDwcGhyL4pKSn44osvULduXWl3BgCmTJkiq8vCwgIHDhwwOEdoaCjS0tKk4/r16+W+BiIiqh64Q/Mc2rFjBywsLJCbm4uCggK8+eabmDVrVrFjDhw4ILs3pUaNGuWuw9HREe+99x62bNmCnj17GuxTr149iKKI//77D82aNcPGjRthYmIinZ80aRKCg4NlY+rWrWtwLrVaDbVaXe66iYio+mGgeQ5ptVpERkbCxMQEderUgUr15B8Dd3f3Et1DU1oqlarY9Q8cOAArKys4OjoavNnX3t4eHh4eFV4XEREpCwPNc8jc3FwxIaCyghQRET1bGGioRG7duoWsrCxZm52dXYW89FQeGRkZep+HU7NmTb23mBMR0bONNwVTiXh5ecHJyUl2/PHHH1VdFmbMmKFX1+TJk6u6LCIiesoEURTFqi6CqCqkp6fD2toaV05u4du2iYgUjjs0REREpHgMNERERKR4DDRERESkeAw0REREpHgMNERERKR4DDRERESkeAw0REREpHgMNERERKR4DDRERESkeAw0REREpHgMNERERKR4/LZteu7Z1tfy27mJiBSOOzRERESkeAw0REREpHgMNERERKR4DDRERESkeAw0REREpHgMNERERKR4DDRERESkeAw0REREpHgMNERERKR4/KRgeu5dXdUElmYlz/Zuw65UYjVERFQW3KEhIiIixWOgISIiIsVjoCEiIiLFY6AhIiIixWOgISIiIsVjoCEiIiLFY6AhIiIixWOgISIiIsVjoCEiIiLFY6AhIiIixWOgISIiIsVjoCEiIiLFY6AhIiIixWOgISIiIsVjoCml4OBgCIIgHXZ2dggMDMSpU6dk/QRBwJYtW2RtcXFxeO211+Dg4ABTU1M0aNAAAwYMwP79+4td083NDYIgYO3atXrnfHx8IAgCVq5cqXcuPDwcxsbG+Pzzzw3Om5qaipCQENSvXx9qtRrOzs7o0aMH9uzZI1v7q6++kh6LooiJEyfCysoKOp2uyFqLOt58803UrFkTq1evlo0rKChA+/bt0bdvXwDy59nExAQeHh4ICwtDXl4eAECn0xW5RmpqarHPJxERPXsYaMogMDAQKSkpSElJwZ49e6BSqfDaa68VO2bp0qXo0qUL7OzssG7dOpw/fx6bN29G+/btMW7cuCeu6ezsjJiYGFnbkSNHkJqaCnNzc4NjoqOjMXnyZERHR+udS05ORsuWLbF37158/vnnSExMRGxsLLRaLUaPHm1wvvz8fAwbNgyrVq1CXFwc/Pz89PocO3ZMem42btwIADh//rzUFhkZiYiICISEhCAlJUUaN3/+fPz1119YtmyZ1Fb4PF+8eBETJkzArFmz9MLZo3MXHo6OjoafRCIiemapqroAJVKr1dBoNAAAjUaDqVOnomPHjvj333/h4OCg1//atWsYO3Ysxo4diy+//FJ2rmnTpvjwww+fuOagQYOwYMECXL9+Hc7OzgAeBpZBgwZh1apVev337duHBw8eICwsDKtWrcLvv/+O9u3bS+dHjRoFQRAQHx8vC0Q+Pj4YOnSo3nzZ2dkICgrC8ePHceDAAXh5eRms89Hrt7W1BQA4OjrCxsZGag8JCcGWLVswYsQI7NixA+fOncOMGTOwbt062NvbS/0efZ7ff/99bN68Gdu2bUNoaKjU5/G5iYjo+cQdmnLKzMzEDz/8AA8PD9jZ2Rnss3HjRuTm5mLy5MkGzwuC8MR1ateujYCAAHz33XcAgP/++w/r1q0zGD4AICoqCkFBQahRowaCgoIQFRUlnbtz5w5iY2MxevRog7s7jweEzMxMdO/eHWfPnsWhQ4eKDDMlJQgCYmJicODAAaxYsQLBwcEYOHAgXn/99WLHmZmZIScnp8zrZmdnIz09XXYQEdGzgTs0ZbBjxw5YWFgAAO7fvw8nJyfs2LEDRkaG8+GFCxdgZWUl7TYAD0POkCFDpMeHDx9GkyZNil136NChmDBhAj766CNs2LABDRo0QPPmzfX6paenY8OGDTh8+DAAYPDgwejYsSMWLlwICwsLXLp0CaIowtvbu0TXO3v2bFhaWiIpKcngDlRZuLq64quvvsLw4cNRr149/Pbbb0X2FUURe/bswa+//oqQkBDZuXr16unNe+bMGYPzhIeH45NPPtFrt+ywCFaW+sHOtoF/SS6FiIiqAe7QlIFWq0VCQgISEhIQHx+PgIAAdOvWDVevXi1yzOO7MAEBAUhISMDPP/+M+/fvIz8//4nrdu/eHZmZmdi/fz+io6OL3J1Zs2YNGjRogGbNmgEAmjdvDldXV6xbtw7Aw4BQGq+88gru37+PuXPnlmrck7zzzjtwcnJCSEgIrKys9M4XBkdTU1N069YNAwYMwKxZs2R9Dhw4IP1dJCQk4JdffilyvdDQUKSlpUnH9evXK/R6iIio6nCHpgzMzc3h4eEhPf72229hbW2NFStW4NNPP9Xr37BhQ6SlpSE1NVXapbGwsICHhwdUqpL/FahUKrz11luYOXMmjh49is2bNxvsFxUVhTNnzsjmLigoQHR0NIYNG4aGDRtCEAScO3euROt26dIFISEheOONN1BQUICFCxeWuOYnUalURT4HWq0WkZGRMDExQZ06dQz2c3d3L/E9NGq1Gmq1ujzlEhFRNcUdmgogCAKMjIzw4MEDg+f79u2LGjVqYN68eeVea+jQodi3bx/eeOMN1KpVS+98YmIijh8/Dp1OJ9u50Ol0OHz4MM6dOwdbW1sEBARgyZIluH//vt4c9+7d02t75ZVXsH37dqxYsaJENzFXhMLg6OLiUqrgR0REzx/+liiD7Oxs6bNO7t69i8WLFyMzMxM9evQw2N/FxQXz58/HmDFjcOfOHQQHB8Pd3R137tzBDz/8AAAwNjYu0dqNGjXC//73P9SsWdPg+aioKLRu3RqdOnXSO9eqVStERUXh888/x5IlS/Dyyy+jdevWCAsLQ9OmTZGXl4ddu3YhMjISSUlJeuP9/f2xY8cO9OjRAwUFBVi8eHGJaq5Mt27dQlZWlqzNzs4ONWrUqKKKiIioKnCHpgxiY2Ph5OQEJycntGnTBseOHcP69esNfi5LoZCQEPz222/4999/0bdvXzRs2BCvvvoqrly5gtjY2CfeEPwoOzs7mJmZ6bXn5OTghx9+QJ8+fQyO69OnD1atWoXc3FzUr18fJ06cgFarxYQJE9C4cWN07doVe/bsQWRkZJFrd+7cGT///DNWrlyJ0aNHl/p+nIrm5eUl/V0UHn/88UeV1kRERE+fIFb1bySiKpKeng5ra2tcObmF73IiIlI47tAQERGR4jHQEBERkeIx0BAREZHiMdAQERGR4jHQEBERkeIx0BAREZHiMdAQERGR4jHQEBERkeIx0BAREZHiMdAQERGR4jHQEBERkeLx27bpuWdbXwsrK6uqLoOIiMqBOzRERESkeAw0REREpHgMNERERKR4DDRERESkeAw0REREpHgMNERERKR4DDRERESkeAw0REREpHgMNERERKR4/KRgeu5dXdUElmaVl+3dhl2ptLmJiOgh7tAQERGR4jHQEBERkeIx0BAREZHiMdAQERGR4jHQEBERkeIx0BAREZHiMdAQERGR4jHQEBERkeIx0BAREZHiMdAQERGR4jHQEBERkeIx0BAREZHiMdAQERGR4jHQEBERkeIx0ChMcHAwBEHAyJEj9c6NHj0agiAgODhY6tuzZ0+9sREREbJxW7ZsgSAI0mOdTgdBEHDv3j29Nby9vaFWq5GamirrW9yh0+kwa9YsNG/eXG++5ORkCIKAhIQEg/M5ODjg1VdfRWJiosHn4fEjMDCwBM8iERE9axhoFMjZ2Rlr167FgwcPpLasrCysXr0aLi4uxY41NTXFvHnzcPfu3VKve/DgQTx48AB9+/bFd999BwBo3749UlJSpKN///4IDAyUtbVv377Ua50/fx4pKSn49ddfkZ2dje7duyMnJ0fW5/F1UlJSsGbNmlKvRUREysdAo0AtWrSAs7MzNm3aJLVt2rQJLi4uePHFF4sd6+/vD41Gg/Dw8FKvGxUVhTfffBNvvfUWoqOjAQAmJibQaDTSYWZmBrVaLWszMTEp9VqOjo7QaDRo0aIFxo4di+vXr+PcuXOyPo+vo9FoUKtWrVKvRUREysdAo1BDhw5FTEyM9Dg6OhrvvPPOE8cZGxtj7ty5+Prrr/H333+XeL2MjAysX78egwcPRteuXZGWloYDBw6UqfbSSEtLw9q1awGgTMHoUdnZ2UhPT5cdRET0bFBVdQFUNoMHD0ZoaCiuXr0KADh06BDWrl0LnU73xLG9evVC8+bNMXPmTERFRZVovbVr16Jhw4bw8fEBAAwcOBBRUVHo2LFjma+hOPXq1QMA3L9/HwDw+uuvw9vbW9Znx44dsLCwkLVNmzYN06ZNMzhneHg4PvnkE712yw6LYGVpXhFlG3Tn8u4n9rFt4F9p6xMRPQ8YaBTKwcEB3bt3x8qVKyGKIrp37w57e/sSj583bx46d+6MiRMnlqh/dHQ0Bg8eLD0ePHgwfH198fXXX8PS0rLU9T/JgQMHULNmTRw5cgRz587FsmXL9PpotVpERkbK2mxtbYucMzQ0FOPHj5cep6enw9nZueKKJiKiKsNAo2BDhw7FBx98AABYsmRJqcZ26tQJAQEBCA0Nld4VVZSzZ8/iyJEjiI+Px5QpU6T2/Px8rF27FiNGjHjielZWVkhLS9NrL3wnlbW1tazd3d0dNjY28PLywq1btzBgwADs379f1sfc3BweHh5PXLuQWq2GWq0ucX8iIlIO3kOjYIGBgcjJyUFubi4CAgJKPT4iIgLbt2/H4cOHi+0XFRWFTp064c8//0RCQoJ0jB8/vsQvWXl5eeHvv//GzZs3Ze0nTpyAqalpse/OGj16NE6fPo3NmzeXaC0iInr+cIdGwYyNjZGUlCT9ubSaNGmCQYMGYdGiRUX2yc3Nxffff4+wsDA0btxYdm748OH48ssvcebMGenemqIEBATAy8sLQUFB+PTTT6HRaHDixAl8/PHHGDNmTLH116xZEyNGjMDMmTPRs2dP6TNzsrOzpc/DKaRSqUr10hsRET0buEOjcFZWVrCysirz+LCwMBQUFBR5ftu2bbh9+zZ69eqld65Ro0Zo1KhRiXZpVCoVfvvtN7i4uCAoKAiNGzfGzJkzMWbMGMyePfuJ4z/44AMkJSVh/fr1UltsbCycnJxkR4cOHZ44FxERPXsEURTFqi6CqCqkp6fD2toaV05uqdR3OZUE3+VERFQ+3KEhIiIixWOgISIiIsVjoCEiIiLFY6AhIiIixWOgISIiIsVjoCEiIiLFY6AhIiIixWOgISIiIsVjoCEiIiLFY6AhIiIixWOgISIiIsVjoCEiIiLFU1V1AURVzba+tlzfWE5ERFWPOzRERESkeAw0REREpHgMNERERKR4DDRERESkeAw0REREpHgMNERERKR4pQ40cXFxlVEHERERUZmVOtAEBgaiQYMG+PTTT3H9+vXKqImIiIioVEodaG7cuIEPPvgAGzZsQP369REQEICffvoJOTk5lVEfUaW7uqoJkqPcq7oMIiIqh1IHGnt7e4wbNw4JCQk4evQoPD09MWrUKNSpUwcffvgh/vzzz8qok4iIiKhI5bopuEWLFggNDcUHH3yAzMxMREdHo2XLlujYsSPOnDlTUTUSERERFatMgSY3NxcbNmzAq6++CldXV/z6669YvHgxbt68iUuXLsHV1RX9+vWr6FqJiIiIDCr1l1OGhIRgzZo1EEURb731Fj777DM0btxYOm9ubo4vvvgCderUqdBCiYiIiIpS6kBz9uxZfP311+jduzfUarXBPvb29nx7NxERET01pX7JaebMmejXr59emMnLy8P+/fsBACqVCr6+vhVTIREREdETlDrQaLVa3LlzR689LS0NWq22QooiIiIiKo1SBxpRFCEIgl777du3YW5uXiFFEREREZVGie+h6d27NwBAEAQEBwfLXnLKz8/HqVOn0L59+4qvkIiIiOgJShxorK2tATzcobG0tISZmZl0zsTEBG3btsWIESMqvkIiIiKiJyhxoImJiQEAuLm5YeLEiXx5iYiIiKqNMr3LSa1WY/fu3fjmm2+QkZEBAPjnn3+QmZlZ4QUSERERPUmpP4fm6tWrCAwMxLVr15CdnY2uXbvC0tIS8+bNQ3Z2NpYtW1YZdRIREREVqdQ7NGPGjMFLL72Eu3fvyu6j6dWrF/bs2VOhxREREVHpzZo1C82bN6/qMp6qUgeaAwcO4OOPP4aJiYms3c3NDTdu3KiwwoiIiJ5XqampCAkJQf369aFWq+Hs7IwePXpw46AYpQ40BQUFyM/P12v/+++/YWlpWSFFPY+e9MPr5uaGr776Surv5uYGQRBw5MgR2Txjx46Fn5+f9HjWrFkQBAGCIEClUsHe3h6dOnXCV199hezsbNlYPz8/qe+jx8iRI6U+j7ZbWVmhVatW2Lp1q2yelStXGpzH1NRU6hMcHIyePXsW+Xw8fr1FWbNmDYyNjTF69Ogn9iUiUoLk5GS0bNkSe/fuxeeff47ExETExsZCq9U+1X/rcnNzn9paFaHUgeaVV16R/aIRBAGZmZmYOXMmXn311Yqs7blR1h9eU1NTTJky5Ynz+/j4ICUlBdeuXUNcXBz69euH8PBwtG/fXrqpu9CIESOQkpIiOz777DNZn5iYGKSkpOD48eN4+eWX0bdvXyQmJsr6WFlZ6c1z9erVUjwrJRMVFYXJkydjzZo1yMrKqvD5iYietlGjRkEQBMTHx6NPnz7w9PSEj48Pxo8fL/1P7LVr1/DGG2/AwsICVlZW6N+/P27evFnknAUFBQgLC0O9evWgVqvRvHlzxMbGSueTk5MhCALWrVsHX19fmJqa4scff6z0a61IpQ408+fPx6FDh/DCCy8gKysLb775pvRy07x58yqjxmdeSX54DXn33Xdx5MgR/PLLL8XOr1KpoNFoUKdOHTRp0gQhISHYt28fTp8+rfd3VrNmTWg0GtlhZWUl62NjYwONRgNPT0/Mnj0beXl5el9GKgiC3jy1a9cu5TNTvCtXruD333/H1KlT4enpiU2bNhXbPzs7G+np6bKDiKg6uXPnDmJjYzF69GiDH49iY2ODgoICvPHGG7hz5w727duHXbt24a+//sKAAQOKnHfhwoWYP38+vvjiC5w6dQoBAQF4/fXXcfHiRVm/qVOnYsyYMUhKSkJAQECFX19lKnWgqVevHv78809MmzYN48aNw4svvoiIiAicPHkSjo6OlVHjM60kP7xFcXd3x8iRIxEaGoqCgoJSrevt7Y1u3bo9MQQUJy8vD1FRUQCgd0/V0xATE4Pu3bvD2toagwcPlmopSnh4OKytraXD2dkZAGDZYRGs/FY8jZKJiIp16dIliKIIb2/vIvvs2bMHiYmJWL16NVq2bIk2bdpg1apV2LdvH44dO2ZwzBdffIEpU6Zg4MCB8PLywrx589C8eXO9l/bHjh2L3r17w93dHU5OThV5aZWu1IEGePh//IMHD8Znn32GpUuXYvjw4bJ3PFHJleSHtzgff/wxrly5UqatQW9vbyQnJ8vali5dCgsLC9nx+NxBQUGwsLCAWq3GuHHj4Obmhv79+8v6pKWl6c3TrVu3UtdYlIKCAqxcuRKDBw8GAAwcOBAHDx7ElStXihwTGhqKtLQ06bh+/XqF1UNEVBFEUXxin6SkJDg7O0v/UwYAL7zwAmxsbJCUlKTXPz09Hf/88w9efvllWfvLL7+s1/+ll14qY+VVr0SfQ7Nt2zZ069YNNWrUwLZt24rt+/rrr1dIYc+LkvzwFsfBwQETJ07EjBkzit1uLGrtx79odNCgQfjoo49kbY+/VLRgwQL4+/vjr7/+wrhx47Bo0SLY2trK+lhaWuLEiROytooMvbt27cL9+/el+7bs7e3RtWtXREdHY/bs2QbHqNVq2XeQERFVNw0bNoQgCDh37lyVrK/kbwEoUaDp2bMnUlNT4ejoWOw7UwRBMPgOKCpaRfzwjh8/HkuXLsXSpUtLNS4pKQnu7u6yNmtra3h4eBQ7TqPRwMPDAx4eHoiJicGrr76Ks2fPyl5yNDIyeuI85REVFYU7d+7IQlJBQQFOnTqFTz75BEZGZdp8JCKqUra2tggICMCSJUvw4Ycf6gWMe/fuoVGjRrh+/TquX78u7dKcPXsW9+7dwwsvvKA3p5WVFerUqYNDhw7B19dXaj906BBat25duRf0FJXoX/2CggLpl1VBQUGRB8NM6T36w3v//n298/fu3XviHBYWFpg+fTrmzJmj966lopw7dw6xsbHo06dPaUuWad26NVq2bIk5c+aUa57SuH37NrZu3Yq1a9ciISFBOk6ePIm7d+/it99+e2q1EBFVtCVLliA/Px+tW7fGxo0bcfHiRSQlJWHRokVo164d/P390aRJEwwaNAgnTpxAfHw83n77bfj6+hb5ktGkSZMwb948rFu3DufPn8fUqVORkJCAMWPGPOWrqzyl+uqD3NxcBAYGYtmyZWjYsGFl1fTcWbJkCV5++WW0bt0aYWFhaNq0KfLy8rBr1y5ERkYafE30ce+++y4WLFiA1atXo02bNrJzeXl5SE1NRUFBAW7fvg2dTodPP/0UzZs3x6RJk2R9//vvP6Smpsra1Go1atWqVeTaY8eORa9evTB58mTUrVsXwMOXsx6fBwAcHR2l3ZO0tDQkJCTIztvZ2Un/x3Hjxg29866urvj+++9hZ2eH/v37671k9uqrryIqKgqBgYFF1ktEVJ3Vr18fJ06cwJw5czBhwgSkpKTAwcEBLVu2RGRkJARBwNatWxESEoJOnTrByMgIgYGB+Prrr4uc88MPP0RaWhomTJiAW7du4YUXXsC2bduerd/lYinZ29uLFy5cKO0weoJ//vlHHD16tOjq6iqamJiIdevWFV9//XUxLi5OFEVRdHV1FRcsWCD1f/yxKIri6tWrRQCir6+v1DZz5kwRgAhANDY2Fm1tbcUOHTqICxYsELOysmTjfX19pb6PHgEBAVIfAOLmzZtl4woKCkRvb2/x/fffF0VRFGNiYgzOA0BMSUkRRVEUhwwZYvD8sGHDpOszdP77778XmzRpIo4aNcrg87hu3TrRxMRE/Pfff5/4nKelpYkAxCsnt4i3L+16Yn8iIqq+BFEs3V2p48aNg1qtRkRERPmSFFEVS09Ph7W1Na6c3AIrS3PYNvCv6pKIiKiMSv1t23l5eYiOjsbu3bvRsmVLvRuWvvzyyworjoiIiKgkSh1oTp8+jRYtWgAALly4IDv3+P0MRERERE9DqQPN4x9xT0RERFTV+GEdREREpHil3qEBgOPHj+Onn37CtWvXkJOTIztXnu8GIiIiIiqLUu/QrF27Fu3bt0dSUhI2b96M3NxcnDlzBnv37oW1tXVl1EhERERUrFIHmrlz52LBggXYvn07TExMsHDhQpw7dw79+/eHi4tLZdRIREREVKxSB5rLly+je/fuAAATExPcv38fgiBg3LhxWL58eYUXSERERPQkpb6HplatWtL3BdWtWxenT59GkyZNcO/ePfz3338VXiAREdHTlBzl/uROFcRt2JWnttazrsQ7NKdPnwYAdOrUCbt27QIA9OvXD2PGjMGIESMQFBSELl26VE6VREREJLl+/TqGDh2KOnXqwMTEBK6urhgzZgxu374t9fHz84MgCBAEAaampvD09ER4eDgMfUHA4cOHYWxsLL0C86jk5GQIggBHR0e9L0Bu3rw5Zs2aJWu7dOkShg4dChcXF6jVatStWxddunTBjz/+iLy8PKlfYW2PH2vXri3Tc1LiQNO0aVO0adMGTZo0Qb9+/QAAH330EcaPH4+bN2+iT58+iIqKKlMRREREVDJ//fUXXnrpJVy8eBFr1qzBpUuXsGzZMuzZswft2rXDnTt3pL4jRoxASkoKzp8/j9DQUMyYMQPLli3TmzMqKgohISHYv38//vnnH4PrZmRk4Isvvii2tvj4eLRo0QJJSUlYsmQJTp8+DZ1Oh+HDhyMyMhJnzpyR9Y+JiUFKSors6NmzZ+mfFAAl/i6nAwcOICYmBhs2bEBBQQH69OmD4cOHo2PHjmVamKiqFX6XU1paGqysrKq6HCKqJqr7S07dunXD6dOnceHCBZiZmUntqampaNCgAd5++21ERkbCz88PzZs3x1dffSX1admyJVxdXWUfsZKZmQknJyccP34cM2fORNOmTTFt2jTpfHJyMtzd3TFp0iRERkbi8uXLcHR0BPBwh6Znz56YNWsWRFGEj48Patasifj4eBgZ6e+ZiKIofauAIAjYvHlzmQPM40q8Q9OxY0dER0cjJSUFX3/9NZKTk+Hr6wtPT0/MmzcPqampFVIQERERGXbnzh38+uuvGDVqlCzMAIBGo8GgQYOwbt06vZeVRFHEgQMHcO7cOZiYmMjO/fTTT/D29oaXlxcGDx6M6Ohogy9LBQUFwcPDA2FhYQZrS0hIQFJSEiZOnGgwzACV+xVJpX6Xk7m5Od555x3s27cPFy5cQL9+/bBkyRK4uLjg9ddfr4waiYiICMDFixchiiIaNWpk8HyjRo1w9+5d/PvvvwCApUuXwsLCAmq1Gp06dUJBQQE+/PBD2ZioqCgMHjwYABAYGIi0tDTs27dPb25BEBAREYHly5fj8uXLeucLv9/Ry8tLart16xYsLCykY+nSpbIxQUFBsvMWFha4du1aKZ6R/1eurz7w8PDAtGnT8PHHH8PS0hI///xzeaYjIiKiEijh3SIYNGgQEhIScOjQIXTr1g0fffQR2rdvL50/f/484uPjERQUBABQqVQYMGBAkffEBgQEoEOHDpg+fXqJ1rezs0NCQgISEhJgY2Oj9+0CCxYskM4XHnXq1CnR3I8r01cfAMD+/fsRHR2NjRs3wsjICP3798ewYcPKOh0RERE9gYeHBwRBQFJSEnr16qV3PikpCbVq1YKDgwMAwNraGh4eHgAevrTk4eGBtm3bwt/fH8DD3Zm8vDxZiBBFEWq1GosXLzb4DQARERFo164dJk2aJGtv2LAhgIch6cUXXwQAGBsbS+urVPqRQ6PRSOfLq1Q7NP/88w/mzp0LT09P+Pn54dKlS1i0aBH++ecfrFixAm3btq2QooiIiEifnZ0dunbtiqVLl+LBgweyc6mpqfjxxx8xYMAAg/eqWFhYYMyYMZg4cSJEUUReXh5WrVqF+fPny3ZI/vzzT9SpUwdr1qwxWEPr1q3Ru3dvTJ06Vdb+4osvwtvbG1988QUKCgoq7qJLqMQ7NN26dcPu3bthb2+Pt99+G0OHDpW9TkZERESVb/HixWjfvj0CAgLw6aefwt3dHWfOnMGkSZNQt25dzJkzp8ix7733HmbPno2NGzdCpVLh7t27GDZsmN5OTOFHsYwcOdLgPHPmzIGPj49s10UQBMTExKBr1654+eWXERoaikaNGiE3Nxf79+/Hv//+C2NjY9k89+7d03tTkaWlJczNzUv7tABiCfXo0UPcsmWLmJeXV9IhRNVaWlqaCEBMS0ur6lKIiEolOTlZHDJkiFi7dm2xRo0aorOzsxgSEiL+73//k/r4+vqKY8aM0Rv73nvviT4+PuJrr70mvvrqqwbnP3r0qAhA/PPPP8UrV66IAMSTJ0/K+rz77rsiAHHmzJmy9vPnz4tDhgwR69WrJ6pUKtHa2lrs1KmT+M0334i5ublSPwAGj/Dw8DI9JyX+HBqiZw0/h4aI6NlRrnc5EREREVUHZX6XE9Gz4uqqJrA008/2/NI4IiLl4A4NERERKR4DDRERESkeAw0REREpHgMNERERKR4DDRERESkeAw0REREpHgMNERERKR4/h4aIiOgRdy7vfmpr2Tbwf2prPeu4Q0NERKQQy5Ytg6WlJfLy8qS2zMxM1KhRA35+frK+Op0OgiDg8uXLcHNzw1dffaU336xZs9C8eXODj93c3CAIQpFHcHAwABR5fu3atRV89cXjDg0REZFCaLVaZGZm4vjx42jbti0A4MCBA9BoNDh69CiysrJgamoKAIiLi4OLiwsaNGhQprWOHTuG/Px8AMDvv/+OPn364Pz589J335mZmUl9Y2JiEBgYKBtvY2NTpnXLioGGiIhIIby8vODk5ASdTicFGp1OhzfeeAN79+7FkSNHpJ0anU4HrVZb5rUcHBykP9va2gIAHB0dDQYVGxsbaDSaMq9VEfiSExERkYJotVrExcVJj+Pi4uDn5wdfX1+p/cGDBzh69Gi5Ao3SMNAQEREpiFarxaFDh5CXl4eMjAycPHkSvr6+6NSpE3Q6HQDg8OHDyM7OlgWaKVOmwMLCQnbMnTu3QmoKCgrSm/vatWsVMndJ8SUnIiIiBfHz88P9+/dx7Ngx3L17F56ennBwcICvry/eeecdZGVlQafToX79+nBxcZHGTZo0SbqRt9CiRYuwf//+cte0YMEC+PvL37FVp06dcs9bGtyheQYEBwcbvMP80qVLAIDw8HAYGxvj888/1xu7cuVK2euhK1eulMYbGRnByckJAwYMwLVr1yCKIvz9/REQEKA3z9KlS2FjYwN/f/9i74p3c3OTxpSmrpJe8+M3pRERPWs8PDxQr149xMXFIS4uDr6+vgAeBghnZ2f8/vvviIuLQ+fOnWXj7O3t4eHhITsK740pL41Goze3SvV090wYaJ4RgYGBSElJkR3u7u4AgOjoaEyePBnR0dElmsvKygopKSm4ceMGNm7ciPPnz6Nfv34QBAExMTE4evQovvnmG6n/lStXMHnyZHz99dfYuHGjrAbg4d3vhY+PHTsmjSttXSW55jVr1pRpLiIiJdFqtdDpdNDpdLK3a3fq1Ak7d+5EfHz8c3X/DMBA88xQq9XQaDSyw9jYGPv27cODBw8QFhaG9PR0/P7770+cSxAEaDQaODk5oX379hg2bBji4+ORnp4OZ2dnLFy4EBMnTsSVK1cgiiKGDRuGV155BW+99Rasra1lNQD/f/e7RqOR7povS10lueZatWqVeh4iIqXRarU4ePAgEhISpB0aAPD19cU333yDnJycpxpo7t27h9TUVNlx//79p7Y+wHtonnlRUVEICgpCjRo1EBQUhKioKLRv377E42/duoXNmzfD2NgYxsbGAIAhQ4Zg8+bNGDp0KHr37o3Tp0/jzJkzT7WussjOzkZ2drb0OD09vVLXIyJlUsKn92q1Wjx48ADe3t6oXbu21O7r64uMjAzp7d1PyzvvvKPXFh4ejqlTpz61GiCS4g0ZMkQ0NjYWzc3NpaNv375iWlqaaGZmJiYkJIiiKIonT54ULSwsxIyMDGlsTEyMaG1tLXsMQDQ3Nxdr1qwpAhABiB9++KFszZs3b4r29vaikZGRuHnz5iJrA6B3vix1leSazc3NxTlz5hQ5ZubMmdL1PHpcOblFvH1pV5HjiIio+uMOzTNCq9UiMjJSemxubo41a9agQYMGaNasGQCgefPmcHV1xbp16zBs2LAi57K0tMSJEyeQm5uLnTt34scff8ScOXNkfRwdHfHee+9hy5Yt6NmzZ6lqLWtdj3v8mgEUe4NbaGgoxo8fLz0ufAmNiIiUj4HmGWFubg4PDw9ZW1RUFM6cOSO707ygoADR0dHFBgcjIyNprkaNGuHy5ct4//338f3338v6qVSqMt3FXta6HmfomoujVquhVqtLVSsRESkDA80zKjExEcePH4dOp5PtWty5cwd+fn44d+4cvL29SzTX1KlT0aBBA4wbNw4tWrSoNnUREREVYqB5RkVFRaF169bo1KmT3rlWrVohKirK4Oe/GOLs7IxevXphxowZ2LFjx1OrKz8/HwkJCbI+arUajRo1AvDwJt/U1FTZeZVKBXt7+3LVSEREysO3bT+DcnJy8MMPP6BPnz4Gz/fp0werVq1Cbm5uieccN24cfv75Z8THxz+1ujIzM/Hiiy/Kjh49ekj9Y2Nj4eTkJDs6dOhQ5vqIiEi5BFEUxaougqgqpKenw9raGldOboGVpbki3qpJRESGcYeGiIiIFI+BhoiIiBSPgYaIiIgUj4GGiIiIFI+BhoiIiBSPgYaIiIgUj4GGiIiIFI+BhoiIiBSPgYaIiIgUj4GGiIiIFI+BhoiIiBSPgYaIiIgUT1XVBRBVNdv6WlhZWVV1GUREVA7coSEiIiLFY6AhIiIixWOgISIiIsVjoCEiIiLFY6AhIiIixWOgISIiIsVjoCEiIiLFY6AhIiIixWOgoefe1VVNkBzlXtVlEBFROTDQEBERkeIx0BAREZHiMdAQERGR4jHQEBERkeIx0BAREZHiMdAQERGR4jHQEBERkeIx0BAREZHiMdAQERGR4jHQEBERkeIx0BAREZHiMdAQERGR4jHQEBERkeIx0BAREZHiMdAQERGR4jHQKFRwcDAEQZAOOzs7BAYG4tSpU7J+giBgy5YteuOTk5MhCAISEhL0zvn5+WHs2LHSYzc3N9lahUdERESR8xZ3zJ49G+bm5rh06ZJs7D///INatWph8eLFeuuam5ujRYsWWL9+vdR/1qxZBuf39vYuxTNJRETPAgYaBQsMDERKSgpSUlKwZ88eqFQqvPbaa5WyVlhYmLRW4RESEqLXz9nZWdZnwoQJ8PHxkbVNnDgRAQEBCA4ORkFBgTR2xIgRaNmyJUaPHq237smTJ9GqVSsMGDAAv//+u3T+8blTUlJw8ODBSnkOiIio+lJVdQFUdmq1GhqNBgCg0WgwdepUdOzYEf/++y8cHBwqdC1LS0tpreIYGxvL+llYWEClUumN/eabb+Dj44Mvv/wSEydOxMqVK3Ho0CEkJiZCEAS9dTUaDZYsWYIffvgB27dvR/v27QHA4NxFyc7ORnZ2tvQ4PT29ROOIiKj6Y6B5RmRmZuKHH36Ah4cH7OzsqrqcJ3JwcMDy5csRFBSEZs2aYdy4cVi4cCGcnZ2LHKNSqVCjRg3k5OSUac3w8HB88skneu2ubyfCysqqTHMSEVH1wJecFGzHjh2wsLCAhYUFLC0tsW3bNqxbtw5GRhX/1zplyhRprcLjwIED5ZqzZ8+e6N+/PwIDA+Hr64shQ4YU2TcnJwfh4eFIS0tD586dpfbExES9ukaOHGlwjtDQUKSlpUnH9evXy1U/ERFVH9yhUTCtVovIyEgAwN27d7F06VJ069YN8fHxcHV1rdC1Jk2ahODgYFlb3bp1yz3v9OnTsWrVKnz88ccGz0+ZMgUff/wxsrKyYGFhgYiICHTv3l067+XlhW3btsnGFLXbolaroVary10zERFVPww0CmZubg4PDw/p8bfffgtra2usWLECn376abFjC3/pp6Wl6Z27d+8erK2tZW329vaytSqKSqWS/fdxhUHKwsICtWvXlt1fAwAmJiaVUhcRESkLX3J6hgiCACMjIzx48OCJfW1tbWFvb48//vhD1p6eno5Lly7B09OzssoslcIgpdFo9MIMERFRIe7QKFh2djZSU1MBPHzJafHixcjMzESPHj1k/a5cuaL3eTMNGzbE+PHjMXfuXNSuXRtt27bF7du3MXv2bDg4OKB3796y/hkZGdJahWrWrFnlN9Pm5eXp1SUIAmrXrl1FFRERUVVgoFGw2NhYODk5AXj49mZvb2+sX78efn5+sn7jx4/XG3vgwAFMnjwZFhYWmDdvHi5fvgxbW1u8/PLLiIuLg5mZmaz/jBkzMGPGDFnbe++9h2XLllXsRZXSmTNnpOegkFqtRlZWVhVVREREVUEQRVGs6iKIqkJ6ejqsra2RlpZW5TtNRERUPryHhoiIiBSPgYaIiIgUj4GGiIiIFI+BhoiIiBSPgYaIiIgUj4GGiIiIFI+BhoiIiBSPgYaIiIgUj4GGiIiIFI+BhoiIiBSPgYaIiIgUj4GGiIiIFI+BhoiIiBSPgYaIiIgUj4GGiIiIFI+BhoiIiBSPgYaIiIgUj4GGiIiIFI+BhoiIiBSPgYaIiIgUj4GGiIiIFI+Bhp57V1c1QXKUe1WXQURE5cBAQ0RERIrHQENERESKx0BDREREisdAQ0RERIrHQENERESKx0BDREREisdAQ0RERIrHQENERESKx0BDREREisdAQ0RERIrHQENERESKx0BDREREisdAQ0RERIrHQENERESKx0BTCsHBwejZs6esbcOGDTA1NcX8+fOlPoIgICIiQtZvy5YtEARBerxy5UrY2NgYXEcQBGzZskXWtnHjRvj5+cHa2hoWFhZo2rQpwsLCcOfOnSLnS0pKgrOzM/r164ecnJxi13y09sePwMDAIsfMmjULzZs312tPTk6GIAhISEiQPTZ0HDlyRDb2wYMHsLW1hb29PbKzs/XmdnNzk8aamZnBzc0N/fv3x969e4usk4iInm0MNOXw7bffYtCgQYiMjMSECROkdlNTU8ybNw93796tkHU++ugjDBgwAK1atcLOnTtx+vRpzJ8/H3/++Se+//57g2OOHTuGjh07IjAwEOvWrYOJiUmJ1goMDERKSorsWLNmTYVcBwDs3r1bb/6WLVvK+mzcuBE+Pj7w9vbWC3aFwsLCkJKSgvPnz2PVqlWwsbGBv78/5syZU2G1EhGRcqiqugCl+uyzzzBz5kysXbsWvXr1kp3z9/fHpUuXEB4ejs8++6xc68THx2Pu3Ln46quvMGbMGKndzc0NXbt2xb179/TG7N27F2+88QZGjRqFefPmlWo9tVoNjUZTrpqLY2dn98T5o6KiMHjwYIiiiKioKAwYMECvj6WlpTSPi4sLOnXqBCcnJ8yYMQN9+/aFl5dXpdRPRETVE3doymDKlCmYPXs2duzYoRdmAMDY2Bhz587F119/jb///rtca/3444+wsLDAqFGjDJ5//CWkzZs3o3v37vj4449LHWaqg8uXL+Pw4cPo378/+vfvjwMHDuDq1aslGjtmzBiIooitW7caPJ+dnY309HTZQUREzwYGmlLauXMnPvvsM2zduhVdunQpsl+vXr3QvHlzzJw5s1zrXbx4EfXr10eNGjWe2DczMxP9+vXDpEmTMGXKlDKtt2PHDlhYWMiOuXPnFjsmMTFRb4yPj4/Bvu3bt9fr+6jo6Gh069YNtWrVgq2tLQICAhATE1Oi2m1tbeHo6Ijk5GSD58PDw2FtbS0dzs7OAADXtxPhNuxKidYgIqLqiS85lVLTpk3xv//9DzNnzkTr1q31fiE/at68eejcuTMmTpxY5vVEUSxxXzMzM3To0AErVqxAUFAQGjVqVOr1tFotIiMjZW22trbFjvHy8sK2bdtkbTdu3ICfn59e33Xr1hVZV35+Pr777jssXLhQahs8eDAmTpyIGTNmwMjoyflbFEXZzdePCg0Nxfjx46XH6enpUqghIiJlY6Appbp162LDhg3QarUIDAzEzp07YWlpabBvp06dEBAQgNDQUAQHB8vOWVlZ4f79+ygoKJD9oi68J8ba2hoA4OnpiYMHDyI3N/eJuzTGxsbYsmULevfuDa1Wi7i4uFKHGnNzc3h4eJRqjImJid4Ylcrwj5azs3OR8//666+4ceOG3j0z+fn52LNnD7p27VpsHbdv38a///4Ld3d3g+fVajXUanWxcxARkTLxJacycHV1xb59+5CamorAwEBkZGQU2TciIgLbt2/H4cOHZe1eXl7Iy8uT3tZc6MSJEwAeBhkAePPNN5GZmYmlS5canP/xm4LVajU2bdqEVq1aQavV4uzZs6W8uqoTFRWFgQMHIiEhQXYMHDgQUVFRTxy/cOFCGBkZ6b21noiInn3coSkjZ2dn6HQ6aLVaBAQEIDY2FlZWVnr9mjRpgkGDBmHRokWydh8fH7zyyisYOnQo5s+fj/r16+P8+fMYO3YsBgwYgLp16wIA2rRpg8mTJ2PChAm4ceMGevXqhTp16uDSpUtYtmwZOnToIHv3E/Aw1GzcuBH9+vWDVqvF3r17pXta8vPz9UKUWq2WdnKys7ORmpoqO69SqWBvb1+u56vQ7du39ea3sbFBRkYGtm/fjm3btqFx48ay82+//TZ69eqFO3fuSC9/ZWRkIDU1Fbm5ubhy5Qp++OEHfPvttwgPDy/1DhMRESkfA0051KtXTxZqfv31V4P9wsLCsG7dOr32devWYebMmXjvvffwzz//oF69eujVqxemT58u6zdv3jy0bNkSS5YswbJly1BQUIAGDRqgb9++GDJkiME1TUxMsGHDBvTv318KNcDDG4dffPFFWd8GDRrg0qVLAIDY2Fg4OTnJznt5eeHcuXMle1KewN/fX69tzZo1uHHjBszNzQ3eaN2lSxeYmZnhhx9+wIcffggAmDFjBmbMmAETExNoNBq0bdsWe/bsgVarrZA6iYhIWQSxNHedEj1D0tPTYW1tjbS0NIO7a0REpBy8h4aIiIgUj4GGiIiIFI+BhoiIiBSPgYaIiIgUj4GGiIiIFI+BhoiIiBSPgYaIiIgUj4GGiIiIFI+BhoiIiBSPgYaIiIgUj4GGiIiIFI+BhoiIiBSPgYaIiIgUj4GGiIiIFI+BhoiIiBSPgYaIiIgUj4GGiIiIFI+BhoiIiBSPgYaIiIgUj4GGiIiIFI+BhoiIiBSPgYaIiIgUj4GGiIiIFI+BhoiIiBSPgYaIiIgUj4GGiIiIFI+BhoiIiBSPgYaIiIgUj4GGiIiIFI+BhoiIiBSPgYaIiIgUj4GGiIiIFI+BhoiIiBSPgYaIiIgUj4GGiIiIFI+BhoiIiBSPgYaIiIgUr0oDTXBwMHr27KnXrtPpIAgC7t27J7Xl5+djwYIFaNKkCUxNTVGrVi1069YNhw4dkvqcO3cOgiDgyJEjsvnatm0LU1NTZGVlSW1ZWVkwNTVFVFSUVIsgCBAEATVq1EDt2rXRtWtXREdHo6CgQDafm5ub1PfRIyIiAgCQnJwMQRDg6OiIjIwM2djmzZtj1qxZBp+P8tZfkufy0cePXrOhw83NDQDg5+dn8PzIkSMNXkdxcwqCAK1Wixo1auDgwYOycffv30f9+vUxceJEvXVNTU3xwgsvYOnSpVL/lStXGpzf1NTUYF1ERPTsUsQOjSiKGDhwIMLCwjBmzBgkJSVBp9PB2dkZfn5+2LJlCwDA29sbGo0GOp1OGpuRkYETJ07AwcFBFhQOHz6M7OxsdO7cWWoLDAxESkoKkpOTsXPnTmi1WowZMwavvfYa8vLyZDWFhYUhJSVFdoSEhMj6ZGRk4IsvvijxdZa3/tJauHChrH4AiImJkR4fO3ZM6jtixAi96/3ss88Mzvton6+++gpWVlaytu3btyMkJATBwcG4f/++NG7y5MkwMzPDp59+qrfu2bNn0b9/f4wePRpr1qyRzj8+d0pKCq5evVrm54SIiJRJEYHmp59+woYNG7Bq1SoMHz4c7u7uaNasGZYvX47XX38dw4cPl34xarVaWSA4ePAgPD090aNHD1m7TqeDq6sr3N3dpTa1Wg2NRoO6deuiRYsWmDZtGrZu3YqdO3di5cqVsposLS2h0Whkh7m5uaxPSEgIvvzyS9y6davE11qe+kvL2tpaVj8A2NjYSI8dHBykvjVr1tS7XisrK4PzPtrH2toagiDI2iwsLDB37lyYmJhgypQpAIC4uDh8++23WLVqlWyHpXDd+vXrY9asWWjYsCG2bdsmnX98bo1Gg9q1axusKzs7G+np6bKDiIieDYoINKtXr5Z+qT9uwoQJuH37Nnbt2gXgYSA4ePCgtKMSFxcHPz8/+Pr6Ii4uThoXFxcHrVb7xLU7d+6MZs2aYdOmTaWuOygoCB4eHggLCyvxmIquv7oyNTXFqlWrsHz5cmzduhVDhw7FtGnT0LJly2LHmZmZIScnp0xrhoeHw9raWjqcnZ0BAHf+isOdy7sr9CAioqerygPNjh07YGFhITu6desm63PhwgU0atTI4PjC9gsXLgB4GAju378vvVyi0+ng6+uLTp064ejRo8jKysKDBw8QHx9f4kDg7e2N5ORkWduUKVP06j5w4ICsT+F9NcuXL8fly5dLtFZ56i/Jc1lWS5cu1Zv7xx9/LNecL730EkJDQ9G7d2/Y2dnho48+KrJvfn4+fvjhB5w6dUr2MltaWlqJrzk0NBRpaWnScf369XLVT0RE1YeqqgvQarWIjIyUtR09ehSDBw+WtYmiWKL5PDw8UK9ePeh0Ovj4+ODkyZPw9fWFo6MjXFxccPjwYYiiiOzs7BIHGlEUIQiCrG3SpEkIDg6WtdWtW1dvbEBAADp06IDp06dj9erVlVp/SZ/Lshg0aJBe4CjqpZ3SmD59OsLCwjB16lSoVPo/jkuXLsW3336LnJwcGBsbY9y4cXj//fel85aWljhx4oRsjJmZmcG11Go11Gp1uWsmIqLqp8oDjbm5OTw8PGRtf//9t+yxp6cnkpKSDI4vbPf09JTa/Pz8EBcXh6ZNm6Jhw4ZwdHQEAOllG1EU4eHhIb3k8CRJSUl696rY29vr1V2UiIgItGvXDpMmTSpR/7LWX5Lnsqysra1LfL2lURhiDIUZ4P+DlJmZGZycnGBkJN9UNDIyqpS6iIhIWar8JaeSGDhwIC5evIjt27frnZs/fz7s7OzQtWtXqU2r1eL333/Hrl274OfnJ7V36tQJOp0OOp2uxLsze/fuRWJiIvr06VPm+lu3bo3evXtj6tSpJepfkfUrXWGQqlu3rl6YISIiKlTlOzQlMXDgQKxfvx5DhgzB559/ji5duiA9PR1LlizBtm3bsH79etk7jArvQ4mOjsaKFSukdl9fXwwfPhwAMGrUKL11srOzkZqaivz8fNy8eROxsbEIDw/Ha6+9hrffflvWNyMjA6mpqbK2mjVrFvnOnzlz5sDHx6fInYhHlbX+yvTff//pXa9arUatWrWeah2PE0VRry4AcHR0ZAAiInqOKOJffEEQ8NNPP2HatGlYsGABvLy80LFjR1y9ehU6nU7vA+Xc3d3h6uqKjIwM+Pr6Su0uLi6oU6cOcnJyZDsfhWJjY+Hk5AQ3NzcEBgYiLi4OixYtwtatW2FsbCzrO2PGDDg5OcmOyZMnF3kNnp6eGDp0qOzD8YpS1vor04oVK/SuNygo6KnWYEh6erpeXU5OTqV6qzwRESmfIJb0bluiZ0x6ejqsra1x5eQWWFmaP3lAKdg28K/Q+YiIqHiK2KEhIiIiKg4DDRERESkeAw0REREpHgMNERERKR4DDRERESkeAw0REREpHgMNERERKR4DDRERESkeAw0REREpHgMNERERKR4DDRERESmeIr5tm6gy2dbXFvkt6UREpAzcoSEiIiLFY6AhIiIixWOgISIiIsXjPTT03BJFEQCQnp5exZUQ0dNmaWkJQRCqugyqQAw09Ny6ffs2AMDZ2bmKKyGipy0tLY1vBnjGMNDQc8vW1hYAcO3aNVhbW1dxNSWXnp4OZ2dnXL9+XTH/ICuxZkCZdSuxZuDp121paVnpa9DTxUBDzy0jo4e3kFlbWyvqH/5CVlZWiqtbiTUDyqxbiTUDyq2bqh5vCiYiIiLFY6AhIiIixWOgoeeWWq3GzJkzoVarq7qUUlFi3UqsGVBm3UqsGVBu3VR9CGLhe1eJiIiIFIo7NERERKR4DDRERESkeAw0REREpHgMNERERKR4DDT03FqyZAnc3NxgamqKNm3aID4+vspq2b9/P3r06IE6depAEARs2bJFdl4URcyYMQNOTk4wMzODv78/Ll68KOtz584dDBo0CFZWVrCxscGwYcOQmZlZaTWHh4ejVatWsLS0hKOjI3r27Inz58/L+mRlZWH06NGws7ODhYUF+vTpg5s3b8r6XLt2Dd27d0fNmjXh6OiISZMmIS8vr9LqjoyMRNOmTaUPcGvXrh127txZrWt+XEREBARBwNixY6t13bNmzYIgCLLD29u7WtdMCiYSPYfWrl0rmpiYiNHR0eKZM2fEESNGiDY2NuLNmzerpJ5ffvlF/Oijj8RNmzaJAMTNmzfLzkdERIjW1tbili1bxD///FN8/fXXRXd3d/HBgwdSn8DAQLFZs2bikSNHxAMHDogeHh5iUFBQpdUcEBAgxsTEiKdPnxYTEhLEV199VXRxcREzMzOlPiNHjhSdnZ3FPXv2iMePHxfbtm0rtm/fXjqfl5cnNm7cWPT39xdPnjwp/vLLL6K9vb0YGhpaaXVv27ZN/Pnnn8ULFy6I58+fF6dNmybWqFFDPH36dLWt+VHx8fGim5ub2LRpU3HMmDFSe3Wse+bMmaKPj4+YkpIiHf/++2+1rpmUi4GGnkutW7cWR48eLT3Oz88X69SpI4aHh1dhVQ89HmgKCgpEjUYjfv7551LbvXv3RLVaLa5Zs0YURVE8e/asCEA8duyY1Gfnzp2iIAjijRs3nkrdt27dEgGI+/btk2qsUaOGuH79eqlPUlKSCEA8fPiwKIoPg5yRkZGYmpoq9YmMjBStrKzE7Ozsp1K3KIpirVq1xG+//bba15yRkSE2bNhQ3LVrl+jr6ysFmupa98yZM8VmzZoZPFddaybl4ktO9NzJycnBH3/8AX9/f6nNyMgI/v7+OHz4cBVWZtiVK1eQmpoqq9fa2hpt2rSR6j18+DBsbGzw0ksvSX38/f1hZGSEo0ePPpU609LSAPz/l37+8ccfyM3NldXt7e0NFxcXWd1NmjRB7dq1pT4BAQFIT0/HmTNnKr3m/Px8rF27Fvfv30e7du2qfc2jR49G9+7dZfUB1fu5vnjxIurUqYP69etj0KBBuHbtWrWvmZSJX05Jz53//e9/yM/Pl/0jCQC1a9fGuXPnqqiqoqWmpgKAwXoLz6WmpsLR0VF2XqVSwdbWVupTmQoKCjB27Fi8/PLLaNy4sVSTiYkJbGxsiq3b0HUVnqssiYmJaNeuHbKysmBhYYHNmzfjhRdeQEJCQrWtee3atThx4gSOHTumd666Ptdt2rTBypUr4eXlhZSUFHzyySfo2LEjTp8+XW1rJuVioCGichs9ejROnz6NgwcPVnUpJeLl5YWEhASkpaVhw4YNGDJkCPbt21fVZRXp+vXrGDNmDHbt2gVTU9OqLqfEunXrJv25adOmaNOmDVxdXfHTTz/BzMysCiujZxFfcqLnjr29PYyNjfXeTXHz5k1oNJoqqqpohTUVV69Go8GtW7dk5/Py8nDnzp1Kv6YPPvgAO3bsQFxcHOrVqyerOycnB/fu3Su2bkPXVXiuspiYmMDDwwMtW7ZEeHg4mjVrhoULF1bbmv/44w/cunULLVq0gEqlgkqlwr59+7Bo0SKoVCrUrl27Wtb9OBsbG3h6euLSpUvV9rkm5WKgoeeOiYkJWrZsiT179khtBQUF2LNnD9q1a1eFlRnm7u4OjUYjqzc9PR1Hjx6V6m3Xrh3u3buHP/74Q+qzd+9eFBQUoE2bNpVSlyiK+OCDD7B582bs3bsX7u7usvMtW7ZEjRo1ZHWfP38e165dk9WdmJgoC2O7du2ClZUVXnjhhUqp25CCggJkZ2dX25q7dOmCxMREJCQkSMdLL72EQYMGSX+ujnU/LjMzE5cvX4aTk1O1fa5Jwar6rmSiqrB27VpRrVaLK1euFM+ePSu+++67oo2NjezdFE9TRkaGePLkSfHkyZMiAPHLL78UT548KV69elUUxYdv27axsRG3bt0qnjp1SnzjjTcMvm37xRdfFI8ePSoePHhQbNiwYaW+bfv9998Xra2tRZ1OJ3tb7n///Sf1GTlypOji4iLu3btXPH78uNiuXTuxXbt20vnCt+W+8sorYkJCghgbGys6ODhU6ttyp06dKu7bt0+8cuWKeOrUKXHq1KmiIAjib7/9Vm1rNuTRdzlV17onTJgg6nQ68cqVK+KhQ4dEf39/0d7eXrx161a1rZmUi4GGnltff/216OLiIpqYmIitW7cWjxw5UmW1xMXFiQD0jiFDhoii+PCt29OnTxdr164tqtVqsUuXLuL58+dlc9y+fVsMCgoSLSwsRCsrK/Gdd94RMzIyKq1mQ/UCEGNiYqQ+Dx48EEeNGiXWqlVLrFmzptirVy8xJSVFNk9ycrLYrVs30czMTLS3txcnTJgg5ubmVlrdQ4cOFV1dXUUTExPRwcFB7NKlixRmqmvNhjweaKpj3QMGDBCdnJxEExMTsW7duuKAAQPES5cuVeuaSbkEURTFqtkbIiIiIqoYvIeGiIiIFI+BhoiIiBSPgYaIiIgUj4GGiIiIFI+BhoiIiBSPgYaIiIgUj4GGiIiIFI+BhoiIiBSPgYaIiIgUj4GGiKgUkpOTIQgCEhISqroUInoEAw0REREpHgMNESlKQUEBPvvsM3h4eECtVsPFxQVz5swBACQmJqJz584wMzODnZ0d3n33XWRmZkpj/fz8MHbsWNl8PXv2RHBwsPTYzc0Nc+fOxdChQ2FpaQkXFxcsX75cOu/u7g4AePHFFyEIAvz8/CrtWomo5BhoiEhRQkNDERERgenTp+Ps2bNYvXo1ateujfv37yMgIAC1atXCsWPHsH79euzevRsffPBBqdeYP38+XnrpJZw8eRKjRo3C+++/j/PnzwMA4uPjAQC7d+9GSkoKNm3aVKHXR0Rlo6rqAoiISiojIwMLFy7E4sWLMWTIEABAgwYN0KFDB6xYsQJZWVlYtWoVzM3NAQCLFy9Gjx49MG/ePNSuXbvE67z66qsYNWoUAGDKlClYsGAB4uLi4OXlBQcHBwCAnZ0dNBpNBV8hEZUVd2iISDGSkpKQnZ2NLl26GDzXrFkzKcwAwMsvv4yCggJpd6WkmjZtKv1ZEARoNBrcunWr7IUTUaVjoCEixTAzMyvXeCMjI4iiKGvLzc3V61ejRg3ZY0EQUFBQUK61iahyMdAQkWI0bNgQZmZm2LNnj965Ro0a4c8//8T9+/eltkOHDsHIyAheXl4AAAcHB6SkpEjn8/Pzcfr06VLVYGJiIo0louqDgYaIFMPU1BRTpkzB5MmTsWrVKly+fBlHjhxBVFQUBg0aBFNTUwwZMgSnT59GXFwcQkJC8NZbb0n3z3Tu3Bk///wzfv75Z5w7dw7vv/8+7t27V6oaHB0dYWZmhtjYWNy8eRNpaWmVcKVEVFoMNESkKNOnT8eECRMwY8YMNGrUCAMGDMCtW7dQs2ZN/Prrr7hz5w5atWqFvn37okuXLli8eLE0dujQoRgyZAjefvtt+Pr6on79+tBqtaVaX6VSYdGiRfjmm29Qp04dvPHGGxV9iURUBoL4+AvKRERERArDHRoiIiJSPAYaIiIiUjwGGiIiIlI8BhoiIiJSPAYaIiIiUjwGGiIiIlI8BhoiIiJSPAYaIiIiUjwGGiIiIlI8BhoiIiJSPAYaIiIiUrz/A+sUfVTiRBWAAAAAAElFTkSuQmCC",
+ "text/plain": [
+ "
"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "import seaborn as sns\n",
+ "# Specify colors for each values of the hue variable\n",
+ "palette = {\n",
+ " 'ORANGE': 'orange',\n",
+ " 'WHITE': 'wheat',\n",
+ "}\n",
+ "# Plot a bar plot to visualize how many pumpkins of each variety are orange or white\n",
+ "sns.catplot(\n",
+ " data=pumpkins, y=\"Variety\", hue=\"Color\", kind=\"count\",\n",
+ " palette=palette, \n",
+ ")"
+ ]
+ },
+ {
+ "attachments": {},
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "# Pagproseso ng Datos\n",
+ "\n",
+ "I-encode natin ang mga tampok at label upang mas maipakita ang datos at ma-train ang modelo.\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 66,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "array(['med', 'lge', 'sml', 'xlge', 'med-lge', 'jbo', 'exjbo'],\n",
+ " dtype=object)"
+ ]
+ },
+ "execution_count": 66,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "# Let's look at the different values of the 'Item Size' column\n",
+ "pumpkins['Item Size'].unique()"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 67,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "from sklearn.preprocessing import OrdinalEncoder\n",
+ "# Encode the 'Item Size' column using ordinal encoding\n",
+ "item_size_categories = [['sml', 'med', 'med-lge', 'lge', 'xlge', 'jbo', 'exjbo']]\n",
+ "ordinal_features = ['Item Size']\n",
+ "ordinal_encoder = OrdinalEncoder(categories=item_size_categories)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 68,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "from sklearn.preprocessing import OneHotEncoder\n",
+ "# Encode all the other features using one-hot encoding\n",
+ "categorical_features = ['City Name', 'Package', 'Variety', 'Origin']\n",
+ "categorical_encoder = OneHotEncoder(sparse_output=False)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 69,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "
"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "# Suppressing warning message claiming that a portion of points cannot be placed into the plot due to the high number of data points\n",
+ "import warnings\n",
+ "warnings.filterwarnings(action='ignore', category=UserWarning, module='seaborn')\n",
+ "\n",
+ "palette = {\n",
+ " 0: 'orange',\n",
+ " 1: 'wheat'\n",
+ "}\n",
+ "sns.swarmplot(x=\"Color\", y=\"ord__Item Size\", hue=\"Color\", data=encoded_pumpkins, palette=palette)"
+ ]
+ },
+ {
+ "attachments": {},
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "**Mag-ingat**: Ang pagwawalang-bahala sa mga babala ay HINDI magandang gawain at dapat iwasan hangga't maaari. Madalas na naglalaman ang mga babala ng mahahalagang mensahe na makakatulong sa atin na mapabuti ang ating code at malutas ang isang isyu. \n",
+ "Ang dahilan kung bakit natin binabalewala ang partikular na babalang ito ay upang masiguro ang pagiging malinaw ng plot. Ang pag-plot ng lahat ng data points na may mas maliit na marker size, habang pinapanatili ang pagkakapareho sa kulay ng palette, ay nagreresulta sa hindi malinaw na visualisasyon.\n"
+ ]
+ },
+ {
+ "attachments": {},
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": []
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 74,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "from sklearn.model_selection import train_test_split\n",
+ "# X is the encoded features\n",
+ "X = encoded_pumpkins[encoded_pumpkins.columns.difference(['Color'])]\n",
+ "# y is the encoded label\n",
+ "y = encoded_pumpkins['Color']\n",
+ "\n",
+ "# Split the data into training and test sets\n",
+ "X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 75,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ " precision recall f1-score support\n",
+ "\n",
+ " 0 0.94 0.98 0.96 166\n",
+ " 1 0.85 0.67 0.75 33\n",
+ "\n",
+ " accuracy 0.92 199\n",
+ " macro avg 0.89 0.82 0.85 199\n",
+ "weighted avg 0.92 0.92 0.92 199\n",
+ "\n",
+ "Predicted labels: [0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 1 0 0 0 0 0 0 0 0 1 0 0 0 0\n",
+ " 0 0 0 0 0 1 0 1 0 0 1 0 0 0 0 0 1 0 1 0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0\n",
+ " 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 1 0 1 0 0 0 0 0 0 0 1 0\n",
+ " 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 1 0 0 0 1 1 0\n",
+ " 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1\n",
+ " 0 0 0 1 0 0 0 0 0 0 0 0 1 1]\n",
+ "F1-score: 0.7457627118644068\n"
+ ]
+ }
+ ],
+ "source": [
+ "from sklearn.metrics import f1_score, classification_report \n",
+ "from sklearn.linear_model import LogisticRegression\n",
+ "\n",
+ "# Train a logistic regression model on the pumpkin dataset\n",
+ "model = LogisticRegression()\n",
+ "model.fit(X_train, y_train)\n",
+ "predictions = model.predict(X_test)\n",
+ "\n",
+ "# Evaluate the model and print the results\n",
+ "print(classification_report(y_test, predictions))\n",
+ "print('Predicted labels: ', predictions)\n",
+ "print('F1-score: ', f1_score(y_test, predictions))"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 76,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "array([[162, 4],\n",
+ " [ 11, 22]])"
+ ]
+ },
+ "execution_count": 76,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "from sklearn.metrics import confusion_matrix\n",
+ "confusion_matrix(y_test, predictions)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 77,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "image/png": "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EBoaii1btkAul78xCtOzZ0+cOHECYWFhb2z//PlzZGVlafSaRKaAV/IkMgHZV/I8ffq0+hBJtm3btqFHjx5Yvnw5hgwZAuDVYQYfHx/89ttvaNmyJbp37w5ra2scPXoUGzduRPXq1REREZHjSp4qlQpffPEFNmzYgPr166uv5BkXF4edO3fi1KlTOH78OJo0aZJnzidPnqBdu3Y4d+4cvLy80KZNG9ja2uKff/7Bli1bEBsbi/T0dACvzjqpWbMm6tSpg/79++Px48dYsWIFSpYsicTERPUpuHfu3EGFChUwf/78HAXldZs2bcLnn38Oe3t7uLm5qU+ZzZaSkoIWLVrg/Pnz+OKLL9CgQQMkJyfjwoUL2LZtG+7cuZPjkAoRgVfyJDIFeV1oSwghlEqlqFSpkqhUqVKOi2QplUrxyy+/iGbNmgkHBwehUCjExx9/LGbMmCFevnyZ52tt27ZNtGvXThQrVkxYWFiI0qVLCx8fHxEVFZWvrCkpKWLBggXik08+EXZ2dkIul4vKlSuLkSNHihs3buRYd+PGjaJixYpCLpeLunXrirCwsLdeaCsviYmJwtraWgAQGzduzHWdpKQkMWnSJPHRRx8JuVwunJycRNOmTcWCBQtERkZGvt4bkSnhCAYRERFpHedgEBERkdaxYBAREZHWsWAQERGR1rFgEBERkdaxYBAREZHWsWAQERGR1pncvUhUKhUePXoEe3t7yGQyqeMQEREZDCEEkpKSUKZMGZiZvX2MwuQKxqNHj+Ds7Cx1DCIiIoN1//59lCtX7q3rmFzByL699P3799W3hyYiIqJ3S0xMhLOzs/p36duYXMHIPizi4ODAgkFERFQA+ZliwEmeREREpHUsGERERKR1LBhERESkdSwYREREpHUsGERERKR1LBhERESkdSwYREREpHUsGERERKR1LBhERESkdSwYREREpHUsGERERKR1LBhERESkdSwYREREpHUsGERERKR1khaMw4cPw8vLC2XKlIFMJsPOnTvfuU1UVBTq168PKysrfPTRRwgODtZ5TiIiItKMpAUjOTkZderUQVBQUL7Wv337Njp27IhWrVohJiYGX331FQYMGICwsDAdJyUiIiJNWEj54u3bt0f79u3zvf6KFStQoUIFLFy4EABQvXp1HD16FIsXL4aHh4euYhoVIQSi7z3Dk6R0qaMQEVEh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isTERGRlZSEtLQ0pKSmwsbF543kCAgIwYMAAbNiwQT3MX6lSJQCvDp+cP38emzZtUq8vhIBKpcLt27dRvXr1XLO9ePECdnZ2UKlUSEtLQ/PmzbF69WokJibi0aNHaNasWY71mzVrhnPnzgF4dXijbdu2qFq1Kjw9PdGpUye0a9fuvfZV3759MXDgQCxbtgxWVlbYtGkTevXqBTMzM/X7PHbsWI4RC6VS+db9BgBVq1bFrl27kJaWho0bNyImJgYjR47MsU5QUBDWrl2Le/fuITU1FRkZGahbt+5b8547dw43btyAvb19juVpaWm4efNmAfYAkf5hwSDSU7a2tvjoo49yLLtz5w46deqEoUOH4ttvv0WxYsVw9OhR9O/fHxkZGbn+opw+fTr69OmDPXv2YN++fQgMDMSWLVvQtWtXvHz5EoMHD8aoUaPe2K58+fJ5ZrO3t0d0dDTMzMxQunRpWFtbAwASExPf+b7q16+P27dvY9++fQgPD0fPnj3h7u6Obdu2vXPbvHh5eUEIgT179uCTTz7BkSNHsHjxYvXXX758iRkzZqBbt25vbKtQKPJ8Xrlcrv5/MG/ePHTs2BEzZszArFmzAABbtmzBuHHjsHDhQjRp0gT29vaYP38+/vrrr7fmffnyJRo0aJCj2GXTl4m8RO+LBYPIgJw5cwYqlQoLFy5U/3Wefbz/bapUqYIqVapgzJgx6N27N3755Rd07doV9evXx+XLl98oMu9iZmaW6zYODg4oU6YMjh07BldXV/XyY8eOoVGjRjnW8/HxgY+PDz777DN4enri6dOnKFasWI7ny57voFQq35pHoVCgW7du2LRpE27cuIGqVauifv366q/Xr18f165d0/h9/teUKVPQunVrDB06VP0+mzZtimHDhqnX+e8IhFwufyN//fr1ERISghIlSsDBweG9MhHpK07yJDIgH330ETIzM7F06VLcunULGzZswIoVK/JcPzU1FSNGjEBUVBTu3r2LY8eO4fTp0+pDHxMmTMDx48cxYsQIxMTE4J9//sHvv/+u8STP13399df47rvvEBISgmvXrmHixImIiYnB6NGjAQCLFi3Cr7/+iqtXr+L69evYunUrSpUqlevFwUqUKAFra2vs378f8fHxePHiRZ6v27dvX+zZswdr165VT+7MNm3aNKxfvx4zZszApUuXcOXKFWzZsgVTpkzR6L01adIEtWvXxpw5cwAAlStXxt9//42wsDBcv34dU6dOxenTp3Ns4+LigvPnz+PatWtISEhAZmYm+vbtCycnJ3Tp0gVHjhzB7du3ERUVhVGjRuHBgwcaZSLSW1JPAiGiN+U2MTDbokWLROnSpYW1tbXw8PAQ69evFwDEs2fPhBA5J2Gmp6eLXr16CWdnZyGXy0WZMmXEiBEjckzgPHXqlGjbtq2ws7MTtra2onbt2m9M0nzdfyd5/pdSqRTTp08XZcuWFZaWlqJOnTpi37596q+vXLlS1K1bV9ja2goHBwfRpk0bER0drf46XpvkKYQQq1atEs7OzsLMzEy4urrmuX+USqUoXbq0ACBu3rz5Rq79+/eLpk2bCmtra+Hg4CAaNWokVq5cmef7CAwMFHXq1Hlj+a+//iqsrKzEvXv3RFpamvjiiy+Eo6OjKFKkiBg6dKiYOHFiju0eP36s3r8ARGRkpBBCiNjYWOHr6yucnJyElZWVqFixohg4cKB48eJFnpmIDIlMCCGkrThERERkbHiIhIiIiLSOBYOIiIi0jgWDiIiItI4Fg4iIiLSOBYOIiIi0jgWDiIiItI4Fg4iIiLSOBYOIiIi0jgWDiIiItI4Fg4iIiLSOBYOIiIi07v8A1k+hWenkwRsAAAAASUVORK5CYII=",
+ "text/plain": [
+ "
"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "from sklearn.metrics import roc_curve, roc_auc_score\n",
+ "import matplotlib\n",
+ "import matplotlib.pyplot as plt\n",
+ "%matplotlib inline\n",
+ "\n",
+ "y_scores = model.predict_proba(X_test)\n",
+ "# calculate ROC curve\n",
+ "fpr, tpr, thresholds = roc_curve(y_test, y_scores[:,1])\n",
+ "\n",
+ "# plot ROC curve\n",
+ "fig = plt.figure(figsize=(6, 6))\n",
+ "# Plot the diagonal 50% line\n",
+ "plt.plot([0, 1], [0, 1], 'k--')\n",
+ "# Plot the FPR and TPR achieved by our model\n",
+ "plt.plot(fpr, tpr)\n",
+ "plt.xlabel('False Positive Rate')\n",
+ "plt.ylabel('True Positive Rate')\n",
+ "plt.title('ROC Curve')\n",
+ "plt.show()"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 78,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "0.9749908725812341\n"
+ ]
+ }
+ ],
+ "source": [
+ "# Calculate AUC score\n",
+ "auc = roc_auc_score(y_test,y_scores[:,1])\n",
+ "print(auc)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "\n---\n\n**Paunawa**: \nAng dokumentong ito ay isinalin gamit ang AI translation service na [Co-op Translator](https://github.com/Azure/co-op-translator). Bagama't sinisikap naming maging tumpak, pakitandaan na ang mga awtomatikong pagsasalin ay maaaring maglaman ng mga pagkakamali o hindi pagkakatugma. Ang orihinal na dokumento sa orihinal nitong wika ang dapat ituring na opisyal na sanggunian. Para sa mahalagang impormasyon, inirerekomenda ang propesyonal na pagsasalin ng tao. Hindi kami mananagot sa anumang hindi pagkakaunawaan o maling interpretasyon na maaaring magmula sa paggamit ng pagsasaling ito.\n"
+ ]
+ }
+ ],
+ "metadata": {
+ "kernelspec": {
+ "display_name": "Python 3",
+ "language": "python",
+ "name": "python3"
+ },
+ "language_info": {
+ "codemirror_mode": {
+ "name": "ipython",
+ "version": 3
+ },
+ "file_extension": ".py",
+ "mimetype": "text/x-python",
+ "name": "python",
+ "nbconvert_exporter": "python",
+ "pygments_lexer": "ipython3",
+ "version": "3.8.16"
+ },
+ "metadata": {
+ "interpreter": {
+ "hash": "70b38d7a306a849643e446cd70466270a13445e5987dfa1344ef2b127438fa4d"
+ }
+ },
+ "orig_nbformat": 2,
+ "vscode": {
+ "interpreter": {
+ "hash": "949777d72b0d2535278d3dc13498b2535136f6dfe0678499012e853ee9abcab1"
+ }
+ },
+ "coopTranslator": {
+ "original_hash": "ef50cc584e0b79412610cc7da15e1f86",
+ "translation_date": "2025-08-29T14:49:32+00:00",
+ "source_file": "2-Regression/4-Logistic/solution/notebook.ipynb",
+ "language_code": "tl"
+ }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 2
+}
\ No newline at end of file
diff --git a/translations/tl/2-Regression/README.md b/translations/tl/2-Regression/README.md
new file mode 100644
index 000000000..045f1f870
--- /dev/null
+++ b/translations/tl/2-Regression/README.md
@@ -0,0 +1,54 @@
+
+# Mga Modelong Regression para sa Machine Learning
+## Paksang Rehiyonal: Mga Modelong Regression para sa Presyo ng Kalabasa sa Hilagang Amerika 🎃
+
+Sa Hilagang Amerika, madalas na inukit ang mga kalabasa upang maging nakakatakot na mukha para sa Halloween. Tuklasin natin ang higit pa tungkol sa mga kamangha-manghang gulay na ito!
+
+
+> Larawan ni Beth Teutschmann sa Unsplash
+
+## Ano ang Matututunan Mo
+
+[](https://youtu.be/5QnJtDad4iQ "Regression Introduction video - Click to Watch!")
+> 🎥 I-click ang imahe sa itaas para sa isang maikling video na nagpapakilala sa araling ito
+
+Ang mga aralin sa seksyong ito ay tumatalakay sa iba't ibang uri ng regression sa konteksto ng machine learning. Ang mga modelong regression ay makakatulong upang matukoy ang _ugnayan_ sa pagitan ng mga variable. Ang ganitong uri ng modelo ay maaaring magpredikta ng mga halaga tulad ng haba, temperatura, o edad, kaya't natutuklasan ang mga ugnayan sa pagitan ng mga variable habang sinusuri ang mga data point.
+
+Sa serye ng mga araling ito, matutuklasan mo ang mga pagkakaiba sa pagitan ng linear at logistic regression, at kung kailan mas angkop gamitin ang isa kaysa sa isa pa.
+
+[](https://youtu.be/XA3OaoW86R8 "ML for beginners - Introduction to Regression models for Machine Learning")
+
+> 🎥 I-click ang imahe sa itaas para sa isang maikling video na nagpapakilala sa mga modelong regression.
+
+Sa pangkat ng mga araling ito, ikaw ay maghahanda upang simulan ang mga gawain sa machine learning, kabilang ang pag-configure ng Visual Studio Code upang pamahalaan ang mga notebook, ang karaniwang kapaligiran para sa mga data scientist. Matutuklasan mo ang Scikit-learn, isang library para sa machine learning, at gagawa ka ng iyong unang mga modelo, na nakatuon sa mga modelong Regression sa kabanatang ito.
+
+> May mga kapaki-pakinabang na low-code tools na makakatulong sa iyo upang matutunan ang paggamit ng mga modelong regression. Subukan ang [Azure ML para sa gawaing ito](https://docs.microsoft.com/learn/modules/create-regression-model-azure-machine-learning-designer/?WT.mc_id=academic-77952-leestott)
+
+### Mga Aralin
+
+1. [Mga Kagamitan sa Trabaho](1-Tools/README.md)
+2. [Pamamahala ng Data](2-Data/README.md)
+3. [Linear at Polynomial Regression](3-Linear/README.md)
+4. [Logistic Regression](4-Logistic/README.md)
+
+---
+### Mga Kredito
+
+"ML with regression" ay isinulat nang may ♥️ ni [Jen Looper](https://twitter.com/jenlooper)
+
+♥️ Ang mga nag-ambag sa pagsusulit ay kinabibilangan nina: [Muhammad Sakib Khan Inan](https://twitter.com/Sakibinan) at [Ornella Altunyan](https://twitter.com/ornelladotcom)
+
+Ang dataset ng kalabasa ay iminungkahi ng [proyektong ito sa Kaggle](https://www.kaggle.com/usda/a-year-of-pumpkin-prices) at ang data nito ay nagmula sa [Specialty Crops Terminal Markets Standard Reports](https://www.marketnews.usda.gov/mnp/fv-report-config-step1?type=termPrice) na ipinamamahagi ng Kagawaran ng Agrikultura ng Estados Unidos. Nagdagdag kami ng ilang puntos tungkol sa kulay batay sa uri upang gawing normal ang distribusyon. Ang data na ito ay nasa pampublikong domain.
+
+---
+
+**Paunawa**:
+Ang dokumentong ito ay isinalin gamit ang AI translation service na [Co-op Translator](https://github.com/Azure/co-op-translator). Bagama't sinisikap naming maging tumpak, pakitandaan na ang mga awtomatikong pagsasalin ay maaaring maglaman ng mga pagkakamali o hindi pagkakatugma. Ang orihinal na dokumento sa orihinal nitong wika ang dapat ituring na opisyal na sanggunian. Para sa mahalagang impormasyon, inirerekomenda ang propesyonal na pagsasalin ng tao. Hindi kami mananagot sa anumang hindi pagkakaunawaan o maling interpretasyon na maaaring magmula sa paggamit ng pagsasaling ito.
\ No newline at end of file
diff --git a/translations/tl/3-Web-App/1-Web-App/README.md b/translations/tl/3-Web-App/1-Web-App/README.md
new file mode 100644
index 000000000..940641c31
--- /dev/null
+++ b/translations/tl/3-Web-App/1-Web-App/README.md
@@ -0,0 +1,359 @@
+
+# Gumawa ng Web App para Gamitin ang Isang ML Model
+
+Sa araling ito, magtetrain ka ng isang ML model gamit ang isang data set na kakaiba: _mga sightings ng UFO sa nakaraang siglo_, na kinuha mula sa database ng NUFORC.
+
+Matututuhan mo:
+
+- Paano i-'pickle' ang isang trained model
+- Paano gamitin ang model na iyon sa isang Flask app
+
+Ipagpapatuloy natin ang paggamit ng notebooks para linisin ang data at i-train ang ating model, ngunit maaari mong dalhin ang proseso sa susunod na antas sa pamamagitan ng pag-explore ng paggamit ng isang model sa totoong mundo, sa isang web app.
+
+Upang gawin ito, kailangan mong gumawa ng isang web app gamit ang Flask.
+
+## [Pre-lecture quiz](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/17/)
+
+## Paggawa ng App
+
+Maraming paraan upang gumawa ng web apps na gumagamit ng machine learning models. Ang iyong web architecture ay maaaring makaapekto sa paraan ng pag-train ng iyong model. Isipin na nagtatrabaho ka sa isang negosyo kung saan ang data science team ay nag-train ng isang model na nais nilang gamitin mo sa isang app.
+
+### Mga Dapat Isaalang-alang
+
+Maraming tanong na kailangan mong sagutin:
+
+- **Web app ba ito o mobile app?** Kung gumagawa ka ng isang mobile app o kailangang gamitin ang model sa isang IoT context, maaari mong gamitin ang [TensorFlow Lite](https://www.tensorflow.org/lite/) at gamitin ang model sa isang Android o iOS app.
+- **Saan ilalagay ang model?** Sa cloud o lokal?
+- **Offline support.** Kailangan bang gumana ang app offline?
+- **Anong teknolohiya ang ginamit sa pag-train ng model?** Ang napiling teknolohiya ay maaaring makaapekto sa mga tool na kailangan mong gamitin.
+ - **Gamit ang TensorFlow.** Kung nag-train ka ng model gamit ang TensorFlow, halimbawa, ang ecosystem na ito ay nagbibigay ng kakayahang i-convert ang TensorFlow model para magamit sa isang web app gamit ang [TensorFlow.js](https://www.tensorflow.org/js/).
+ - **Gamit ang PyTorch.** Kung gumagawa ka ng model gamit ang isang library tulad ng [PyTorch](https://pytorch.org/), mayroon kang opsyon na i-export ito sa [ONNX](https://onnx.ai/) (Open Neural Network Exchange) format para magamit sa mga JavaScript web apps na maaaring gumamit ng [Onnx Runtime](https://www.onnxruntime.ai/). Ang opsyong ito ay tatalakayin sa isang susunod na aralin para sa isang Scikit-learn-trained model.
+ - **Gamit ang Lobe.ai o Azure Custom Vision.** Kung gumagamit ka ng isang ML SaaS (Software as a Service) system tulad ng [Lobe.ai](https://lobe.ai/) o [Azure Custom Vision](https://azure.microsoft.com/services/cognitive-services/custom-vision-service/?WT.mc_id=academic-77952-leestott) upang mag-train ng model, ang ganitong uri ng software ay nagbibigay ng mga paraan upang i-export ang model para sa maraming platform, kabilang ang paggawa ng isang bespoke API na maaaring i-query sa cloud ng iyong online application.
+
+Mayroon ka ring pagkakataon na gumawa ng isang buong Flask web app na maaaring mag-train ng model mismo sa isang web browser. Maaari rin itong gawin gamit ang TensorFlow.js sa isang JavaScript context.
+
+Para sa ating layunin, dahil gumagamit tayo ng Python-based notebooks, tuklasin natin ang mga hakbang na kailangan mong gawin upang i-export ang isang trained model mula sa isang notebook patungo sa isang format na mababasa ng isang Python-built web app.
+
+## Tool
+
+Para sa gawaing ito, kailangan mo ng dalawang tool: Flask at Pickle, na parehong tumatakbo sa Python.
+
+✅ Ano ang [Flask](https://palletsprojects.com/p/flask/)? Ang Flask, na tinukoy bilang isang 'micro-framework' ng mga lumikha nito, ay nagbibigay ng mga pangunahing tampok ng web frameworks gamit ang Python at isang templating engine upang makabuo ng mga web page. Tingnan ang [Learn module na ito](https://docs.microsoft.com/learn/modules/python-flask-build-ai-web-app?WT.mc_id=academic-77952-leestott) upang magsanay sa paggawa gamit ang Flask.
+
+✅ Ano ang [Pickle](https://docs.python.org/3/library/pickle.html)? Ang Pickle 🥒 ay isang Python module na nagseseryalisa at nagde-deseryalisa ng isang Python object structure. Kapag 'pinickle' mo ang isang model, siniseryalisa o pinapantay mo ang istruktura nito para magamit sa web. Mag-ingat: ang pickle ay hindi likas na secure, kaya mag-ingat kung hinihikayat kang mag-'un-pickle' ng isang file. Ang isang pickled file ay may suffix na `.pkl`.
+
+## Ehersisyo - Linisin ang Iyong Data
+
+Sa araling ito, gagamit ka ng data mula sa 80,000 sightings ng UFO, na nakalap ng [NUFORC](https://nuforc.org) (The National UFO Reporting Center). Ang data na ito ay may mga kawili-wiling paglalarawan ng sightings ng UFO, halimbawa:
+
+- **Mahabang halimbawa ng paglalarawan.** "Isang lalaki ang lumitaw mula sa isang sinag ng liwanag na tumama sa isang damuhan sa gabi at tumakbo siya patungo sa parking lot ng Texas Instruments".
+- **Maikling halimbawa ng paglalarawan.** "Hinabol kami ng mga ilaw".
+
+Ang [ufos.csv](../../../../3-Web-App/1-Web-App/data/ufos.csv) spreadsheet ay may mga column tungkol sa `city`, `state` at `country` kung saan naganap ang sighting, ang `shape` ng bagay at ang `latitude` at `longitude` nito.
+
+Sa blangkong [notebook](notebook.ipynb) na kasama sa araling ito:
+
+1. I-import ang `pandas`, `matplotlib`, at `numpy` tulad ng ginawa mo sa mga nakaraang aralin at i-import ang ufos spreadsheet. Maaari mong tingnan ang isang sample na data set:
+
+ ```python
+ import pandas as pd
+ import numpy as np
+
+ ufos = pd.read_csv('./data/ufos.csv')
+ ufos.head()
+ ```
+
+1. I-convert ang ufos data sa isang maliit na dataframe na may mga bagong pamagat. Tingnan ang mga natatanging halaga sa field na `Country`.
+
+ ```python
+ ufos = pd.DataFrame({'Seconds': ufos['duration (seconds)'], 'Country': ufos['country'],'Latitude': ufos['latitude'],'Longitude': ufos['longitude']})
+
+ ufos.Country.unique()
+ ```
+
+1. Ngayon, maaari mong bawasan ang dami ng data na kailangan nating harapin sa pamamagitan ng pag-drop ng anumang null values at pag-import lamang ng sightings na tumagal ng 1-60 segundo:
+
+ ```python
+ ufos.dropna(inplace=True)
+
+ ufos = ufos[(ufos['Seconds'] >= 1) & (ufos['Seconds'] <= 60)]
+
+ ufos.info()
+ ```
+
+1. I-import ang Scikit-learn's `LabelEncoder` library upang i-convert ang mga text values para sa mga bansa sa isang numero:
+
+ ✅ Ang LabelEncoder ay nag-eencode ng data ayon sa alpabeto
+
+ ```python
+ from sklearn.preprocessing import LabelEncoder
+
+ ufos['Country'] = LabelEncoder().fit_transform(ufos['Country'])
+
+ ufos.head()
+ ```
+
+ Ang iyong data ay dapat magmukhang ganito:
+
+ ```output
+ Seconds Country Latitude Longitude
+ 2 20.0 3 53.200000 -2.916667
+ 3 20.0 4 28.978333 -96.645833
+ 14 30.0 4 35.823889 -80.253611
+ 23 60.0 4 45.582778 -122.352222
+ 24 3.0 3 51.783333 -0.783333
+ ```
+
+## Ehersisyo - Gumawa ng Iyong Model
+
+Ngayon maaari kang maghanda upang i-train ang isang model sa pamamagitan ng paghahati ng data sa training at testing group.
+
+1. Piliin ang tatlong features na nais mong i-train bilang iyong X vector, at ang y vector ay ang `Country`. Nais mong ma-input ang `Seconds`, `Latitude` at `Longitude` at makakuha ng country id bilang resulta.
+
+ ```python
+ from sklearn.model_selection import train_test_split
+
+ Selected_features = ['Seconds','Latitude','Longitude']
+
+ X = ufos[Selected_features]
+ y = ufos['Country']
+
+ X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0)
+ ```
+
+1. I-train ang iyong model gamit ang logistic regression:
+
+ ```python
+ from sklearn.metrics import accuracy_score, classification_report
+ from sklearn.linear_model import LogisticRegression
+ model = LogisticRegression()
+ model.fit(X_train, y_train)
+ predictions = model.predict(X_test)
+
+ print(classification_report(y_test, predictions))
+ print('Predicted labels: ', predictions)
+ print('Accuracy: ', accuracy_score(y_test, predictions))
+ ```
+
+Ang accuracy ay hindi masama **(mga 95%)**, na hindi nakakagulat, dahil ang `Country` at `Latitude/Longitude` ay may kaugnayan.
+
+Ang model na ginawa mo ay hindi masyadong rebolusyonaryo dahil dapat mong ma-infer ang `Country` mula sa `Latitude` at `Longitude`, ngunit ito ay isang magandang ehersisyo upang subukang mag-train mula sa raw data na nilinis mo, in-export, at pagkatapos ay gamitin ang model na ito sa isang web app.
+
+## Ehersisyo - 'Pickle' ang Iyong Model
+
+Ngayon, oras na upang _i-pickle_ ang iyong model! Maaari mo itong gawin sa ilang linya ng code. Kapag ito ay _na-pickle_, i-load ang iyong pickled model at subukan ito laban sa isang sample data array na naglalaman ng mga halaga para sa seconds, latitude at longitude,
+
+```python
+import pickle
+model_filename = 'ufo-model.pkl'
+pickle.dump(model, open(model_filename,'wb'))
+
+model = pickle.load(open('ufo-model.pkl','rb'))
+print(model.predict([[50,44,-12]]))
+```
+
+Ang model ay nagbalik ng **'3'**, na siyang country code para sa UK. Astig! 👽
+
+## Ehersisyo - Gumawa ng Flask App
+
+Ngayon maaari kang gumawa ng isang Flask app upang tawagin ang iyong model at magbalik ng mga katulad na resulta, ngunit sa mas kaaya-ayang paraan.
+
+1. Magsimula sa pamamagitan ng paggawa ng isang folder na tinatawag na **web-app** sa tabi ng _notebook.ipynb_ file kung saan naroroon ang iyong _ufo-model.pkl_ file.
+
+1. Sa folder na iyon, gumawa ng tatlo pang folder: **static**, na may folder na **css** sa loob nito, at **templates**. Dapat mayroon ka na ngayong sumusunod na mga file at direktoryo:
+
+ ```output
+ web-app/
+ static/
+ css/
+ templates/
+ notebook.ipynb
+ ufo-model.pkl
+ ```
+
+ ✅ Tingnan ang solution folder para sa view ng natapos na app
+
+1. Ang unang file na gagawin sa _web-app_ folder ay ang **requirements.txt** file. Tulad ng _package.json_ sa isang JavaScript app, ang file na ito ay naglilista ng mga dependencies na kinakailangan ng app. Sa **requirements.txt** idagdag ang mga linya:
+
+ ```text
+ scikit-learn
+ pandas
+ numpy
+ flask
+ ```
+
+1. Ngayon, patakbuhin ang file na ito sa pamamagitan ng pag-navigate sa _web-app_:
+
+ ```bash
+ cd web-app
+ ```
+
+1. Sa iyong terminal, i-type ang `pip install`, upang i-install ang mga libraries na nakalista sa _requirements.txt_:
+
+ ```bash
+ pip install -r requirements.txt
+ ```
+
+1. Ngayon, handa ka nang gumawa ng tatlo pang file upang tapusin ang app:
+
+ 1. Gumawa ng **app.py** sa root.
+ 2. Gumawa ng **index.html** sa _templates_ directory.
+ 3. Gumawa ng **styles.css** sa _static/css_ directory.
+
+1. I-build ang _styles.css_ file gamit ang ilang styles:
+
+ ```css
+ body {
+ width: 100%;
+ height: 100%;
+ font-family: 'Helvetica';
+ background: black;
+ color: #fff;
+ text-align: center;
+ letter-spacing: 1.4px;
+ font-size: 30px;
+ }
+
+ input {
+ min-width: 150px;
+ }
+
+ .grid {
+ width: 300px;
+ border: 1px solid #2d2d2d;
+ display: grid;
+ justify-content: center;
+ margin: 20px auto;
+ }
+
+ .box {
+ color: #fff;
+ background: #2d2d2d;
+ padding: 12px;
+ display: inline-block;
+ }
+ ```
+
+1. Susunod, i-build ang _index.html_ file:
+
+ ```html
+
+
+
+
+ 🛸 UFO Appearance Prediction! 👽
+
+
+
+
+
+
+
+
+
According to the number of seconds, latitude and longitude, which country is likely to have reported seeing a UFO?
+
+
+
+
{{ prediction_text }}
+
+
+
+
+
+
+
+ ```
+
+ Tingnan ang templating sa file na ito. Pansinin ang 'mustache' syntax sa paligid ng mga variable na ibibigay ng app, tulad ng prediction text: `{{}}`. Mayroon ding isang form na nagpo-post ng prediction sa `/predict` route.
+
+ Sa wakas, handa ka nang i-build ang python file na nagda-drive ng consumption ng model at ang display ng predictions:
+
+1. Sa `app.py` idagdag:
+
+ ```python
+ import numpy as np
+ from flask import Flask, request, render_template
+ import pickle
+
+ app = Flask(__name__)
+
+ model = pickle.load(open("./ufo-model.pkl", "rb"))
+
+
+ @app.route("/")
+ def home():
+ return render_template("index.html")
+
+
+ @app.route("/predict", methods=["POST"])
+ def predict():
+
+ int_features = [int(x) for x in request.form.values()]
+ final_features = [np.array(int_features)]
+ prediction = model.predict(final_features)
+
+ output = prediction[0]
+
+ countries = ["Australia", "Canada", "Germany", "UK", "US"]
+
+ return render_template(
+ "index.html", prediction_text="Likely country: {}".format(countries[output])
+ )
+
+
+ if __name__ == "__main__":
+ app.run(debug=True)
+ ```
+
+ > 💡 Tip: kapag nagdagdag ka ng [`debug=True`](https://www.askpython.com/python-modules/flask/flask-debug-mode) habang pinapatakbo ang web app gamit ang Flask, anumang pagbabago na gagawin mo sa iyong application ay agad na makikita nang hindi na kailangang i-restart ang server. Mag-ingat! Huwag paganahin ang mode na ito sa isang production app.
+
+Kung patakbuhin mo ang `python app.py` o `python3 app.py` - magsisimula ang iyong web server, lokal, at maaari kang mag-fill out ng isang maikling form upang makakuha ng sagot sa iyong tanong tungkol sa kung saan nakita ang mga UFO!
+
+Bago iyon, tingnan ang mga bahagi ng `app.py`:
+
+1. Una, ang mga dependencies ay niloload at ang app ay nagsisimula.
+1. Pagkatapos, ang model ay ini-import.
+1. Pagkatapos, ang index.html ay nirender sa home route.
+
+Sa `/predict` route, maraming bagay ang nangyayari kapag ang form ay na-post:
+
+1. Ang mga variable ng form ay kinokolekta at kino-convert sa isang numpy array. Ang mga ito ay ipinapadala sa model at ang prediction ay ibinabalik.
+2. Ang mga bansa na nais nating ipakita ay nire-render bilang nababasang teksto mula sa kanilang predicted country code, at ang halagang iyon ay ibinabalik sa index.html upang ma-render sa template.
+
+Ang paggamit ng isang model sa ganitong paraan, gamit ang Flask at isang pickled model, ay medyo simple. Ang pinakamahirap na bahagi ay ang maunawaan kung anong anyo ng data ang kailangang ipadala sa model upang makakuha ng prediction. Ang lahat ng ito ay nakasalalay sa kung paano na-train ang model. Ang model na ito ay may tatlong data points na kailangang i-input upang makakuha ng prediction.
+
+Sa isang propesyonal na setting, makikita mo kung gaano kahalaga ang magandang komunikasyon sa pagitan ng mga taong nag-train ng model at ng mga gumagamit nito sa isang web o mobile app. Sa ating kaso, ikaw lang ang gumagawa nito!
+
+---
+
+## 🚀 Hamon
+
+Sa halip na magtrabaho sa isang notebook at i-import ang model sa Flask app, maaari mong i-train ang model mismo sa loob ng Flask app! Subukang i-convert ang iyong Python code sa notebook, marahil pagkatapos malinis ang iyong data, upang i-train ang model mula mismo sa app sa isang route na tinatawag na `train`. Ano ang mga pros at cons ng paggamit ng pamamaraang ito?
+
+## [Post-lecture quiz](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/18/)
+
+## Review at Pag-aaral sa Sarili
+
+Maraming paraan upang gumawa ng isang web app na gumagamit ng ML models. Gumawa ng listahan ng mga paraan kung paano mo magagamit ang JavaScript o Python upang gumawa ng isang web app na gumagamit ng machine learning. Isaalang-alang ang architecture: dapat bang manatili ang model sa app o nasa cloud? Kung ang huli, paano mo ito maa-access? Gumuhit ng isang architectural model para sa isang applied ML web solution.
+
+## Takdang Aralin
+
+[Subukan ang ibang model](assignment.md)
+
+---
+
+**Paunawa**:
+Ang dokumentong ito ay isinalin gamit ang AI translation service na [Co-op Translator](https://github.com/Azure/co-op-translator). Bagama't sinisikap naming maging tumpak, tandaan na ang mga awtomatikong pagsasalin ay maaaring maglaman ng mga pagkakamali o hindi pagkakatugma. Ang orihinal na dokumento sa kanyang katutubong wika ang dapat ituring na opisyal na sanggunian. Para sa mahalagang impormasyon, inirerekomenda ang propesyonal na pagsasalin ng tao. Hindi kami mananagot sa anumang hindi pagkakaunawaan o maling interpretasyon na dulot ng paggamit ng pagsasaling ito.
\ No newline at end of file
diff --git a/translations/tl/3-Web-App/1-Web-App/assignment.md b/translations/tl/3-Web-App/1-Web-App/assignment.md
new file mode 100644
index 000000000..fdb835644
--- /dev/null
+++ b/translations/tl/3-Web-App/1-Web-App/assignment.md
@@ -0,0 +1,25 @@
+
+# Subukan ang ibang modelo
+
+## Mga Instruksyon
+
+Ngayon na nakagawa ka na ng isang web app gamit ang isang na-train na Regression model, gamitin ang isa sa mga modelo mula sa naunang aralin sa Regression upang muling gawin ang web app na ito. Maaari mong panatilihin ang istilo o baguhin ang disenyo upang mas angkop sa datos ng kalabasa. Siguraduhing baguhin ang mga input upang tumugma sa paraan ng pagsasanay ng iyong modelo.
+
+## Rubric
+
+| Pamantayan | Natatangi | Katanggap-tanggap | Kailangang Pagbutihin |
+| -------------------------- | --------------------------------------------------------- | --------------------------------------------------------- | -------------------------------------- |
+| | Ang web app ay gumagana nang maayos at nailunsad sa cloud | Ang web app ay may mga depekto o nagpapakita ng di-inaasahang resulta | Ang web app ay hindi gumagana nang maayos |
+
+---
+
+**Paunawa**:
+Ang dokumentong ito ay isinalin gamit ang AI translation service na [Co-op Translator](https://github.com/Azure/co-op-translator). Bagama't sinisikap naming maging tumpak, pakitandaan na ang mga awtomatikong pagsasalin ay maaaring maglaman ng mga pagkakamali o hindi pagkakatugma. Ang orihinal na dokumento sa orihinal nitong wika ang dapat ituring na opisyal na sanggunian. Para sa mahalagang impormasyon, inirerekomenda ang propesyonal na pagsasalin ng tao. Hindi kami mananagot sa anumang hindi pagkakaunawaan o maling interpretasyon na maaaring magmula sa paggamit ng pagsasaling ito.
\ No newline at end of file
diff --git a/translations/tl/3-Web-App/1-Web-App/notebook.ipynb b/translations/tl/3-Web-App/1-Web-App/notebook.ipynb
new file mode 100644
index 000000000..e69de29bb
diff --git a/translations/tl/3-Web-App/1-Web-App/solution/notebook.ipynb b/translations/tl/3-Web-App/1-Web-App/solution/notebook.ipynb
new file mode 100644
index 000000000..2c32e0255
--- /dev/null
+++ b/translations/tl/3-Web-App/1-Web-App/solution/notebook.ipynb
@@ -0,0 +1,267 @@
+{
+ "metadata": {
+ "language_info": {
+ "codemirror_mode": {
+ "name": "ipython",
+ "version": 3
+ },
+ "file_extension": ".py",
+ "mimetype": "text/x-python",
+ "name": "python",
+ "nbconvert_exporter": "python",
+ "pygments_lexer": "ipython3",
+ "version": "3.7.0"
+ },
+ "orig_nbformat": 2,
+ "kernelspec": {
+ "name": "python37364bit8d3b438fb5fc4430a93ac2cb74d693a7",
+ "display_name": "Python 3.7.0 64-bit ('3.7')"
+ },
+ "metadata": {
+ "interpreter": {
+ "hash": "70b38d7a306a849643e446cd70466270a13445e5987dfa1344ef2b127438fa4d"
+ }
+ },
+ "coopTranslator": {
+ "original_hash": "5fa2e8f4584c78250ca9729b46562ceb",
+ "translation_date": "2025-08-29T15:21:17+00:00",
+ "source_file": "3-Web-App/1-Web-App/solution/notebook.ipynb",
+ "language_code": "tl"
+ }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 2,
+ "cells": [
+ {
+ "source": [],
+ "cell_type": "markdown",
+ "metadata": {}
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 23,
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "execute_result",
+ "data": {
+ "text/plain": [
+ " datetime city state country shape \\\n",
+ "0 10/10/1949 20:30 san marcos tx us cylinder \n",
+ "1 10/10/1949 21:00 lackland afb tx NaN light \n",
+ "2 10/10/1955 17:00 chester (uk/england) NaN gb circle \n",
+ "3 10/10/1956 21:00 edna tx us circle \n",
+ "4 10/10/1960 20:00 kaneohe hi us light \n",
+ "\n",
+ " duration (seconds) duration (hours/min) \\\n",
+ "0 2700.0 45 minutes \n",
+ "1 7200.0 1-2 hrs \n",
+ "2 20.0 20 seconds \n",
+ "3 20.0 1/2 hour \n",
+ "4 900.0 15 minutes \n",
+ "\n",
+ " comments date posted latitude \\\n",
+ "0 This event took place in early fall around 194... 4/27/2004 29.883056 \n",
+ "1 1949 Lackland AFB, TX. Lights racing acros... 12/16/2005 29.384210 \n",
+ "2 Green/Orange circular disc over Chester, En... 1/21/2008 53.200000 \n",
+ "3 My older brother and twin sister were leaving ... 1/17/2004 28.978333 \n",
+ "4 AS a Marine 1st Lt. flying an FJ4B fighter/att... 1/22/2004 21.418056 \n",
+ "\n",
+ " longitude \n",
+ "0 -97.941111 \n",
+ "1 -98.581082 \n",
+ "2 -2.916667 \n",
+ "3 -96.645833 \n",
+ "4 -157.803611 "
+ ],
+ "text/html": "
"
+ },
+ "metadata": {},
+ "execution_count": 26
+ }
+ ],
+ "source": [
+ "from sklearn.preprocessing import LabelEncoder\n",
+ "\n",
+ "ufos['Country'] = LabelEncoder().fit_transform(ufos['Country'])\n",
+ "\n",
+ "ufos.head()"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 27,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "from sklearn.model_selection import train_test_split\n",
+ "\n",
+ "Selected_features = ['Seconds','Latitude','Longitude']\n",
+ "\n",
+ "X = ufos[Selected_features]\n",
+ "y = ufos['Country']\n",
+ "\n",
+ "\n",
+ "X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0)\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 28,
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "name": "stderr",
+ "text": [
+ "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/sklearn/linear_model/logistic.py:432: FutureWarning: Default solver will be changed to 'lbfgs' in 0.22. Specify a solver to silence this warning.\n",
+ " FutureWarning)\n",
+ "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/sklearn/linear_model/logistic.py:469: FutureWarning: Default multi_class will be changed to 'auto' in 0.22. Specify the multi_class option to silence this warning.\n",
+ " \"this warning.\", FutureWarning)\n",
+ " precision recall f1-score support\n",
+ "\n",
+ " 0 1.00 1.00 1.00 41\n",
+ " 1 1.00 0.02 0.05 250\n",
+ " 2 0.00 0.00 0.00 8\n",
+ " 3 0.94 1.00 0.97 131\n",
+ " 4 0.95 1.00 0.97 4743\n",
+ "\n",
+ " accuracy 0.95 5173\n",
+ " macro avg 0.78 0.60 0.60 5173\n",
+ "weighted avg 0.95 0.95 0.93 5173\n",
+ "\n",
+ "Predicted labels: [4 4 4 ... 3 4 4]\n",
+ "Accuracy: 0.9512855209742895\n",
+ "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/sklearn/metrics/classification.py:1437: UndefinedMetricWarning: Precision and F-score are ill-defined and being set to 0.0 in labels with no predicted samples.\n",
+ " 'precision', 'predicted', average, warn_for)\n"
+ ]
+ }
+ ],
+ "source": [
+ "from sklearn.model_selection import train_test_split\n",
+ "from sklearn.metrics import accuracy_score, classification_report \n",
+ "from sklearn.linear_model import LogisticRegression\n",
+ "model = LogisticRegression()\n",
+ "model.fit(X_train, y_train)\n",
+ "predictions = model.predict(X_test)\n",
+ "\n",
+ "print(classification_report(y_test, predictions))\n",
+ "print('Predicted labels: ', predictions)\n",
+ "print('Accuracy: ', accuracy_score(y_test, predictions))\n",
+ "\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 29,
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "name": "stdout",
+ "text": [
+ "[3]\n"
+ ]
+ }
+ ],
+ "source": [
+ "import pickle\n",
+ "model_filename = 'ufo-model.pkl'\n",
+ "pickle.dump(model, open(model_filename,'wb'))\n",
+ "\n",
+ "model = pickle.load(open('ufo-model.pkl','rb'))\n",
+ "print(model.predict([[50,44,-12]]))\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": []
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "\n---\n\n**Paunawa**: \nAng dokumentong ito ay isinalin gamit ang AI translation service na [Co-op Translator](https://github.com/Azure/co-op-translator). Bagama't sinisikap naming maging tumpak, pakitandaan na ang mga awtomatikong pagsasalin ay maaaring maglaman ng mga pagkakamali o hindi pagkakatugma. Ang orihinal na dokumento sa orihinal nitong wika ang dapat ituring na opisyal na sanggunian. Para sa mahalagang impormasyon, inirerekomenda ang propesyonal na pagsasalin ng tao. Hindi kami mananagot sa anumang hindi pagkakaunawaan o maling interpretasyon na maaaring magmula sa paggamit ng pagsasaling ito.\n"
+ ]
+ }
+ ]
+}
\ No newline at end of file
diff --git a/translations/tl/3-Web-App/README.md b/translations/tl/3-Web-App/README.md
new file mode 100644
index 000000000..a362de340
--- /dev/null
+++ b/translations/tl/3-Web-App/README.md
@@ -0,0 +1,35 @@
+
+# Gumawa ng web app para magamit ang iyong ML model
+
+Sa seksyong ito ng kurikulum, ipapakilala sa iyo ang isang praktikal na paksa sa ML: kung paano i-save ang iyong Scikit-learn model bilang isang file na magagamit para gumawa ng mga prediksyon sa loob ng isang web application. Kapag na-save na ang model, matutunan mo kung paano ito gamitin sa isang web app na ginawa gamit ang Flask. Una, gagawa ka ng model gamit ang ilang data na may kaugnayan sa mga sightings ng UFO! Pagkatapos, gagawa ka ng isang web app na magbibigay-daan sa iyo na mag-input ng bilang ng mga segundo kasama ang latitude at longitude value upang hulaan kung aling bansa ang nag-ulat ng pag-sighting ng UFO.
+
+
+
+Larawan ni Michael Herren sa Unsplash
+
+## Mga Aralin
+
+1. [Gumawa ng Web App](1-Web-App/README.md)
+
+## Mga Kredito
+
+"Gumawa ng Web App" ay isinulat nang may ♥️ ni [Jen Looper](https://twitter.com/jenlooper).
+
+♥️ Ang mga pagsusulit ay isinulat ni Rohan Raj.
+
+Ang dataset ay mula sa [Kaggle](https://www.kaggle.com/NUFORC/ufo-sightings).
+
+Ang arkitektura ng web app ay bahagyang iminungkahi ng [artikulong ito](https://towardsdatascience.com/how-to-easily-deploy-machine-learning-models-using-flask-b95af8fe34d4) at [repo na ito](https://github.com/abhinavsagar/machine-learning-deployment) ni Abhinav Sagar.
+
+---
+
+**Paunawa**:
+Ang dokumentong ito ay isinalin gamit ang AI translation service na [Co-op Translator](https://github.com/Azure/co-op-translator). Bagama't sinisikap naming maging tumpak, tandaan na ang mga awtomatikong pagsasalin ay maaaring maglaman ng mga pagkakamali o hindi pagkakatugma. Ang orihinal na dokumento sa kanyang katutubong wika ang dapat ituring na opisyal na sanggunian. Para sa mahalagang impormasyon, inirerekomenda ang propesyonal na pagsasalin ng tao. Hindi kami mananagot sa anumang hindi pagkakaunawaan o maling interpretasyon na maaaring magmula sa paggamit ng pagsasaling ito.
\ No newline at end of file
diff --git a/translations/tl/4-Classification/1-Introduction/README.md b/translations/tl/4-Classification/1-Introduction/README.md
new file mode 100644
index 000000000..627501e9c
--- /dev/null
+++ b/translations/tl/4-Classification/1-Introduction/README.md
@@ -0,0 +1,313 @@
+
+# Panimula sa klasipikasyon
+
+Sa apat na araling ito, tatalakayin natin ang isa sa mga pangunahing aspeto ng klasikong machine learning - _klasipikasyon_. Gagamit tayo ng iba't ibang klasipikasyon na algorithm gamit ang isang dataset tungkol sa mga kahanga-hangang lutuin ng Asya at India. Sana'y gutom ka na!
+
+
+
+> Ipagdiwang ang pan-Asian na mga lutuin sa mga araling ito! Larawan ni [Jen Looper](https://twitter.com/jenlooper)
+
+Ang klasipikasyon ay isang anyo ng [supervised learning](https://wikipedia.org/wiki/Supervised_learning) na may pagkakatulad sa mga regression techniques. Kung ang machine learning ay tungkol sa paghula ng mga halaga o pangalan gamit ang mga dataset, ang klasipikasyon ay karaniwang nahahati sa dalawang grupo: _binary classification_ at _multiclass classification_.
+
+[](https://youtu.be/eg8DJYwdMyg "Panimula sa klasipikasyon")
+
+> 🎥 I-click ang larawan sa itaas para sa isang video: Ipinapakilala ni John Guttag ng MIT ang klasipikasyon
+
+Tandaan:
+
+- **Linear regression** ay tumulong sa iyo na hulaan ang relasyon sa pagitan ng mga variable at gumawa ng tumpak na prediksyon kung saan mahuhulog ang isang bagong datapoint kaugnay ng linya. Halimbawa, maaari mong hulaan _kung magkano ang presyo ng kalabasa sa Setyembre kumpara sa Disyembre_.
+- **Logistic regression** ay tumulong sa iyo na tukuyin ang "binary categories": sa presyong ito, _ang kalabasa ba ay kulay kahel o hindi-kahel_?
+
+Ang klasipikasyon ay gumagamit ng iba't ibang algorithm upang matukoy ang iba pang paraan ng pagtukoy ng label o klase ng isang datapoint. Gamitin natin ang dataset ng mga lutuin upang makita kung, sa pamamagitan ng pagmamasid sa isang grupo ng mga sangkap, maaari nating matukoy ang pinagmulan nitong lutuin.
+
+## [Pre-lecture quiz](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/19/)
+
+> ### [Ang araling ito ay available sa R!](../../../../4-Classification/1-Introduction/solution/R/lesson_10.html)
+
+### Panimula
+
+Ang klasipikasyon ay isa sa mga pangunahing gawain ng isang mananaliksik sa machine learning at data scientist. Mula sa simpleng klasipikasyon ng isang binary na halaga ("ang email bang ito ay spam o hindi?"), hanggang sa masalimuot na klasipikasyon ng imahe at segmentation gamit ang computer vision, laging kapaki-pakinabang na mauri ang data sa mga klase at makapagtanong tungkol dito.
+
+Upang mailahad ang proseso sa mas siyentipikong paraan, ang iyong klasipikasyon na pamamaraan ay lumilikha ng isang predictive model na nagbibigay-daan sa iyong i-map ang relasyon sa pagitan ng mga input variable at output variable.
+
+
+
+> Binary vs. multiclass na mga problema para sa mga klasipikasyon na algorithm. Infographic ni [Jen Looper](https://twitter.com/jenlooper)
+
+Bago simulan ang proseso ng paglilinis ng ating data, pag-visualize nito, at paghahanda para sa ating mga ML na gawain, alamin muna natin ang iba't ibang paraan kung paano maaaring gamitin ang machine learning upang uriin ang data.
+
+Hango mula sa [statistics](https://wikipedia.org/wiki/Statistical_classification), ang klasipikasyon gamit ang klasikong machine learning ay gumagamit ng mga feature, tulad ng `smoker`, `weight`, at `age` upang matukoy ang _posibilidad ng pagkakaroon ng X na sakit_. Bilang isang supervised learning technique na katulad ng mga regression exercises na ginawa mo kanina, ang iyong data ay may label at ginagamit ng mga ML algorithm ang mga label na ito upang uriin at hulaan ang mga klase (o 'features') ng isang dataset at i-assign ang mga ito sa isang grupo o resulta.
+
+✅ Maglaan ng sandali upang isipin ang isang dataset tungkol sa mga lutuin. Ano ang maaaring masagot ng isang multiclass model? Ano ang maaaring masagot ng isang binary model? Paano kung gusto mong tukuyin kung ang isang partikular na lutuin ay malamang na gumagamit ng fenugreek? Paano kung gusto mong malaman kung, sa isang grocery bag na puno ng star anise, artichokes, cauliflower, at horseradish, makakagawa ka ng isang tipikal na Indian dish?
+
+[](https://youtu.be/GuTeDbaNoEU "Crazy mystery baskets")
+
+> 🎥 I-click ang larawan sa itaas para sa isang video. Ang buong premise ng palabas na 'Chopped' ay ang 'mystery basket' kung saan kailangang gumawa ang mga chef ng isang putahe mula sa random na pagpili ng mga sangkap. Siguradong makakatulong ang isang ML model!
+
+## Hello 'classifier'
+
+Ang tanong na nais nating itanong sa dataset ng mga lutuin ay isang **multiclass na tanong**, dahil mayroon tayong ilang potensyal na pambansang lutuin na maaaring pagpilian. Batay sa isang batch ng mga sangkap, aling mga klase ang babagay sa data?
+
+Ang Scikit-learn ay nag-aalok ng iba't ibang algorithm na maaaring gamitin upang uriin ang data, depende sa uri ng problemang nais mong lutasin. Sa susunod na dalawang aralin, matututo ka tungkol sa ilan sa mga algorithm na ito.
+
+## Ehersisyo - linisin at balansehin ang iyong data
+
+Ang unang gawain bago simulan ang proyektong ito ay linisin at **balansehin** ang iyong data upang makakuha ng mas mahusay na resulta. Simulan sa blankong _notebook.ipynb_ file sa root ng folder na ito.
+
+Ang unang kailangang i-install ay ang [imblearn](https://imbalanced-learn.org/stable/). Ito ay isang Scikit-learn package na magpapahintulot sa iyong mas mahusay na balansehin ang data (malalaman mo pa ang tungkol sa gawaing ito sa ilang sandali).
+
+1. Upang i-install ang `imblearn`, patakbuhin ang `pip install`, tulad nito:
+
+ ```python
+ pip install imblearn
+ ```
+
+1. I-import ang mga package na kailangan mo upang ma-import ang iyong data at ma-visualize ito, at i-import din ang `SMOTE` mula sa `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
+ ```
+
+ Ngayon ay handa ka nang i-import ang data.
+
+1. Ang susunod na gawain ay i-import ang data:
+
+ ```python
+ df = pd.read_csv('../data/cuisines.csv')
+ ```
+
+ Ang paggamit ng `read_csv()` ay babasahin ang nilalaman ng csv file na _cusines.csv_ at ilalagay ito sa variable na `df`.
+
+1. Tingnan ang hugis ng data:
+
+ ```python
+ df.head()
+ ```
+
+ Ang unang limang hilera ay ganito ang hitsura:
+
+ ```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. Kumuha ng impormasyon tungkol sa data sa pamamagitan ng pagtawag sa `info()`:
+
+ ```python
+ df.info()
+ ```
+
+ Ang iyong output ay kahalintulad nito:
+
+ ```output
+
+ RangeIndex: 2448 entries, 0 to 2447
+ Columns: 385 entries, Unnamed: 0 to zucchini
+ dtypes: int64(384), object(1)
+ memory usage: 7.2+ MB
+ ```
+
+## Ehersisyo - pag-aaral tungkol sa mga lutuin
+
+Ngayon ay nagiging mas kawili-wili ang gawain. Tuklasin natin ang distribusyon ng data, bawat lutuin.
+
+1. I-plot ang data bilang mga bar sa pamamagitan ng pagtawag sa `barh()`:
+
+ ```python
+ df.cuisine.value_counts().plot.barh()
+ ```
+
+ 
+
+ Mayroong limitadong bilang ng mga lutuin, ngunit ang distribusyon ng data ay hindi pantay. Maaari mo itong ayusin! Bago gawin ito, mag-explore pa ng kaunti.
+
+1. Alamin kung gaano karaming data ang mayroon bawat lutuin at i-print ito:
+
+ ```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}')
+ ```
+
+ Ang output ay ganito ang hitsura:
+
+ ```output
+ thai df: (289, 385)
+ japanese df: (320, 385)
+ chinese df: (442, 385)
+ indian df: (598, 385)
+ korean df: (799, 385)
+ ```
+
+## Pagtuklas ng mga sangkap
+
+Ngayon ay maaari kang maghukay nang mas malalim sa data at alamin kung ano ang mga tipikal na sangkap bawat lutuin. Dapat mong linisin ang mga paulit-ulit na data na nagdudulot ng kalituhan sa pagitan ng mga lutuin, kaya't alamin natin ang problemang ito.
+
+1. Gumawa ng isang function na `create_ingredient()` sa Python upang lumikha ng isang ingredient dataframe. Ang function na ito ay magsisimula sa pamamagitan ng pag-drop ng isang hindi kapaki-pakinabang na column at pag-aayos ng mga sangkap batay sa kanilang bilang:
+
+ ```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
+ ```
+
+ Ngayon ay maaari mong gamitin ang function na iyon upang makakuha ng ideya ng sampung pinakapopular na sangkap bawat lutuin.
+
+1. Tawagin ang `create_ingredient()` at i-plot ito sa pamamagitan ng pagtawag sa `barh()`:
+
+ ```python
+ thai_ingredient_df = create_ingredient_df(thai_df)
+ thai_ingredient_df.head(10).plot.barh()
+ ```
+
+ 
+
+1. Gawin ang pareho para sa data ng Japanese:
+
+ ```python
+ japanese_ingredient_df = create_ingredient_df(japanese_df)
+ japanese_ingredient_df.head(10).plot.barh()
+ ```
+
+ 
+
+1. Ngayon para sa mga sangkap ng Chinese:
+
+ ```python
+ chinese_ingredient_df = create_ingredient_df(chinese_df)
+ chinese_ingredient_df.head(10).plot.barh()
+ ```
+
+ 
+
+1. I-plot ang mga sangkap ng Indian:
+
+ ```python
+ indian_ingredient_df = create_ingredient_df(indian_df)
+ indian_ingredient_df.head(10).plot.barh()
+ ```
+
+ 
+
+1. Sa wakas, i-plot ang mga sangkap ng Korean:
+
+ ```python
+ korean_ingredient_df = create_ingredient_df(korean_df)
+ korean_ingredient_df.head(10).plot.barh()
+ ```
+
+ 
+
+1. Ngayon, i-drop ang mga pinakakaraniwang sangkap na nagdudulot ng kalituhan sa pagitan ng iba't ibang lutuin, sa pamamagitan ng pagtawag sa `drop()`:
+
+ Lahat ay mahilig sa kanin, bawang, at luya!
+
+ ```python
+ feature_df= df.drop(['cuisine','Unnamed: 0','rice','garlic','ginger'], axis=1)
+ labels_df = df.cuisine #.unique()
+ feature_df.head()
+ ```
+
+## Balansehin ang dataset
+
+Ngayon na nalinis mo na ang data, gamitin ang [SMOTE](https://imbalanced-learn.org/dev/references/generated/imblearn.over_sampling.SMOTE.html) - "Synthetic Minority Over-sampling Technique" - upang balansehin ito.
+
+1. Tawagin ang `fit_resample()`, ang estratehiyang ito ay bumubuo ng mga bagong sample sa pamamagitan ng interpolation.
+
+ ```python
+ oversample = SMOTE()
+ transformed_feature_df, transformed_label_df = oversample.fit_resample(feature_df, labels_df)
+ ```
+
+ Sa pamamagitan ng pagbabalanse ng iyong data, magkakaroon ka ng mas mahusay na resulta kapag inuri ito. Isipin ang isang binary classification. Kung karamihan ng iyong data ay isang klase, ang isang ML model ay mas madalas na huhulaan ang klaseng iyon, dahil lamang mas marami ang data para dito. Ang pagbabalanse ng data ay nag-aalis ng anumang pagkiling sa data at tumutulong na alisin ang imbalance na ito.
+
+1. Ngayon ay maaari mong suriin ang bilang ng mga label bawat sangkap:
+
+ ```python
+ print(f'new label count: {transformed_label_df.value_counts()}')
+ print(f'old label count: {df.cuisine.value_counts()}')
+ ```
+
+ Ang iyong output ay ganito ang hitsura:
+
+ ```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
+ ```
+
+ Ang data ay malinis, balanse, at napakasarap!
+
+1. Ang huling hakbang ay i-save ang iyong balanced data, kabilang ang mga label at feature, sa isang bagong dataframe na maaaring i-export sa isang file:
+
+ ```python
+ transformed_df = pd.concat([transformed_label_df,transformed_feature_df],axis=1, join='outer')
+ ```
+
+1. Maaari mong tingnan muli ang data gamit ang `transformed_df.head()` at `transformed_df.info()`. I-save ang isang kopya ng data na ito para magamit sa mga susunod na aralin:
+
+ ```python
+ transformed_df.head()
+ transformed_df.info()
+ transformed_df.to_csv("../data/cleaned_cuisines.csv")
+ ```
+
+ Ang sariwang CSV na ito ay matatagpuan na ngayon sa root data folder.
+
+---
+
+## 🚀Hamunin
+
+Ang kurikulum na ito ay naglalaman ng ilang mga kawili-wiling dataset. Halungkatin ang mga `data` folder at tingnan kung mayroong mga dataset na angkop para sa binary o multi-class classification? Anong mga tanong ang maaari mong itanong sa dataset na ito?
+
+## [Post-lecture quiz](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/20/)
+
+## Review at Pag-aaral sa Sarili
+
+Pag-aralan ang API ng SMOTE. Para sa anong mga use case ito pinakamahusay gamitin? Anong mga problema ang nalulutas nito?
+
+## Takdang Aralin
+
+[Galugarin ang mga pamamaraan ng klasipikasyon](assignment.md)
+
+---
+
+**Paunawa**:
+Ang dokumentong ito ay isinalin gamit ang AI translation service na [Co-op Translator](https://github.com/Azure/co-op-translator). Bagama't sinisikap naming maging tumpak, pakitandaan na ang mga awtomatikong pagsasalin ay maaaring maglaman ng mga pagkakamali o hindi pagkakatugma. Ang orihinal na dokumento sa orihinal nitong wika ang dapat ituring na opisyal na sanggunian. Para sa mahalagang impormasyon, inirerekomenda ang propesyonal na pagsasalin ng tao. Hindi kami mananagot sa anumang hindi pagkakaunawaan o maling interpretasyon na maaaring magmula sa paggamit ng pagsasaling ito.
\ No newline at end of file
diff --git a/translations/tl/4-Classification/1-Introduction/assignment.md b/translations/tl/4-Classification/1-Introduction/assignment.md
new file mode 100644
index 000000000..f63389d16
--- /dev/null
+++ b/translations/tl/4-Classification/1-Introduction/assignment.md
@@ -0,0 +1,25 @@
+
+# Tuklasin ang mga pamamaraan ng klasipikasyon
+
+## Mga Instruksyon
+
+Sa [Scikit-learn documentation](https://scikit-learn.org/stable/supervised_learning.html), makakakita ka ng malawak na listahan ng mga paraan upang magklasipika ng data. Magkaroon ng kaunting scavenger hunt sa mga dokumentong ito: ang layunin mo ay maghanap ng mga pamamaraan ng klasipikasyon at itugma ang isang dataset sa kurikulum na ito, isang tanong na maaari mong itanong tungkol dito, at isang teknik ng klasipikasyon. Gumawa ng spreadsheet o talahanayan sa isang .doc file at ipaliwanag kung paano gagana ang dataset gamit ang algorithm ng klasipikasyon.
+
+## Rubric
+
+| Pamantayan | Natatangi | Katanggap-tanggap | Kailangan ng Pagpapabuti |
+| -----------| ----------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| | isang dokumento ang ipinakita na naglalahad ng 5 algorithm kasama ang isang teknik ng klasipikasyon. Ang paglalahad ay mahusay na ipinaliwanag at detalyado. | isang dokumento ang ipinakita na naglalahad ng 3 algorithm kasama ang isang teknik ng klasipikasyon. Ang paglalahad ay mahusay na ipinaliwanag at detalyado. | isang dokumento ang ipinakita na naglalahad ng mas kaunti sa tatlong algorithm kasama ang isang teknik ng klasipikasyon at ang paglalahad ay hindi mahusay na ipinaliwanag o detalyado. |
+
+---
+
+**Paunawa**:
+Ang dokumentong ito ay isinalin gamit ang AI translation service na [Co-op Translator](https://github.com/Azure/co-op-translator). Bagama't sinisikap naming maging tumpak, tandaan na ang mga awtomatikong pagsasalin ay maaaring maglaman ng mga pagkakamali o hindi pagkakatugma. Ang orihinal na dokumento sa kanyang katutubong wika ang dapat ituring na opisyal na sanggunian. Para sa mahalagang impormasyon, inirerekomenda ang propesyonal na pagsasalin ng tao. Hindi kami mananagot sa anumang hindi pagkakaunawaan o maling interpretasyon na maaaring magmula sa paggamit ng pagsasaling ito.
\ No newline at end of file
diff --git a/translations/tl/4-Classification/1-Introduction/notebook.ipynb b/translations/tl/4-Classification/1-Introduction/notebook.ipynb
new file mode 100644
index 000000000..8b1edba65
--- /dev/null
+++ b/translations/tl/4-Classification/1-Introduction/notebook.ipynb
@@ -0,0 +1,39 @@
+{
+ "metadata": {
+ "language_info": {
+ "codemirror_mode": {
+ "name": "ipython",
+ "version": 3
+ },
+ "file_extension": ".py",
+ "mimetype": "text/x-python",
+ "name": "python",
+ "nbconvert_exporter": "python",
+ "pygments_lexer": "ipython3",
+ "version": 3
+ },
+ "orig_nbformat": 2,
+ "coopTranslator": {
+ "original_hash": "d544ef384b7ba73757d830a72372a7f2",
+ "translation_date": "2025-08-29T15:29:49+00:00",
+ "source_file": "4-Classification/1-Introduction/notebook.ipynb",
+ "language_code": "tl"
+ }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 2,
+ "cells": [
+ {
+ "source": [],
+ "cell_type": "markdown",
+ "metadata": {}
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "\n---\n\n**Paunawa**: \nAng dokumentong ito ay isinalin gamit ang AI translation service na [Co-op Translator](https://github.com/Azure/co-op-translator). Bagama't sinisikap naming maging tumpak, pakitandaan na ang mga awtomatikong pagsasalin ay maaaring maglaman ng mga pagkakamali o hindi pagkakatugma. Ang orihinal na dokumento sa orihinal nitong wika ang dapat ituring na opisyal na sanggunian. Para sa mahalagang impormasyon, inirerekomenda ang propesyonal na pagsasalin ng tao. Hindi kami mananagot sa anumang hindi pagkakaunawaan o maling interpretasyon na dulot ng paggamit ng pagsasaling ito.\n"
+ ]
+ }
+ ]
+}
\ No newline at end of file
diff --git a/translations/tl/4-Classification/1-Introduction/solution/Julia/README.md b/translations/tl/4-Classification/1-Introduction/solution/Julia/README.md
new file mode 100644
index 000000000..0a28c92b5
--- /dev/null
+++ b/translations/tl/4-Classification/1-Introduction/solution/Julia/README.md
@@ -0,0 +1,15 @@
+
+
+
+---
+
+**Paunawa**:
+Ang dokumentong ito ay isinalin gamit ang AI translation service na [Co-op Translator](https://github.com/Azure/co-op-translator). Bagama't sinisikap naming maging tumpak, pakitandaan na ang mga awtomatikong pagsasalin ay maaaring maglaman ng mga pagkakamali o hindi pagkakatugma. Ang orihinal na dokumento sa kanyang orihinal na wika ang dapat ituring na opisyal na sanggunian. Para sa mahalagang impormasyon, inirerekomenda ang propesyonal na pagsasalin ng tao. Hindi kami mananagot sa anumang hindi pagkakaunawaan o maling interpretasyon na maaaring magmula sa paggamit ng pagsasaling ito.
\ No newline at end of file
diff --git a/translations/tl/4-Classification/1-Introduction/solution/R/lesson_10-R.ipynb b/translations/tl/4-Classification/1-Introduction/solution/R/lesson_10-R.ipynb
new file mode 100644
index 000000000..447292b7b
--- /dev/null
+++ b/translations/tl/4-Classification/1-Introduction/solution/R/lesson_10-R.ipynb
@@ -0,0 +1,721 @@
+{
+ "nbformat": 4,
+ "nbformat_minor": 2,
+ "metadata": {
+ "colab": {
+ "name": "lesson_10-R.ipynb",
+ "provenance": [],
+ "collapsed_sections": []
+ },
+ "kernelspec": {
+ "name": "ir",
+ "display_name": "R"
+ },
+ "language_info": {
+ "name": "R"
+ },
+ "coopTranslator": {
+ "original_hash": "2621e24705e8100893c9bf84e0fc8aef",
+ "translation_date": "2025-08-29T15:34:53+00:00",
+ "source_file": "4-Classification/1-Introduction/solution/R/lesson_10-R.ipynb",
+ "language_code": "tl"
+ }
+ },
+ "cells": [
+ {
+ "cell_type": "markdown",
+ "source": [],
+ "metadata": {
+ "id": "ItETB4tSFprR"
+ }
+ },
+ {
+ "cell_type": "markdown",
+ "source": [
+ "## Panimula sa klasipikasyon: Linisin, ihanda, at i-visualize ang iyong data\n",
+ "\n",
+ "Sa apat na araling ito, susuriin mo ang isang mahalagang aspeto ng klasikong machine learning - *klasipikasyon*. Tatalakayin natin ang paggamit ng iba't ibang klasipikasyon na algorithm gamit ang isang dataset tungkol sa mga kahanga-hangang lutuin ng Asya at India. Sana ay gutom ka na!\n",
+ "\n",
+ "
\n",
+ " \n",
+ " Ipinagdiriwang ang mga pan-Asian na lutuin sa mga araling ito! Larawan ni Jen Looper\n",
+ "\n",
+ "\n",
+ "\n",
+ "\n",
+ "Ang klasipikasyon ay isang uri ng [supervised learning](https://wikipedia.org/wiki/Supervised_learning) na may maraming pagkakatulad sa mga regression techniques. Sa klasipikasyon, sinasanay mo ang isang modelo upang hulaan kung saang `kategorya` kabilang ang isang item. Kung ang machine learning ay tungkol sa paghula ng mga halaga o pangalan ng mga bagay gamit ang mga dataset, ang klasipikasyon ay karaniwang nahahati sa dalawang grupo: *binary classification* at *multiclass classification*.\n",
+ "\n",
+ "Tandaan:\n",
+ "\n",
+ "- **Linear regression** ay tumulong sa iyo na hulaan ang relasyon sa pagitan ng mga variable at gumawa ng tumpak na prediksyon kung saan mahuhulog ang isang bagong datapoint kaugnay ng linya. Halimbawa, maaari kang maghulaan ng numerong halaga tulad ng *ano ang presyo ng kalabasa sa Setyembre kumpara sa Disyembre*.\n",
+ "\n",
+ "- **Logistic regression** ay tumulong sa iyo na matuklasan ang \"binary categories\": sa presyong ito, *ang kalabasa ba ay orange o hindi-orange*?\n",
+ "\n",
+ "Ang klasipikasyon ay gumagamit ng iba't ibang algorithm upang matukoy ang iba pang paraan ng pagtukoy sa label o klase ng isang datapoint. Gamitin natin ang data ng lutuin upang makita kung, sa pamamagitan ng pagmamasid sa isang grupo ng mga sangkap, maaari nating matukoy ang pinagmulan ng lutuin.\n",
+ "\n",
+ "### [**Pre-lecture quiz**](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/19/)\n",
+ "\n",
+ "### **Panimula**\n",
+ "\n",
+ "Ang klasipikasyon ay isa sa mga pangunahing gawain ng mananaliksik ng machine learning at data scientist. Mula sa simpleng klasipikasyon ng isang binary value (\"spam ba ang email na ito o hindi?\"), hanggang sa masalimuot na klasipikasyon ng imahe at segmentation gamit ang computer vision, palaging kapaki-pakinabang na maayos ang data sa mga klase at magtanong tungkol dito.\n",
+ "\n",
+ "Upang ipahayag ang proseso sa mas siyentipikong paraan, ang iyong klasipikasyon na pamamaraan ay lumilikha ng isang predictive model na nagbibigay-daan sa iyo upang i-map ang relasyon sa pagitan ng mga input variable sa mga output variable.\n",
+ "\n",
+ "
\n",
+ " \n",
+ " Binary vs. multiclass na mga problema para sa mga klasipikasyon na algorithm. Infographic ni Jen Looper\n",
+ "\n",
+ "\n",
+ "\n",
+ "Bago simulan ang proseso ng paglilinis ng ating data, pag-visualize nito, at paghahanda para sa ating mga ML na gawain, alamin muna natin ang iba't ibang paraan kung paano magagamit ang machine learning upang i-klasipika ang data.\n",
+ "\n",
+ "Hango mula sa [statistics](https://wikipedia.org/wiki/Statistical_classification), ang klasipikasyon gamit ang klasikong machine learning ay gumagamit ng mga features, tulad ng `smoker`, `weight`, at `age` upang matukoy ang *pagkakataon ng pagkakaroon ng X na sakit*. Bilang isang supervised learning technique na katulad ng mga regression exercises na ginawa mo dati, ang iyong data ay may label at ang mga ML algorithm ay gumagamit ng mga label na iyon upang i-klasipika at hulaan ang mga klase (o 'features') ng isang dataset at i-assign ang mga ito sa isang grupo o resulta.\n",
+ "\n",
+ "✅ Maglaan ng sandali upang mag-isip ng isang dataset tungkol sa mga lutuin. Ano ang maaaring masagot ng isang multiclass na modelo? Ano ang maaaring masagot ng isang binary na modelo? Paano kung gusto mong matukoy kung ang isang partikular na lutuin ay malamang na gumamit ng fenugreek? Paano kung gusto mong makita kung, sa isang grocery bag na puno ng star anise, artichokes, cauliflower, at horseradish, maaari kang gumawa ng isang tipikal na Indian dish?\n",
+ "\n",
+ "### **Hello 'classifier'**\n",
+ "\n",
+ "Ang tanong na nais nating itanong sa dataset ng lutuin ay talagang isang **multiclass na tanong**, dahil mayroon tayong ilang potensyal na pambansang lutuin na maaaring pagpilian. Sa isang batch ng mga sangkap, alin sa mga klase na ito ang babagay sa data?\n",
+ "\n",
+ "Ang Tidymodels ay nag-aalok ng iba't ibang algorithm na maaaring gamitin upang i-klasipika ang data, depende sa uri ng problemang nais mong lutasin. Sa susunod na dalawang aralin, matututo ka tungkol sa ilan sa mga algorithm na ito.\n",
+ "\n",
+ "#### **Paunang Kailangan**\n",
+ "\n",
+ "Para sa araling ito, kakailanganin natin ang mga sumusunod na package upang linisin, ihanda, at i-visualize ang ating data:\n",
+ "\n",
+ "- `tidyverse`: Ang [tidyverse](https://www.tidyverse.org/) ay isang [koleksyon ng mga R package](https://www.tidyverse.org/packages) na idinisenyo upang gawing mas mabilis, mas madali, at mas masaya ang data science!\n",
+ "\n",
+ "- `tidymodels`: Ang [tidymodels](https://www.tidymodels.org/) framework ay isang [koleksyon ng mga package](https://www.tidymodels.org/packages/) para sa modeling at machine learning.\n",
+ "\n",
+ "- `DataExplorer`: Ang [DataExplorer package](https://cran.r-project.org/web/packages/DataExplorer/vignettes/dataexplorer-intro.html) ay nilikha upang gawing mas simple at awtomatiko ang proseso ng EDA at pagbuo ng ulat.\n",
+ "\n",
+ "- `themis`: Ang [themis package](https://themis.tidymodels.org/) ay nagbibigay ng Extra Recipes Steps para sa pagharap sa hindi balanseng data.\n",
+ "\n",
+ "Maaari mo silang i-install gamit ang:\n",
+ "\n",
+ "`install.packages(c(\"tidyverse\", \"tidymodels\", \"DataExplorer\", \"here\"))`\n",
+ "\n",
+ "Bilang alternatibo, ang script sa ibaba ay nagche-check kung mayroon ka ng mga package na kinakailangan upang makumpleto ang module na ito at ini-install ang mga ito para sa iyo kung sakaling kulang.\n"
+ ],
+ "metadata": {
+ "id": "ri5bQxZ-Fz_0"
+ }
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "source": [
+ "suppressWarnings(if (!require(\"pacman\"))install.packages(\"pacman\"))\r\n",
+ "\r\n",
+ "pacman::p_load(tidyverse, tidymodels, DataExplorer, themis, here)"
+ ],
+ "outputs": [],
+ "metadata": {
+ "id": "KIPxa4elGAPI"
+ }
+ },
+ {
+ "cell_type": "markdown",
+ "source": [
+ "Ila-load natin ang mga kahanga-hangang package na ito at gagawing available sa kasalukuyang R session natin. (Ito ay para lamang sa ilustrasyon, `pacman::p_load()` ay ginawa na iyon para sa iyo)\n"
+ ],
+ "metadata": {
+ "id": "YkKAxOJvGD4C"
+ }
+ },
+ {
+ "cell_type": "markdown",
+ "source": [
+ "## Ehersisyo - linisin at balansehin ang iyong data\n",
+ "\n",
+ "Ang unang gawain bago simulan ang proyektong ito ay linisin at **balansehin** ang iyong data upang makakuha ng mas magagandang resulta.\n",
+ "\n",
+ "Kilalanin natin ang data! 🕵️\n"
+ ],
+ "metadata": {
+ "id": "PFkQDlk0GN5O"
+ }
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "source": [
+ "# Import data\r\n",
+ "df <- read_csv(file = \"https://raw.githubusercontent.com/microsoft/ML-For-Beginners/main/4-Classification/data/cuisines.csv\")\r\n",
+ "\r\n",
+ "# View the first 5 rows\r\n",
+ "df %>% \r\n",
+ " slice_head(n = 5)\r\n"
+ ],
+ "outputs": [],
+ "metadata": {
+ "id": "Qccw7okxGT0S"
+ }
+ },
+ {
+ "cell_type": "markdown",
+ "source": [
+ "Kawili-wili! Sa tingin ko, ang unang kolum ay isang uri ng `id` na kolum. Alamin natin ang kaunting impormasyon tungkol sa datos.\n"
+ ],
+ "metadata": {
+ "id": "XrWnlgSrGVmR"
+ }
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "source": [
+ "# Basic information about the data\r\n",
+ "df %>%\r\n",
+ " introduce()\r\n",
+ "\r\n",
+ "# Visualize basic information above\r\n",
+ "df %>% \r\n",
+ " plot_intro(ggtheme = theme_light())"
+ ],
+ "outputs": [],
+ "metadata": {
+ "id": "4UcGmxRxGieA"
+ }
+ },
+ {
+ "cell_type": "markdown",
+ "source": [
+ "Mula sa output, makikita natin agad na mayroon tayong `2448` na mga hilera at `385` na mga kolum at `0` na nawawalang halaga. Mayroon din tayong 1 discrete na kolum, *cuisine*.\n",
+ "\n",
+ "## Ehersisyo - pag-aaral tungkol sa mga cuisine\n",
+ "\n",
+ "Ngayon, nagsisimula nang maging mas kawili-wili ang trabaho. Tuklasin natin ang distribusyon ng datos, bawat cuisine.\n"
+ ],
+ "metadata": {
+ "id": "AaPubl__GmH5"
+ }
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "source": [
+ "# Count observations per cuisine\r\n",
+ "df %>% \r\n",
+ " count(cuisine) %>% \r\n",
+ " arrange(n)\r\n",
+ "\r\n",
+ "# Plot the distribution\r\n",
+ "theme_set(theme_light())\r\n",
+ "df %>% \r\n",
+ " count(cuisine) %>% \r\n",
+ " ggplot(mapping = aes(x = n, y = reorder(cuisine, -n))) +\r\n",
+ " geom_col(fill = \"midnightblue\", alpha = 0.7) +\r\n",
+ " ylab(\"cuisine\")"
+ ],
+ "outputs": [],
+ "metadata": {
+ "id": "FRsBVy5eGrrv"
+ }
+ },
+ {
+ "cell_type": "markdown",
+ "source": [
+ "May tiyak na bilang ng mga lutuin, ngunit hindi pantay ang distribusyon ng datos. Maaari mo itong ayusin! Bago gawin iyon, mag-explore muna nang kaunti.\n",
+ "\n",
+ "Susunod, i-assign natin ang bawat lutuin sa kani-kanilang tibble at alamin kung gaano karaming datos ang mayroon (mga row, mga column) bawat lutuin.\n",
+ "\n",
+ "> Ang [tibble](https://tibble.tidyverse.org/) ay isang modernong data frame.\n",
+ "\n",
+ "
\n",
+ " \n",
+ " Likha ni @allison_horst\n"
+ ],
+ "metadata": {
+ "id": "vVvyDb1kG2in"
+ }
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "source": [
+ "# Create individual tibble for the cuisines\r\n",
+ "thai_df <- df %>% \r\n",
+ " filter(cuisine == \"thai\")\r\n",
+ "japanese_df <- df %>% \r\n",
+ " filter(cuisine == \"japanese\")\r\n",
+ "chinese_df <- df %>% \r\n",
+ " filter(cuisine == \"chinese\")\r\n",
+ "indian_df <- df %>% \r\n",
+ " filter(cuisine == \"indian\")\r\n",
+ "korean_df <- df %>% \r\n",
+ " filter(cuisine == \"korean\")\r\n",
+ "\r\n",
+ "\r\n",
+ "# Find out how much data is available per cuisine\r\n",
+ "cat(\" thai df:\", dim(thai_df), \"\\n\",\r\n",
+ " \"japanese df:\", dim(japanese_df), \"\\n\",\r\n",
+ " \"chinese_df:\", dim(chinese_df), \"\\n\",\r\n",
+ " \"indian_df:\", dim(indian_df), \"\\n\",\r\n",
+ " \"korean_df:\", dim(korean_df))"
+ ],
+ "outputs": [],
+ "metadata": {
+ "id": "0TvXUxD3G8Bk"
+ }
+ },
+ {
+ "cell_type": "markdown",
+ "source": [
+ "## **Ehersisyo - Tuklasin ang mga pangunahing sangkap ayon sa lutuin gamit ang dplyr**\n",
+ "\n",
+ "Ngayon, maaari mong masusing pag-aralan ang datos at alamin kung ano ang mga karaniwang sangkap sa bawat lutuin. Dapat mong linisin ang paulit-ulit na datos na nagdudulot ng kalituhan sa pagitan ng mga lutuin, kaya't alamin natin ang problemang ito.\n",
+ "\n",
+ "Gumawa ng function na `create_ingredient()` sa R na magbabalik ng isang ingredient dataframe. Ang function na ito ay magsisimula sa pagtanggal ng isang hindi kapaki-pakinabang na column at mag-aayos ng mga sangkap batay sa kanilang bilang.\n",
+ "\n",
+ "Ang pangunahing istruktura ng isang function sa R ay:\n",
+ "\n",
+ "`myFunction <- function(arglist){`\n",
+ "\n",
+ "**`...`**\n",
+ "\n",
+ "**`return`**`(value)`\n",
+ "\n",
+ "`}`\n",
+ "\n",
+ "Isang maayos na pagpapakilala sa mga function sa R ay matatagpuan [dito](https://skirmer.github.io/presentations/functions_with_r.html#1).\n",
+ "\n",
+ "Simulan na natin! Gagamit tayo ng [mga dplyr verbs](https://dplyr.tidyverse.org/) na natutunan natin sa mga nakaraang aralin. Bilang paalala:\n",
+ "\n",
+ "- `dplyr::select()`: tumutulong sa pagpili kung aling **mga column** ang itatago o aalisin.\n",
+ "\n",
+ "- `dplyr::pivot_longer()`: tumutulong sa \"pagpapahaba\" ng datos, pinapataas ang bilang ng mga row at binabawasan ang bilang ng mga column.\n",
+ "\n",
+ "- `dplyr::group_by()` at `dplyr::summarise()`: tumutulong sa paghanap ng mga summary statistics para sa iba't ibang grupo, at inilalagay ito sa isang maayos na talahanayan.\n",
+ "\n",
+ "- `dplyr::filter()`: lumilikha ng subset ng datos na naglalaman lamang ng mga row na tumutugon sa iyong mga kondisyon.\n",
+ "\n",
+ "- `dplyr::mutate()`: tumutulong sa paglikha o pagbabago ng mga column.\n",
+ "\n",
+ "Tingnan ang [*art*-filled learnr tutorial](https://allisonhorst.shinyapps.io/dplyr-learnr/#section-welcome) ni Allison Horst, na nagpapakilala ng ilang kapaki-pakinabang na data wrangling functions sa dplyr *(bahagi ng Tidyverse)*.\n"
+ ],
+ "metadata": {
+ "id": "K3RF5bSCHC76"
+ }
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "source": [
+ "# Creates a functions that returns the top ingredients by class\r\n",
+ "\r\n",
+ "create_ingredient <- function(df){\r\n",
+ " \r\n",
+ " # Drop the id column which is the first colum\r\n",
+ " ingredient_df = df %>% select(-1) %>% \r\n",
+ " # Transpose data to a long format\r\n",
+ " pivot_longer(!cuisine, names_to = \"ingredients\", values_to = \"count\") %>% \r\n",
+ " # Find the top most ingredients for a particular cuisine\r\n",
+ " group_by(ingredients) %>% \r\n",
+ " summarise(n_instances = sum(count)) %>% \r\n",
+ " filter(n_instances != 0) %>% \r\n",
+ " # Arrange by descending order\r\n",
+ " arrange(desc(n_instances)) %>% \r\n",
+ " mutate(ingredients = factor(ingredients) %>% fct_inorder())\r\n",
+ " \r\n",
+ " \r\n",
+ " return(ingredient_df)\r\n",
+ "} # End of function"
+ ],
+ "outputs": [],
+ "metadata": {
+ "id": "uB_0JR82HTPa"
+ }
+ },
+ {
+ "cell_type": "markdown",
+ "source": [
+ "Ngayon, magagamit natin ang function para makakuha ng ideya sa sampung pinakapopular na sangkap ayon sa lutuin. Subukan natin ito gamit ang `thai_df`.\n"
+ ],
+ "metadata": {
+ "id": "h9794WF8HWmc"
+ }
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "source": [
+ "# Call create_ingredient and display popular ingredients\r\n",
+ "thai_ingredient_df <- create_ingredient(df = thai_df)\r\n",
+ "\r\n",
+ "thai_ingredient_df %>% \r\n",
+ " slice_head(n = 10)"
+ ],
+ "outputs": [],
+ "metadata": {
+ "id": "agQ-1HrcHaEA"
+ }
+ },
+ {
+ "cell_type": "markdown",
+ "source": [
+ "Sa nakaraang bahagi, gumamit tayo ng `geom_col()`, tingnan natin kung paano mo rin magagamit ang `geom_bar` upang gumawa ng mga bar chart. Gamitin ang `?geom_bar` para sa karagdagang pagbabasa.\n"
+ ],
+ "metadata": {
+ "id": "kHu9ffGjHdcX"
+ }
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "source": [
+ "# Make a bar chart for popular thai cuisines\r\n",
+ "thai_ingredient_df %>% \r\n",
+ " slice_head(n = 10) %>% \r\n",
+ " ggplot(aes(x = n_instances, y = ingredients)) +\r\n",
+ " geom_bar(stat = \"identity\", width = 0.5, fill = \"steelblue\") +\r\n",
+ " xlab(\"\") + ylab(\"\")"
+ ],
+ "outputs": [],
+ "metadata": {
+ "id": "fb3Bx_3DHj6e"
+ }
+ },
+ {
+ "cell_type": "markdown",
+ "source": [],
+ "metadata": {
+ "id": "RHP_xgdkHnvM"
+ }
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "source": [
+ "# Get popular ingredients for Japanese cuisines and make bar chart\r\n",
+ "create_ingredient(df = japanese_df) %>% \r\n",
+ " slice_head(n = 10) %>%\r\n",
+ " ggplot(aes(x = n_instances, y = ingredients)) +\r\n",
+ " geom_bar(stat = \"identity\", width = 0.5, fill = \"darkorange\", alpha = 0.8) +\r\n",
+ " xlab(\"\") + ylab(\"\")\r\n"
+ ],
+ "outputs": [],
+ "metadata": {
+ "id": "019v8F0XHrRU"
+ }
+ },
+ {
+ "cell_type": "markdown",
+ "source": [
+ "Paano naman ang mga pagkaing Tsino?\n"
+ ],
+ "metadata": {
+ "id": "iIGM7vO8Hu3v"
+ }
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "source": [
+ "# Get popular ingredients for Chinese cuisines and make bar chart\r\n",
+ "create_ingredient(df = chinese_df) %>% \r\n",
+ " slice_head(n = 10) %>%\r\n",
+ " ggplot(aes(x = n_instances, y = ingredients)) +\r\n",
+ " geom_bar(stat = \"identity\", width = 0.5, fill = \"cyan4\", alpha = 0.8) +\r\n",
+ " xlab(\"\") + ylab(\"\")"
+ ],
+ "outputs": [],
+ "metadata": {
+ "id": "lHd9_gd2HyzU"
+ }
+ },
+ {
+ "cell_type": "markdown",
+ "source": [],
+ "metadata": {
+ "id": "ir8qyQbNH1c7"
+ }
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "source": [
+ "# Get popular ingredients for Indian cuisines and make bar chart\r\n",
+ "create_ingredient(df = indian_df) %>% \r\n",
+ " slice_head(n = 10) %>%\r\n",
+ " ggplot(aes(x = n_instances, y = ingredients)) +\r\n",
+ " geom_bar(stat = \"identity\", width = 0.5, fill = \"#041E42FF\", alpha = 0.8) +\r\n",
+ " xlab(\"\") + ylab(\"\")"
+ ],
+ "outputs": [],
+ "metadata": {
+ "id": "ApukQtKjH5FO"
+ }
+ },
+ {
+ "cell_type": "markdown",
+ "source": [],
+ "metadata": {
+ "id": "qv30cwY1H-FM"
+ }
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "source": [
+ "# Get popular ingredients for Korean cuisines and make bar chart\r\n",
+ "create_ingredient(df = korean_df) %>% \r\n",
+ " slice_head(n = 10) %>%\r\n",
+ " ggplot(aes(x = n_instances, y = ingredients)) +\r\n",
+ " geom_bar(stat = \"identity\", width = 0.5, fill = \"#852419FF\", alpha = 0.8) +\r\n",
+ " xlab(\"\") + ylab(\"\")"
+ ],
+ "outputs": [],
+ "metadata": {
+ "id": "lumgk9cHIBie"
+ }
+ },
+ {
+ "cell_type": "markdown",
+ "source": [
+ "Mula sa mga data visualizations, maaari na nating alisin ang mga pinakakaraniwang sangkap na nagdudulot ng kalituhan sa pagitan ng magkakaibang lutuin, gamit ang `dplyr::select()`.\n",
+ "\n",
+ "Sino ba naman ang hindi mahilig sa kanin, bawang, at luya!\n"
+ ],
+ "metadata": {
+ "id": "iO4veMXuIEta"
+ }
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "source": [
+ "# Drop id column, rice, garlic and ginger from our original data set\r\n",
+ "df_select <- df %>% \r\n",
+ " select(-c(1, rice, garlic, ginger))\r\n",
+ "\r\n",
+ "# Display new data set\r\n",
+ "df_select %>% \r\n",
+ " slice_head(n = 5)"
+ ],
+ "outputs": [],
+ "metadata": {
+ "id": "iHJPiG6rIUcK"
+ }
+ },
+ {
+ "cell_type": "markdown",
+ "source": [
+ "## Pagproseso ng datos gamit ang recipes 👩🍳👨🍳 - Pagtugon sa hindi balanseng datos ⚖️\n",
+ "\n",
+ "
\n",
+ " \n",
+ " Likha ni @allison_horst\n",
+ "\n",
+ "Dahil ang araling ito ay tungkol sa mga lutuin, kailangan nating ilagay ang `recipes` sa tamang konteksto.\n",
+ "\n",
+ "Ang Tidymodels ay nagbibigay ng isa pang kapaki-pakinabang na package: `recipes` - isang package para sa pagproseso ng datos.\n"
+ ],
+ "metadata": {
+ "id": "kkFd-JxdIaL6"
+ }
+ },
+ {
+ "cell_type": "markdown",
+ "source": [
+ "Tingnan natin muli ang distribusyon ng ating mga lutuin.\n"
+ ],
+ "metadata": {
+ "id": "6l2ubtTPJAhY"
+ }
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "source": [
+ "# Distribution of cuisines\r\n",
+ "old_label_count <- df_select %>% \r\n",
+ " count(cuisine) %>% \r\n",
+ " arrange(desc(n))\r\n",
+ "\r\n",
+ "old_label_count"
+ ],
+ "outputs": [],
+ "metadata": {
+ "id": "1e-E9cb7JDVi"
+ }
+ },
+ {
+ "cell_type": "markdown",
+ "source": [
+ "Tulad ng nakikita mo, hindi pantay ang distribusyon ng bilang ng mga lutuin. Halos tatlong beses ang dami ng mga lutuing Koreano kumpara sa mga lutuing Thai. Ang hindi balanseng datos ay madalas na may negatibong epekto sa performance ng modelo. Isipin ang isang binary classification. Kung karamihan sa iyong datos ay mula sa isang klase, mas madalas na mahuhulaan ng isang ML model ang klaseng iyon, dahil lamang mas marami itong datos. Ang pagbabalanse ng datos ay tumutulong na alisin ang ganitong hindi pagkakapantay. Maraming modelo ang mas mahusay ang performance kapag pantay ang bilang ng mga obserbasyon, kaya't nahihirapan ang mga ito kapag hindi balansado ang datos.\n",
+ "\n",
+ "Mayroong dalawang pangunahing paraan upang harapin ang hindi balanseng mga data set:\n",
+ "\n",
+ "- magdagdag ng mga obserbasyon sa minority class: `Over-sampling` halimbawa gamit ang SMOTE algorithm\n",
+ "\n",
+ "- magtanggal ng mga obserbasyon mula sa majority class: `Under-sampling`\n",
+ "\n",
+ "Ngayon, ipapakita natin kung paano harapin ang hindi balanseng mga data set gamit ang isang `recipe`. Ang isang recipe ay maituturing na isang blueprint na naglalarawan kung anong mga hakbang ang dapat isagawa sa isang data set upang maihanda ito para sa pagsusuri ng datos.\n"
+ ],
+ "metadata": {
+ "id": "soAw6826JKx9"
+ }
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "source": [
+ "# Load themis package for dealing with imbalanced data\r\n",
+ "library(themis)\r\n",
+ "\r\n",
+ "# Create a recipe for preprocessing data\r\n",
+ "cuisines_recipe <- recipe(cuisine ~ ., data = df_select) %>% \r\n",
+ " step_smote(cuisine)\r\n",
+ "\r\n",
+ "cuisines_recipe"
+ ],
+ "outputs": [],
+ "metadata": {
+ "id": "HS41brUIJVJy"
+ }
+ },
+ {
+ "cell_type": "markdown",
+ "source": [
+ "Tingnan natin ang mga hakbang sa preprocessing.\n",
+ "\n",
+ "- Ang tawag sa `recipe()` gamit ang isang formula ay nagsasabi sa recipe ng *mga papel* ng mga variable gamit ang `df_select` na data bilang reference. Halimbawa, ang kolum na `cuisine` ay naitalaga bilang isang `outcome` na papel habang ang iba pang mga kolum ay naitalaga bilang mga `predictor`.\n",
+ "\n",
+ "- Ang [`step_smote(cuisine)`](https://themis.tidymodels.org/reference/step_smote.html) ay lumilikha ng isang *specification* ng isang recipe step na artipisyal na bumubuo ng mga bagong halimbawa ng minority class gamit ang mga pinakamalapit na kapitbahay ng mga kasong ito.\n",
+ "\n",
+ "Ngayon, kung nais nating makita ang na-preprocess na data, kailangan nating [**`prep()`**](https://recipes.tidymodels.org/reference/prep.html) at [**`bake()`**](https://recipes.tidymodels.org/reference/bake.html) ang ating recipe.\n",
+ "\n",
+ "`prep()`: tinatantiya ang mga kinakailangang parameter mula sa isang training set na maaaring i-apply sa iba pang mga data set.\n",
+ "\n",
+ "`bake()`: kinukuha ang isang prepped recipe at ina-apply ang mga operasyon sa anumang data set.\n"
+ ],
+ "metadata": {
+ "id": "Yb-7t7XcJaC8"
+ }
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "source": [
+ "# Prep and bake the recipe\r\n",
+ "preprocessed_df <- cuisines_recipe %>% \r\n",
+ " prep() %>% \r\n",
+ " bake(new_data = NULL) %>% \r\n",
+ " relocate(cuisine)\r\n",
+ "\r\n",
+ "# Display data\r\n",
+ "preprocessed_df %>% \r\n",
+ " slice_head(n = 5)\r\n",
+ "\r\n",
+ "# Quick summary stats\r\n",
+ "preprocessed_df %>% \r\n",
+ " introduce()"
+ ],
+ "outputs": [],
+ "metadata": {
+ "id": "9QhSgdpxJl44"
+ }
+ },
+ {
+ "cell_type": "markdown",
+ "source": [
+ "Tingnan natin ngayon ang distribusyon ng ating mga lutuin at ihambing ang mga ito sa hindi balanseng datos.\n"
+ ],
+ "metadata": {
+ "id": "dmidELh_LdV7"
+ }
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "source": [
+ "# Distribution of cuisines\r\n",
+ "new_label_count <- preprocessed_df %>% \r\n",
+ " count(cuisine) %>% \r\n",
+ " arrange(desc(n))\r\n",
+ "\r\n",
+ "list(new_label_count = new_label_count,\r\n",
+ " old_label_count = old_label_count)"
+ ],
+ "outputs": [],
+ "metadata": {
+ "id": "aSh23klBLwDz"
+ }
+ },
+ {
+ "cell_type": "markdown",
+ "source": [
+ "Yum! Ang datos ay malinis, balanse, at napakasarap 😋!\n",
+ "\n",
+ "> Karaniwan, ang isang recipe ay ginagamit bilang isang preprocessor para sa pagmomodelo kung saan tinutukoy nito kung anong mga hakbang ang dapat gawin sa isang data set upang maihanda ito para sa pagmomodelo. Sa ganitong kaso, ang `workflow()` ay karaniwang ginagamit (tulad ng nakita na natin sa mga nakaraang aralin) sa halip na manu-manong i-estimate ang isang recipe.\n",
+ ">\n",
+ "> Dahil dito, hindi mo karaniwang kailangang gamitin ang **`prep()`** at **`bake()`** sa mga recipe kapag gumagamit ka ng tidymodels, ngunit ito ay mga kapaki-pakinabang na function na maaaring idagdag sa iyong toolkit upang tiyakin na ang mga recipe ay gumagana ayon sa iyong inaasahan, tulad ng sa ating halimbawa.\n",
+ ">\n",
+ "> Kapag ginamit mo ang **`bake()`** sa isang prepped na recipe gamit ang **`new_data = NULL`**, makukuha mo ang datos na ibinigay mo noong dinefine ang recipe, ngunit dumaan na ito sa mga preprocessing na hakbang.\n",
+ "\n",
+ "Ngayon, mag-save tayo ng kopya ng datos na ito para magamit sa mga susunod na aralin:\n"
+ ],
+ "metadata": {
+ "id": "HEu80HZ8L7ae"
+ }
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "source": [
+ "# Save preprocessed data\r\n",
+ "write_csv(preprocessed_df, \"../../../data/cleaned_cuisines_R.csv\")"
+ ],
+ "outputs": [],
+ "metadata": {
+ "id": "cBmCbIgrMOI6"
+ }
+ },
+ {
+ "cell_type": "markdown",
+ "source": [
+ "Ang bagong CSV na ito ay matatagpuan na ngayon sa root data folder.\n",
+ "\n",
+ "**🚀Hamunin**\n",
+ "\n",
+ "Ang kurikulum na ito ay naglalaman ng ilang kawili-wiling datasets. Suriin ang mga `data` folders at tingnan kung mayroong mga datasets na angkop para sa binary o multi-class classification. Anong mga tanong ang maaari mong itanong sa dataset na ito?\n",
+ "\n",
+ "## [**Post-lecture quiz**](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/20/)\n",
+ "\n",
+ "## **Review at Pag-aaral ng Sarili**\n",
+ "\n",
+ "- Tingnan ang [package themis](https://github.com/tidymodels/themis). Anong iba pang mga teknik ang maaari nating gamitin upang harapin ang hindi balanseng data?\n",
+ "\n",
+ "- Tidy models [reference website](https://www.tidymodels.org/start/).\n",
+ "\n",
+ "- H. Wickham at G. Grolemund, [*R for Data Science: Visualize, Model, Transform, Tidy, and Import Data*](https://r4ds.had.co.nz/).\n",
+ "\n",
+ "#### PASASALAMAT SA:\n",
+ "\n",
+ "[`Allison Horst`](https://twitter.com/allison_horst/) para sa paglikha ng mga kamangha-manghang ilustrasyon na ginagawang mas welcoming at engaging ang R. Hanapin ang higit pang mga ilustrasyon sa kanyang [gallery](https://www.google.com/url?q=https://github.com/allisonhorst/stats-illustrations&sa=D&source=editors&ust=1626380772530000&usg=AOvVaw3zcfyCizFQZpkSLzxiiQEM).\n",
+ "\n",
+ "[Cassie Breviu](https://www.twitter.com/cassieview) at [Jen Looper](https://www.twitter.com/jenlooper) para sa paglikha ng orihinal na Python na bersyon ng module na ito ♥️\n",
+ "\n",
+ "
\n",
+ " \n",
+ " Artwork ni @allison_horst\n"
+ ],
+ "metadata": {
+ "id": "WQs5621pMGwf"
+ }
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "\n---\n\n**Paunawa**: \nAng dokumentong ito ay isinalin gamit ang AI translation service na [Co-op Translator](https://github.com/Azure/co-op-translator). Bagama't sinisikap naming maging tumpak, pakitandaan na ang mga awtomatikong pagsasalin ay maaaring maglaman ng mga pagkakamali o hindi pagkakatugma. Ang orihinal na dokumento sa orihinal nitong wika ang dapat ituring na opisyal na sanggunian. Para sa mahalagang impormasyon, inirerekomenda ang propesyonal na pagsasalin ng tao. Hindi kami mananagot sa anumang hindi pagkakaunawaan o maling interpretasyon na maaaring magmula sa paggamit ng pagsasaling ito.\n"
+ ]
+ }
+ ]
+}
\ No newline at end of file
diff --git a/translations/tl/4-Classification/1-Introduction/solution/notebook.ipynb b/translations/tl/4-Classification/1-Introduction/solution/notebook.ipynb
new file mode 100644
index 000000000..a824ac548
--- /dev/null
+++ b/translations/tl/4-Classification/1-Introduction/solution/notebook.ipynb
@@ -0,0 +1,720 @@
+{
+ "cells": [
+ {
+ "source": [
+ "# Masasarap na Asyano at Indian na Lutuin\n",
+ "\n",
+ "## Panimula\n",
+ "\n",
+ "Ang pagkain ay isang mahalagang bahagi ng ating kultura at tradisyon. Sa dokumentong ito, tatalakayin natin ang iba't ibang masasarap na lutuin mula sa Asya at India. Ang mga pagkaing ito ay kilala sa kanilang kakaibang lasa, aroma, at kasaysayan.\n",
+ "\n",
+ "## Mga Kategorya ng Pagkain\n",
+ "\n",
+ "### 1. Mga Pangunahing Ulam\n",
+ "\n",
+ "Ang mga pangunahing ulam ay karaniwang sentro ng bawat pagkain. Narito ang ilang halimbawa:\n",
+ "\n",
+ "- **Adobo**: Isang klasikong Filipino na putahe na gawa sa toyo, suka, bawang, at paminta.\n",
+ "- **Butter Chicken**: Isang tanyag na Indian na ulam na may malasa at creamy na sarsa.\n",
+ "- **Pad Thai**: Isang sikat na Thai noodle dish na may tamang balanse ng alat, tamis, at asim.\n",
+ "\n",
+ "### 2. Mga Panghimagas\n",
+ "\n",
+ "Ang mga panghimagas ay nagbibigay ng tamis sa pagtatapos ng bawat pagkain. Narito ang ilan sa mga pinakamasarap:\n",
+ "\n",
+ "- **Halo-Halo**: Isang Filipino dessert na may halo-halong prutas, yelo, at gatas.\n",
+ "- **Gulab Jamun**: Isang Indian na panghimagas na gawa sa gatas at binabad sa matamis na syrup.\n",
+ "- **Mochi**: Isang Japanese rice cake na may chewy na texture.\n",
+ "\n",
+ "### 3. Mga Pampagana\n",
+ "\n",
+ "Ang mga pampagana ay naghahanda sa ating panlasa para sa mas masarap na pagkain. Ilan sa mga halimbawa ay:\n",
+ "\n",
+ "- **Spring Rolls**: Isang crispy na pampagana na puno ng gulay o karne.\n",
+ "- **Samosa**: Isang Indian snack na puno ng patatas, gulay, o karne.\n",
+ "- **Kimchi**: Isang Korean na fermented na gulay na may maanghang na lasa.\n",
+ "\n",
+ "## Mga Sangkap na Karaniwang Ginagamit\n",
+ "\n",
+ "Ang mga sangkap na ginagamit sa mga pagkaing Asyano at Indian ay nagdadala ng kakaibang lasa. Narito ang ilan sa mga karaniwang ginagamit:\n",
+ "\n",
+ "- **Luya at Bawang**: Pangunahing sangkap sa karamihan ng mga lutuin.\n",
+ "- **Curry Powder**: Isang mahalagang pampalasa sa Indian na lutuin.\n",
+ "- **Soy Sauce**: Karaniwang ginagamit sa mga pagkaing Asyano.\n",
+ "\n",
+ "## Mga Tip sa Pagluluto\n",
+ "\n",
+ "[!TIP] Kapag nagluluto ng mga pagkaing Asyano o Indian, mahalagang gumamit ng sariwang sangkap upang masigurado ang pinakamainam na lasa.\n",
+ "\n",
+ "- **Huwag matakot sa pampalasa**: Ang tamang dami ng pampalasa ay nagbibigay ng buhay sa pagkain.\n",
+ "- **Maglaan ng oras sa paghahanda**: Ang maayos na paghahanda ng mga sangkap ay mahalaga para sa masarap na resulta.\n",
+ "\n",
+ "## Konklusyon\n",
+ "\n",
+ "Ang mga pagkaing Asyano at Indian ay puno ng lasa at kasaysayan. Sa pamamagitan ng pag-aaral ng mga resipe at pamamaraan ng pagluluto, maaari mong dalhin ang mga masasarap na lutuin na ito sa iyong sariling kusina. Subukan ang iba't ibang putahe at tuklasin ang yaman ng kanilang kultura!\n"
+ ],
+ "cell_type": "markdown",
+ "metadata": {}
+ },
+ {
+ "source": [
+ "I-install ang Imblearn na magpapagana sa SMOTE. Ito ay isang Scikit-learn package na tumutulong sa paghawak ng hindi balanseng datos kapag gumagawa ng classification. (https://imbalanced-learn.org/stable/)\n"
+ ],
+ "cell_type": "markdown",
+ "metadata": {}
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 1,
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "name": "stdout",
+ "text": [
+ "Requirement already satisfied: imblearn in /Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages (0.0)\n",
+ "Requirement already satisfied: imbalanced-learn in /Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages (from imblearn) (0.8.0)\n",
+ "Requirement already satisfied: numpy>=1.13.3 in /Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages (from imbalanced-learn->imblearn) (1.19.2)\n",
+ "Requirement already satisfied: scipy>=0.19.1 in /Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages (from imbalanced-learn->imblearn) (1.4.1)\n",
+ "Requirement already satisfied: scikit-learn>=0.24 in /Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages (from imbalanced-learn->imblearn) (0.24.2)\n",
+ "Requirement already satisfied: joblib>=0.11 in /Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages (from imbalanced-learn->imblearn) (0.16.0)\n",
+ "Requirement already satisfied: threadpoolctl>=2.0.0 in /Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages (from scikit-learn>=0.24->imbalanced-learn->imblearn) (2.1.0)\n",
+ "\u001b[33mWARNING: You are using pip version 20.2.3; however, version 21.1.2 is available.\n",
+ "You should consider upgrading via the '/Library/Frameworks/Python.framework/Versions/3.7/bin/python3.7 -m pip install --upgrade pip' command.\u001b[0m\n",
+ "Note: you may need to restart the kernel to use updated packages.\n"
+ ]
+ }
+ ],
+ "source": [
+ "pip install imblearn"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 2,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "import pandas as pd\n",
+ "import matplotlib.pyplot as plt\n",
+ "import matplotlib as mpl\n",
+ "import numpy as np\n",
+ "from imblearn.over_sampling import SMOTE"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 3,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "df = pd.read_csv('../../data/cuisines.csv')"
+ ]
+ },
+ {
+ "source": [
+ "Ang dataset na ito ay naglalaman ng 385 na kolum na nagpapakita ng iba't ibang uri ng mga sangkap sa iba't ibang lutuin mula sa isang itinakdang hanay ng mga lutuin.\n"
+ ],
+ "cell_type": "markdown",
+ "metadata": {}
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 4,
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "execute_result",
+ "data": {
+ "text/plain": [
+ " Unnamed: 0 cuisine almond angelica anise anise_seed apple \\\n",
+ "0 65 indian 0 0 0 0 0 \n",
+ "1 66 indian 1 0 0 0 0 \n",
+ "2 67 indian 0 0 0 0 0 \n",
+ "3 68 indian 0 0 0 0 0 \n",
+ "4 69 indian 0 0 0 0 0 \n",
+ "\n",
+ " apple_brandy apricot armagnac ... whiskey white_bread white_wine \\\n",
+ "0 0 0 0 ... 0 0 0 \n",
+ "1 0 0 0 ... 0 0 0 \n",
+ "2 0 0 0 ... 0 0 0 \n",
+ "3 0 0 0 ... 0 0 0 \n",
+ "4 0 0 0 ... 0 0 0 \n",
+ "\n",
+ " whole_grain_wheat_flour wine wood yam yeast yogurt zucchini \n",
+ "0 0 0 0 0 0 0 0 \n",
+ "1 0 0 0 0 0 0 0 \n",
+ "2 0 0 0 0 0 0 0 \n",
+ "3 0 0 0 0 0 0 0 \n",
+ "4 0 0 0 0 0 1 0 \n",
+ "\n",
+ "[5 rows x 385 columns]"
+ ],
+ "text/html": "
"
+ },
+ "metadata": {},
+ "execution_count": 19
+ }
+ ],
+ "source": [
+ "# export transformed data to new df for classification\n",
+ "transformed_df = pd.concat([transformed_label_df,transformed_feature_df],axis=1, join='outer')\n",
+ "transformed_df"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 20,
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "name": "stdout",
+ "text": [
+ "\nRangeIndex: 3995 entries, 0 to 3994\nColumns: 381 entries, cuisine to zucchini\ndtypes: int64(380), object(1)\nmemory usage: 11.6+ MB\n"
+ ]
+ }
+ ],
+ "source": [
+ "transformed_df.info()"
+ ]
+ },
+ {
+ "source": [],
+ "cell_type": "markdown",
+ "metadata": {}
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 21,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "transformed_df.to_csv(\"../../data/cleaned_cuisines.csv\")"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": []
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "\n---\n\n**Paunawa**: \nAng dokumentong ito ay isinalin gamit ang AI translation service na [Co-op Translator](https://github.com/Azure/co-op-translator). Bagama't sinisikap naming maging tumpak, pakitandaan na ang mga awtomatikong pagsasalin ay maaaring maglaman ng mga pagkakamali o hindi pagkakatugma. Ang orihinal na dokumento sa orihinal nitong wika ang dapat ituring na opisyal na sanggunian. Para sa mahalagang impormasyon, inirerekomenda ang propesyonal na pagsasalin ng tao. Hindi kami mananagot sa anumang hindi pagkakaunawaan o maling interpretasyon na maaaring magmula sa paggamit ng pagsasaling ito.\n"
+ ]
+ }
+ ],
+ "metadata": {
+ "interpreter": {
+ "hash": "70b38d7a306a849643e446cd70466270a13445e5987dfa1344ef2b127438fa4d"
+ },
+ "kernelspec": {
+ "name": "python3",
+ "display_name": "Python 3.7.0 64-bit ('3.7')"
+ },
+ "language_info": {
+ "codemirror_mode": {
+ "name": "ipython",
+ "version": 3
+ },
+ "file_extension": ".py",
+ "mimetype": "text/x-python",
+ "name": "python",
+ "nbconvert_exporter": "python",
+ "pygments_lexer": "ipython3",
+ "version": "3.7.0"
+ },
+ "metadata": {
+ "interpreter": {
+ "hash": "70b38d7a306a849643e446cd70466270a13445e5987dfa1344ef2b127438fa4d"
+ }
+ },
+ "coopTranslator": {
+ "original_hash": "1da12ed6d238756959b8de9cac2a35a2",
+ "translation_date": "2025-08-29T15:30:53+00:00",
+ "source_file": "4-Classification/1-Introduction/solution/notebook.ipynb",
+ "language_code": "tl"
+ }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 4
+}
\ No newline at end of file
diff --git a/translations/tl/4-Classification/2-Classifiers-1/README.md b/translations/tl/4-Classification/2-Classifiers-1/README.md
new file mode 100644
index 000000000..e69dacd5f
--- /dev/null
+++ b/translations/tl/4-Classification/2-Classifiers-1/README.md
@@ -0,0 +1,253 @@
+
+# Mga Classifier ng Lutuin 1
+
+Sa araling ito, gagamitin mo ang dataset na na-save mo mula sa nakaraang aralin na puno ng balanseng, malinis na datos tungkol sa mga lutuin.
+
+Gagamitin mo ang dataset na ito gamit ang iba't ibang classifier upang _hulaan ang isang partikular na pambansang lutuin batay sa isang grupo ng mga sangkap_. Habang ginagawa ito, matututo ka pa tungkol sa iba't ibang paraan kung paano magagamit ang mga algorithm para sa mga gawain ng klasipikasyon.
+
+## [Pre-lecture quiz](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/21/)
+# Paghahanda
+
+Kung natapos mo na ang [Aralin 1](../1-Introduction/README.md), siguraduhing mayroong _cleaned_cuisines.csv_ na file sa root `/data` folder para sa apat na araling ito.
+
+## Ehersisyo - hulaan ang isang pambansang lutuin
+
+1. Sa folder na _notebook.ipynb_ ng araling ito, i-import ang file na iyon kasama ang Pandas library:
+
+ ```python
+ import pandas as pd
+ cuisines_df = pd.read_csv("../data/cleaned_cuisines.csv")
+ cuisines_df.head()
+ ```
+
+ Ganito ang hitsura ng data:
+
+| | 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 | 0 | indian | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | ... | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
+| 1 | 1 | indian | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | ... | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
+| 2 | 2 | indian | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | ... | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
+| 3 | 3 | indian | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | ... | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
+| 4 | 4 | indian | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | ... | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 |
+
+
+1. Ngayon, mag-import ng ilang karagdagang library:
+
+ ```python
+ from sklearn.linear_model import LogisticRegression
+ from sklearn.model_selection import train_test_split, cross_val_score
+ from sklearn.metrics import accuracy_score,precision_score,confusion_matrix,classification_report, precision_recall_curve
+ from sklearn.svm import SVC
+ import numpy as np
+ ```
+
+1. Hatiin ang X at y coordinates sa dalawang dataframe para sa pagsasanay. Ang `cuisine` ay maaaring gawing labels dataframe:
+
+ ```python
+ cuisines_label_df = cuisines_df['cuisine']
+ cuisines_label_df.head()
+ ```
+
+ Ganito ang magiging hitsura nito:
+
+ ```output
+ 0 indian
+ 1 indian
+ 2 indian
+ 3 indian
+ 4 indian
+ Name: cuisine, dtype: object
+ ```
+
+1. I-drop ang `Unnamed: 0` column at ang `cuisine` column gamit ang `drop()`. I-save ang natitirang data bilang mga trainable feature:
+
+ ```python
+ cuisines_feature_df = cuisines_df.drop(['Unnamed: 0', 'cuisine'], axis=1)
+ cuisines_feature_df.head()
+ ```
+
+ Ganito ang hitsura ng iyong mga feature:
+
+| | almond | angelica | anise | anise_seed | apple | apple_brandy | apricot | armagnac | artemisia | artichoke | ... | whiskey | white_bread | white_wine | whole_grain_wheat_flour | wine | wood | yam | yeast | yogurt | zucchini |
+| ---: | -----: | -------: | ----: | ---------: | ----: | -----------: | ------: | -------: | --------: | --------: | ---: | ------: | ----------: | ---------: | ----------------------: | ---: | ---: | ---: | ----: | -----: | -------: |
+| 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | ... | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
+| 1 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | ... | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
+| 2 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | ... | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
+| 3 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | ... | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
+| 4 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | ... | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 |
+
+Ngayon handa ka nang sanayin ang iyong modelo!
+
+## Pagpili ng iyong classifier
+
+Ngayon na ang iyong data ay malinis at handa na para sa pagsasanay, kailangan mong magdesisyon kung aling algorithm ang gagamitin para sa gawain.
+
+Ang Scikit-learn ay nagkakategorya ng klasipikasyon sa ilalim ng Supervised Learning, at sa kategoryang iyon makakakita ka ng maraming paraan upang mag-classify. [Ang iba't ibang pamamaraan](https://scikit-learn.org/stable/supervised_learning.html) ay maaaring nakakalito sa unang tingin. Ang mga sumusunod na pamamaraan ay lahat may kasamang mga teknik sa klasipikasyon:
+
+- Linear Models
+- Support Vector Machines
+- Stochastic Gradient Descent
+- Nearest Neighbors
+- Gaussian Processes
+- Decision Trees
+- Ensemble methods (voting Classifier)
+- Multiclass at multioutput algorithms (multiclass at multilabel classification, multiclass-multioutput classification)
+
+> Maaari mo ring gamitin ang [neural networks upang mag-classify ng data](https://scikit-learn.org/stable/modules/neural_networks_supervised.html#classification), ngunit ito ay labas sa saklaw ng araling ito.
+
+### Aling classifier ang gagamitin?
+
+Kaya, aling classifier ang dapat mong piliin? Madalas, ang pagsubok sa ilan at paghahanap ng magandang resulta ay isang paraan upang mag-eksperimento. Ang Scikit-learn ay nag-aalok ng isang [side-by-side comparison](https://scikit-learn.org/stable/auto_examples/classification/plot_classifier_comparison.html) sa isang nilikhang dataset, na inihahambing ang KNeighbors, SVC sa dalawang paraan, GaussianProcessClassifier, DecisionTreeClassifier, RandomForestClassifier, MLPClassifier, AdaBoostClassifier, GaussianNB at QuadraticDiscriminationAnalysis, na ipinapakita ang mga resulta sa biswal na paraan:
+
+
+> Mga plot na nilikha mula sa dokumentasyon ng Scikit-learn
+
+> Ang AutoML ay mahusay na solusyon sa problemang ito sa pamamagitan ng pagsasagawa ng mga paghahambing na ito sa cloud, na nagbibigay-daan sa iyong pumili ng pinakamahusay na algorithm para sa iyong data. Subukan ito [dito](https://docs.microsoft.com/learn/modules/automate-model-selection-with-azure-automl/?WT.mc_id=academic-77952-leestott)
+
+### Isang mas mahusay na paraan
+
+Isang mas mahusay na paraan kaysa sa basta-basta paghula ay ang sundin ang mga ideya sa downloadable na [ML Cheat sheet](https://docs.microsoft.com/azure/machine-learning/algorithm-cheat-sheet?WT.mc_id=academic-77952-leestott). Dito, matutuklasan natin na, para sa ating multiclass na problema, mayroon tayong ilang mga pagpipilian:
+
+
+> Isang bahagi ng Algorithm Cheat Sheet ng Microsoft, na nagdedetalye ng mga opsyon para sa multiclass classification
+
+✅ I-download ang cheat sheet na ito, i-print ito, at idikit ito sa iyong dingding!
+
+### Pangangatwiran
+
+Tingnan natin kung kaya nating pangatwiranan ang iba't ibang mga pamamaraan batay sa mga limitasyon na mayroon tayo:
+
+- **Masyadong mabigat ang neural networks**. Dahil sa ating malinis ngunit minimal na dataset, at ang katotohanang isinasagawa natin ang pagsasanay nang lokal gamit ang mga notebook, masyadong mabigat ang neural networks para sa gawaing ito.
+- **Hindi angkop ang two-class classifier**. Hindi tayo gagamit ng two-class classifier, kaya hindi natin gagamitin ang one-vs-all.
+- **Maaaring gumana ang decision tree o logistic regression**. Maaaring gumana ang decision tree, o logistic regression para sa multiclass na data.
+- **Ang Multiclass Boosted Decision Trees ay para sa ibang problema**. Ang multiclass boosted decision tree ay pinakaangkop para sa mga nonparametric na gawain, tulad ng mga gawain na idinisenyo upang bumuo ng mga ranggo, kaya hindi ito kapaki-pakinabang para sa atin.
+
+### Paggamit ng Scikit-learn
+
+Gagamitin natin ang Scikit-learn upang suriin ang ating data. Gayunpaman, maraming paraan upang gamitin ang logistic regression sa Scikit-learn. Tingnan ang [mga parameter na maaaring ipasa](https://scikit-learn.org/stable/modules/generated/sklearn.linear_model.LogisticRegression.html?highlight=logistic%20regressio#sklearn.linear_model.LogisticRegression).
+
+Sa esensya, may dalawang mahalagang parameter - `multi_class` at `solver` - na kailangan nating tukuyin kapag hinihiling natin sa Scikit-learn na magsagawa ng logistic regression. Ang halaga ng `multi_class` ay nag-aaplay ng partikular na pag-uugali. Ang halaga ng solver ay tumutukoy kung anong algorithm ang gagamitin. Hindi lahat ng solver ay maaaring ipares sa lahat ng `multi_class` na halaga.
+
+Ayon sa dokumentasyon, sa kaso ng multiclass, ang training algorithm:
+
+- **Gumagamit ng one-vs-rest (OvR) scheme**, kung ang `multi_class` na opsyon ay nakatakda sa `ovr`
+- **Gumagamit ng cross-entropy loss**, kung ang `multi_class` na opsyon ay nakatakda sa `multinomial`. (Sa kasalukuyan, ang `multinomial` na opsyon ay sinusuportahan lamang ng ‘lbfgs’, ‘sag’, ‘saga’ at ‘newton-cg’ na mga solver.)
+
+> 🎓 Ang 'scheme' dito ay maaaring 'ovr' (one-vs-rest) o 'multinomial'. Dahil ang logistic regression ay talagang idinisenyo upang suportahan ang binary classification, ang mga scheme na ito ay nagpapahintulot dito na mas mahusay na hawakan ang mga gawain ng multiclass classification. [source](https://machinelearningmastery.com/one-vs-rest-and-one-vs-one-for-multi-class-classification/)
+
+> 🎓 Ang 'solver' ay tinukoy bilang "ang algorithm na gagamitin sa optimization problem". [source](https://scikit-learn.org/stable/modules/generated/sklearn.linear_model.LogisticRegression.html?highlight=logistic%20regressio#sklearn.linear_model.LogisticRegression).
+
+Nag-aalok ang Scikit-learn ng talahanayan na ito upang ipaliwanag kung paano hinaharap ng mga solver ang iba't ibang hamon na ipinapakita ng iba't ibang uri ng data structure:
+
+
+
+## Ehersisyo - hatiin ang data
+
+Maaari tayong mag-focus sa logistic regression para sa ating unang pagsubok sa pagsasanay dahil kamakailan mo lang natutunan ang tungkol dito sa isang nakaraang aralin.
+Hatiin ang iyong data sa mga grupo ng pagsasanay at pagsubok sa pamamagitan ng pagtawag sa `train_test_split()`:
+
+```python
+X_train, X_test, y_train, y_test = train_test_split(cuisines_feature_df, cuisines_label_df, test_size=0.3)
+```
+
+## Ehersisyo - gamitin ang logistic regression
+
+Dahil gumagamit ka ng multiclass na kaso, kailangan mong pumili kung anong _scheme_ ang gagamitin at kung anong _solver_ ang itatakda. Gumamit ng LogisticRegression na may multiclass setting at ang **liblinear** solver para sa pagsasanay.
+
+1. Gumawa ng logistic regression na may multi_class na nakatakda sa `ovr` at ang solver na nakatakda sa `liblinear`:
+
+ ```python
+ lr = LogisticRegression(multi_class='ovr',solver='liblinear')
+ model = lr.fit(X_train, np.ravel(y_train))
+
+ accuracy = model.score(X_test, y_test)
+ print ("Accuracy is {}".format(accuracy))
+ ```
+
+ ✅ Subukan ang ibang solver tulad ng `lbfgs`, na madalas na nakatakda bilang default
+> Tandaan, gamitin ang Pandas [`ravel`](https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.Series.ravel.html) na function upang gawing patag ang iyong data kapag kinakailangan.
+Ang katumpakan ay maganda sa higit **80%**!
+
+1. Makikita mo ang modelong ito sa aksyon sa pamamagitan ng pagsubok ng isang hilera ng data (#50):
+
+ ```python
+ print(f'ingredients: {X_test.iloc[50][X_test.iloc[50]!=0].keys()}')
+ print(f'cuisine: {y_test.iloc[50]}')
+ ```
+
+ Ang resulta ay naka-print:
+
+ ```output
+ ingredients: Index(['cilantro', 'onion', 'pea', 'potato', 'tomato', 'vegetable_oil'], dtype='object')
+ cuisine: indian
+ ```
+
+ ✅ Subukan ang ibang numero ng hilera at suriin ang mga resulta
+
+1. Kung nais mong mas maintindihan, maaari mong suriin ang katumpakan ng prediksyon na ito:
+
+ ```python
+ test= X_test.iloc[50].values.reshape(-1, 1).T
+ proba = model.predict_proba(test)
+ classes = model.classes_
+ resultdf = pd.DataFrame(data=proba, columns=classes)
+
+ topPrediction = resultdf.T.sort_values(by=[0], ascending = [False])
+ topPrediction.head()
+ ```
+
+ Ang resulta ay naka-print - Indian cuisine ang pinakamalapit na hula, na may mataas na posibilidad:
+
+ | | 0 |
+ | -------: | -------: |
+ | indian | 0.715851 |
+ | chinese | 0.229475 |
+ | japanese | 0.029763 |
+ | korean | 0.017277 |
+ | thai | 0.007634 |
+
+ ✅ Kaya mo bang ipaliwanag kung bakit sigurado ang modelo na ito ay Indian cuisine?
+
+1. Makakuha ng mas detalyadong impormasyon sa pamamagitan ng pag-print ng classification report, tulad ng ginawa mo sa regression lessons:
+
+ ```python
+ y_pred = model.predict(X_test)
+ print(classification_report(y_test,y_pred))
+ ```
+
+ | | precision | recall | f1-score | support |
+ | ------------ | --------- | ------ | -------- | ------- |
+ | chinese | 0.73 | 0.71 | 0.72 | 229 |
+ | indian | 0.91 | 0.93 | 0.92 | 254 |
+ | japanese | 0.70 | 0.75 | 0.72 | 220 |
+ | korean | 0.86 | 0.76 | 0.81 | 242 |
+ | thai | 0.79 | 0.85 | 0.82 | 254 |
+ | accuracy | 0.80 | 1199 | | |
+ | macro avg | 0.80 | 0.80 | 0.80 | 1199 |
+ | weighted avg | 0.80 | 0.80 | 0.80 | 1199 |
+
+## 🚀Hamunin
+
+Sa araling ito, ginamit mo ang nalinis mong data upang bumuo ng isang machine learning model na kayang hulaan ang isang national cuisine base sa mga sangkap. Maglaan ng oras upang basahin ang maraming opsyon na inaalok ng Scikit-learn para sa pag-classify ng data. Mas pag-aralan ang konsepto ng 'solver' upang maintindihan kung ano ang nangyayari sa likod ng proseso.
+
+## [Post-lecture quiz](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/22/)
+
+## Review at Pag-aaral sa Sarili
+
+Mas pag-aralan ang matematika sa likod ng logistic regression sa [araling ito](https://people.eecs.berkeley.edu/~russell/classes/cs194/f11/lectures/CS194%20Fall%202011%20Lecture%2006.pdf)
+## Takdang Aralin
+
+[Pag-aralan ang mga solvers](assignment.md)
+
+---
+
+**Paunawa**:
+Ang dokumentong ito ay isinalin gamit ang AI translation service na [Co-op Translator](https://github.com/Azure/co-op-translator). Bagama't sinisikap naming maging tumpak, pakitandaan na ang mga awtomatikong pagsasalin ay maaaring maglaman ng mga pagkakamali o hindi pagkakatugma. Ang orihinal na dokumento sa kanyang katutubong wika ang dapat ituring na opisyal na sanggunian. Para sa mahalagang impormasyon, inirerekomenda ang propesyonal na pagsasalin ng tao. Hindi kami mananagot sa anumang hindi pagkakaunawaan o maling interpretasyon na dulot ng paggamit ng pagsasaling ito.
\ No newline at end of file
diff --git a/translations/tl/4-Classification/2-Classifiers-1/assignment.md b/translations/tl/4-Classification/2-Classifiers-1/assignment.md
new file mode 100644
index 000000000..1f638adbd
--- /dev/null
+++ b/translations/tl/4-Classification/2-Classifiers-1/assignment.md
@@ -0,0 +1,24 @@
+
+# Pag-aralan ang mga solvers
+## Mga Instruksyon
+
+Sa araling ito, natutunan mo ang tungkol sa iba't ibang solvers na pinagsasama ang mga algorithm sa proseso ng machine learning upang makabuo ng isang tumpak na modelo. Balikan ang mga solvers na nakalista sa aralin at pumili ng dalawa. Sa sarili mong mga salita, ihambing at itapat ang dalawang solvers na ito. Anong uri ng problema ang kanilang tinutugunan? Paano sila gumagana sa iba't ibang istruktura ng datos? Bakit mo pipiliin ang isa kaysa sa isa pa?
+
+## Rubric
+
+| Pamantayan | Natatangi | Katanggap-tanggap | Kailangan ng Pagpapabuti |
+| -----------| --------------------------------------------------------------------------------------------- | ------------------------------------------------ | ---------------------------- |
+| | Ang isang .doc file ay ipinasa na may dalawang talata, isa para sa bawat solver, na may maingat na paghahambing. | Ang isang .doc file ay ipinasa na may isang talata lamang | Hindi kumpleto ang gawain |
+
+---
+
+**Paunawa**:
+Ang dokumentong ito ay isinalin gamit ang AI translation service na [Co-op Translator](https://github.com/Azure/co-op-translator). Bagama't sinisikap naming maging tumpak, pakitandaan na ang mga awtomatikong pagsasalin ay maaaring maglaman ng mga pagkakamali o hindi pagkakatugma. Ang orihinal na dokumento sa kanyang orihinal na wika ang dapat ituring na opisyal na sanggunian. Para sa mahalagang impormasyon, inirerekomenda ang propesyonal na pagsasalin ng tao. Hindi kami mananagot sa anumang hindi pagkakaunawaan o maling interpretasyon na maaaring magmula sa paggamit ng pagsasaling ito.
\ No newline at end of file
diff --git a/translations/tl/4-Classification/2-Classifiers-1/notebook.ipynb b/translations/tl/4-Classification/2-Classifiers-1/notebook.ipynb
new file mode 100644
index 000000000..02ba7dd49
--- /dev/null
+++ b/translations/tl/4-Classification/2-Classifiers-1/notebook.ipynb
@@ -0,0 +1,41 @@
+{
+ "metadata": {
+ "language_info": {
+ "codemirror_mode": {
+ "name": "ipython",
+ "version": 3
+ },
+ "file_extension": ".py",
+ "mimetype": "text/x-python",
+ "name": "python",
+ "nbconvert_exporter": "python",
+ "pygments_lexer": "ipython3",
+ "version": 3
+ },
+ "orig_nbformat": 2,
+ "coopTranslator": {
+ "original_hash": "68829b06b4dcd512d3327849191f4d7f",
+ "translation_date": "2025-08-29T15:21:32+00:00",
+ "source_file": "4-Classification/2-Classifiers-1/notebook.ipynb",
+ "language_code": "tl"
+ }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 2,
+ "cells": [
+ {
+ "source": [
+ "# Bumuo ng mga Modelo ng Klasipikasyon\n"
+ ],
+ "cell_type": "markdown",
+ "metadata": {}
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "\n---\n\n**Paunawa**: \nAng dokumentong ito ay isinalin gamit ang AI translation service na [Co-op Translator](https://github.com/Azure/co-op-translator). Bagama't sinisikap naming maging tumpak, pakitandaan na ang mga awtomatikong pagsasalin ay maaaring maglaman ng mga pagkakamali o hindi pagkakatugma. Ang orihinal na dokumento sa orihinal nitong wika ang dapat ituring na opisyal na sanggunian. Para sa mahalagang impormasyon, inirerekomenda ang propesyonal na pagsasalin ng tao. Hindi kami mananagot sa anumang hindi pagkakaunawaan o maling interpretasyon na maaaring magmula sa paggamit ng pagsasaling ito.\n"
+ ]
+ }
+ ]
+}
\ No newline at end of file
diff --git a/translations/tl/4-Classification/2-Classifiers-1/solution/Julia/README.md b/translations/tl/4-Classification/2-Classifiers-1/solution/Julia/README.md
new file mode 100644
index 000000000..bc9e6e526
--- /dev/null
+++ b/translations/tl/4-Classification/2-Classifiers-1/solution/Julia/README.md
@@ -0,0 +1,15 @@
+
+
+
+---
+
+**Paunawa**:
+Ang dokumentong ito ay isinalin gamit ang AI translation service na [Co-op Translator](https://github.com/Azure/co-op-translator). Bagama't sinisikap naming maging tumpak, pakitandaan na ang mga awtomatikong pagsasalin ay maaaring maglaman ng mga pagkakamali o hindi pagkakatugma. Ang orihinal na dokumento sa orihinal nitong wika ang dapat ituring na opisyal na sanggunian. Para sa mahalagang impormasyon, inirerekomenda ang propesyonal na pagsasalin ng tao. Hindi kami mananagot sa anumang hindi pagkakaunawaan o maling interpretasyon na maaaring magmula sa paggamit ng pagsasaling ito.
\ No newline at end of file
diff --git a/translations/tl/4-Classification/2-Classifiers-1/solution/R/lesson_11-R.ipynb b/translations/tl/4-Classification/2-Classifiers-1/solution/R/lesson_11-R.ipynb
new file mode 100644
index 000000000..23a2dafcd
--- /dev/null
+++ b/translations/tl/4-Classification/2-Classifiers-1/solution/R/lesson_11-R.ipynb
@@ -0,0 +1,1296 @@
+{
+ "nbformat": 4,
+ "nbformat_minor": 2,
+ "metadata": {
+ "colab": {
+ "name": "lesson_11-R.ipynb",
+ "provenance": [],
+ "collapsed_sections": [],
+ "toc_visible": true
+ },
+ "kernelspec": {
+ "name": "ir",
+ "display_name": "R"
+ },
+ "language_info": {
+ "name": "R"
+ },
+ "coopTranslator": {
+ "original_hash": "6ea6a5171b1b99b7b5a55f7469c048d2",
+ "translation_date": "2025-08-29T15:25:16+00:00",
+ "source_file": "4-Classification/2-Classifiers-1/solution/R/lesson_11-R.ipynb",
+ "language_code": "tl"
+ }
+ },
+ "cells": [
+ {
+ "cell_type": "markdown",
+ "source": [],
+ "metadata": {
+ "id": "zs2woWv_HoE8"
+ }
+ },
+ {
+ "cell_type": "markdown",
+ "source": [
+ "## Mga Classifier ng Lutuin 1\n",
+ "\n",
+ "Sa araling ito, tatalakayin natin ang iba't ibang classifier upang *hulaan ang isang partikular na pambansang lutuin batay sa isang grupo ng mga sangkap.* Habang ginagawa ito, matututo rin tayo ng iba’t ibang paraan kung paano magagamit ang mga algorithm para sa mga gawain ng klasipikasyon.\n",
+ "\n",
+ "### [**Pre-lecture quiz**](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/21/)\n",
+ "\n",
+ "### **Paghahanda**\n",
+ "\n",
+ "Ang araling ito ay nakabatay sa ating [nakaraang aralin](https://github.com/microsoft/ML-For-Beginners/blob/main/4-Classification/1-Introduction/solution/lesson_10-R.ipynb) kung saan:\n",
+ "\n",
+ "- Nagkaroon tayo ng maikling pagpapakilala sa klasipikasyon gamit ang isang dataset tungkol sa lahat ng kahanga-hangang lutuin ng Asya at India 😋.\n",
+ "\n",
+ "- Sinuri natin ang ilang [dplyr verbs](https://dplyr.tidyverse.org/) upang ihanda at linisin ang ating data.\n",
+ "\n",
+ "- Gumawa tayo ng magagandang biswal gamit ang ggplot2.\n",
+ "\n",
+ "- Ipinakita kung paano harapin ang hindi balanseng data sa pamamagitan ng pag-preprocess nito gamit ang [recipes](https://recipes.tidymodels.org/articles/Simple_Example.html).\n",
+ "\n",
+ "- Ipinakita kung paano gamitin ang `prep` at `bake` sa ating recipe upang tiyakin na ito ay gagana nang naaayon.\n",
+ "\n",
+ "#### **Kinakailangan**\n",
+ "\n",
+ "Para sa araling ito, kakailanganin natin ang mga sumusunod na package upang linisin, ihanda, at i-visualize ang ating data:\n",
+ "\n",
+ "- `tidyverse`: Ang [tidyverse](https://www.tidyverse.org/) ay isang [koleksyon ng mga R package](https://www.tidyverse.org/packages) na idinisenyo upang gawing mas mabilis, mas madali, at mas masaya ang data science!\n",
+ "\n",
+ "- `tidymodels`: Ang [tidymodels](https://www.tidymodels.org/) framework ay isang [koleksyon ng mga package](https://www.tidymodels.org/packages/) para sa pagmomodelo at machine learning.\n",
+ "\n",
+ "- `themis`: Ang [themis package](https://themis.tidymodels.org/) ay nagbibigay ng Karagdagang Hakbang sa Recipe para sa Paghawak ng Hindi Balanseng Data.\n",
+ "\n",
+ "- `nnet`: Ang [nnet package](https://cran.r-project.org/web/packages/nnet/nnet.pdf) ay nagbibigay ng mga function para sa pag-estima ng feed-forward neural networks na may isang nakatagong layer, at para sa mga multinomial logistic regression model.\n",
+ "\n",
+ "Maaari mo silang mai-install gamit ang:\n"
+ ],
+ "metadata": {
+ "id": "iDFOb3ebHwQC"
+ }
+ },
+ {
+ "cell_type": "markdown",
+ "source": [
+ "`install.packages(c(\"tidyverse\", \"tidymodels\", \"DataExplorer\", \"here\"))`\n",
+ "\n",
+ "Bilang alternatibo, ang script sa ibaba ay sinusuri kung mayroon kang mga kinakailangang package para makumpleto ang module na ito at ini-install ang mga ito para sa iyo kung kulang.\n"
+ ],
+ "metadata": {
+ "id": "4V85BGCjII7F"
+ }
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 2,
+ "source": [
+ "suppressWarnings(if (!require(\"pacman\"))install.packages(\"pacman\"))\r\n",
+ "\r\n",
+ "pacman::p_load(tidyverse, tidymodels, themis, here)"
+ ],
+ "outputs": [
+ {
+ "output_type": "stream",
+ "name": "stderr",
+ "text": [
+ "Loading required package: pacman\n",
+ "\n"
+ ]
+ }
+ ],
+ "metadata": {
+ "colab": {
+ "base_uri": "https://localhost:8080/"
+ },
+ "id": "an5NPyyKIKNR",
+ "outputId": "834d5e74-f4b8-49f9-8ab5-4c52ff2d7bc8"
+ }
+ },
+ {
+ "cell_type": "markdown",
+ "source": [
+ "## 1. Hatiin ang data sa training at test sets.\n",
+ "\n",
+ "Magsisimula tayo sa pagpili ng ilang hakbang mula sa ating nakaraang aralin.\n",
+ "\n",
+ "### Alisin ang mga pinakakaraniwang sangkap na nagdudulot ng kalituhan sa pagitan ng magkakaibang lutuin, gamit ang `dplyr::select()`.\n",
+ "\n",
+ "Lahat ay mahilig sa kanin, bawang, at luya!\n"
+ ],
+ "metadata": {
+ "id": "0ax9GQLBINVv"
+ }
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 3,
+ "source": [
+ "# Load the original cuisines data\r\n",
+ "df <- read_csv(file = \"https://raw.githubusercontent.com/microsoft/ML-For-Beginners/main/4-Classification/data/cuisines.csv\")\r\n",
+ "\r\n",
+ "# Drop id column, rice, garlic and ginger from our original data set\r\n",
+ "df_select <- df %>% \r\n",
+ " select(-c(1, rice, garlic, ginger)) %>%\r\n",
+ " # Encode cuisine column as categorical\r\n",
+ " mutate(cuisine = factor(cuisine))\r\n",
+ "\r\n",
+ "# Display new data set\r\n",
+ "df_select %>% \r\n",
+ " slice_head(n = 5)\r\n",
+ "\r\n",
+ "# Display distribution of cuisines\r\n",
+ "df_select %>% \r\n",
+ " count(cuisine) %>% \r\n",
+ " arrange(desc(n))"
+ ],
+ "outputs": [
+ {
+ "output_type": "stream",
+ "name": "stderr",
+ "text": [
+ "New names:\n",
+ "* `` -> ...1\n",
+ "\n",
+ "\u001b[1m\u001b[1mRows: \u001b[1m\u001b[22m\u001b[34m\u001b[34m2448\u001b[34m\u001b[39m \u001b[1m\u001b[1mColumns: \u001b[1m\u001b[22m\u001b[34m\u001b[34m385\u001b[34m\u001b[39m\n",
+ "\n",
+ "\u001b[36m──\u001b[39m \u001b[1m\u001b[1mColumn specification\u001b[1m\u001b[22m \u001b[36m────────────────────────────────────────────────────────\u001b[39m\n",
+ "\u001b[1mDelimiter:\u001b[22m \",\"\n",
+ "\u001b[31mchr\u001b[39m (1): cuisine\n",
+ "\u001b[32mdbl\u001b[39m (384): ...1, almond, angelica, anise, anise_seed, apple, apple_brandy, a...\n",
+ "\n",
+ "\n",
+ "\u001b[36mℹ\u001b[39m Use \u001b[30m\u001b[47m\u001b[30m\u001b[47m`spec()`\u001b[47m\u001b[30m\u001b[49m\u001b[39m to retrieve the full column specification for this data.\n",
+ "\u001b[36mℹ\u001b[39m Specify the column types or set \u001b[30m\u001b[47m\u001b[30m\u001b[47m`show_col_types = FALSE`\u001b[47m\u001b[30m\u001b[49m\u001b[39m to quiet this message.\n",
+ "\n"
+ ]
+ },
+ {
+ "output_type": "display_data",
+ "data": {
+ "text/plain": [
+ " cuisine almond angelica anise anise_seed apple apple_brandy apricot armagnac\n",
+ "1 indian 0 0 0 0 0 0 0 0 \n",
+ "2 indian 1 0 0 0 0 0 0 0 \n",
+ "3 indian 0 0 0 0 0 0 0 0 \n",
+ "4 indian 0 0 0 0 0 0 0 0 \n",
+ "5 indian 0 0 0 0 0 0 0 0 \n",
+ " artemisia ⋯ whiskey white_bread white_wine whole_grain_wheat_flour wine wood\n",
+ "1 0 ⋯ 0 0 0 0 0 0 \n",
+ "2 0 ⋯ 0 0 0 0 0 0 \n",
+ "3 0 ⋯ 0 0 0 0 0 0 \n",
+ "4 0 ⋯ 0 0 0 0 0 0 \n",
+ "5 0 ⋯ 0 0 0 0 0 0 \n",
+ " yam yeast yogurt zucchini\n",
+ "1 0 0 0 0 \n",
+ "2 0 0 0 0 \n",
+ "3 0 0 0 0 \n",
+ "4 0 0 0 0 \n",
+ "5 0 0 1 0 "
+ ],
+ "text/markdown": [
+ "\n",
+ "A tibble: 5 × 381\n",
+ "\n",
+ "| cuisine <fct> | almond <dbl> | angelica <dbl> | anise <dbl> | anise_seed <dbl> | apple <dbl> | apple_brandy <dbl> | apricot <dbl> | armagnac <dbl> | artemisia <dbl> | ⋯ ⋯ | whiskey <dbl> | white_bread <dbl> | white_wine <dbl> | whole_grain_wheat_flour <dbl> | wine <dbl> | wood <dbl> | yam <dbl> | yeast <dbl> | yogurt <dbl> | zucchini <dbl> |\n",
+ "|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|\n",
+ "| indian | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | ⋯ | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |\n",
+ "| indian | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | ⋯ | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |\n",
+ "| indian | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | ⋯ | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |\n",
+ "| indian | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | ⋯ | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |\n",
+ "| indian | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | ⋯ | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 |\n",
+ "\n"
+ ],
+ "text/latex": [
+ "A tibble: 5 × 381\n",
+ "\\begin{tabular}{lllllllllllllllllllll}\n",
+ " cuisine & almond & angelica & anise & anise\\_seed & apple & apple\\_brandy & apricot & armagnac & artemisia & ⋯ & whiskey & white\\_bread & white\\_wine & whole\\_grain\\_wheat\\_flour & wine & wood & yam & yeast & yogurt & zucchini\\\\\n",
+ " & & & & & & & & & & ⋯ & & & & & & & & & & \\\\\n",
+ "\\hline\n",
+ "\t indian & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & ⋯ & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0\\\\\n",
+ "\t indian & 1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & ⋯ & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0\\\\\n",
+ "\t indian & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & ⋯ & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0\\\\\n",
+ "\t indian & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & ⋯ & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0\\\\\n",
+ "\t indian & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & ⋯ & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 1 & 0\\\\\n",
+ "\\end{tabular}\n"
+ ],
+ "text/html": [
+ "
\n"
+ ]
+ },
+ "metadata": {}
+ }
+ ],
+ "metadata": {
+ "colab": {
+ "base_uri": "https://localhost:8080/",
+ "height": 535
+ },
+ "id": "w5FWIkEiIjdN",
+ "outputId": "2e195fd9-1a8f-4b91-9573-cce5582242df"
+ }
+ },
+ {
+ "cell_type": "markdown",
+ "source": [
+ "## 2. Paano Harapin ang Hindi Balanseng Datos\n",
+ "\n",
+ "Tulad ng maaaring napansin mo sa orihinal na data set pati na rin sa ating training set, mayroong hindi pantay na distribusyon sa bilang ng mga lutuin. Ang mga lutuing Koreano ay *halos* 3 beses ang dami kumpara sa mga lutuing Thai. Ang hindi balanseng datos ay madalas na may negatibong epekto sa performance ng modelo. Maraming modelo ang mas mahusay kapag pantay ang bilang ng mga obserbasyon, kaya't nahihirapan ang mga ito kapag hindi balansado ang datos.\n",
+ "\n",
+ "May dalawang pangunahing paraan upang harapin ang hindi balanseng data set:\n",
+ "\n",
+ "- magdagdag ng mga obserbasyon sa minority class: `Over-sampling` tulad ng paggamit ng SMOTE algorithm na artipisyal na gumagawa ng mga bagong halimbawa ng minority class gamit ang mga pinakamalapit na kapitbahay ng mga kasong ito.\n",
+ "\n",
+ "- magtanggal ng mga obserbasyon mula sa majority class: `Under-sampling`\n",
+ "\n",
+ "Sa ating nakaraang aralin, ipinakita natin kung paano harapin ang hindi balanseng data set gamit ang isang `recipe`. Ang recipe ay maaaring ituring na isang plano na naglalarawan kung anong mga hakbang ang dapat isagawa sa isang data set upang maihanda ito para sa data analysis. Sa ating kaso, nais nating magkaroon ng pantay na distribusyon sa bilang ng ating mga lutuin para sa ating `training set`. Simulan na natin.\n"
+ ],
+ "metadata": {
+ "id": "daBi9qJNIwqW"
+ }
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 5,
+ "source": [
+ "# Load themis package for dealing with imbalanced data\r\n",
+ "library(themis)\r\n",
+ "\r\n",
+ "# Create a recipe for preprocessing training data\r\n",
+ "cuisines_recipe <- recipe(cuisine ~ ., data = cuisines_train) %>% \r\n",
+ " step_smote(cuisine)\r\n",
+ "\r\n",
+ "# Print recipe\r\n",
+ "cuisines_recipe"
+ ],
+ "outputs": [
+ {
+ "output_type": "display_data",
+ "data": {
+ "text/plain": [
+ "Data Recipe\n",
+ "\n",
+ "Inputs:\n",
+ "\n",
+ " role #variables\n",
+ " outcome 1\n",
+ " predictor 380\n",
+ "\n",
+ "Operations:\n",
+ "\n",
+ "SMOTE based on cuisine"
+ ]
+ },
+ "metadata": {}
+ }
+ ],
+ "metadata": {
+ "colab": {
+ "base_uri": "https://localhost:8080/",
+ "height": 200
+ },
+ "id": "Az6LFBGxI1X0",
+ "outputId": "29d71d85-64b0-4e62-871e-bcd5398573b6"
+ }
+ },
+ {
+ "cell_type": "markdown",
+ "source": [
+ "Maaari mo nang kumpirmahin (gamit ang prep+bake) na gagana ang recipe ayon sa inaasahan mo - lahat ng mga label ng lutuin ay mayroong `559` na obserbasyon.\n",
+ "\n",
+ "Dahil gagamitin natin ang recipe na ito bilang isang preprocessor para sa pagmomodelo, ang `workflow()` ang gagawa ng lahat ng prep at bake para sa atin, kaya hindi na natin kailangang manu-manong tantiyahin ang recipe.\n",
+ "\n",
+ "Ngayon, handa na tayong mag-train ng modelo 👩💻👨💻!\n",
+ "\n",
+ "## 3. Pagpili ng iyong classifier\n",
+ "\n",
+ "
\n",
+ " \n",
+ " Artwork ni @allison_horst\n"
+ ],
+ "metadata": {
+ "id": "NBL3PqIWJBBB"
+ }
+ },
+ {
+ "cell_type": "markdown",
+ "source": [
+ "Ngayon, kailangan nating magdesisyon kung aling algorithm ang gagamitin para sa trabaho 🤔.\n",
+ "\n",
+ "Sa Tidymodels, ang [`parsnip package`](https://parsnip.tidymodels.org/index.html) ay nagbibigay ng pare-parehong interface para sa paggamit ng mga modelo sa iba't ibang engine (mga package). Mangyaring tingnan ang dokumentasyon ng parsnip upang tuklasin ang [mga uri ng modelo at engine](https://www.tidymodels.org/find/parsnip/#models) at ang kanilang kaukulang [mga argumento ng modelo](https://www.tidymodels.org/find/parsnip/#model-args). Sa unang tingin, maaaring nakakalito ang dami ng pagpipilian. Halimbawa, ang mga sumusunod na pamamaraan ay lahat gumagamit ng mga teknik sa klasipikasyon:\n",
+ "\n",
+ "- Mga Modelong Klasipikasyon na Batay sa Panuntunan ng C5.0\n",
+ "\n",
+ "- Flexible Discriminant Models\n",
+ "\n",
+ "- Linear Discriminant Models\n",
+ "\n",
+ "- Regularized Discriminant Models\n",
+ "\n",
+ "- Logistic Regression Models\n",
+ "\n",
+ "- Multinomial Regression Models\n",
+ "\n",
+ "- Naive Bayes Models\n",
+ "\n",
+ "- Support Vector Machines\n",
+ "\n",
+ "- Nearest Neighbors\n",
+ "\n",
+ "- Decision Trees\n",
+ "\n",
+ "- Ensemble methods\n",
+ "\n",
+ "- Neural Networks\n",
+ "\n",
+ "At marami pang iba!\n",
+ "\n",
+ "### **Aling classifier ang pipiliin?**\n",
+ "\n",
+ "Kaya, aling classifier ang dapat mong piliin? Madalas, ang pagsubok sa ilan at paghahanap ng magandang resulta ay isang paraan upang masubukan.\n",
+ "\n",
+ "> Ang AutoML ay mahusay na solusyon para dito sa pamamagitan ng pagsasagawa ng mga paghahambing sa cloud, na nagbibigay-daan sa iyong piliin ang pinakamahusay na algorithm para sa iyong data. Subukan ito [dito](https://docs.microsoft.com/learn/modules/automate-model-selection-with-azure-automl/?WT.mc_id=academic-77952-leestott)\n",
+ "\n",
+ "Gayundin, ang pagpili ng classifier ay nakadepende sa ating problema. Halimbawa, kapag ang resulta ay maaaring ikategorya sa `higit sa dalawang klase`, tulad ng sa ating kaso, kailangan mong gumamit ng `multiclass classification algorithm` sa halip na `binary classification.`\n",
+ "\n",
+ "### **Isang mas mahusay na paraan**\n",
+ "\n",
+ "Isang mas mahusay na paraan kaysa sa basta-bastang paghula ay ang sundin ang mga ideya sa downloadable na [ML Cheat sheet](https://docs.microsoft.com/azure/machine-learning/algorithm-cheat-sheet?WT.mc_id=academic-77952-leestott). Dito, matutuklasan natin na, para sa ating multiclass na problema, mayroon tayong ilang mga pagpipilian:\n",
+ "\n",
+ "
\n",
+ " \n",
+ " Isang bahagi ng Microsoft's Algorithm Cheat Sheet, na nagdedetalye ng mga opsyon para sa multiclass classification\n"
+ ],
+ "metadata": {
+ "id": "a6DLAZ3vJZ14"
+ }
+ },
+ {
+ "cell_type": "markdown",
+ "source": [
+ "### **Pangangatwiran**\n",
+ "\n",
+ "Tingnan natin kung paano natin malulutas ang iba't ibang paraan base sa mga limitasyon na mayroon tayo:\n",
+ "\n",
+ "- **Masyadong mabigat ang Deep Neural Networks**. Dahil sa malinis ngunit minimal na dataset, at sa katotohanang ang training ay ginagawa nang lokal gamit ang notebooks, masyadong mabigat ang deep neural networks para sa task na ito.\n",
+ "\n",
+ "- **Walang two-class classifier**. Hindi tayo gumagamit ng two-class classifier, kaya hindi kasama ang one-vs-all.\n",
+ "\n",
+ "- **Maaaring gumana ang Decision tree o logistic regression**. Maaaring gumana ang decision tree, o multinomial regression/multiclass logistic regression para sa multiclass na data.\n",
+ "\n",
+ "- **Iba ang sinosolusyonan ng Multiclass Boosted Decision Trees**. Ang multiclass boosted decision tree ay mas angkop para sa nonparametric na mga task, halimbawa, mga task na dinisenyo para gumawa ng rankings, kaya hindi ito kapaki-pakinabang para sa atin.\n",
+ "\n",
+ "Karaniwan, bago magsimula sa mas komplikadong machine learning models tulad ng ensemble methods, magandang ideya na gumawa ng pinakasimpleng model para magkaroon ng ideya kung ano ang nangyayari. Kaya para sa lesson na ito, magsisimula tayo sa `multinomial regression` model.\n",
+ "\n",
+ "> Ang Logistic regression ay isang teknik na ginagamit kapag ang outcome variable ay categorical (o nominal). Para sa Binary logistic regression, ang bilang ng outcome variables ay dalawa, samantalang para sa multinomial logistic regression, ang bilang ng outcome variables ay higit sa dalawa. Tingnan ang [Advanced Regression Methods](https://bookdown.org/chua/ber642_advanced_regression/multinomial-logistic-regression.html) para sa karagdagang impormasyon.\n",
+ "\n",
+ "## 4. Mag-train at mag-evaluate ng Multinomial logistic regression model.\n",
+ "\n",
+ "Sa Tidymodels, ang `parsnip::multinom_reg()`, ay nagde-define ng model na gumagamit ng linear predictors para mag-predict ng multiclass data gamit ang multinomial distribution. Tingnan ang `?multinom_reg()` para sa iba't ibang paraan/engines na maaari mong gamitin para i-fit ang model na ito.\n",
+ "\n",
+ "Para sa halimbawang ito, magfi-fit tayo ng Multinomial regression model gamit ang default na [nnet](https://cran.r-project.org/web/packages/nnet/nnet.pdf) engine.\n",
+ "\n",
+ "> Pumili ako ng value para sa `penalty` nang medyo random. May mas magagandang paraan para piliin ang value na ito, halimbawa, sa pamamagitan ng paggamit ng `resampling` at `tuning` ng model na tatalakayin natin sa susunod.\n",
+ ">\n",
+ "> Tingnan ang [Tidymodels: Get Started](https://www.tidymodels.org/start/tuning/) kung nais mong matuto pa tungkol sa pag-tune ng model hyperparameters.\n"
+ ],
+ "metadata": {
+ "id": "gWMsVcbBJemu"
+ }
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 6,
+ "source": [
+ "# Create a multinomial regression model specification\r\n",
+ "mr_spec <- multinom_reg(penalty = 1) %>% \r\n",
+ " set_engine(\"nnet\", MaxNWts = 2086) %>% \r\n",
+ " set_mode(\"classification\")\r\n",
+ "\r\n",
+ "# Print model specification\r\n",
+ "mr_spec"
+ ],
+ "outputs": [
+ {
+ "output_type": "display_data",
+ "data": {
+ "text/plain": [
+ "Multinomial Regression Model Specification (classification)\n",
+ "\n",
+ "Main Arguments:\n",
+ " penalty = 1\n",
+ "\n",
+ "Engine-Specific Arguments:\n",
+ " MaxNWts = 2086\n",
+ "\n",
+ "Computational engine: nnet \n"
+ ]
+ },
+ "metadata": {}
+ }
+ ],
+ "metadata": {
+ "colab": {
+ "base_uri": "https://localhost:8080/",
+ "height": 166
+ },
+ "id": "Wq_fcyQiJvfG",
+ "outputId": "c30449c7-3864-4be7-f810-72a003743e2d"
+ }
+ },
+ {
+ "cell_type": "markdown",
+ "source": [
+ "Magaling! 🥳 Ngayon na mayroon na tayong recipe at model specification, kailangan nating maghanap ng paraan upang pagsamahin ang mga ito sa isang object na unang magpoproseso ng data, pagkatapos ay iaangkop ang modelo sa naprosesong data, at magbibigay-daan din para sa posibleng mga aktibidad ng post-processing. Sa Tidymodels, ang maginhawang object na ito ay tinatawag na [`workflow`](https://workflows.tidymodels.org/) at maginhawang hinahawakan ang iyong mga modeling components! Ito ang tinatawag nating *pipelines* sa *Python*.\n",
+ "\n",
+ "Kaya't pagsama-samahin na natin ang lahat sa isang workflow!📦\n"
+ ],
+ "metadata": {
+ "id": "NlSbzDfgJ0zh"
+ }
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 7,
+ "source": [
+ "# Bundle recipe and model specification\r\n",
+ "mr_wf <- workflow() %>% \r\n",
+ " add_recipe(cuisines_recipe) %>% \r\n",
+ " add_model(mr_spec)\r\n",
+ "\r\n",
+ "# Print out workflow\r\n",
+ "mr_wf"
+ ],
+ "outputs": [
+ {
+ "output_type": "display_data",
+ "data": {
+ "text/plain": [
+ "══ Workflow ════════════════════════════════════════════════════════════════════\n",
+ "\u001b[3mPreprocessor:\u001b[23m Recipe\n",
+ "\u001b[3mModel:\u001b[23m multinom_reg()\n",
+ "\n",
+ "── Preprocessor ────────────────────────────────────────────────────────────────\n",
+ "1 Recipe Step\n",
+ "\n",
+ "• step_smote()\n",
+ "\n",
+ "── Model ───────────────────────────────────────────────────────────────────────\n",
+ "Multinomial Regression Model Specification (classification)\n",
+ "\n",
+ "Main Arguments:\n",
+ " penalty = 1\n",
+ "\n",
+ "Engine-Specific Arguments:\n",
+ " MaxNWts = 2086\n",
+ "\n",
+ "Computational engine: nnet \n"
+ ]
+ },
+ "metadata": {}
+ }
+ ],
+ "metadata": {
+ "colab": {
+ "base_uri": "https://localhost:8080/",
+ "height": 333
+ },
+ "id": "Sc1TfPA4Ke3_",
+ "outputId": "82c70013-e431-4e7e-cef6-9fcf8aad4a6c"
+ }
+ },
+ {
+ "cell_type": "markdown",
+ "source": [
+ "Ang mga Workflow 👌👌! Ang **`workflow()`** ay maaaring i-fit sa halos parehong paraan tulad ng isang modelo. Kaya, oras na para mag-train ng modelo!\n"
+ ],
+ "metadata": {
+ "id": "TNQ8i85aKf9L"
+ }
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 8,
+ "source": [
+ "# Train a multinomial regression model\n",
+ "mr_fit <- fit(object = mr_wf, data = cuisines_train)\n",
+ "\n",
+ "mr_fit"
+ ],
+ "outputs": [
+ {
+ "output_type": "display_data",
+ "data": {
+ "text/plain": [
+ "══ Workflow [trained] ══════════════════════════════════════════════════════════\n",
+ "\u001b[3mPreprocessor:\u001b[23m Recipe\n",
+ "\u001b[3mModel:\u001b[23m multinom_reg()\n",
+ "\n",
+ "── Preprocessor ────────────────────────────────────────────────────────────────\n",
+ "1 Recipe Step\n",
+ "\n",
+ "• step_smote()\n",
+ "\n",
+ "── Model ───────────────────────────────────────────────────────────────────────\n",
+ "Call:\n",
+ "nnet::multinom(formula = ..y ~ ., data = data, decay = ~1, MaxNWts = ~2086, \n",
+ " trace = FALSE)\n",
+ "\n",
+ "Coefficients:\n",
+ " (Intercept) almond angelica anise anise_seed apple\n",
+ "indian 0.19723325 0.2409661 0 -5.004955e-05 -0.1657635 -0.05769734\n",
+ "japanese 0.13961959 -0.6262400 0 -1.169155e-04 -0.4893596 -0.08585717\n",
+ "korean 0.22377347 -0.1833485 0 -5.560395e-05 -0.2489401 -0.15657804\n",
+ "thai -0.04336577 -0.6106258 0 4.903828e-04 -0.5782866 0.63451105\n",
+ " apple_brandy apricot armagnac artemisia artichoke asparagus\n",
+ "indian 0 0.37042636 0 -0.09122797 0 -0.27181970\n",
+ "japanese 0 0.28895643 0 -0.12651100 0 0.14054037\n",
+ "korean 0 -0.07981259 0 0.55756709 0 -0.66979948\n",
+ "thai 0 -0.33160904 0 -0.10725182 0 -0.02602152\n",
+ " avocado bacon baked_potato balm banana barley\n",
+ "indian -0.46624197 0.16008055 0 0 -0.2838796 0.2230625\n",
+ "japanese 0.90341344 0.02932727 0 0 -0.4142787 2.0953906\n",
+ "korean -0.06925382 -0.35804134 0 0 -0.2686963 -0.7233404\n",
+ "thai -0.21473955 -0.75594439 0 0 0.6784880 -0.4363320\n",
+ " bartlett_pear basil bay bean beech\n",
+ "indian 0 -0.7128756 0.1011587 -0.8777275 -0.0004380795\n",
+ "japanese 0 0.1288697 0.9425626 -0.2380748 0.3373437611\n",
+ "korean 0 -0.2445193 -0.4744318 -0.8957870 -0.0048784496\n",
+ "thai 0 1.5365848 0.1333256 0.2196970 -0.0113078024\n",
+ " beef beef_broth beef_liver beer beet\n",
+ "indian -0.7985278 0.2430186 -0.035598065 -0.002173738 0.01005813\n",
+ "japanese 0.2241875 -0.3653020 -0.139551027 0.128905553 0.04923911\n",
+ "korean 0.5366515 -0.6153237 0.213455197 -0.010828645 0.27325423\n",
+ "thai 0.1570012 -0.9364154 -0.008032213 -0.035063746 -0.28279823\n",
+ " bell_pepper bergamot berry bitter_orange black_bean\n",
+ "indian 0.49074330 0 0.58947607 0.191256164 -0.1945233\n",
+ "japanese 0.09074167 0 -0.25917977 -0.118915977 -0.3442400\n",
+ "korean -0.57876763 0 -0.07874180 -0.007729435 -0.5220672\n",
+ "thai 0.92554006 0 -0.07210196 -0.002983296 -0.4614426\n",
+ " black_currant black_mustard_seed_oil black_pepper black_raspberry\n",
+ "indian 0 0.38935801 -0.4453495 0\n",
+ "japanese 0 -0.05452887 -0.5440869 0\n",
+ "korean 0 -0.03929970 0.8025454 0\n",
+ "thai 0 -0.21498372 -0.9854806 0\n",
+ " black_sesame_seed black_tea blackberry blackberry_brandy\n",
+ "indian -0.2759246 0.3079977 0.191256164 0\n",
+ "japanese -0.6101687 -0.1671913 -0.118915977 0\n",
+ "korean 1.5197674 -0.3036261 -0.007729435 0\n",
+ "thai -0.1755656 -0.1487033 -0.002983296 0\n",
+ " blue_cheese blueberry bone_oil bourbon_whiskey brandy\n",
+ "indian 0 0.216164294 -0.2276744 0 0.22427587\n",
+ "japanese 0 -0.119186087 0.3913019 0 -0.15595599\n",
+ "korean 0 -0.007821986 0.2854487 0 -0.02562342\n",
+ "thai 0 -0.004947048 -0.0253658 0 -0.05715244\n",
+ "\n",
+ "...\n",
+ "and 308 more lines."
+ ]
+ },
+ "metadata": {}
+ }
+ ],
+ "metadata": {
+ "colab": {
+ "base_uri": "https://localhost:8080/",
+ "height": 1000
+ },
+ "id": "GMbdfVmTKkJI",
+ "outputId": "adf9ebdf-d69d-4a64-e9fd-e06e5322292e"
+ }
+ },
+ {
+ "cell_type": "markdown",
+ "source": [
+ "Ang output ay nagpapakita ng mga coefficients na natutunan ng modelo habang ito ay sinasanay.\n",
+ "\n",
+ "### Suriin ang Sinanay na Modelo\n",
+ "\n",
+ "Panahon na para makita kung paano nag-perform ang modelo 📏 sa pamamagitan ng pagsusuri nito gamit ang test set! Simulan natin sa paggawa ng mga prediksyon sa test set.\n"
+ ],
+ "metadata": {
+ "id": "tt2BfOxrKmcJ"
+ }
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 9,
+ "source": [
+ "# Make predictions on the test set\n",
+ "results <- cuisines_test %>% select(cuisine) %>% \n",
+ " bind_cols(mr_fit %>% predict(new_data = cuisines_test))\n",
+ "\n",
+ "# Print out results\n",
+ "results %>% \n",
+ " slice_head(n = 5)"
+ ],
+ "outputs": [
+ {
+ "output_type": "display_data",
+ "data": {
+ "text/plain": [
+ " cuisine .pred_class\n",
+ "1 indian thai \n",
+ "2 indian indian \n",
+ "3 indian indian \n",
+ "4 indian indian \n",
+ "5 indian indian "
+ ],
+ "text/markdown": [
+ "\n",
+ "A tibble: 5 × 2\n",
+ "\n",
+ "| cuisine <fct> | .pred_class <fct> |\n",
+ "|---|---|\n",
+ "| indian | thai |\n",
+ "| indian | indian |\n",
+ "| indian | indian |\n",
+ "| indian | indian |\n",
+ "| indian | indian |\n",
+ "\n"
+ ],
+ "text/latex": [
+ "A tibble: 5 × 2\n",
+ "\\begin{tabular}{ll}\n",
+ " cuisine & .pred\\_class\\\\\n",
+ " & \\\\\n",
+ "\\hline\n",
+ "\t indian & thai \\\\\n",
+ "\t indian & indian\\\\\n",
+ "\t indian & indian\\\\\n",
+ "\t indian & indian\\\\\n",
+ "\t indian & indian\\\\\n",
+ "\\end{tabular}\n"
+ ],
+ "text/html": [
+ "