大家好 我是小k 昨天由于事比较多就没有更新博客 今天让我们来看看KNN算法 下面一张图可以很形象的对KNN算法进行表述
总得来说 今天的代码和第四天的代码没什么太大的区别 这里我就直接将代码直接展示出来
import pandas as pd
import numpy as np
data = pd.read_csv(r'D:\python\100daysdata\Social_Network_Ads.csv')
x = data.iloc[:,[2,3]].values
y = data.iloc[:,4].values
print(x[0])
print(y[0])
from sklearn.model_selection import train_test_split
x_train,x_test,y_train,y_test = train_test_split(x,y,test_size=0.3,random_state=1314)
from sklearn.preprocessing import StandardScaler
sc = StandardScaler()
x_train = sc.fit_transform(x_train)
x_test = sc.fit_transform(x_test)
from sklearn.linear_model import LogisticRegression
classifier = LogisticRegression()
classifier.fit(x_train,y_train)
y_pred = classifier.predict(x_test)
print(y_test)
print(y_pred)
from sklearn.metrics import confusion_matrix
cm = confusion_matrix(y_test,y_pred)
print(cm)
accuracy = (cm[0][0]+cm[0][1])/(cm[0][0]+cm[0][1]+cm[1][0]+cm[1][1])
print(accuracy)
打印结果:[ 19 19000]
0
[0 0 0 1 0 1 0 1 0 0 0 1 1 1 0 1 0 1 1 1 0 1 0 1 0 1 0 0 0 0 0 1 1 1 1 0 0
1 0 0 0 0 1 0 1 0 0 1 1 0 0 1 0 0 1 0 0 1 1 0 1 0 0 1 1 0 1 0 1 0 1 0 0 0
0 0 1 1 1 0 0 0 0 0 0 0 1 0 1 1 0 0 1 1 1 1 0 1 0 0 0 0 0 1 0 0 1 1 1 0 0
0 0 0 1 0 0 1 1 1]
[0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 1 0 1 1 1 0 1 0 1 0 0 0 0 0 0 0 0 1 1 0 0 0
1 0 0 0 0 1 0 0 0 0 1 0 0 0 1 0 0 0 0 0 0 1 0 1 0 0 0 1 0 0 0 0 0 0 0 0 0
0 0 0 0 1 0 0 0 0 0 0 0 1 0 1 1 0 0 1 1 0 1 0 1 1 0 0 0 0 1 0 0 1 0 0 0 0
0 0 0 1 0 0 0 1 1]
[[68 1]
[21 30]]
0.575
这里我就不解释了 如有疑问可以翻看day4内容
这篇文章我不想就这么水过去 剩下的内容我想详谈下KNN‘分类’算法
1:首先 KNN算法不是靠判别类域方法来确定所属类别的 所以说 对于类域交叉或重叠较多的数据集来说 KNN方法比较合适
2:样本所有特征都要做可比较的量化 假如样本特征中存在非数值类型,则必须要将其转化为数值 假如特征包含颜色 则可以通过将颜色转换为灰度值实现距离计算
3:样本特征都要进行归一化处理 假如一个参数的数值特别大 那么它将会在计算中影响力大于取值较小的参数 so样本参数都要做scale处理
4:选择一个恰当的距离函数计算两个样本间的距离
5:确定K的值 防止拟合与过拟合情况 可以通过交叉验证确定K值