一、线性回归
线性回归是利用数理统计中回归分析,来确定两种或两种以上变量间相互依赖的定量关系的一种统计分析方法。
相关关系:包含因果关系和平行关系
因果关系:回归分析【原因引起结果,需要明确自变量和因变量】
平行关系:相关分析【无因果关系,不区分自变量和因变量】
一元线性回归模型:
βo和β1是模型参数。E:是误差项。
误差项:除线性因素外的随机因素所产生的误差。
多元线性回归模型:
1.线性回归API文档参数
sklearn.linear_model.LinearRegression (fit_intercept=True , normalize=False , copy_X=True , n_jobs=None )
1)参数
fit_intercept: 是否有截据,如果没有则直线过原点。
**normalize:**是否将数据归一化。
**copy_X :**是否对X复制,如果选择false,则直接对原数据进行覆盖。(即经过中心化,标准化后,是否把新数据覆盖到原数据上)
n_jobs: 计算时设置的任务个数(number of jobs)。如果选择-1则代表使用所有的CPU。这一参数的对于目标个数>1(n_targets>1)且足够大规模的问题有加速作用。
2)Attributes:返回值
C oef **_:**对于线性回归问题计算得到的feature的系数。如果输入的是多目标问题,则返回一个二维数组(n_targets, n_features);如果是单目标问题,返回一个一维数组 (n_features,)。
**intercept_ :**线性模型中的独立项。
3)方法
**fit(X, y[, n_jobs]) :**对训练集X, y进行训练。
**predict(X):**使用训练得到的估计器对输入为X的集合进行预测(X可以是测试集,也可以是需要预测的数据)。
**score(X, y[,]sample_weight):**预测效果评分。
import pandas as pd#pandas基于numpy封装的
from matplotlib import pyplot as plt
from sklearn.linear_model import LinearRegression
data = pd.read_csv("data.csv")
a = data.广告投入
#绘制散点图
plt.scatter(data.广告投入, data.销售额)
plt.show()
# corr = data.corr()#求x和y的相关系数
#估计模型参数,建立回归模型
lr = LinearRegression()
x = data[['广告投入']]
y = data[['销售额']]
lr.fit(x, y)#训练模型,
#第四步、对回归模型进行检验
"""此处的score指R方"""
result = lr.predict(x)
score = lr.score(x, y)
a = round(lr.intercept_[0],2)#查看截距
b = round(lr.coef_[0][0], 2)#查看斜率
print("线性回归模型为:y = {}x + {}.".format(b, a))
#第五步、利用回归模型进行预测
predict = lr.predict([[40], [45], [50]])
print(predict)
二、逻辑回归
在线性回归的基础上进行分类衍生出了逻辑回归
逻辑回归(LogisticRegression) 是一种广泛用于二分类和多分类任务的线性模型,支持 L1/L2/Elastic-Net 正则化。
lr=LogisticRegression(C=0.01)
C:正则化强度的倒数,值越小正则化越强
fit() 用于训练模型;predict() 输出类别标签;score() 计算准确率。labels_count=pd.value_counts(data['Class'])可以统计data('class')中每个类的个数
python
import pandas as pd
data=pd.read_csv("creditcard.csv")
from sklearn.preprocessing import StandardScaler
#z-标准化
scaler=StandardScaler()
data['Amount']=scaler.fit_transform(data[['Amount']])
data=data.drop(['Time'],axis=1)#axis=1,表示删除列
#绘制图形
import matplotlib.pyplot as plt
from pylab import mpl #matplotlib不能显示中文,借助于pylab实现中文显示
mpl.rcParams['font.sans-serif']=['Microsoft YaHei']#显示中文
mpl.rcParams['axes.unicode_minus']= False
labels_count=pd.value_counts(data['Class'])#同济data('class')中每个类的个数
print(labels_count)
plt.title("正负例样本数")#设置标题
plt.xlabel("类别")
plt.ylabel("数量")
labels_count.plot(kind='bar')
plt.show()
'''建立模型'''
from sklearn.model_selection import train_test_split
x_whole=data.drop("Class",axis=1)
y_whole=data.Class
x_train_w,x_test_w,y_train_w,y_test_w=train_test_split\
(x_whole,y_whole,test_size=0.3,random_state=1000)
from sklearn.linear_model import LogisticRegression #逻辑回归API
lr=LogisticRegression(C=0.01)
lr.fit(x_train_w,y_train_w)
test_predicted=lr.predict(x_test_w)
result=lr.score(x_test_w,y_test_w)
from sklearn import metrics
print(metrics.classification_report(y_test_w,test_predicted))#获得混淆矩阵的准确值,召回值。
-
通过train_test_split(x_whole,y_whole,test_size=0.3,random_state=1000)来切分数据,通过test_size参数为整数时取对应数量的特征,小数时取百分比的;通过random_state参数来获得对应的随机种子。
-
通过metrics.classification_report(y_test_w,test_predicted))#获得混淆矩阵的准确值,召回值和F1值。来判断模型训练的好不好
三、评价方法
混淆矩阵:

精确率:TP/(TP+FP)
召回率:TP/(TP+FN) 多用于医疗领域系统
f1值:2*(精确率*召回率)/精确率+召回率
