מדריך Machine Learning עם פייתון לחיזוי אתריום + data אמיתי

רוצים להתחיל לבצע ML עם פייתון אבל לא בטוחים איך להתחיל ?

השגנו ועיבדנו עבורכם כבר את המידע על מנת שתוכלו ישר להתחיל.

אנו נבצע למידה של מטבע האתריום כאשר החיזוי יהיה עבור CLASSIFICATION בינארי של POSITIVE ו- NEGATIVE.

ונבדוק האם שער הסגירה של אתריום בהינתן יום יהיה גבוהה ממחיר הפתיחה או לא.

כל הדטה אמיתי.

במדריך זה נכסה:

  1. התקנת סביבת עבודה
  2. אירגון המידע + קובץ נתונים מוכן לעבודה.
  3. הרצת מספר אלגוריתמי למידה ובחירת הטוב ביותר.

לפני שנתחיל, הבהרה: מדריך זה הינו לצרכי למידה בלבד ואיננו בשום צורה מהווה כלי מסחר או המלצה כזו או אחרת.

*מומלץ לעבור על המדריך במחשב השולחני.

לצפייה בקוד המקור המלא בGitHub 

בנוסף מצורף קובץ JSON של הדטה המקורי וקובץ CSV מעובד ומוכן ללמידה.

 

1) התקנת סביבת העבודה:

  • EDITOR לפייתון לפי בחירתכם מומלץ: PyCharm
  • ANACONDA זו סביבת עבודה עם כל הספריות שתצטרכו, כל שצריך לעשות זה לכוון את הInterpreter לזה שמותקן באנקונדה וזה יהיה מסונכרן.

הDATA שתעבדו איתו:

  • set_a_csv_classes
  • המידע נלקח ועובד בשבילכם מתוך coinMarketCap
  • העמודות הן [date,volume,market cap,open,high,low,close] משמאל לימין.
  • עמודת הCLOSE הינה הCLASSIFIER ונחליף אותה בPOSITIVE/NEGATIVE
  • הורידו את הקובץ ושמרו בתיקיה של הפרויקט.

כדי לוודא שהכל עובד לאחר ההתקנה הריצו את הסקריפט הבא וראו שהכל עובד תקין:

# Check the versions of libraries

# Python version
import sys
print('Python: {}'.format(sys.version))
# scipy
import scipy
print('scipy: {}'.format(scipy.__version__))
# numpy
import numpy
print('numpy: {}'.format(numpy.__version__))
# matplotlib
import matplotlib
print('matplotlib: {}'.format(matplotlib.__version__))
# pandas
import pandas
print('pandas: {}'.format(pandas.__version__))
# scikit-learn
import sklearn
print('sklearn: {}'.format(sklearn.__version__))

אם הכל עבר חלק אתם אמורים לראות את הפלט הבא:

 

 

 

 

 

:כל הספריות שתצטרכו לצורך העבודה

# Load libraries
import pandas
import matplotlib.pyplot as plt
from sklearn import model_selection
from sklearn.metrics import classification_report
from sklearn.metrics import confusion_matrix
from sklearn.metrics import accuracy_score
from sklearn.linear_model import LogisticRegression
from sklearn.tree import DecisionTreeClassifier
from sklearn.neighbors import KNeighborsClassifier
from sklearn.discriminant_analysis import LinearDiscriminantAnalysis
from sklearn.naive_bayes import GaussianNB
from sklearn.svm import SVC

 

2) ארגון וטעינת המידע:

# Load dataset
url = <your_path>/set_a_csv_classes.csv'
names = ['Volume', 'MarketCap', 'Open', 'High', 'Low','Close']
dataset = pandas.read_csv(url,names=names)

הכניסו את הנתיב המלא במקום המיועד על מנת שיהיה ניתן לטעון את הקובץ.

 

צפיה במידע:

בואו נציץ במידע ונבקש לראות את 10 השורות הראשונות:

print(dataset.head(10))

אנו אמורים לראות כפלט:

 

בואו נראה את התפלגות המידע:

print(dataset.groupby('Close').size())

כפלט אנו נראה:

כלומר, ישנן 399 מחלקות שהן NEGATIVE ו- 366 מחלקות שהן POSITIVE.

NEGATIVE: הCLOSE נמוך או שווה למחיר הOPEN.

