机器学习实验

实验名称:实验一、线性回归与决策树

一、实验目的

(1)掌握线性回归算法和决策树算法 ID3 的原理;
(2)学会线性回归算法和决策树算法 ID3 的实现和使用方法。

二、实验内容

本次实验为第一次实验,要求完成本次实验所有内容。具体实验内容如下:

1. 线性回归模型实验

(1)假设 line-ext.csv 是对变量 y 随变量 x 的变化情况的统计数据集。请根据教材的公式(3.7,3.8),使用 Python 语言编程计算线性回归模型的系数,建立一个线性回归模型。要求:
1)计算出回归系数,输出模型表达式,绘制散点图和回归直线,输出均方误差;
2)给出当自变量 x =0.8452 时,因变量 y 的预测值。

(2)对于上面的数据集 line-ext.csv,分别使用第三方模块 sklearn 模块中的类LinearRegression、第三方模块 statsmodels 中的函数ols()来计算线性回归模型的系数,建立线性回归模型,验证上面计算结果及预测结果。

2. 决策树算法实验

(1)隐形眼镜数据集 glass-lenses.txt 是著名的数据集。它包含了很多患者眼部状况的观察条件以及医生推荐的隐形眼镜类型。请使用Python 语言建立决策树模型 ID3,划分 25%的数据集作为测试数据集,并尝试进行后剪枝操作。要求 :
1)使用 Graphviz 工具,将此决策树绘制出来;
2)输出混淆矩阵和准确率。

数据集的属性信息如下:
– 4 Attributes
\1. age of the patient: (1) young, (2) pre-presbyopic (for short, pre ), (3) presbyopic
\2. spectacle prescription: (1) myope, (2) hypermetrope (for short, hyper )
\3. astigmatic: (1) no, (2) yes
\4. tear production rate: (1) reduced, (2) normal
– 3 Classes
1 : the patient should be fitted with hard contact lenses,
2 : the patient should be fitted with soft contact lenses,
3 : the patient should not be fitted with contact lenses.

(2)对于数据集 glass-lenses.txt,使用 sklearn 模块中的类 DecisionTreeClassifier(其中,criterion=’entropy’)来建立决策树模型 ID3,重复 2(1)中的操作,验证上面计算结果。

三、实验代码和过程

①线性回归模型实验

(一)

1)计算出回归系数,输出模型表达式,绘制散点图和回归直线,输出均方误差;

1、读入数据集

# 从CSV文件中读取数据,并返回2个数组。分别是自变量x和因变量y。方便TF计算模型。
def zc_read_csv():zc_dataframe = pd.read_csv("line-ext.csv", sep=",")x = []y = []for zc_index in zc_dataframe.index:zc_row = zc_dataframe.loc[zc_index]x.append(zc_row["YearsExperience"])y.append(zc_row["Salary"])return (x,y)
x, y = zc_read_csv()

2、计算回归系数

averageX = 0
averageY = 0
for i in range (len(x)):averageX += x[i]
for i in range (len(y)):averageY += y[i]
#先计算平均数
averageX = averageX/(len(x))
averageY = averageY/(len(y))
#计算回归系数W
numerator = 0
denominator = 0
twice = 0
for i in range (len(x)):numerator+=(y[i]*(x[i]-averageX))twice += (x[i]*x[i])denominator +=x[i]
decominator = math.pow(denominator,2)/(len(x))
w = numerator/(twice-decominator)
b=0
for i in range (len(x)):b +=(y[i]-w*x[i])
b /= (len(x))
print("系数为",w)
print("偏置为",b)

3、输出模型表达式

s="模型表达式y="+repr(w)+"x+"+repr(b)
print(s)

4、绘制散点图和回归直线

