هذه المقالة يتيمة. ساعد بإضافة وصلة إليها في مقالة متعلقة بها
يرجى فتح الوصلات الداخلية للمقالات المتعلّقة بموضوع المقالة.
هذه الصفحة لم تصنف بعد. أضف تصنيفًا لها لكي تظهر في قائمة الصفحات المتعلقة بها.
يرجى مراجعة هذه المقالة وإزالة وسم المقالات غير المراجعة، ووسمها بوسوم الصيانة المناسبة.

آلة متجه الدعم

من ويكيبيديا، الموسوعة الحرة
اذهب إلى: تصفح، ‏ ابحث
N write.svg
هذه مقالة غير مراجعة. ينبغي أن يزال هذا القالب بعد أن يراجعها محرر ما عدا الذي أنشأها؛ إذا لزم الأمر فيجب أن توسم المقالة بقوالب الصيانة المناسبة. (يوليو 2017)
Commons-emblem-copyedit.svg
هذه المقالة ليس بها أي وصلات لمقالاتٍ أخرى للمساعدة في ترابط مقالات الموسوعة. فضلًا ساعد في تحسين هذه المقالة بإضافة وصلات إلى المقالات المتعلقة بها الموجودة في النص الحالي. (يوليو 2017)

آلة متجه الدعم(Support vector machine)[عدل]


في عام 1963، أخترع العالمان فلاديمير فابنك وأليكسى شيرفونينكيز خوارزمية آلة متجه الدعم (Support Vector Machines ‘SVM’). أما الخوارزمية المعتمدة و المستخدمة حاليا (الهامش المرن) فقد طرحها كورينا كورتز وفابنك في عام 1993. و الهدف الأساسي من آلة متجة الدعم (SVM) هو تطوير نموذج رياضي وذلك بعمل سطح فاصل (hyperplane) لمعطيات ذات قيم حسابية مختلفة. و في هذا البحث سوف نوضح المعدلات الخاصة بذلك. هذه المعادلات الخوارزمية لها القدرة على التعامل مع أحجام عينات واسعة. بعد ذلك يقوم الخوارزم بإيجاد إطار خطى فاصل بين خصائص كلٍ من الفئتين بحيث يكون الهامش بينهما متسعة قدر الإمكان.إلى جانب قدرة هذا الخوارزم على إيجاد الإطار الخطى، فإنه يمكنه كذلك من إيجاده للغير خطي بتطبيق المصفوفات الرياضية.و تعد متجه الدعم الآلي من أشهر طرق التصنيف الأتوماتيكي التي تعتمد على إيجاد منحني أو مستوي فاصل (hyperplane) يفصل العينات المدخلة عن بعضها البعض. و يؤخذ 1 للعينات الإيجابية و -1 للعينات السلبية، و على سبيل المثال: لتصنيف عينات بيانات درجات طلبة الجامعة في مادة معينه فإذا كان الناتج 1 يعني أن الطالب ناجح في تلك المادة وفي حال كان الناتج -1 أي أن الطالب قد اخفق في تلك المادة. وفي حالة توافر أكثر من فاصل خطى، يتم اختيار الفاصل الذي يضمن هامش أوسع بين أقرب نقطتين من نوعيتين مختلفتين عن بعضهما وهو ما يسمى بالمستوى ذو الهامش الأكبر (maximum margin classifier).

مصنف الهامش الأكبر (The maximum margin classifier)[عدل]

هو ابسط نموذج في(SVM) وهو ما يسمى مصنف الهامش الأكبر (maximum margin classifier). ومن الاسهل فهم الخوارزميات و كيفية تكوّن البنبة الأساسية لها. فإذا كان الهامش صغير جداً فقد لا تعطي أي معلومات واضحة عن الحالة التي تكونت فيها البينات الغير قابلة للفصل و المتداخلة.

المستوى الموجب = { x : w . x + b = +1 }
المستوى السالب = { x : w . x + b = -1 }
تصنف بـ ...
if -1 w . x + b < = -1
if +1 w . x + b > = 1

آلة متجه الدعم الخطية[عدل]

تستخدم خوارزميات آلة متجه الدعم في تصنيف البيانات الخطية السهلة و الواضحة في الفصل و الغير متداخلة.

و على سبيل المثال فيمكن تحديد متجه الدعم و فصلها إلى فئتين ونفترض ان متجه الدعم وهي:

