现有芯片制造厂需对一批芯片进行质量检查。制造厂对芯片进行两个不同的性能测试:microchip_test_1、microchip_test_2,那么,产品经理如何通过这两个测试数据去判断芯片的质量。通过正规化的逻辑回归模型(Regularized logistic regression)可以完成此任务。
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
fpath = r'../ex2data2.txt'
df = pd.read_table(fpath, sep=',', header=None)
df.rename(columns={
0:'microchip_test_1', 1:'microchip_test_2', 2:'label'}, inplace=True)
fig = plt.figure(figsize=(8,6))
ax = fig.add_subplot(111)
ax.scatter(df[df['label']==1]['microchip_test_1'], df[df['label']==1]['microchip_test_2'],\
marker='+', color='k', label='y=1 Accpeted')
ax.scatter(df[df['label']==0]['microchip_test_1'], df[df['label']==0]['microchip_test_2'], \
marker='o', color='y', edgecolors='k', label='y=0 Rejected')
ax.set(xlabel='Microchip Test 1', ylabel='Microchip Test 2', title='Figure 1: Plot of training data')
plt.legend()
- 由下图可知,原始数据是线性不可分。
-
数据预处理
- 对于线性不可分数据,直接利用原始数据的两个特征是无法将正例、负例分开;需要将二维特征映射到多维特征。本文将二维特征映射成28维特征,函数datas用于将二维数据映射成多维数据。 通过调用sklearn 中 PolynomialFeatures库可以实现上诉目的,本文此处通过自己写代码实现。
def datas(df, Maxpower):
#x_mat
x_1 = df.iloc[:,:1].values
x_2 = df.iloc[:,1:2].values
n = len(x_1)
array_0 = np.ones([1,n])
for powerNum in range(1, Maxpower+1):
for power_index in range