# 获得画图对象。
fig = plt.figure()
fig.set_size_inches(20, 8)   # 整个绘图区域的宽度10和高度4
ax = fig.add_subplot(1, 2, 1)  # 整个绘图区分成一行两列,当前图是第一个。
# 画出原始数据的散点图。
ax.set_title("salary table")
ax.set_xlabel("YearsExperience")
ax.set_ylabel("Salary")
ax.scatter(x, y)
plt.plot([0,1],[3.0077432426975914,4.7030658848688107],c='green',ls='-')
plt.show()

5、输出均方误差

mse = 0
for i in range(len(x)):mse += ((x[i]*w+b)-y[i])*((x[i]*w+b)-y[i])
mse /= (len(x))
print("线性回归方程的均方误差:",mse)

2)给出当自变量 x =0.8452 时,因变量 y 的预测值。

predictY = 0.8542*w+b
print("预测值",predictY)

(二)

1)LinearRegression预测

from sklearn import linear_model
linearRegression = linear_model.LinearRegression()
arrayX = np.array(x)
arrayY = np.array(y)
xTest = (arrayX.reshape((len(arrayX)),-1))
yTest = (arrayY.reshape((len(arrayY)),-1))
linearRegression.fit(xTest,yTest)
print("系数:",linearRegression.coef_)
print("截距:",linearRegression.intercept_)

2)OLS拟合

import statsmodels.api as smf
ols = smf.OLS(y,x)
model = ols.fit()
print(model.summary())

②决策树实验

(一)

1)使用Python 语言建立决策树模型

1、载入转化数据函数

#载入转化数据
#young:0,pre:1,presbyopic:2
#myope:0,hyper:1
#yes:1,no:-1
#no lenses:0,soft:1,hard:2
dic={'young':0,'pre':1,'presbyopic':2,'myope':0,'hyper':1,'yes':1,'no':-1,'no lenses':0,'soft':1,'hard':2}

2、读入数据

import pandas as pd
#载入转化数据
#young:0,pre:1,presbyopic:2
#myope:0,hyper:1
#yes:1,no:-1
#reduced:1,nomal:-1
#no lenses:0,soft:1,hard:2
dic={'young':0, 'pre':1, 'presbyopic':2, 'myope':0, 'hyper':1, 'yes':1, 'no':-1, 'reduced':-1, 'normal':1, 'no lenses':0, 'soft':1, 'hard':2}
#转换函数
def convert(v):return dic[v]
def load_data(file):data = pd.read_csv(file,sep='\t', header=0, names=['age', 'spectacle', 'astigmatic', 'tear','class'],index_col=False)data = data.applymap(convert)return data
data = load_data('glass-lenses.txt')
print(data)

3、计算信息熵、条件信息熵、信息增益

import pandas as pd
import numpy as np
#载入转化数据
#young:0,pre:1,presbyopic:2
#myope:0,hyper:1
#yes:1,no:-1
#reduced:1,nomal:-1
#no lenses:0,soft:1,hard:2
dic={'young':0, 'pre':1, 'presbyopic':2, 'myope':0, 'hyper':1, 'yes':1, 'no':-1, 'reduced':-1, 'normal':1, 'no lenses':0, 'soft':1, 'hard':2}
#转换函数
def convert(v):return dic[v]
def load_data(file):data = pd.read_csv(file,sep='\t', header=0, names=['id','age', 'spect', 'astig', 'tear','class'],index_col='id')data = data.applymap(convert)return data
data = load_data('glass-lenses.txt')
# print(data)# 数据集信息熵H(D)
def entropyOfData(D):nums = len(D)cate_data = D['class'].value_counts()cate_data = cate_data / nums # 类别及其概率# 计算数据集的熵return sum(- cate_data * np.log2(cate_data))# 条件信息熵H(D|A)
def conditional_entropy(D, A):# 特征A的不同取值的概率nums = len(D) # 数据总数A_data = D[A].value_counts()# 特征A的取值及个数A_data = A_data / nums # 特征A的取值及其对应的概率# print(A_data)# 特征A=a的情况下,数据集的熵D_ik = D.groupby([A, 'class']).count().iloc[:, 0].reset_index() # Dik的大小D_i = D.groupby(A).count().iloc[:, 0] # Di的大小# print(D_ik)# print(D_i)# 给定特征A=a的情况下,数据集类别的概率D_ik['possibilities'] = D_ik.apply(lambda x: x[2]/D_i[x[0]], axis=1)# print(D_ik)# 给定特征A=a的情况下,数据集的熵entropy = D_ik.groupby(A)['possibilities'].apply(lambda x: sum(- x * np.log2(x)))# print(entropy)# 计算条件熵H(D|A)return sum(A_data * entropy)
# print(conditional_entropy(data, 'age'))
# 信息增益
def info_gain(D, A):return entropyOfData(D) - conditional_entropy(D, A)
# print(info_gain(data, 'age'))