S1=(2,1)
S2=(2,-1)
S3=(4,0)
i

وهنا نضيف 1 للمصفوفة كـمدخل( bias input)، وللتمييزها فإننا سوف نرمز لها ب(S˜).
S1=(2,1,1) , S˜1= (2,1,1)
S2=(2,-1) , S˜2= (2,-1,1)
S3=(4,0) , S˜3= (4,0,1)
i

بعد ذلك نحتاج لإجاد 3 معاملات و هي( a1 , a2 ,a3) التي تعتمد على المعادلات الخطية التالية:
𝛼1 S˜1 . S˜1 + 𝛼2 S˜2 . S˜1 + 𝛼3 S˜3 . S˜1 = -1 (-𝑣𝑒 𝑐𝑙𝑎𝑠𝑠)
𝛼1 S˜1 . S˜2 + 𝛼2 S˜2 . S˜2 + 𝛼3 S˜3 . S˜2 = -1 (-𝑣𝑒 𝑐𝑙𝑎𝑠𝑠)
𝛼1 S˜1 . S˜3 + 𝛼2 S˜2 . S˜3 + 𝛼3 S˜3 . S˜3 = +1 (+𝑣𝑒 𝑐𝑙𝑎𝑠𝑠)

ثم نعوض قيم( S˜1، S˜2 و S˜3)في المعادلات السابقة  :
𝛼1 (2,1,1) . (2,1,1) + 𝛼2 (2,-1,1) . (2,1,1) + 𝛼3 (4,0,1) . (2,1,1) = -1
𝛼1 (2,1,1) . (2,-1,1) + 𝛼2 (2,-1,1). (2,-1,1) + 𝛼3 (4,0,1) . (2,-1,1) = -1
𝛼1 (2,1,1) . (4,0,1)+ 𝛼2 (2,-1,1) . (4,0,1) + 𝛼3 (4,0,1) . (4,0,1) = +1
i
و بعد تبسيط المعادلات وجدنا قيمة كل من 𝛼1 و 𝛼2 و 𝛼3
𝛼1 = 𝛼2 = - 3.25 , 𝛼3 = 3.5

تمييز المستوى الفاصل (hyperplane) :
هو المستوى (hyperplane) الذي يفصل فئة النقاط الاجابية عن الفئة السلبية و يمكن إجادها بالمعادلة التالية :

w˜ = ∑i 𝛼1 Si

وبتعويض القيم نحصل على التالي :
W˜ = 𝛼1(2,1,1)+ 𝛼2(2,-1,1)+ 𝛼3(4,0,1)
W˜ =(-3.25).(2,1,1)+ (-3.25).(2,-1,1)+ (3.5).(4,0,1) = (1,0,-3)
i
y=wx+b
w=(1,0)
b=-3

آلة متجه الدعمة اللاخطية[عدل]

هو عباره عن كيفية فصل العناصر اللاخطية في فضاء معين .

لنفترض ان العناصر الزرقاء هي : (1,1) , (1 ,1-) , (1- ,1-) , (1- ,1)
والعناصر الحمراء هي: (2,0) , (2,0) , (0 ,2-) , (2- ,0)

هنا نحاتاج العثور على ( non-linear mapping function Φ )التي يمكن بها نقل هذه البيانات إلى فضاء معين جديد ، حيث يمكن العثور على (hyperplane) لفصل هذي العناصر.

قاعدة ( non-linear mapping function Φ ) هي :
ɸ(x₁,x₂)= (6-x1+(x1.x1-x2.x2), 6-x2+(x1.x1-x2.x2)) if √(x₁+x₂ )≥2
(x1,x2 ) otherwise


الان سوف ننقل العناصر الحمراء و الزرقاء بأستخدام ( non-linear mapping function Φ ) :

العناصر االزرقاء لا تتغير لأنها x₁+x₂ < 2√
أما العناصر الحمراء حققت الشرط لذلك سوف نطبق القانون :
ɸ(x₁,x₂)=ɸ(2,0)= (6-2+ (2.2-0.0) , 6-0+ (2.2-0.0) )=(8,10)
ɸ(x₁,x₂)=ɸ(0,2)= (6-0+ (0.0-2.2) , 6-2+ (0.0-2.2) )=(10,8)
ɸ(x₁,x₂)=ɸ(-2,0)= (6+2+ ((-2.-2)-(0.0)) , 6-0+ ((0.0)-(-2.-2)) ) =(12,10)
ɸ(x₁,x₂)=ɸ(0,-2)= (6-0+ ((0.0)-(-2.-2)) , 6-0+ ((-2.-2)-(0.0)) )=(10,12)
i

