机器学习——分类问题与逻辑回归、KNN

一、垃圾信息检测

1.1如何实现
  • 收集一些样本,告诉计算机哪些是垃圾信息【监督学习】
  • 计算机自动寻找垃圾信息的共同特征【部分特征:发件人、是否群发、网址、元、赢、微信、免费】
  • 在新信息中检测是否包含垃圾信息特征内容,判断其是否为垃圾信息

二、分类预测

2.1定义
  • 根据数据类别与部分特征信息,自动寻找类别与特征信息的关系,判断一个新的样本属于哪种类别
2.2流程
  • 特征信息
  • 数据类别
  • 寻找关系
    在这里插入图片描述
2.3方法
  • 逻辑回归
    在这里插入图片描述
  • 朴素贝叶斯
    在这里插入图片描述
  • 决策树
    在这里插入图片描述
  • KNN近邻模型
    在这里插入图片描述

三、逻辑回归

3.1更适合于分类场景的模型
  • 更符合类别数据分布特点
  • 连续的函数关系
3.2定义
  • 根据数据特征,计算样本归属于某一类类别的概率P(x),根据概率数值判断其所属类别
  • 逻辑回归结合多项式边界函数可解决复杂的分类问题
  • 模型求解的核心,在于寻找到合适的多项式边界函数
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
3.3模型求解
  • 寻找损失函数最小值
  • 分类问题,结果为离散数据,需要对损失函数进行调整以适应梯度下降法求解
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
3.4流程

在这里插入图片描述

3.5求边界
3.5.1一次边界
theta0=model.intercept_[0]
theta1,theta2=model.coef_[0][0],model.coef_[0][1]
print(theta0,theta1,theta2)

x1=data.loc[:,'尺寸1']
# In[]
#计算边界函数上对应的尺寸2
X2_new=-(theta0+theta1*x1)/theta2
print(X2_new)
plt.plot(x,X2_new)

3.5.2二次边界
# In[]
#生成二次项
x1_2=x1*x1
x2_2=x2*x2
x1_x2=x1*x2
print(x1_2.shape,x2_2.shape,x1_x2.shape)


# In[]
#创建二次分类边界数据
x_new={'x1':x1,'x2':x2,'x1_2':x1_2,'x2_2':x2_2,'x1_x2':x1_x2}
print(x_new)
x_new=pd.DataFrame(x_new)
print(x_new)

# In[]
#通过函数计算边界
theta0=model2.intercept_
theta1,theta2,theta3,theta4,theta5=model2.coef_[0][0],model2.coef_[0][1],model2.coef_[0][2],model2.coef_[0][3],model2.coef_[0][4]
print(theta0,theta1,theta2,theta3,theta4,theta5)

# In[]
#将x1进行排序
x1_new=x1.sort_values()

a=theta4
b=theta5*x1_new+theta2
c=theta0+theta1*x1_new+theta3*x1_new*x1_new
x2_new_2=(-b+np.sqrt(b*b-4*a*c))/(2*a)
print(x2_new_2)

fig2=plt.figure()
abnormal=plt.scatter(data.loc[:,'pay1'][mask],data.loc[:,'pay2'][mask])
normal=plt.scatter(data.loc[:,'pay1'][~mask],data.loc[:,'pay2'][~mask])
plt.plot(x1_new,x2_new_2)
plt.title('pay1_pay2')
plt.xlabel("pay1")
plt.ylabel("pay2")
plt.legend((abnormal,normal),('abnormal','normal'))
plt.show()


3.6 预测消费者是否会购买商品,我们通常做些什么
  • 前期工作:调研、讨论并确认影响购买意愿的因素;数据采集
  • 数据预处理:异常数据处理、信息量化
  • 建模与训练:从简单到复杂的决策边界模型
  • 预测、评估、优化:引入不同的评估指标、尝试不同的模型
  • 总结与汇报:结果整理并分析、输出项目报告

四、KNN

4.1建立、训练、预测、评估模型
from sklearn.neighbors import KNeighborsClassifier
KNN=KNeighborsClassifier(n_neighbors=3)
KNN.fit(X,y)
y_predict_knn=KNN.predict(X)

from sklearn.metrics import accuracy_score
accuracy=accuracy_score(y,y_predict_knn)
print(accuracy)

