机器学习算法
机器学习的流程
分类算法—k-近邻算法
根据“距离”找邻居
求距离
在此之前需要对数据进行标准化处理
API
csv文件数据
row_id,X,Y,place_id
0,2.1554,4.2528,54412121
1,6.0325,5.1214,54412121
2,5.3487,2.0135,20123145
2,5.3487,2.0135,20123145
2,5.3487,2.0135,20123145
3,6.2415,6.5238,30442554
4,9.1545,4.2526,95545151
5,3.1214,2.3512,54562411
5,3.1214,2.3512,54562411
5,3.1214,2.3512,54562411
6,3.1415,3.0201,21545254
7,4.2025,3.2211,12454154
7,4.2025,3.2211,12454154
8,7.1212,2.3026,45515124
9,8.1401,7.1214,66124512
10,8.1401,7.1214,66124512
11,8.1401,7.1214,66124512
12,8.1401,7.1214,66124512
from sklearn.neighbors import KNeighborsClassifier
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
import pandas as pd
def KNsuanfa():
# k-近邻算法预测
#读取数据
data=pd.read_csv("wom.csv")
print(data)
#处理数据
#缩小数据
# print(data.query("X<5.21&X>2.66&Y>2.66&Y<5.21"))
#构造特征 data["特征名"]=... 数据量要匹配
# place_count=data.groupby("place_id").count()
# print(place_count)
# tf=place_count[place_count.row_id<2].reset_index()
# print(tf)
# data=data[data["place_id"].isin(tf.place_id)]
# print(data)
print('*'*100)
#取出data里面的特征值和目标值
y=data["place_id"]
x=data.drop(["place_id"],axis=1) #按列删除
#进行数据的分割 训练集和测试集
x_train,x_test,y_train,y_test=train_test_split(x,y,test_size=0.25)
print(x_train)
print(x_test)
print("*"*50)
print(y_train)
print(y_test)
#特征工程——标准化
std=StandardScaler()
x_train=std.fit_transform(x_train)
x_test=std.transform(x_test)
#进行算法流程
Knn=KNeighborsClassifier(n_neighbors=5)
#输入数据
Knn.fit(x_train,y_train)
#进行预测
y_predict=Knn.predict(x_test)
print("预测的位置为:",y_predict)
print("预测的准确率:",Knn.score(x_test,y_test))
return None
KNsuanfa()
运行结果:
row_id X Y place_id
0 0 2.1554 4.2528 54412121
1 1 6.0325 5.1214 54412121
2 2 5.3487 2.0135 20123145
3 2 5.3487 2.0135 20123145
4 2 5.3487 2.0135 20123145
5 3 6.2415 6.5238 30442554
6 4 9.1545 4.2526 95545151
7 5 3.1214 2.3512 54562411
8 5 3.1214 2.3512 54562411
9 5 3.1214 2.3512 54562411
10 6 3.1415 3.0201 21545254
11 7 4.2025 3.2211 12454154
12 7 4.2025 3.2211 12454154
13 8 7.1212 2.3026 45515124
14 9 8.1401 7.1214 66124512
15 10 8.1401 7.1214 66124512
16 11 8.1401 7.1214 66124512
17 12 8.1401 7.1214 66124512
****************************************************************************************************
row_id X Y
3 2 5.3487 2.0135
16 11 8.1401 7.1214
17 12 8.1401 7.1214
10 6 3.1415 3.0201
13 8 7.1212 2.3026
11 7 4.2025 3.2211
6 4 9.1545 4.2526
2 2 5.3487 2.0135
1 1 6.0325 5.1214
12 7 4.2025 3.2211
4 2 5.3487 2.0135
5 3 6.2415 6.5238
0 0 2.1554 4.2528
row_id X Y
15 10 8.1401 7.1214
7 5 3.1214 2.3512
14 9 8.1401 7.1214
8 5 3.1214 2.3512
9 5 3.1214 2.3512
**************************************************
3 20123145
16 66124512
17 66124512
10 21545254
13 45515124
11 12454154
6 95545151
2 20123145
1 54412121
12 12454154
4 20123145
5 30442554
0 54412121
Name: place_id, dtype: int64
15 66124512
7 54562411
14 66124512
8 54562411
9 54562411
Name: place_id, dtype: int64
预测的位置为: [66124512 12454154 66124512 12454154 12454154]
预测的准确率: 0.4
Process finished with exit code 0
总结
1.先进行获取数据
2.进行数据的处理
3.取出特征值和目标值
4.将数据分成训练集和测试集
5.将训练集进行输入
6.将测试集数据输入,进行对测试集数据的预测
7.准确率就是由预测的数据和实际的测试集数据进行比较
朴素贝叶斯算法原理
概率基础
贝叶斯公式
若出现某个特征在一种类别下为0导致整个概率为0(断定他不属于此类别显然不合理)所以我使用拉普拉斯平滑系数
API:
拉普拉斯平滑系数
防止分类时概率出现为0的情况