الأن نحدد متجه الدعم لفصلها إلى فئتين
ولنفترض ان قيتها هي:
S1=(8,10)
S2=(10, 8)
S3=(1,1)
i

وهنا نضيف 1 للمصفوفة كـمدخل( bias input)، وللتمييزها فإننا سوف نرمز لها ب(S˜).

S1=(8,10) , S˜1= (8,10,1)
S2=(10,8) , S˜2= (10,8,1)
S3=(1,1) , S˜3= (1,1,1)
i

بعد ذلك نحتاج لإجاد 3 معاملات و هي( a1 , a2 ,a3) التي تعتمد على المعادلات الخطية التالية:
𝛼1 S˜1 . S˜1 + 𝛼2 S˜2 . S˜1 + 𝛼3 S˜3 . S˜1 = +1 (+𝑣𝑒 𝑐𝑙𝑎𝑠𝑠)
𝛼1 S˜1 . S˜2 + 𝛼2 S˜2 . S˜2 + 𝛼3 S˜3 . S˜2 = +1 (+𝑣𝑒 𝑐𝑙𝑎𝑠𝑠)
𝛼1 S˜1 . S˜3 + 𝛼2 S˜2 . S˜3 + 𝛼3 S˜3 . S˜3 = -1 (-𝑣𝑒 𝑐𝑙𝑎𝑠𝑠)

ثم نعوض قيم( S˜1، S˜2 و S˜3)في المعادلات السابقة  :
𝛼1 (8,10,1) . (8,10,1) + 𝛼2 (10,8,1) . (8,10,1) + 𝛼3 (4,0,1) . (8,10,1) = +1
𝛼1 (8,10,1) . (10,8,1) + 𝛼2 (10,8,1). (10,8,1) + 𝛼3 (1,1,1) . (10,8,1) = +1
𝛼1 (8,10,1) . (1,1,1) + 𝛼2 (10,8,1) . (1,1,1) + 𝛼3 (1,1,1) . (1,1,1) = -1
i

بعد ضرب المصفوفات حصلنا على :
165𝛼1 + 161 𝛼2 + 19 𝛼3 = +1
161𝛼1 + 165 𝛼2 + 19 𝛼3 = +1
19𝛼1 + 19 𝛼2 + 3 𝛼3 = -1

و بعد تبسيط المعادلات وجدنا قيمة كل من 𝛼1 و 𝛼2 و 𝛼3
𝛼1 = 𝛼2 = 0.859 , 𝛼3 = 1.4219

تمييز المستوى الفاصل (hyperplane) :
هو المستوى (hyperplane) الذي يفصل فئة النقاط الاجابية عن الفئة السلبية و يمكن إجادها بالمعادلة التالية :

w˜ = ∑i 𝛼1 Si

وبتعويض القيم نحصل على التالي :
W˜ = 𝛼1(8,10,1)+ 𝛼2(10, 8,1)+ 𝛼3(1,1,1)
W˜ =(0.0859).(8,10,1)+ (0.0859).(10, 8,1)+ (-1.4219).(1,1,1) = (0.1243,0.1243, -1.2501)
i
ويحسب المستوى الفاصل بالمعادلة التالية:
y= wx + b with w = (0.1243/0.1243 , 0.1243/0.1243)=(1,1)
i

b=-1.2501/0.1243=10.057

تصفية رسائل البريد الأكتروني[عدل]

العديد من خدمات البريد الاكتروني اليوم توفر خاصية تصفية رسائل البريد الاكتروني إلى فئتين فئة للمرغوبة و أخرى للغير مرغوبة. وفي هذا الجزء سوف نستخدم (SVM) لبناء تصفية رسائل البريد الاكتروني المرغوب بها و الغير مرغوب بها. سوف يتم التعرف على كيفية تصنيف الرسائل البريد الأكتروني محدد نفترض انه X ، بحيث أنه إذا كانت رسائل البريد الاكتروني المرغوب بها y=0 او رسائل البريد الاكتروني الغير مرغوب بها y=1 . نحتاج إلى تحويل كل الرسائل إلى (feature vector) XЄR .

لنفترض أن نص الرساله هو :