4、选择最优特征属性

# 获得最优特征
def getOptiFeature(D):Max = -1Opti = ''for A in list(D)[:-1]:cur = info_gain(D, A)if Max < cur:Opti = AMax = curreturn Opti, Max# 选择最优特征
print(getOptiFeature(data))

5、划分数据集,构建决策树

def majorityCnt(classList):classCount = {}for vote in classList:  # 统计当前划分下每中情况的个数if vote not in classCount.keys():classCount[vote] = 0classCount[vote] += 1sortedClassCount = sorted(classCount.items, key=operator.itemgetter(1), reversed=True)  # reversed=True表示由大到小排序# 对字典里的元素按照value值由大到小排序return sortedClassCount[0][0]def createTree(dataSet, labels):classList = [example[-1]for example in dataSet]  # 创建数组存放所有标签值,取dataSet里最后一列(结果)# 类别相同,停止划分# 判断classList里是否全是一类,count() 方法用于统计某个元素在列表中出现的次数if classList.count(classList[-1]) == len(classList):return classList[-1]  # 当全是一类时停止分割# 长度为1,返回出现次数最多的类别if len(classList[0]) == 1:  # 当没有更多特征时停止分割,即分到最后一个特征也没有把数据完全分开,就返回多数的那个结果return majorityCnt(classList)# 按照信息增益最高选取分类特征属性bestFeat = chooseBestFeatureToSplit(dataSet)  # 返回分类的特征序号,按照最大熵原则进行分类bestFeatLable = labels[bestFeat]  # 该特征的label, #存储分类特征的标签myTree = {bestFeatLable: {}}  # 构建树的字典del(labels[bestFeat])  # 从labels的list中删除该labelfeatValues = [example[bestFeat] for example in dataSet]uniqueVals = set(featValues)for value in uniqueVals:# 子集合 ,将labels赋给sublabels,此时的labels已经删掉了用于分类的特征的标签subLables = labels[:]# 构建数据的子集合,并进行递归myTree[bestFeatLable][value] = createTree(splitDataSet(dataSet, bestFeat, value), subLables)return myTreedef classify(inputTree, featLabels, testVec):firstStr = next(iter(inputTree))  # 根节点secondDict = inputTree[firstStr]featIndex = featLabels.index(firstStr)  # 根节点对应的属性classLabel = Nonefor key in secondDict.keys():  # 对每个分支循环if testVec[featIndex] == key:  # 测试样本进入某个分支if type(secondDict[key]).__name__ == 'dict':  # 该分支不是叶子节点,递归classLabel = classify(secondDict[key], featLabels, testVec)else:  # 如果是叶子, 返回结果classLabel = secondDict[key]return classLabel

6、绘制决策树

