#Importing needed packages
import matplotlib.pyplot as plt import numpy as np import pandas as pd from sklearn import preprocessing
برای نصب بستهها، قبل از ورود به پایتون و در ترمینال از دستور pip3 install PACKAGE(s) NAME استفاده میکنیم.
#Downloading and reading data
df= pd.read_csv("https://cf-courses-data.s3.us.cloud-object-storage.appdomain.cloud/IBMDeveloperSkillsNetwork-ML0101EN-SkillsNetwork/labs/Module%203/data/teleCust1000t.csv") # take a look at the dataset print(df.head()) # summarize the data print(df.describe()) #how many of each class is in our data set df['custcat'].value_counts()
آدرس فوق یک مثال برای انجام کد است و میتواند داده دیگری جایگزین آن گردد.
اگر دستور head و امثال آن در ترمینال نوشته شود نیازی به print() نیست. اما اگر در IDE نوشته شود بدون print() چیزی نمایش داده نمیشود.
#Feature set
df.columns X = df[['region', 'tenure','age', 'marital', 'address', 'income', 'ed', 'employ','retire', 'gender', 'reside']] .values y = df['custcat'].values
برای استفاده از کتابخانه scikit-learn لازم است از طریق کد بالا قالب داده pandas به آرایه Numphy تبدیل شود.
#Histogram plot
df.hist(column='income', bins=50) plt.show()
#Creating train and test dataset
from sklearn.model_selection import train_test_split X_train, X_test, y_train, y_test = train_test_split( X, y, test_size=0.2, random_state=4) print ('Train set:', X_train.shape, y_train.shape) print ('Test set:', X_test.shape, y_test.shape)
#Normalize data
X_train_norm = preprocessing.StandardScaler().fit(X_train).transform(X_train.astype(float))
استاندارد کردن دادهها سبب ایجاد میانگین صفر و واریانس یک میشود. این کار برای الگوریتمهای مبتنی بر فاصله مانند KNN ضروری است.
#Classifiaction
from sklearn.neighbors import KNeighborsClassifier k = 4 #Train Model and Predict neigh = KNeighborsClassifier(n_neighbors = k).fit(X_train_norm,y_train) print(neigh) X_test_norm = preprocessing.StandardScaler().fit(X_test).transform(X_test.astype(float)) yhat = neigh.predict(X_test_norm)
#Evaluation
from sklearn import metrics print("Train set Accuracy: ", metrics.accuracy_score(y_train, neigh.predict(X_train_norm))) print("Test set Accuracy: ", metrics.accuracy_score(y_test, yhat))
ارزیابی براساس روش جاکارد ( jaccard_score ) انجام گرفت.
#The best K
Ks = 10 mean_acc = np.zeros((Ks-1)) std_acc = np.zeros((Ks-1)) for n in range(1,Ks): #Train Model and Predict neigh = KNeighborsClassifier(n_neighbors = n).fit(X_train_norm,y_train) yhat=neigh.predict(X_test_norm) mean_acc[n-1] = metrics.accuracy_score(y_test, yhat) std_acc[n-1]=np.std(yhat==y_test)/np.sqrt(yhat.shape[0]) print(mean_acc)
#Plot the accuracy vs K
plt.plot(range(1,Ks),mean_acc,'g') plt.fill_between(range(1,Ks),mean_acc - 1 * std_acc,mean_acc + 1 * std_acc, alpha=0.10) plt.fill_between(range(1,Ks),mean_acc - 3 * std_acc,mean_acc + 3 * std_acc, alpha=0.10,color="green") plt.legend(('Accuracy ', '+/- 1xstd','+/- 3xstd')) plt.ylabel('Accuracy ') plt.xlabel('Number of Neighbors (K)') plt.tight_layout() plt.show() print( "The best accuracy was with", mean_acc.max(), "with k=", mean_acc.argmax()+1)
برگرفته از Machine learning with Python, IBM Developer
هکرها از XWorm RAT برای بهره برداری از اسکریپت Kiddies، Pwning 18000 دستگاه استفاده می کنند.