机器学习简易入门(四)- logistic回归

摘要:使用logistic回归来预测某我的的入学申请是否会被接受html

声明:(本文的内容非原创,但通过本人翻译和总结而来,转载请注明出处)git

本文内容来源:https://www.dataquest.io/mission/59/logistic-regression算法

 

原始数据展现dom

这是一份美国入学申请的录取记录表,admit – 是否录取,1表明录取,0表明否认;gpa – gpa成绩,gre – 绩点机器学习

import pandas

admissions = pandas.read_csv('admissions.csv')

clip_image001

在以前已经介绍过了线性回归,如今一样使用线性回归来进行预测函数

from sklearn.linear_model import LinearRegression

model = LinearRegression()

#训练模型

model.fit(admissions[['gre', 'gpa']], admissions["admit"])

admit_prediction = model.predict(admissions[['gre', 'gpa']])

plt.xlabel('gpa')

plt.ylabel('admit_prediction')

plt.scatter(admissions["gpa"], admit_prediction)

plt.show()

clip_image002

在上图中可见,有些预测结果小于0,而这明显是不对的,由于预测结果应该只能为0或者1,咱们如今须要获取一个介于0和1之间的几率,而后经过以前的文章中介绍过的分类算法(机器学习简易入门(二)- 分类)来肯定录取一我的的几率的阀值来决定录取结果,最终生成只有0和1的结果学习

 

logistic回归函数测试

logistic回归产生的输出都位于0和1之间,一般用来产生预测某个事件的发生几率,该函数的格式为clip_image003,其中的e是一个无理数常量,该函数有一个很漂亮的形状spa

# logistic回归函数

def logit(x):

return np.exp(x) / (1 + np.exp(x)) 

# 在-6到6之间等差产生50个数

t = np.linspace(-6,6,50, dtype=float)

ylogit = logit(t)

#做图

plt.plot(t, ylogit, label="logistic")

plt.ylabel("Probability")

plt.xlabel("t")

plt.title("Logistic Function")

plt.show()

clip_image004

logistic回归翻译

在线性回归方程中clip_image005,能够将该方程产生的结果y放入到logistic回归方程,从而将线性方程产生的结果转换为一个几率clip_image006,对于本文来讲,这个logistic回归方程为clip_image007,如今根据这个logistic回归方程就能产生一个录取几率。

相似于以前使用scikit-learn库中的线性回归,如今也能够直接使用该库中的logistic回归

from sklearn.linear_model import LogisticRegression

#对数据集进行随机重排序
admissions = admissions.loc[np.random.permutation(admissions.index)]

# 将随机排序后的前700条数据做为训练集,后面的做为测试集
num_train = 700
data_train = admissions[:num_train]
data_test = admissions[num_train:]

logistic_model = LogisticRegression()
logistic_model.fit(data_train[['gpa', 'gre']], data_train['admit'])

# 进行测试
fitted_test = logistic_model.predict_proba(data_test[['gpa', 'gre']])[:, 1] #由于predict_proba返回的是一个两列的矩阵,矩阵的每一行表明的是对一个事件的预测结果,第一列表明该事件不会发生的几率,第二列表明的是该事件会发生的几率。而这里须要的是第二列的数据
plt.scatter(data_test['gre'], fitted_test)
plt.xlabel('gre')
plt.ylabel('probability ')
plt.show()

clip_image008

评估模型

准确率

如今假设只要录取几率大于0.5的就能录取,计算一下这个模型的准确性

# predict()函数会自动把阀值设置为0.5

predicted = logistic_model.predict(data_train[['gpa','gre']])

# 计算在训练集中正确预测的准确率

accuracy_train = (predicted == data_train['admit']).mean()

#计算在测试集中正确预测的准确率

predicted = logistic_model.predict(data_test[['gpa','gre']])

accuracy_test = (predicted == data_test['admit']).mean()

clip_image009

ROC曲线

分别计算训练集和测试集的ROC曲线和AUC

from sklearn.metrics import roc_curve, roc_auc_score

train_probs = logistic_model.predict_proba(data_train[['gpa', 'gre']])[:,1]

test_probs = logistic_model.predict_proba(data_test[['gpa', 'gre']])[:,1]

#计算AUC

auc_train = roc_auc_score(data_train["admit"], train_probs)

auc_test = roc_auc_score(data_test["admit"], test_probs)

print('Auc_train: {}'.format(auc_train))

print('Auc_test: {}'.format(auc_test))

# 计算ROC曲线

roc_train = roc_curve(data_train["admit"], train_probs)

roc_test = roc_curve(data_test["admit"], test_probs)

# 做图

plt.plot(roc_train[0], roc_train[1])

plt.plot(roc_test[0], roc_test[1])

clip_image010

相关文章
相关标签/搜索