if __name__ == '__main__':with open('glass-lenses.txt', 'r') as fr_train:  # 加载文件lenses_train = [inst.strip().split('\t') for inst in fr_train.readlines()]  # 处理文件lenses_target_train = []  # 提取每组数据的类别,保存在列表里for each in lenses_train:lenses_target_train.append(each[-1])lensesLabels_train = ['age', 'prescript', 'astigmatic', 'tearRate']  # 特征标签lenses_list_train = []  # 保存lenses数据的临时列表lenses_dict_train = {}  # 保存lenses数据的字典,用于生成pandasfor each_label in lensesLabels_train:  # 提取信息,生成字典for each in lenses_train:lenses_list_train.append(each[lensesLabels_train.index(each_label)])lenses_dict_train[each_label] = lenses_list_trainlenses_list_train = []#print(lenses_dict)  # 打印字典信息lenses_pd_train = pd.DataFrame(lenses_dict_train)  # 生成pandas.DataFrame#print(lenses_pd_train)le_train = preprocessing.LabelEncoder()  # 创建LabelEncoder()对象,用于序列化for col in lenses_pd_train.columns:  # 为每一列序列化lenses_pd_train[col] = le_train.fit_transform(lenses_pd_train[col])#print(lenses_pd_train)clf = tree.DecisionTreeClassifier(criterion='entropy',max_depth=4)  # 创建DecisionTreeClassifier()类clf = clf.fit(lenses_pd_train.values.tolist(), lenses_target_train)  # 使用数据,构建决策树print(clf)dot_data = StringIO()tree.export_graphviz(clf, out_file=dot_data,  # 绘制决策树feature_names=lenses_pd_train.keys(),class_names=clf.classes_,filled=True, rounded=True,special_characters=True)graph = pydotplus.graph_from_dot_data(dot_data.getvalue())graph.write_pdf("tree.pdf")

2)输出混淆矩阵和准确率。

决策树完整代码

