人工智能-分类任务与逻辑回归-代码实战(一)

322 阅读1分钟

今天做这道题

image.png

做题流程

先说一下要用的包和流程

还是跟线性回归一样

首先导入数据 import pandas as pdpandas导入数据

然后可视化 from matplotlib import pyplot as plt一样的使用plt去画图

建立模型训练 from sklearn.linear_model import LogisticRegression 这次不是线性回归了,所以用的LogisticRegression

预测数据 import numpy as np用numpy去构造需要预测的数据

评估模型 from sklearn.metrics import accuracy_score还是跟以前一样去评估模型

是吧,大多数都跟之前一样的

所以就不废话直接上代码。


import numpy as np
import pandas as pd
from matplotlib import pyplot as plt
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import accuracy_score

# 导入数据及可视化
data = pd.read_csv('task1_data.csv')
data.head()
fig1 = plt.figure()
plt.scatter(data.loc[:, '尺寸1'], data.loc[:, '尺寸2'])
plt.title('chip size1-size2')
plt.xlabel('size1')
plt.ylabel('size2')
# plt.show()



# 建立筛选良品、次品的变量mask

mask = data.loc[:, 'y'] == 1
print(mask)
fig2 = plt.figure()
ok = plt.scatter(data.loc[:, '尺寸1'][mask], data.loc[:, '尺寸2'][mask])
ng = plt.scatter(data.loc[:, '尺寸1'][~mask], data.loc[:, '尺寸2'][~mask])
plt.title('chip 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()
y.head()


# 模型训练
model = LogisticRegression()
model.fit(x, y)


# 模型预测

y_predict = model.predict(x)
print(y)
print(y_predict)

accuracy = accuracy_score(y, y_predict)
print(accuracy)


# 测试样本

x_test = np.array([[1, 10]])

y_test_predict = model.predict(x_test)

print(y_test_predict)
print('ok' if y_test_predict==1 else 'ng')



print(model.intercept_)
print(model.coef_)

theta0 = model.intercept_[0]
theta1, theta2 = model.coef_[0][0], model.coef_[0][1]

print(theta0, theta1, theta2)


x1 = data.loc[:, '尺寸1']
x2_new = -(theta0 + theta1*x1)/theta2


# 最后加一个,画出决策边界

fig3 = plt.figure()
plt.scatter(data.loc[:, '尺寸1'], data.loc[:, '尺寸2'])
plt.title('chip size1-size2')
plt.xlabel('size1')
plt.ylabel('size2')
ok = plt.scatter(data.loc[:, '尺寸1'][mask], data.loc[:, '尺寸2'][mask])
ng = plt.scatter(data.loc[:, '尺寸1'][~mask], data.loc[:, '尺寸2'][~mask])
plt.title('chip size1-size2')
plt.plot(x1, x2_new)
plt.xlabel('size1')
plt.ylabel('size2')
plt.legend((ok, ng), ('ok', 'ng'))
plt.show()