逻辑回归实现产品分类(一阶)基于线性二分类,建立逻辑回归模型,计算并绘制边界曲线,并预测数据点属于什么类别
内容:
1、基于数据集建立逻辑回归模型,评估模型表现
2、预测X1=1,X2=10时,产品为良品、次品
3、获取边界函数参数、绘制边界函数
流程:
1、数据加载及展示
2、数据预处理
3、模型建立及训练
4、模型预测
5、结果展示及表现评估
程序代码:
1、数据加载及展示
#数据加载
import pandas as pd
import numpy as np
data=pd.read_csv('test2.csv')
data.head()
#数据可视化
from matplotlib import pyplot as plt
fig1=plt.figure()
plt.scatter(data.loc[:'尺寸1'],data.loc[:,'尺寸2'])#scatter表示散点图
plt.title('size1-size2')
plt.xlabel('size1')
plt.ylabel('size2')
plt.show()
#建立一个用于筛选类别的变量
mask=data.loc[:,'y']==1
print(mask)
#数据可视化
ok=plt.scatter(data.loc[:,'尺寸1'][mask],data.loc[:,'尺寸2'][mask])
ng=plt.scatter(data.loc[:,'尺寸1'][~mask],data.loc[:,'尺寸2'][~mask])#~mask取反
plt.title('size1-size2')
plt.xlabel('size1')
plt.ylabel('size2')
plt.legend((ok,ng),('ok','ng'))
plt.show()
完整程序
#数据加载
import pandas as pd
import numpy as np
data=pd.read_csv('test2.csv')
data.head()
#数据可视化
from matplotlib import pyplot as plt
fig1=plt.figure()
plt.scatter(data.loc[:'尺寸1'],data.loc[:,'尺寸2'])#scatter表示散点图
plt.title('size1-size2')
plt.xlabel('size1')
plt.ylabel('size2')
plt.show()
#建立一个用于筛选类别的变量
mask=data.loc[:,'y']==1
print(mask)
#数据可视化
fig2=plt.figure()
ok=plt.scatter(data.loc[:,'尺寸1'][mask],data.loc[:,'尺寸2'][mask])#只展示mask为True
ng=plt.scatter(data.loc[:,'尺寸1'][~mask],data.loc[:,'尺寸2'][~mask])#~mask取反
plt.title('size1-size2')
plt.xlabel('size1')
plt.ylabel('size2')
plt.legend((ok,ng),('ok','ng'))#图注
plt.show()
#X,y赋值
X=data.drop(['y'],axis=1)
y=data.loc[:,'y']
X.head()
#创建模型实例
from sklearn.linear_model import LinearRegression
model=LinearRegression()
print(model)
#训练模型
model.fit(X,y)
#模型预测
#from sklearn.linear_model import LinearRegression as LR
y_predict=model.predict(X)
print(y_predict)
#预测样本
y_test=np.array([[1,10]])
y_test_p=model.predict(y_test)
print('ok' if y_test_p==1 else 'ng')
#结果展示及评估
from sklearn.metrics import accuracy_score
accuracy=accuracy_score(y,y_predict)
print(accuracy)
#边界函数:theta0+theta1 * X1+theta2 * X2=0
#通过边界函数计算边界
#获取边界函数参数
print(model.intercept_)#截距,theta0
print(model.coef_)#系数theta1,thata2//
theta0=model.intercept_
theta1,theta2=model.coef_[0][0],model.coef_[0][1]
print(theta0,theta1,theta2)
X1=data.loc[:,'尺寸1']
print(X1)
X2_new=-(theta0+theta1 * X1)/theta2
print(X2_new)
#可视化边界曲线
fig3=plt.figure()
ok=plt.scatter(data.loc[:,'尺寸1'][mask],data.loc[:,'尺寸2'][mask])#只展示mask为True
ng=plt.scatter(data.loc[:,'尺寸1'][~mask],data.loc[:,'尺寸2'][~mask])#~mask取反
plt.plot(X1,X2_new)
plt.title('chip size1-size2')
plt.xlabel('size1')
plt.ylabel('size2')
plt.legend((ok,ng),('ok','ng'))#图注
plt.show()