POSITIVE: הCLOSE גבוהה ממחיר הOPEN.

3) הרצת מספר אלגוריתמים – בחירת הטוב ביותר (ADABOOST):

לצרכי ביצועים יותר טובים של האלגוריתם אנו נתעלם מ2 העמודות הראשונות שVOLUME ו- MARKETCAP ונבחר לא להשתמש בהן.

כמו כן, נגדיר את עמודת הCLOSE בתור הY CLASSIFIER שלנו.

אנו נחלק את הDATA שלנו ל80% training ו- 20% validation data.

בצורה זו נוכל למדוד את רמת הדיוק של האלגוריתם.

פרמטר הSEED נועד לתת לאלגוריתם את היכולת לדגום את המידע באופן רנדומלי למניעת OVER-FITTING, אך לא נתמקד בסינטקס המטרה היא הרצת התוכנית מהתחלה עד הסוף.

 

array = dataset.values
X = array[:,2:5]
Y = array[:,5]
validation_size = 0.20
seed = 7
scoring = 'accuracy'
X_train, X_validation, Y_train, Y_validation =model_selection.train_test_split(X, Y, test_size=validation_size, random_state=seed)

 הרצת המבחן:

אנו נריץ מס' אלגוריתם בשיטת 10-fold validation. במהלך האימון נוודא שהSEED תואם בכולם על מנת שנוכל להשוות ביצועים בצורה ישירה.

האלגוריתמים שנריץ:

  • Logistic Regression (LR)
  • Linear Discriminant Analysis (LDA)
  • K-Nearest Neighbors (KNN).
  • Classification and Regression Trees (CART).
  • Gaussian Naive Bayes (NB).
  • Support Vector Machines (SVM).

 

אימון המודלים:

# Spot Check Algorithms
models = []
models.append(('LR', LogisticRegression()))
models.append(('LDA', LinearDiscriminantAnalysis()))
models.append(('KNN', KNeighborsClassifier()))
models.append(('CART', DecisionTreeClassifier()))
models.append(('NB', GaussianNB()))
models.append(('SVM', SVC()))
# evaluate each model in turn
results = []
names = []
for name, model in models:
   kfold = model_selection.KFold(n_splits=10, random_state=seed)
   cv_results = model_selection.cross_val_score(model, X_train, Y_train, cv=kfold, scoring=scoring)
   results.append(cv_results)
   names.append(name)
   msg = "%s: %f (%f)" % (name, cv_results.mean(), cv_results.std())
   print(msg)

 

בחירת המודל הטוב ביותר:

כפלט אנו נראה:

ניתן לראות שLR הביא את הביצועים הטובים ביותר.

ניתן למדוד גם בגרף את איכות הביצועים:

# Compare Algorithms
fig = plt.figure()
fig.suptitle('Algorithm Comparison')
ax = fig.add_subplot(111)
plt.boxplot(results)
ax.set_xticklabels(names)
plt.show()

וכפלט יפתח החלון הבא:

 

ביצוע חיזוי עם האלגוריתם הנבחר:

# Make predictions on validation dataset
_lr = LogisticRegression()
_lr.fit(X_train, Y_train)
predictions = _lr.predict(X_validation)
print(accuracy_score(Y_validation, predictions))
print(confusion_matrix(Y_validation, predictions))
print(classification_report(Y_validation, predictions))

כפלט נראה את התוצאות:

 


 

סיכום:

זהו מדריך בסיסי שמטרתו לתת טעימה מהעולם הזה, מכאן צריך להמשיך ולחקור את הספריות, להשיג DATA יותר טוב ולנסות גרסאות שונות.

כעת, עברו על כל מה שלא הבנתם בקוד של המדריך וחקרו עליו.

יש לכם שאלות ? 

הגיבו כאן בפוסט או בקבוצת הפייסבוק שלנו.

מעונינים לתכנת בסולידיטי ? כנסו למדריך שהכנו כאן עבורכם. או להקדמה.

 

מילה על המחבר של המדריך:

איסן, בן 25. סטודנט למדעי המחשב ומתכנת בחברת רובוטיקה ביום.

אדמין באתריום ישראל, חוקר ומתכנת בלוקצ'יין בלילות כבר כשנתיים.

 

 

Related Post