五、任务

5.1 基于线性二分类案例与数据,建立逻辑回归模型,计算并绘制边界曲线,并预测X1=1,X2=10数据点属于什么类别
  • 基于数据,建立逻辑回归模型,评估模型表现
  • 预测X1=1,X2=10时,该产品是良品还是次品
  • 获取边界函数参数,绘制边界函数
# In[]
import numpy as np
import pandas as pd

data=pd.read_csv("data1_lgicRg.csv")
data.head()

# In[]
from matplotlib import pyplot as plt
fig1=plt.figure()
plt.scatter(data.loc[:,'尺寸1'],data.loc[:,'尺寸2'])
plt.title('Size1-Size2')
plt.xlabel("size1(x)")
plt.ylabel("size2(y)")
plt.show()

# In[]
#建立一个用于筛选类别的变量
mask=data.loc[:,'y']==1
print(mask)

# In[]
#数据可视化
ok=plt.scatter(data.loc[:,'尺寸1'][mask],data.loc[:,'尺寸2'][mask])
ng=plt.scatter(data.loc[:,'尺寸1'][~mask],data.loc[:,'尺寸2'][~mask])
plt.title('Size1-Size2')
plt.xlabel('size1')
plt.ylabel('size2')
plt.legend((ok,ng), ('ok','ng'))
plt.show()



# In[]
x=data.drop(['y'],axis=1)
y=data.loc[:,'y']
x.head()

# In[]
from sklearn.linear_model import LogisticRegression
model=LogisticRegression()
print(model)

model.fit(x,y)
# In[]
y_predict=model.predict(x)
print(y_predict)


# In[]
y_test=model.predict([[1,10]])
print('ok'if y_test==1 else'ng')




# In[]
#模型评估[accuray=正确预测样本数量/总样本数量]
from sklearn.metrics import accuracy_score
accuracy=accuracy_score(y, y_predict)
print(accuracy)


# In[]
#获取边界函数参数
print(model.intercept_)
print(model.coef_)





# In[]
#通过函数计算边界
theta0=model.intercept_[0]
theta1,theta2=model.coef_[0][0],model.coef_[0][1]
print(theta0,theta1,theta2)

x1=data.loc[:,'尺寸1']
# In[]
#计算边界函数上对应的尺寸2
X2_new=-(theta0+theta1*x1)/theta2
print(X2_new)
plt.plot(x,X2_new)




# In[]
#可视化
ok=plt.scatter(data.loc[:,'尺寸1'][mask],data.loc[:,'尺寸2'][mask])
ng=plt.scatter(data.loc[:,'尺寸1'][~mask],data.loc[:,'尺寸2'][~mask])
plt.title('Size1-Size2')
plt.plot(x1,X2_new,'g')
plt.xlabel('size1')
plt.ylabel('size2')
plt.legend((ok,ng), ('ok','ng'))
plt.show()




5.2基于数据,建立二阶多项式逻辑回归模型,根据预测,与线性逻辑回归模型结果进行对比
  • 建立线性边界的逻辑回归模型,评估模型表现
  • 建立二阶多项式边界的逻辑回归模型,对比其与线性边界的表现
  • 预测pay1=80,pay2=20时对应消费是否为异常消费
  • 获取边界函数参数、绘制边界函数
  • 在这里插入图片描述
# In[]
import numpy as np
import pandas as pd

data=pd.read_csv("data2_lgicRg.csv")
data.head()


# In[]
#可视化数据
from  matplotlib import pyplot as plt
fig1=plt.figure()
plt.scatter(data.loc[:,'pay1'],data.loc[:,'pay2'])
plt.title('pay1_pay2')
plt.xlabel("pay1")
plt.ylabel("pay2")
plt.show()

# In[]
#建立一个用于筛选的变量
mask=data.loc[:,'y']==1
print(mask)

# In[]
fig1=plt.figure()
abnormal=plt.scatter(data.loc[:,'pay1'][mask],data.loc[:,'pay2'][mask])
normal=plt.scatter(data.loc[:,'pay1'][~mask],data.loc[:,'pay2'][~mask])
plt.title('pay1_pay2')
plt.xlabel("pay1")
plt.ylabel("pay2")
plt.legend((abnormal,normal),('abnormal','normal'))
plt.show()