import pandas as pd
import seaborn as sn
import numpy as np
from sklearn import preprocessing
from sklearn import tree
from io import StringIO
import pydotplus
import math
import matplotlib.pyplot as plt
from sklearn.model_selection import train_test_split
from sklearn.metrics import confusion_matrix#载入转化数据
#young:0,pre:1,presbyopic:2
#myope:0,hyper:1
#yes:1,no:-1
#reduced:1,nomal:-1
#no lenses:0,soft:1,hard:2
dic={'young':0, 'pre':1, 'presbyopic':2, 'myope':0, 'hyper':1, 'yes':1, 'no':-1, 'reduced':-1, 'normal':1, 'no lenses':0, 'soft':1, 'hard':2}
#转换函数
def convert(v):return dic[v]
def load_data(file):data = pd.read_csv(file,sep='\t', header=0, names=['age', 'spect', 'astig', 'tear','class'])data = data.applymap(convert)return data
#print(data)
def calculateEnt(dataSet):  # 计算香农熵numEntries = len(dataSet)labelCounts = {}for featVec in dataSet:currentLabel = featVec[-1]  # 取得最后一列数据,该属性取值情况有多少个if currentLabel not in labelCounts.keys():labelCounts[currentLabel] = 0labelCounts[currentLabel] += 1# 计算熵Ent = 0.0for key in labelCounts:prob = float(labelCounts[key])/numEntriesEnt -= prob*math.log(prob, 2)return Entdef splitDataSet(dataSet, axis, value):retDataSet = []for featVec in dataSet:  # 取大列表中的每个小列表if featVec[axis] == value:reduceFeatVec = featVec[:axis]reduceFeatVec.extend(featVec[axis+1:])retDataSet.append(reduceFeatVec)return retDataSet  # 返回不含划分特征的子集def chooseBestFeatureToSplit(dataSet):numFeature = len(dataSet[0]) - 1baseEntropy = calculateEnt(dataSet)bestInforGain = 0bestFeature = -1for i in range(numFeature):featList = [number[i] for number in dataSet]  # 得到某个特征下所有值(某列)uniquelVals = set(featList)  # set无重复的属性特征值,得到所有无重复的属性取值# 计算每个属性i的概论熵newEntropy = 0for value in uniquelVals:subDataSet = splitDataSet(dataSet, i, value)  # 得到i属性下取i属性为value时的集合prob = len(subDataSet)/float(len(dataSet))  # 每个属性取值为value时所占比重newEntropy += prob*calculateEnt(subDataSet)inforGain = baseEntropy - newEntropy  # 当前属性i的信息增益if inforGain > bestInforGain:bestInforGain = inforGainbestFeature = ireturn bestFeature  # 返回最大信息增益属性下标def majorityCnt(classList):classCount = {}for vote in classList:  # 统计当前划分下每中情况的个数if vote not in classCount.keys():classCount[vote] = 0classCount[vote] += 1sortedClassCount = sorted(classCount.items, key=operator.itemgetter(1), reversed=True)  # reversed=True表示由大到小排序# 对字典里的元素按照value值由大到小排序return sortedClassCount[0][0]def createTree(dataSet, labels):classList = [example[-1]for example in dataSet]  # 创建数组存放所有标签值,取dataSet里最后一列(结果)# 类别相同,停止划分# 判断classList里是否全是一类,count() 方法用于统计某个元素在列表中出现的次数if classList.count(classList[-1]) == len(classList):return classList[-1]  # 当全是一类时停止分割# 长度为1,返回出现次数最多的类别if len(classList[0]) == 1:  # 当没有更多特征时停止分割,即分到最后一个特征也没有把数据完全分开,就返回多数的那个结果return majorityCnt(classList)# 按照信息增益最高选取分类特征属性bestFeat = chooseBestFeatureToSplit(dataSet)  # 返回分类的特征序号,按照最大熵原则进行分类bestFeatLable = labels[bestFeat]  # 该特征的label, #存储分类特征的标签myTree = {bestFeatLable: {}}  # 构建树的字典del(labels[bestFeat])  # 从labels的list中删除该labelfeatValues = [example[bestFeat] for example in dataSet]uniqueVals = set(featValues)for value in uniqueVals:# 子集合 ,将labels赋给sublabels,此时的labels已经删掉了用于分类的特征的标签subLables = labels[:]# 构建数据的子集合,并进行递归myTree[bestFeatLable][value] = createTree(splitDataSet(dataSet, bestFeat, value), subLables)return myTreedef classify(inputTree, featLabels, testVec):firstStr = next(iter(inputTree))  # 根节点secondDict = inputTree[firstStr]print(secondDict)featIndex = featLabels.index(firstStr)  # 根节点对应的属性classLabel = Nonefor key in secondDict.keys():  # 对每个分支循环if testVec[featIndex] == key:  # 测试样本进入某个分支if type(secondDict[key]).__name__ == 'dict':  # 该分支不是叶子节点,递归classLabel = classify(secondDict[key], featLabels, testVec)else:  # 如果是叶子, 返回结果classLabel = secondDict[key]return classLabelif __name__ == '__main__':with open('glass-lenses.txt', 'r') as fr_train:  # 加载文件lenses_train = [inst.strip().split('\t') for inst in fr_train.readlines()]  # 处理文件lenses_target_train = []  # 提取每组数据的类别,保存在列表里for each in lenses_train:lenses_target_train.append(each[-1])lensesLabels_train = ['age','prescript','astigmatic','tearRate','class'] # 特征标签lenses_list_train = []  # 保存lenses数据的临时列表lenses_dict_train = {}  # 保存lenses数据的字典,用于生成pandasfor each_label in lensesLabels_train:  # 提取信息,生成字典for each in lenses_train:lenses_list_train.append(each[lensesLabels_train.index(each_label)])lenses_dict_train[each_label] = lenses_list_trainlenses_list_train = []#print(lenses_dict)  # 打印字典信息lenses_pd_train = pd.DataFrame(lenses_dict_train)  # 生成pandas.DataFrame#print(lenses_pd_train)le_train = preprocessing.LabelEncoder()  # 创建LabelEncoder()对象,用于序列化for col in lenses_pd_train.columns:  # 为每一列序列化lenses_pd_train[col] = le_train.fit_transform(lenses_pd_train[col])#print(lenses_pd_train)clf = tree.DecisionTreeClassifier(criterion='entropy',max_depth=4)  # 创建DecisionTreeClassifier()类clf = clf.fit(lenses_pd_train.values.tolist(), lenses_target_train)  # 使用数据,构建决策树print(clf)dot_data = StringIO()tree.export_graphviz(clf, out_file=dot_data,  # 绘制决策树feature_names=lenses_pd_train.keys(),class_names=clf.classes_,filled=True, rounded=True,special_characters=True)graph = pydotplus.graph_from_dot_data(dot_data.getvalue())graph.write_pdf("tree.pdf")
#     fr = open('glass-lenses.txt')
#     trainData=[inst.strip().split('\t') for inst in fr.readlines()]
#     lensesLabels=['age','prescript','astigmatic','tearRate','class']
#     lensesTree=createTree(trainData,lensesLabels)#     fr = open('Test.txt')
#     testData = [lenses.strip().split('\t') for lenses in fr.readlines()]
#     print(testData)
#     testResults = classify(lensesTree,lensesLabels,testData)
#     print(testResults)with open('Test.txt', 'r') as fr_test:  # 加载文件lenses_test = [inst.strip().split('\t') for inst in fr_test.readlines()]  # 处理文件lenses_target_test = []  # 提取每组数据的类别,保存在列表里for each in lenses_test:lenses_target_test.append(each[-1])lensesLabels_test = ['age', 'prescript', 'astigmatic', 'tearRate','class']  # 特征标签lenses_list_test = []  # 保存lenses数据的临时列表lenses_dict_test = {}  # 保存lenses数据的字典,用于生成pandasfor each_label in lensesLabels_test:  # 提取信息,生成字典for each in lenses_test:lenses_list_test.append(each[lensesLabels_test.index(each_label)])lenses_dict_test[each_label] = lenses_list_testlenses_list_test = []#print(lenses_dict)  # 打印字典信息lenses_pd_test = pd.DataFrame(lenses_dict_test)  # 生成pandas.DataFrame#print(lenses_pd_test)le_test = preprocessing.LabelEncoder()  # 创建LabelEncoder()对象,用于序列化for col in lenses_pd_test.columns:  # 为每一列序列化lenses_pd_test[col] = le_test.fit_transform(lenses_pd_test[col])# print(clf.predict(lenses_pd_test))sn.set()f,ax=plt.subplots()y_true = ['no lenses','soft','soft','no lenses','no lenses','hard']y_pred = clf.predict(lenses_pd_test)C2=confusion_matrix(y_true,y_pred,labels=['no lenses','soft','hard'])# print(C2)sn.heatmap(C2,annot=True,ax=ax)ax.set_title('confusion_matrix')ax.set_xlabel('predict')ax.set_ylabel('true')plt.show()

