sklearn基础学习(还没学完)
基础
import numpy as np
from sklearn import datasets# 数据库,供机器去学习
from sklearn.model_selection import train_test_split
from sklearn.neighbors import KNeighborsClassifier
# 数据库详解https://blog.csdn.net/juliarjuliar/article/details/87085385
iris = datasets.load_iris()# 这是一个数据样本,鸢尾花卉数据集
iris_X = iris.data
iris_y = iris.target
print(iris_X[:2,:])# 一行代表的是话的长度,宽度,。。。。。
print(iris_y)# 目标结果
x_train,x_test,y_train,y_test=train_test_split(iris_X,iris_y,test_size=0.3)
# 随机将样本集合划分为训练集 和测试集 指的是0.3做于测试,0.7做于例题
print(y_train)
knn = KNeighborsClassifier()
knn.fit(x_train,y_train)# 已经学习完了
print(knn.predict(x_test))
print(y_test)
from sklearn.linear_model import LinearRegression
# 回归模型 线性模型
loaded_data = datasets.load_boston()# 数据是回归模型的,所以要用回归模型
x = loaded_data.data
y = loaded_data.target
model = LinearRegression()# 记得打括号
model.fit(x,y)# 开始学习,载入了解题方法
print(model.predict(x[:4,:]))# 使用截图方法,去接前四个
print(y[:4])# 这是前四个答案
import matplotlib.pyplot as plt
# 自己创造数据
x,y = datasets.make_regression(n_samples=100,n_features=1,n_targets=1,noise=1)
# 会有更加多的误差
plt.scatter(x,y)
plt.show()
属性
from sklearn.linear_model import LinearRegression
from sklearn import datasets
loaded_data = datasets.load_boston()
x = loaded_data.data
y = loaded_data.target
model = LinearRegression()
model.fit(x,y)
# 因为这个是LinearRegression,线性回归的学习
# 所以有以下的参数
print(model.coef_)# 斜率
print(model.intercept_)# 截距
print(model.get_params())
# 显示model的参数
print(model.score(x,y))
# 用x来测试,得出的数据与y进行对比,就是打分,有百分之多少是正确的
normalization
from sklearn import preprocessing
import numpy as np
a = np.array([[10,2.7,3.6],
[-100,5,-2],
[120,20,40]],dtype=np.float64)
# print(a)
# print(preprocessing.scale((a)))
# preprocessing标准化可以让数据的跨度变小,可以更好的学习计算
# sklearn.datasets.samples_generator模块在0.22版中已弃用,在0.24版中将被删除。 应从sklearn.datasets导入相应的类/函数。
# 将sklearn.datasets.samples_generator改为:
# from sklearn.datasets import make_classification
# scoring='mean_squared_error'将在0.20以后弃用,现在改成了scoring='neg_mean_squared_error',直接替换就行了
# sklearn.cross_validation在1.9版本以后就被弃用了,1.9版本的以后的小伙伴可以用sklearn.model_selection就行了,后面一样的
from sklearn.model_selection import train_test_split# 数据切开来,一份学习,一份测试
from sklearn.datasets import make_classification# 创建数据
from sklearn.svm import SVC
import matplotlib.pyplot as plt# 图像
x,y = make_classification(n_samples=300,n_features=2,n_redundant=0,
n_informative=2,random_state=22,n_clusters_per_class=1,scale=100)
# plt.scatter(x[:,0],x[:,1],c=y)
# # 数据1 数据2 颜色的决定
# plt.show()
x = preprocessing.scale(x)
# x = preprocessing.minmax_scale(x,feature_range=(0,1))# 浓缩到
# 默认是-1到1的范围
x_train,x_test,y_train,y_test=train_test_split(x,y,test_size=0.3)
clf = SVC()# 解题方法
clf.fit(x_train,y_train)# 锻炼解题方法
# 练习用的 例题 答案
print(clf.score(x_test,y_test))
# 不是用preprocessing.scale的时候正确率会降低
# 因为preprocessing.scale会把一些偏难怪题给压缩到常规题。。
# 自然正确率就高
深度学习
一般来说
学习的时间和正确率成正比
当你过度的学习例题的时候
你会过于依赖例题,对考试的题目不太会,没有拓展
所以他的精确度反而会降低
这个时候就可以使用交叉验证
就是一堆题目,1,2,3,4,5
第一次那5作为考试,1,2,3,4做例题
第二次那4.。。。。以此类推
交叉验证
from sklearn.model_selection import cross_val_score # K折交叉验证模块
from sklearn.datasets import load_iris # iris数据集
from sklearn.model_selection import train_test_split # 分割数据模块
from sklearn.neighbors import KNeighborsClassifier # K最近邻(kNN,k-NearestNeighbor)分类算法
#加载iris数据集
iris = load_iris()
X = iris.data
y = iris.target
#分割数据并
X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=4)
#建立模型
knn = KNeighborsClassifier(n_neighbors=5)
# 使用5道例题去获得答案,如果题目做多了,那么就会过度依赖例题前面有讲
# 所以我们可以去测试,使用可视化来测试
#训练模型
knn.fit(X_train, y_train)
scores = cross_val_score(knn, X, y, cv=5, scoring='accuracy')
# 五道题目,五道题目分别作为不同的例题
#将5次的预测准确率打印出
print(scores)
# [ 0.96666667 1. 0.93333333 0.96666667 1. ]
#将5次的预测准确平均率打印出
print(scores.mean())
# 0.973333333333
import matplotlib.pyplot as plt
k_range = range(1, 31)
k_scores = []
for k in k_range:
knn = KNeighborsClassifier(n_neighbors=k)# 开始测试
scores = cross_val_score(knn, X, y, cv=10,)
# 十份题目
# loss = -cross_val_score(knn, X, y, cv=10, scoring='neg_mean_squared_error')
k_scores.append(scores.mean())
# 每次运行的平均结果
plt.plot(k_range, k_scores)
plt.xlabel('Value of K for KNN')
plt.ylabel('Cross-Validated MSE')
plt.show()
# 可知,中间高,后面就是过度拟合,所以就误差变大
卷死我了
累死