一、模型的保存和加载
sklearn模型的保存和加载
form sklearn.externals import joblib
而在新版本中可以直接用:
import joblib
保存和加载API
注意:文件的格式为pkl
from sklearn.datasets import load_boston
from sklearn.linear_model import LinearRegression,SGDRegressor
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.metrics import mean_squared_error
import joblib
def mylinear():
"""
线性回归直接预测房子价格
:return:
"""
# 读取数据
lb=load_boston()
#分割数据集到训练集和测试集
x_train,x_test,y_train,y_test=train_test_split(lb.data,lb.target,test_size=0.25)
print(y_train,y_test)
#进行标准化处理(?) 目标值处理?
#特征值和目标值是都必须进行标准化处理,实例化两个标准化API
std_x=StandardScaler()
x_train=std_x.fit_transform(x_train.reshape(-1,1))
x_test=std_x.transform(x_test)
#目标值
std_y=StandardScaler()
y_train=std_y.fit_transform(y_train.reshape(-1,1))
y_test=std_y.transform(y_test)
#预测房价结果
model=joblib.load("./tmp/test.pkl")
y_predict=std_y.inverse_transform(model.predict(x_test))
print("保存的模型预测的结果:",y_predict)
# estimator预测
# 正规方程求解预测结果
lr = LinearRegression()
lr.fit(x_train, y_train)
print(lr.coef_)
#保存训练好的模型
joblib.dump(lr,"./tmp/test.pkl")
# 预测测试集的房子价格
y_lr_predict = std_y.inverse_transform(lr.predict(x_test))
print("测试集里面每个房子的预测价格:", y_lr_predict)
print("正规方程的均方误差:",mean_squared_error(std_y.inverse_transform(y_test),y_lr_predict))
return None
if __name__=="__main__":
mylinear()
结果:
二、分类算法—逻辑回归
逻辑回归:线性回归的式子作为的输入。
逻辑回归是解决二分类问题的利器
逻辑回归:
sigmoid函数 :
逻辑回归的公式:
逻辑回归与线性回归的原理相同,但由于是分类问题,损失函数不一样,只能通过梯度下降求解。
对数似然损失函数:
完整的损失函数:
注意:cost损失的值越小,那么预测的类别准确度更高
当y=1时,目标值是1类:
当y=0时,目标值为0类:
逻辑回归API:
sklearn.linear_model.LogisticRegression
LogisticRegression 用法:
import numpy as np
import pandas as pd
from sklearn.datasets import load_boston
from sklearn.linear_model import LinearRegression,SGDRegressor,LogisticRegression
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.metrics import mean_squared_error,classification_report
import joblib
def logistic():
"""
逻辑回归做二分类进行癌症预测
:return:
"""
#构造列标签名字
column =['Sample code number','Clump Thickness','Uniformity of Cell Size','Uniformity of Cell Shape','Maroinal 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)
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()
结果:
LogisticRegression总结:
应用:广告点击率预测、是否患病、金融诈骗、是否为虚假账号等
优点:适合需要得到一个分类概率的场景、简单、速度快
缺点:不好处理多分类问题。
三、k-means
k-means步骤:
- 随机设置K个特征空间内的点作为初始的聚类中心
- 对于其他每个点计算到K个中心的距离,未知的点选择最近的一个聚类中心点作为标记类别
- 接着对标记的聚类中心之后,重新计算出每个聚类的新中心(平均值)
- 如果计算得出的新中心与原中心点一样,那么结束,否则重新进行第二步过程。
k-means API:
sklearn.cluster.KMeans
k-means的用法:
k-means性能评估指标:
轮廓系数:
注意:对于每个点i为已聚类数据中的样本,bi为i到其它族群的所有样本的距离最小值,ai为i到本身族的距离平均值。
最终计算出所有的样本点的轮廓系数的平均值。
k-means性能评估指标API:
sklearn.metrics.silhouette_score
silhouette_score用法:
k-means总结:
特点:采用迭代式方法 ,直观易懂并且非常实用。
缺点:容易收敛到局部最优解(多次聚类)
注意:聚类一般做在分类之前