一、岭回归预测
# coding=utf-8
import pandas as pd
from sklearn.feature_extraction import DictVectorizer
from sklearn.model_selection import train_test_split,GridSearchCV
from sklearn.tree import DecisionTreeClassifier,export_graphviz
from sklearn.ensemble import RandomForestClassifier
from sklearn.datasets import load_boston
from sklearn.linear_model import LinearRegression,SGDRegressor,Ridge
from sklearn.preprocessing import StandardScaler
from sklearn.metrics import mean_squared_error
def mylinear():
"""
线性回归直接预测房子价格
:return: None
"""
#获取数据
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)
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.reshape(-1,1))
#estimator 预测
#正规方程求解方式预测结果
lr = LinearRegression()
lr.fit(x_train,y_train)
print(lr.coef_)
#预测测试集的房子价格
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))
#梯度下降进行房价预测
sgd = SGDRegressor()
sgd.fit(x_train, y_train)
print(sgd.coef_)
# 预测测试集的房子价格
y_sgd_predict = std_y.inverse_transform(sgd.predict(x_test).reshape(-1,1))
print("梯度下降测试集的每个房子的预测价格", y_sgd_predict)
print("梯度下降的均方误差:", mean_squared_error(std_y.inverse_transform(y_test), y_sgd_predict))
# 岭回归去进行房价预测
rd = Ridge(alpha=1.0)
rd.fit(x_train, y_train)
print(rd.coef_)
# 预测测试集的房子价格
y_rd_predict = std_y.inverse_transform(rd.predict(x_test).reshape(-1, 1))
print("梯岭回归测试集的每个房子的预测价格", y_rd_predict)
print("岭回归的均方误差:", mean_squared_error(std_y.inverse_transform(y_test), y_rd_predict))
return None
if __name__ == "__main__":
mylinear()
二、模型的保存与加载
# coding=utf-8
import pandas as pd
from sklearn.feature_extraction import DictVectorizer
from sklearn.model_selection import train_test_split,GridSearchCV
from sklearn.tree import DecisionTreeClassifier,export_graphviz
from sklearn.ensemble import RandomForestClassifier
from sklearn.datasets import load_boston
from sklearn.linear_model import LinearRegression,SGDRegressor,Ridge
from sklearn.preprocessing import StandardScaler
from sklearn.metrics import mean_squared_error
import joblib
def mylinear():
"""
线性回归直接预测房子价格
:return: None
"""
#获取数据
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)
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.reshape(-1,1))
#预测房价结果
model = joblib.load("./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,"./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))
# #梯度下降进行房价预测
# sgd = SGDRegressor()
# sgd.fit(x_train, y_train)
# print(sgd.coef_)
# # 预测测试集的房子价格
# y_sgd_predict = std_y.inverse_transform(sgd.predict(x_test).reshape(-1,1))
# print("梯度下降测试集的每个房子的预测价格", y_sgd_predict)
# print("梯度下降的均方误差:", mean_squared_error(std_y.inverse_transform(y_test), y_sgd_predict))
# # 岭回归去进行房价预测
# rd = Ridge(alpha=1.0)
# rd.fit(x_train, y_train)
# print(rd.coef_)
# # 预测测试集的房子价格
# y_rd_predict = std_y.inverse_transform(rd.predict(x_test).reshape(-1, 1))
# print("梯岭回归测试集的每个房子的预测价格", y_rd_predict)
# print("岭回归的均方误差:", mean_squared_error(std_y.inverse_transform(y_test), y_rd_predict))
return None
if __name__ == "__main__":
mylinear()
三、逻辑回归
逻辑回归是解决二分类问题的利器
sigmoid函数
e = 2.71
z = 回归的结果
肿瘤预测案例
# coding=utf-8
import pandas as pd
import numpy as np
from sklearn.feature_extraction import DictVectorizer
from sklearn.model_selection import train_test_split,GridSearchCV
from sklearn.tree import DecisionTreeClassifier,export_graphviz
from sklearn.ensemble import RandomForestClassifier
from sklearn.datasets import load_boston
from sklearn.linear_model import LinearRegression,SGDRegressor,Ridge,LogisticRegression
from sklearn.preprocessing import StandardScaler
from sklearn.metrics import mean_squared_error,classification_report
import joblib
def logistic():
"""
逻辑回归做二分类进行癌症预测(根据细胞的属性特征)
:return: None
"""
#构造列标签名字
column_names=['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("/Volumes/D/data/breast-cancer-wisconsin.data",names=column_names)
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_names[1:10]],data[column_names[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()
逻辑回归总结
应用:广告点击率预测、电商购物搭配推荐
优点:适合需要得到一个分类概率的场景
缺点:当特征空间很大时,逻辑回归的性能不是很好
(看硬件能力)
四、判别模型和生成模型
生成模型有先验概率
五、非监督学习
k-means步骤
1、随机设置K个特征空间内的点作为初始的聚类中心
2、对于其他每个点计算到K个中心的距离,未知的点选择最近的一个聚类
中心点作为标记类别
3、接着对着标记的聚类中心之后,重新计算出每个聚类的新中心点(平
均值)
4、如果计算得出的新中心点与原中心点一样,那么结束,否则重新进行
第二步过程
sklearn.cluster.KMeans(n_clusters=8,init=‘k-means++’)
k-means聚类
n_clusters:开始的聚类中心数量
init:初始化方法,默认为’k-means ++’
labels_:默认标记的类型,可以和真实值比较(不是值比较)
如果sc_i 小于0,说明a_i 的平均距离大于最近的其他簇。
聚类效果不好
如果sc_i 越大,说明a_i 的平均距离小于最近的其他簇。
聚类效果好
轮廓系数的值是介于 [-1,1] ,越趋近于1代表内聚度和分离度都相对较优
Kmeans总结
特点分析:
采用迭代式算法,直观易懂并且非常实用
缺点:容易收敛到局部最优解(多次聚类)
需要预先设定簇的数量(k-means++解决)