数据集

测试集开源
数据集开源
数据集、测试集已经上传

机器学习——线性回归与决策树实验(附效果以及完整代码)(数据集、测试集开源)相关推荐

  1. python画小猪佩奇视频_用 Python 20 秒画完小猪佩奇“社会人”!附效果视频+完整代码...

    原标题:用 Python 20 秒画完小猪佩奇"社会人"!附效果视频+完整代码 导读:今年社交平台上最火的带货女王是谁?范冰冰?杨幂?Angelababy?不,是猪猪女孩小猪佩奇. ...

  2. 《TensorFlow 机器学习方案手册》(附 pdf 和完整代码)

    红色石头的个人网站:www.redstonewill.com 今天给大家推荐一本适合新手入门机器学习和 TensorFlow 的最佳教程:<TensorFlow Machine Learning ...

  3. 实战五十三:基于机器学习随机森林的购房贷款违约预测(完整代码+数据集)

    1.1 实验题目:购房贷款违约预测 任务:使用机器学习相关知识完成购房贷款违约预测,给定特征字段,输出是否会发生逾期的预测. 1.2 实验要求 1.2 题目背景 随着世界经济的蓬勃发展和中国改革开放的 ...

  4. 10 种机器学习算法的要点(附 Python 和 R 代码)(转载)

    10 种机器学习算法的要点(附 Python 和 R 代码)(转载) from:https://zhuanlan.zhihu.com/p/25273698 前言 谷歌董事长施密特曾说过:虽然谷歌的无人 ...

  5. python机器学习-建立随机森林预测模型并特征分析(完整代码+实现效果)

    实现功能: python机器学习-建立随机森林预测模型并特征分析. 实现效果: # 导入需要的库 from warnings import simplefilter simplefilter(acti ...

  6. 机器学习线性回归Matlab实现(附数据集)

    %% 画数据散点图 %第214对数据有问题,先删除 Data = xlsread('D:\Matlab\test\数据集\train.csv'); x = Data(:,1); y = Data(:, ...

  7. 10 种机器学习算法的要点(附 Python 和 R 代码)

    前言 谷歌董事长施密特曾说过:虽然谷歌的无人驾驶汽车和机器人受到了许多媒体关注,但是这家公司真正的未来在于机器学习,一种让计算机更聪明.更个性化的技术. 也许我们生活在人类历史上最关键的时期:从使用大 ...

  8. 机器学习算法的要点(附 Python 和 R 代码)

    前言 谷歌董事长施密特曾说过:虽然谷歌的无人驾驶汽车和机器人受到了许多媒体关注,但是这家公司真正的未来在于机器学习,一种让计算机更聪明.更个性化的技术. 也许我们生活在人类历史上最关键的时期:从使用大 ...

  9. c语言触屏滑动图片,微信小程序左右滑动切换图片酷炫效果(附效果)(示例代码)...

    开门见山,先上效果吧!感觉可以的用的上的再往下看. 心动吗?那就继续往下看! 先上页面结构吧,也就是wxml文件,其实可以理解成微信自己封装过的html,这个不多说了,不懂也没必要往下看了. 1 2 ...

最新文章

  1. 公开课 | 旷视科技产品总监:计算机视觉如何赋能身份验证场景
  2. POJ 2112 Optimal Milking(二分图匹配)
  3. Nginx+Keepalived+Tomcat之动静分离的web集群
  4. python_面向对象
  5. win7电脑磁盘文件以分组方式展现解决方案
  6. 【thymeleaf】模板中定义变量
  7. C语言实现多线程排序
  8. 很实用的,GridView中使用DataFormatString属性格式化内容
  9. C++第五章课后习题-输入n个字符串,把其中以字母A打头的字符串输出
  10. html平铺 拉伸 图片,[CSS]背景图片中平铺与拉伸
  11. 手机QQ怎么使用群签到
  12. vue 搜索框添加历史搜索记录
  13. C语言实现约瑟夫环问题
  14. 关于echarts人物关系图,节点展现为图片
  15. 最新十大域名注册商.com域名注册量排行榜
  16. 用秩讨论线性方程组的解/三个平面的位置关系
  17. 加载PNG图片的处理方式
  18. css打印适应纸张_CSS print 样式 css控制打印样式 分页 页面大小
  19. 三相异步电动机的定子磁动势
  20. 2022面试技巧大全

热门文章

  1. 生物识别技术—景联文科技提供课堂行为采集、reID行为采集、驾驶员行为采集等全类型采集服务!
  2. C语言中实用的子函数(持续加料)
  3. java中 继承、重写、抽象类、抽象方法、多态的学习
  4. js 打印(JavaScript 打印 CSS样式)
  5. Immutable List
  6. opencv调用微信的二维码识别引擎
  7. 360详解儿童手表背后技术:五颗芯片共同定位
  8. 360N5是android版本,360 N5的手机系统是什么
  9. win7开机黑屏开计算机无桌面图标任务栏
  10. 最大零钱java_找零钱(Java)