from sklearn.externals import joblib
保存:
joblib.dump(rf,‘test.pkl’)
加载:
estimator=joblib.load(‘test.pkl’)
注:文件格式pkl
#### 保存训练好的模型
joblib.dump(lr,'./tmp/test.pkl')
#### 预测房价结果
model = joblib.load('./tmp/test.pkl')
y_predict = std_y.inverse_transform(model.predict(x_test).reshape(1,-1))
print('保存的模型预测的结果:',y_predict)
逻辑回归–分类算法
线性回归的式子作为逻辑回归的输入
二分类–得出概率值
与线性回归原理相同,但由于是分类问题,损失函数不一样,只能通过梯度下降求解
1.损失函数:均方误差–不存在多个局部最低点,只有一个最小值
对数似然损失:多个局部最小值,目前解决不了的问题
解决方案(尽量改善):1)多次随机初始化,多次比较最小值结果
2)求解过程中,调整学习率
尽管没有全局最低点,但是效果还不错
2.sklearn逻辑回归API
sklearn.linear_model.LogisticRegression
sklearn.linear_model.LogisticRegression(penalty=‘l2’,c=1.0)
Logistic回归分类器
codf_:回归系数
3.良、恶性肿瘤案例
一般情况:哪一个类别少,判定概率值是值得这个类别
缺失值用np.nan替换
流程:网上获取数据(pandas)
数据缺失值处理、标准化
LogisticRegression估计器流程
pandas使用
pd.read_csv(’ ,names=column_names’)
culumn_names:指定类别名字
colimn_name=[’ ‘,’ ‘]
replace(to_replace’',value=):返回数据
dropna():返回数据
def logistic():
'''逻辑回归做二分类进行癌症预测(根据细胞的属性特征)
return:None'''
##构造列标签名字
column=['Sample code number', 'Clump Thickness', 'Uniformity of Cell Size', 'Uniformity of Cell Shape',
'Marginal Adhesion','Single Epithelial Cell Size', 'Bare Nuclei', 'Bland Chromatin', 'Normal Nucleoli', 'Mitoses', 'Class']
#读取数据
data=pd.read_csv( 'https://archive.ics.uci.edu/ml/machine-learning-databases/breast-cancer-wisconsin/breast-cancer-wisconsin.data',names=column)
print(data)
##缺失值进行处理
data=data.replace(to_replace='?',value=np.nan)
##删除np.nan
data=data.dropna()
##数据分割
x_train,x_test,y_train,y_test=train_test_split(data[column[1:10]],data[column[10]],test_size=0.25)
##进行标准化处理
std=StandardScaler()
x_train=std.fit_transform(x_train)
x_test=std.transform(x_test)
##逻辑回归预测
lg=LogisticRegression(C=1.0)
lg.fit(x_train,y_train)
print(lg.coef_)
y_predict=lg.predict(x_test)
print('准确率:',lg.score(x_test,y_test))
print('召回率:',classification_report(y_test,y_predict,labels=[2,4],target_names=['良性','恶性']))
return None
if __name__=='__main__':
logistic()
总结:
应用:广告点击率预测、是否患病、金融诈骗,是否为续假账号
优点:适合需要得到一个分类概率的场景,简单,速度快
缺点:不好处理多分类问题
4.多分类问题
softmax方法-逻辑回归在多分类问题上的推广
5.逻辑回归和朴素贝叶斯的比较
解决问题:二分类 多分类
应用场景:癌症,二分类需要概率 文本分类
参数:正则化力度 没有
判别模型 生成模型(具有先验概率)
共同点:得出的结果都有概率解释
流程(假设有3个类别):
1.随机在数据当中抽取三个样本,当作三个类别的中心店(k1,k2,k3)
2.计算其余点分别到这三个中心点的距离,(a,b,c),每一个样本有三个距离,从中选择距离最近的一个点,作为自己的标记,形成三个族群
3.分别计算这三个族群的平均值,把三个平均值与之前的三个旧中心点进行比较:
如果相同结束聚类
如果不相同:把三个平均值当作新的中心点,重复第二步
4.k-meansAPI
sklearn.cluster.Kmeans(n_clusters=8,init=‘k-means++’)
k-means聚类
n_clusters:开始的聚类中心数量
init:初始化方法,默认为‘k-means++’
labels_:默认标记的类型,可以和真实值比较(不是值比较)
Kmeans性能评估指标
轮廓系数:外部距离最大化、内部聚类最小化[-1,1]
轮廓系数API
sklearn.metrics.silhouette_score
sklearn.metrics.lihouette_score(X,labels)
计算所有样本的平均轮廓系数
X:特征值
labels:被聚类标记的目标值
Kmeans总结
特点:采用迭代式算法,直观易懂,并且非常使用
缺点:容易收敛到局部最优解(多次聚类)
注意:聚类一般座在分类之前