> Anyone knows how much it costs to host a web portal ? Well, it depends on how many visitors you're expecting. This can be anywhere from less than 10 bucks a month to a couple of $100. You should checkout or perhaps Amazon EC2 if you’re running something big.. To unsubscribe yourself from this mailing list, send an email to:


والأن سوف نعرض الخطوات التي من خلالها نبني تصفية رسائل البريد الاكتروني:

1- المعالجة المسبقة :
تستخدم لأزالة المحتوى الغير مرغوب فية من البريد الأكتروني و التي ليس من الضروري وجودها. و تحتوي خطوة المعالجة المسبقة على التالي :

  • حذف الأرقام
  • حذف الرموز
  • إزالة الروابط
  • الكلمات المتكررة


المكتبات التي نحتاجها لبناء تصفية رسائل البريد الاكتروني بلغة python :

import numpy as np
import scipy.io as sio 
import seaborn as sns
import matplotlib.pyplot as plt
import pandas as pd
from sklearn.svm import SVC
import re,string
from nltk.stem import PorterStemmer
from nltk.tokenize import word_tokenize
from sklearn.naive_bayes import MultinomialNB
import matplotlib
: def ProcessEmail(emailContent)
   # Removing all html from the emai
   emailContent = re.sub('<[^<>]+>',,emailContent) 
   # Replacing  all the urls by a text httpaddr
   emailContent = re.sub('http\w?://\S+','httpaddr',emailContent)   
   # Replacing all the email addresses with text emailaddr
   emailContent = re.sub('[^\s]+@[^\s]+','emailaddr',emailContent)
   # Replacing all the numbers by text number
   emailContent = re.sub('[0-9]+','number',emailContent) 
   # Replacing dollar sign with word dollar
   emailContent = re.sub('\$','dollar',emailContent) 
   # Removing newline and punctuations and whitespaces from the email
   emailContent = re.sub('\n',' ',emailContent)
   emailContent = re.sub('[^(\w|\s+)]',,emailContent)
   emailContent = re.sub('\s+',' ',emailContent)
   # Reducing words to their stemmed form in email
   ps = PorterStemmer()
   words = word_tokenize(emailContent)
   word_indices = []
   emailContent = ' '
   f = open('vocab.txt')
   vocab = []
 :  for line in f
       vocab.append(re.search('[a-z]+',line))
       vocab = pd.DataFrame(vocab,columns=['V'])
   f.close()
  : for w in words
       emailContent = emailContent+ps.stem(w)+' '
       # Mapping words in preprocessed emails into a list of word indices that contains the index...
       # of the word in the vocabulary list.
       x = vocab[vocab['V']==ps.stem(w)].index.tolist()
      : if len(x)==1
           word_indices.append(x[0]) 
           print(emailContent.strip())     
   return word_indices


النص بعد مرحلة المعالجة المسبقة:

anyon know how much it cost to host a web portal well it depend on how mani visitor your expect thi can be anywher from less than number buck a month to a coupl of dollarnumb you should checkout httpaddr or perhap amazon ecnumb if your run someth big to unsubscrib yourself from thi mail list send an email to emailaddr

2- استخلاص الخصائص (Extraction Feature) :
تستخدم لإستخلاص الخصائص (feature) المهمة و ذات العلاقة بمحتوى البريد الأكتروني. ويتم تعيين هذه الخصائص بطرق عدة من أشهرها قائمة المفردات.

:  def Extractfeatures(indices)
   features=np.zeros((1899,1)).astype(int)
   features[indices,0]=1
   return features
  for line in f
 " " = emailContent   
 : for line in f
   emailContent+=line.lower()  
   f.close()
  word_indices = ProcessEmail(emailContent)
  features= Extractfeatures(word_indices)


3- تدريب SVM :
يتم استخدام محتويات البريد الأكتروني بصنفية المرغوب به و غير المرغوب به لغراض تدريب المصنفة. و بعد هذا التدريب يكون المصنف جاهز لتصنيف رسائل البريد المزعج .


4- اختبار المصنف :
يتم اختبار المصنف على الكثير من بيانات المنفصلة لاختبار دقة المصنف.


5- اختبار البريد الإلكتروني :
بعد الانتهاء من مرحلة التدريب، يتم إعطاء عينة من البريد الإلكتروني كمدخل إلى المصنف لتصنيف البريد. و عندها تكون نتائج المصنف بأشكال 0 أو 1، حيث أن 1 يعني أنه غير مرغوب بها و 0 يعني أنها رسالة مرغوب بها .

