一、boston房价预测
1.导入包
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import PolynomialFeatures
import pandas as pd
2.导入数据集
from sklearn.datasets import load_boston
import numpy as np
boston = load_boston()
df = pd.DataFrame(boston.data)
3 .训练集与测试集划分
from sklearn.model_selection import train_test_split
x_train, x_test, y_train, y_test = train_test_split(boston.data,boston.target,test_size=0.3)
4.线性回归模型:建立13个变量与房价之间的预测模型,并检测模型好坏。
(1)建立模型
from sklearn.linear_model import LinearRegression
lineR = LinearRegression()
lineR.fit(x_train,y_train)
w = lineR.coef_
b = lineR.intercept_
print("系数为:",w,"截距为:",b)
(2)检测模型好坏
from sklearn.metrics import regression
y_predict = lineR.predict(x_test) #用boston数据集的数据集来验证特征(y)的预测值
# 计算模型的预测指标
print("预测的均方误差:", regression.mean_squared_error(y_test,y_predict))
print("预测的平均绝对误差:", regression.mean_absolute_error(y_test,y_predict))
# 打印模型的分数
print("模型的分数:",lineR.score(x_test, y_test))
5.多项式回归模型:建立13个变量与房价之间的预测模型,并检测模型好坏。
(1)多项式化
from sklearn.preprocessing import PolynomialFeatures
poly = PolynomialFeatures(degree=2)
x_poly_train = poly.fit_transform(x_train)
x_poly_test = poly.transform(x_test)
(2)建立模型
Lr = LinearRegression()
Lr.fit(x_poly_train, y_train)
(3)预测
y_predict2 = Lr.predict(x_poly_test)
(4)检测模型好坏
print("预测的均方误差:", regression.mean_squared_error(y_test,y_predict2))
print("预测的平均绝对误差:", regression.mean_absolute_error(y_test,y_predict2))
6.比较线性模型与非线性模型的性能,并说明原因。
解:线性算法举应用训练和预测数据集的效率比较高,但最终效果对特征的依赖程度较高,需要数据在特征层面上是线性可分的。线性回归模型是一条直线,而多项式模型是一条平滑的曲线,相较之下,曲线更加贴合样本点的分布,并且误差比线性小,所以非线性模型的性能比线性模型的性能更好。
二、中文文本分类
- 导包,导入自定义词典
import os
import jieba
jieba.load_userdict('chinese/caijing.txt')#载入自定义词典
jieba.load_userdict('chinese/gupiao.txt')
jieba.load_userdict('chinese/fangchan.txt')
jieba.load_userdict('chinese/caipiao.txt')
2.定义装载文本与特征的容器
content=[]#存放文本的内容
kinds=[]#存放文本的类别
3.读取停用词表,清理空格
with open(r'chinese/stopsCN.txt', encoding='utf-8') as f: #读取停用词表
stopwords = f.read().split('\n') #清理空格等非法字符
4.清理非法字符,利用jieba进行分词
def processing(texts):
# 去掉非法的字符
texts = "".join([char for char in texts if char.isalpha()])
# 用jieba分词
texts = [text for text in jieba.cut(texts,cut_all=True) if len(text) >=2]
# 去掉停用词
texts = " ".join([text for text in texts if text not in stopwords]) #去除空格
#专用词库
return texts
5.读取文本
def read_txt(path):
folder_list=os.listdir(path) #遍历data下的文件名
for file in folder_list:
new_path=os.path.join(path,file) #读取data文件夹的名称,放入new_path
files=os.listdir(new_path)#存放data的4个文件夹
i=1
#遍历每个txt文件
for f in files:
with open(os.path.join(new_path,f),'r',encoding='UTF-8')as f: #打开txt文件
temp_file=f.read()
content.append(processing(temp_file)) #将processing函数处理过的文本加进content
kinds.append(file) #遍历file里的特征加进kinds
i+=1 #计数器
6.main函数
if __name__== '__main__':
path='data' #路径为工作路径的data
read_txt(path)
7.用TF-IDF算法进行单词权值的计算
(1)导包
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.model_selection import train_test_split
(2)TF-IDF算法
tfidf= TfidfVectorizer()
x_train,x_test,y_train,y_test=train_test_split(content,kinds,test_size=0.2) #划分测试集/训练集
X_train=tfidf.fit_transform(x_train) #训练模型并转化训练集,计算权值
X_test=tfidf.transform(x_test) #利用TF-IDF算法v计算权值
8.构建贝叶斯模型
(1)导包
from sklearn.naive_bayes import MultinomialNB #用于离散特征分类,文本分类单词统计,以出现的次数作为特征值
(2)建立模型
mulp=MultinomialNB () #建立模型
mulp_NB=mulp.fit(X_train,y_train) #训练模型
(3)训练模型
y_predict=mulp.predict(X_test)
9.对模型进行预测
y_predict=mulp.predict(X_test)
10.从sklearn.metrics里导入classification_report做分类的性能报告
(1) 导包
from sklearn.metrics import classification_report
(2)输出模型预测
print('模型的准确率为:', mulp.score(X_test, y_test))
print('模型评价:\n',classification_report(y_test, y_predict))
模型结果:
模型的准确率为: 0.924384511831
模型评价:
precision recall f1-score support
彩票 0.99 0.97 0.98 1526
房产 0.97 0.84 0.90 4033
股票 0.91 0.99 0.95 30700
财经 0.95 0.69 0.80 7568
avg / total 0.93 0.92 0.92 43827