最近学习了逻辑回归,因此在此总结一下模型的原理和用法
文章内容
- 1.模型介绍
- 2.逻辑函数
- 3.代价函数
- 4.优化器
- 5.取例&应用
- 6.参考&引用
1.模型介绍
逻辑回归不是回归模型而是分类算法,可以解决二分类,多分类问题。
比如垃圾邮件分类,肿瘤分类问题,区别一个肿瘤良性还是恶性。
这里我们只讨论二分类问题
2.逻辑函数
对于给定的X 若h(x)计算出结果为 0.7 则我们有70%几率认为 y为1 有30%机率认为 y为0
3.代价函数
代价函数是用来拟合参数θ,即我们怎么选择θ。
4.优化器
梯度下降 Gradient Descent
5.举例&应用
这里使用kaggle的经典入门题 titanic 做为例子
赛题网址:
链接
简单数据处理后应用回归模型
下面是代码
import pandas as pd
df = pd.read_csv(r"J:\titanic\data\train.csv")
test = pd.read_csv(r"J:\titanic\data\test.csv")
# show data
df.head()
#data process
df = df.drop(['Ticket','Cabin','Name'], axis=1)
test = test.drop(['Ticket','Cabin','Name'], axis=1)
# Remove NaN values
df = df.dropna()
test = test.dropna()
#哑编码
df["Sex"]=pd.get_dummies(df["Sex"])
df["Embarked"]=pd.get_dummies(df["Embarked"])
test["Sex"]=pd.get_dummies(test["Sex"])
test["Embarked"]=pd.get_dummies(test["Embarked"])
#归一化
df["Age"] = (df["Age"]-df["Age"].min())/(df["Age"].max()-df["Age"].min())
df["Fare"] = (df["Fare"]-df["Fare"].min())/(df["Fare"].max()-df["Fare"].min())
test["Age"] = (test["Age"]-test["Age"].min())/(test["Age"].max()-test["Age"].min())
test["Fare"] = (test["Fare"]-test["Fare"].min())/(test["Fare"].max()-test["Fare"].min())
#导入模型
from sklearn.linear_model import LogisticRegression
from sklearn.cross_validation import train_test_split
Survived = df["Survived"]
df = df.drop(["PassengerId","Survived"],axis=1)
test = test.drop("PassengerId",axis=1)
X_train, X_test, y_train, y_test = train_test_split(df.values,Survived.values,test_size=0.33, random_state=42)
LR = LogisticRegression()
LR.fit(X_train,y_train)
pre = LR.predict(X_test)
#分类报告
from sklearn.metrics import classification_report
print("分类报告:\n",classification_report(y_test, pre))
#准确度
from sklearn.metrics import accuracy_score
print("准确度:\n",accuracy_score(y_test,pre))
分类报告:
precision recall f1-score support
0 0.79 0.84 0.81 136
1 0.76 0.70 0.73 99
avg / total 0.78 0.78 0.78 235
准确度:
0.778723404255
因为数据处理简单,丢了很多特征,准确度有点低
6.参考&引用
斯坦福大学 NG 《机器学习》