# In[]
#数据赋值
x=data.drop(['y'],axis=1)
y=data.loc[:,'y']
print(x.shape,y.shape)

# In[]
#建立线性边界分类模型
from sklearn.linear_model import LogisticRegression
model=LogisticRegression()
model.fit(x,y)

# In[]
#模型预测
y_predict=model.predict(x)
print(y_predict)

# In[]
from sklearn.metrics import accuracy_score
accuracy=accuracy_score(y,y_predict)
print(accuracy)

# In[]
theta0=model.intercept_
theta1,theta2=model.coef_[0][0],model.coef_[0][1]
print(theta0,theta1,theta2)


# In[]
x1=data.loc[:,'pay1']
x2=data.loc[:,'pay2']
x2_new=-(theta0+theta1*x1)/theta2




# In[]
#可视化
fig2=plt.figure()
abnormal=plt.scatter(data.loc[:,'pay1'][mask],data.loc[:,'pay2'][mask])
normal=plt.scatter(data.loc[:,'pay1'][~mask],data.loc[:,'pay2'][~mask])
plt.plot(x1,x2_new)
plt.title('pay1_pay2')
plt.xlabel("pay1")
plt.ylabel("pay2")
plt.legend((abnormal,normal),('abnormal','normal'))
plt.show()



# In[]
#生成二次项
x1_2=x1*x1
x2_2=x2*x2
x1_x2=x1*x2
print(x1_2.shape,x2_2.shape,x1_x2.shape)


# In[]
#创建二次分类边界数据
x_new={'x1':x1,'x2':x2,'x1_2':x1_2,'x2_2':x2_2,'x1_x2':x1_x2}
print(x_new)
x_new=pd.DataFrame(x_new)
print(x_new)
# In[]
#建立新模型
model2=LogisticRegression()
model2.fit(x_new,y)

# In[]
y2_predict=model2.predict(x_new)
print(y2_predict)





# In[]
#准确率
accuracy2=accuracy_score(y,y2_predict)
print(accuracy2)



# In[]
theta0=model2.intercept_
theta1,theta2,theta3,theta4,theta5=model2.coef_[0][0],model2.coef_[0][1],model2.coef_[0][2],model2.coef_[0][3],model2.coef_[0][4]
print(theta0,theta1,theta2,theta3,theta4,theta5)




# In[]
a=theta4
b=theta5*x1+theta2
c=theta0+theta1*x1+theta3*x1*x1
x2_new_2=(-b+np.sqrt(b*b-4*a*c))/(2*a)
print(x2_new_2)


# In[]
fig2=plt.figure()
abnormal=plt.scatter(data.loc[:,'pay1'][mask],data.loc[:,'pay2'][mask])
normal=plt.scatter(data.loc[:,'pay1'][~mask],data.loc[:,'pay2'][~mask])
plt.plot(x1,x2_new_2)
plt.title('pay1_pay2')
plt.xlabel("pay1")
plt.ylabel("pay2")
plt.legend((abnormal,normal),('abnormal','normal'))
plt.show()

# In[]
#将x1进行排序
x1_new=x1.sort_values()

a=theta4
b=theta5*x1_new+theta2
c=theta0+theta1*x1_new+theta3*x1_new*x1_new
x2_new_2=(-b+np.sqrt(b*b-4*a*c))/(2*a)
print(x2_new_2)

fig2=plt.figure()
abnormal=plt.scatter(data.loc[:,'pay1'][mask],data.loc[:,'pay2'][mask])
normal=plt.scatter(data.loc[:,'pay1'][~mask],data.loc[:,'pay2'][~mask])
plt.plot(x1_new,x2_new_2)
plt.title('pay1_pay2')
plt.xlabel("pay1")
plt.ylabel("pay2")
plt.legend((abnormal,normal),('abnormal','normal'))
plt.show()


# In[]


#新样本预测_1
X_test=np.array([[80,20]])
y_predict=model.predict(X_test)
print('abnormal' if y_predict==1 else'normal')

# In[]
#新样本预测_2
X_test=np.array([[80,20,80*80,20*20,80*20]])
y_predict=model2.predict(X_test)
print('abnormal' if y_predict==1 else'normal')
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值