knn分類 knn
As the title says, here is a quick little lesson on how to construct a simple KNN model in SciKit-Learn. I will be using this dataset. It contains information on students’ academic performance.
就像標題中所說的,這是關于如何在SciKit-Learn中構建簡單的KNN模型的快速入門課程。 我將使用此數據集 。 它包含有關學生學習成績的信息。
Features included are things like how many times a student raises their hand, their gender, parent satisfaction, how often they were absent from class, and how often they participated in class discussion.
這些功能包括諸如學生舉手次數,性別,父母滿意度,他們缺席課堂的頻率以及他們參加課堂討論的頻率之類的東西。
Each student is grouped into one of three academic classes: High (H), Medium (M), and Low (L). I used the other features in order to predict which class they fall in.
每個學生分為三個學術班級之一:高(H),中(M)和低(L)。 我使用其他功能來預測它們屬于哪個類。
Just for reference:
僅供參考:
- High, 90–100 高,90-100
- Medium, 70–89 中,70–89
- Low, 0–69 低,0–69
Okay, cool! Let’s get started.
好吧,酷! 讓我們開始吧。
圖書館進口 (Library Import)
import numpy as npimport pandas as pdimport seaborn as snsimport statsmodels.api as smfrom sklearn.model_selection import train_test_splitfrom sklearn.preprocessing import StandardScalerfrom sklearn.neighbors import KNeighborsClassifierfrom statsmodels.formula.api import olsfrom sklearn.metrics import precision_score, recall_score,
accuracy_score, f1_scoreimport matplotlib.pyplot as plt
%matplotlib inline
First, you want to import all of the libraries that you’re going to need. Some people import each library at each stage of the process, but personally I like to do it all at the beginning.
首先,您要導入所有需要的庫。 有些人在流程的每個階段都導入每個庫,但是我個人最喜歡一開始就全部完成。
Technically we won’t really be using Seaborn or MatplotLib, but I like to keep them around just in case I want to visualize something during the process.
從技術上講,我們實際上并不會使用Seaborn或MatplotLib,但我希望保留它們,以防萬一我想在此過程中可視化某些東西。
初始數據導入 (Initial Data Import)
df = pd.read_csv('xAPI-Edu-Data.csv')
df.head()

Cool! The data is in good shape to begin with. There are no missing values and no outliers to speak of. However, we will have to do a small amount of preprocessing to get it ready for our model.
涼! 首先,數據處于良好狀態。 沒有遺漏的值,也沒有離群值。 但是,我們將需要進行少量預處理才能為模型準備就緒。
前處理 (Preprocessing)
# Dropping all unnecessary columns
df = df.drop(['NationalITy', 'PlaceofBirth', 'StageID', 'GradeID',
'SectionID', 'Topic', 'Relation',
'ParentAnsweringSurvey'],
axis = 1,
inplace = False)
df.head()

When feeding a KNN model, you only want to include the features that you actually want to be making the decision. This may seem obvious but I figured it was worth mentioning.
在提供KNN模型時,您只想包含您實際要做出決定的功能。 這似乎很明顯,但我認為值得一提。
# Binary encoding of categorical variables
df['gender'] = df['gender'].map({'M': 0, 'F': 1})
df['Semester'] = df['Semester'].map({'F': 0, 'S': 1})
df['ParentschoolSatisfaction'] = df['ParentschoolSatisfaction'].map({'Good': 0, 'Bad': 1})
df['StudentAbsenceDays'] = df['StudentAbsenceDays'].map({'Under-7': 0, 'Above-7': 1})
df.head()

Something perhaps not so obvious if you have never done this, is that you have to encode your categorical variables. It makes sense if you think about it. A model can’t really interpret ‘Good’ or ‘Bad’, but it can interpret 0 and 1.
如果您從未執行過此操作,那么可能不太明顯的是您必須對分類變量進行編碼。 如果您考慮一下,這是有道理的。 模型無法真正解釋“好”或“差”,但可以解釋0和1。
# Check for missing values
df.isna().sum()