# Loading the Training Data Set
 spamTrain = sio.loadmat('spamTrain')       
spamTraindata = pd.DataFrame(spamTrain['X']) 
spamTraindata['Y']=spamTrain['y']
# Loading the test Data Set
 spamTest = sio.loadmat('spamTest')
 spamTestdata = pd.DataFrame(spamTest['Xtest'])
 spamTestdata['Ytest']=spamTest['ytest']
 # SVM model:
 C = [0.1, 1, 3, 10, 30]
 best_score = 0
 best_C = 0
 best_gamma = 0
 : for c in C 
   clfG = SVC(C=c,kernel='linear') 
   clfG.fit(spamTraindata.drop('Y',axis=1),spamTraindata['Y'])
   score = clfG.score(spamTestdata.drop('Ytest',axis=1),spamTestdata['Ytest'])
  : if score>best_score
       best_score = score
       best_C = c           
 # Now that we have the values of best C and gamma, Let's Visualize the boundary:
 print('Best Score is %0.3f'%best_score)
 clfG = SVC(C=best_C,kernel='linear')
 clfG.fit(spamTraindata.drop('Y',axis=1),spamTraindata['Y'])
 [1]
      : output 
 Best Score is 0.989  
 SVC(C=0.1, cache_size=200, class_weight=None, coef0=0.0,
 decision_function_shape=None, degree=3, gamma='auto', kernel='linear',
 max_iter=-1, probability=False, random_state=None, shrinking=True,
 tol=0.001, verbose=False)

المراجع[عدل]

• C.Nello and S.John An Introduction to Support Vector Machines and Other Kernel-based Learning Methods, Cambridge University Press , March 23, 2000

• Noble, William S ,What is a support vector machine?, Nature Biotechnology, New York , Dec 2006.

• [1]“Email-Spam-Classification-Using-SVM,”[Online].Available: https://github.com/choud056/Machine-Learning-Projects/blob/master/Email-Spam-Classification-Using-SVM/Classify%20Emails%20into%20Spam%20or%20NonSpam%20using%20SVM.ipynb .[Accessed 28JUL 2017].

• “Python tutorial”,[Online].Available: https://docs.python.org/3/tutorial/ .[Accessed 24JUL 2017].

• “Email Spam Filtering,”[Online]. Available: https://appliedmachinelearning.wordpress.com/2017/01/23/email-spam-filter-python-scikit-learn/.[ Accessed 27JUL 2017]

• “E-Mail Spam Detection and Classification Using SVM and Feature Extraction,”[Online].Available: https://www.ijariit.com/manuscripts/v3i3/V3I3-1608.pdf .[ Accessed 27JUL 2017]

• “Scholastic,”[Online].Available: http://scholastictutors.webs.com/.[ Accessed 22JUL 2017]

• “Support Vector Machine introduction,”[Online].Available: https://pythonprogramming.net/support-vector-machine-intro-machine-learning-tutorial/.[ Accessed 29JUL 2017]

• “Vector Basics,”[Online].Available: https://pythonprogramming.net/vector-basics-machine-learning-tutorial/.[ Accessed 26JUL 2017]

• “Support Vector Assertions,”[Online].Available: https://pythonprogramming.net/support-vector-assertions-machine-learning-tutorial/ [ Accessed 25JUL 2017]

• “Classification Intro with K Nearest Neighbors,”[Online].Available: https://pythonprogramming.net/k-nearest-neighbors-intro-machine-learning-tutorial/ [ Accessed 19JUL 2017]

• “Beginning SVM from Scratch in Python”[Online].Available : https://pythonprogramming.net/svm-in-python-machine-learning-tutorial/ [ Accessed 20JUL 2017]

• “Support Vector Machine Optimization in Python,”[Online].Available: https://pythonprogramming.net/svm-optimization-python-machine-learning-tutorial/ [ Accessed 20JUL 2017]

• “ Support Vector Machine Optimization in Python part 2”[Online].Available: https://pythonprogramming.net/svm-optimization-python-2-machine-learning-tutorial/.[ Accessed 23JUL 2017]


Categorisation-hierarchy-top2down.svg
هذه الصفحة غير مصنفة:
صنفها حسب الموضوع. جرب المصناف الفوري. دقق تصنيفك قدر الإمكان. (يوليو 2017)