I know I already said that we don’t have any missing values, but I just like to be thorough.
我知道我已經說過,我們沒有任何缺失的價值觀,但我只是想做到周全。
# Create a new dataframe with our target variable, remove the target variable from the original dataframe
labels = df['Class']
df.drop('Class', axis = 1, inplace = True)
And then —
然后 -
df.head()

labels.head()

Next, we want to separate our target feature from our predictive features. We do this in order to create a train/test split for our data. Speaking of!
接下來,我們要將目標特征與預測特征分開。 我們這樣做是為了為我們的數據創建一個訓練/測試組。 說起!
訓練/測試拆分 (Train/Test Split)
X_train, X_test, y_train, y_test = train_test_split(df, labels,
test_size = .25,
random_state =
33)
*I realize the above formatting is terrible, I’m just trying to make it readable for this Medium article.
*我意識到上面的格式很糟糕,我只是想讓這篇中型文章可讀。
擴展數據 (Scaling the Data)
This next part brings up two important points:
下一部分提出了兩個要點:
- You need to scale the data. If you don’t, variables with larger absolute values will be given more weight in the model for no real reason. We have our features that are binary encoded (0, 1) but we also have features on how many times student raise their hands (0–80). We need to put them on the same scale so they have the same importance in the model. 您需要縮放數據。 如果您不這樣做,則在沒有真正原因的情況下,具有更大絕對值的變量將在模型中獲得更大的權重。 我們具有二進制編碼的功能(0,1),但也具有學生舉手次數(0–80)的功能。 我們需要將它們放到相同的規模,以便它們在模型中具有相同的重要性。
You have to scale the data AFTER you perform the train/test split. If you don’t, you will have leakage and you will invalidate your model. For a more thorough explanation, check out this article by Jason Browlee who has tons of amazing resources on machine learning.
執行訓練/測試拆分后,您必須縮放數據。 如果不這樣做,將會泄漏,并使模型無效。 有關更全面的解釋,請查看Jason Browlee的這篇文章 ,他擁有大量有關機器學習的驚人資源。
The good news is, this is extremely easy to do.
好消息是,這非常容易做到。
scaler = StandardScaler()
scaled_data_train = scaler.fit_transform(X_train)
scaled_data_test = scaler.transform(X_test)
scaled_df_train = pd.DataFrame(scaled_data_train, columns =
df.columns)scaled_df_train.head()

Awesome. Easy peasy lemon squeezy, our data is scaled.
太棒了 輕松榨取檸檬,我們的數據即可縮放。
擬合KNN模型 (Fit a KNN Model)
# Instantiate the model
clf = KNeighborsClassifier()# Fit the model
clf.fit(scaled_data_train, y_train)# Predict on the test set
test_preds = clf.predict(scaled_data_test)
It really truly is that simple. Now, we want to see how well our baseline model performed.
真的就是這么簡單。 現在,我們想看看基線模型的性能如何。
評估模型 (Evaluating the Model)
def print_metrics(labels, preds):
print("Precision Score: {}".format(precision_score(labels,
preds, average = 'weighted')))
print("Recall Score: {}".format(recall_score(labels, preds,
average = 'weighted')))
print("Accuracy Score: {}".format(accuracy_score(labels,
preds)))
print("F1 Score: {}".format(f1_score(labels, preds, average =
'weighted')))print_metrics(y_test, test_preds)

And there you have it, with almost no effort, we created a predictive model that is able to classify students into their academic performance class with an accuracy of 75.8%. Not bad.
在這里,您幾乎無需付出任何努力,就創建了一個預測模型,該模型能夠以75.8%的準確度將學生分類為他們的學習成績班級。 不錯。
We can probably improve this by at least a few points by tuning the parameters of the model, but I will leave that for another post.
我們可以通過調整模型的參數至少將其改進幾個點,但是我將在另一篇文章中討論。
Happy learning. 😁
學習愉快。 😁
翻譯自: https://towardsdatascience.com/a-quick-little-lesson-on-knn-98381c487aa2
knn分類 knn
本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。 如若轉載,請注明出處:http://www.pswp.cn/news/391963.shtml 繁體地址,請注明出處:http://hk.pswp.cn/news/391963.shtml 英文地址,請注明出處:http://en.pswp.cn/news/391963.shtml
如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!