sklearn基础篇(三)-- 鸢尾花(iris)数据集分析和分类

2023-05-16

        后面对Sklearn的学习主要以《Python机器学习基础教程》和《机器学习实战基于scikit-learn和tensorflow》,两本互为补充进行学习,下面是开篇的学习内容。

1 初识数据

        iris数据集的中文名是安德森鸢尾花卉数据集,英文全称是Anderson’s Iris data set。iris包含150个样本,对应数据集的每行数据。每行数据包含每个样本的四个特征和样本的类别信息,所以iris数据集是一个150行5列的二维表。

        通俗地说,iris数据集是用来给花做分类的数据集,每个样本包含了花萼长度、花萼宽度、花瓣长度、花瓣宽度四个特征(前4列),我们需要建立一个分类器,分类器可以通过样本的四个特征来判断样本属于山鸢尾、变色鸢尾还是维吉尼亚鸢尾(这三个名词都是花的品种)。

        iris的每个样本都包含了品种信息,即目标属性(第5列,也叫target或label)。如下所示:

1. 导入数据集
(1) 在线导入

        调用load_iris函数来加载数据:

from sklearn.datasets import load_iris

iris_dataset = load_iris()

        load_iris 返回的 iris 对象是一个 Bunch 对象,与字典非常相似,里面包含键和值:

print(iris_dataset.keys())
# dict_keys(['data', 'target', 'frame', 'target_names', 'DESCR', 'feature_names', 'filename', 'data_module'])
print(iris_dataset["DESCR"][:193])

        DESCR 键对应的值是数据集的简要说明。这里给出说明的开头部分。

        target_names 键对应的值是一个字符串数组,里面包含我们要预测的花的品种:

print("Target names: {}".format(iris_dataset["target_names"]))
# Target names: ['setosa' 'versicolor' 'virginica']

        feature_names 键对应的值是一个字符串列表,对每一个特征进行了说明:

print("Feature names: {}".format(iris_dataset['feature_names']))
# Feature names: ['sepal length (cm)', 'sepal width (cm)', 'petal length (cm)', 'petal width (cm)']

        数据包含在target 和data 字段中。data 里面是花萼长度、花萼宽度、花瓣长度、花瓣宽度的测量数据,格式为NumPy 数组:

print("Type of data: {}".format(type(iris_dataset['data'])))
# Type of data: <class 'numpy.ndarray'>

        data 数组的每一行对应一朵花,列代表每朵花的四个测量数据:

print("shape of data: {}".format(iris_dataset['data'].shape))
# shape of data: (150, 4)

        可以看出,数组中包含150 朵不同的花的测量数据。前机器学习中的个体叫作样本(sample),其属性叫作特征(feature)。data 数组的形状(shape)是样本数乘以特征数。这是 scikit-learn 中的约定,你的数据形状应始终遵循这个约定。下面给出前 5 个样本的特征数值:

print("First five rows of data:\n{}".format(iris_dataset['data'][:5]))
# First five rows of data:
#   [[5.1 3.5 1.4 0.2]
#    [4.9 3.  1.4 0.2]
#    [4.7 3.2 1.3 0.2]
#    [4.6 3.1 1.5 0.2]
#    [5.  3.6 1.4 0.2]]

        从数据中可以看出,前5 朵花的花瓣宽度都是0.2cm,第一朵花的花萼最长,是5.1cm。

        target 数组包含的是测量过的每朵花的品种,也是一个NumPy 数组:

print("Type of target:{}".format(type(iris_dataset['target'])))
# Type of target:<class 'numpy.ndarray'>

        target 是一维数组,每朵花对应其中一个数据:

print("Shape of target:{}".format(iris_dataset['target'].shape))
# Shape of target:(150,)

        品种被转换成从 0 到 2 的整数:

print("target:\n{}".format(iris_dataset['target']))
'''
target: 
[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 2
 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
 2 2]
 '''

        上述数字的代表含义由iris_dataset['target']数组给出:0 代表setosa,1 代表versicolor,2 代表virginica。

(2) 本地导入

# 导入相关包
import numpy as np
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
from sklearn import datasets
# 导入数据集
data = "../seaborn-data-master/iris.csv"

iris_local = pd.read_csv(data, usecols=[0, 1, 2, 3, 4])
iris_local = iris_local.dropna()    # 丢弃含空值的行、列
iris_local.head()
        可以发现本地导入和在线导入的键是不同的(即列名),而且这里最后一列标签值未编码,后面在使用的时候需要注意。
# 查看数据集信息
iris_local.info()
'''
<class 'pandas.core.frame.DataFrame'>
Int64Index: 150 entries, 0 to 149
Data columns (total 5 columns):
sepal_length    150 non-null float64
sepal_width     150 non-null float64
petal_length    150 non-null float64
petal_width     150 non-null float64
species         150 non-null object
dtypes: float64(4), object(1)
memory usage: 7.0+ KB
'''
# 载入特征和标签集
X = iris_local[['sepal_length', 'sepal_width', 'petal_length', 'petal_width']]        # 等价于iris_dataset.data
y = iris_local['species']     # 等价于iris_dataset.target

        下面需要对对标签集进行编码:

# 对标签集进行编码
from sklearn.preprocessing import LabelEncoder

encoder = LabelEncoder()
y = encoder.fit_transform(y)
print(y)

2 训练数据与测试数据

        将收集好的带标签数据(此例中是150 朵花的测量数据)分成两部分。一部分数据用于构建机器学习模型,叫作训练数据(training data)或训练集(training set)。其余的数据用来评估模型性能,叫作测试数据(test data)、测试集(test set)或留出集(hold-out set)。

        scikit-learn 中的train_test_split 函数可以打乱数据集并进行拆分。这个函数将75% 的行数据及对应标签作为训练集,剩下25% 的数据及其标签作为测试集。训练集与测试集的分配比例可以是随意的,但使用25% 的数据作为测试集是很好的经验法则。

        对数据调用train_test_split,并对输出结果采用下面这种命名方法:

from sklearn.model_selection import train_test_split

X_train, X_test, y_train, y_test = train_test_split(iris_dataset['data'], iris_dataset['target'], random_state=0)
# X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=0)

        在对数据进行拆分之前,train_test_split 函数利用伪随机数生成器将数据集打乱。如果我们只是将最后25% 的数据作为测试集,那么所有数据点的标签都是2,因为数据点是按标签排序的(参见之前iris[‘target’] 的输出)。测试集中只有三个类别之一,这无法告诉我们模型的泛化能力如何,所以我们将数据打乱,确保测试集中包含所有类别的数据。

        为了确保多次运行同一函数能够得到相同的输出,我们利用random_state 参数指定了随机数生成器的种子。这样函数输出就是固定不变的,所以这行代码的输出始终相同。

        train_test_split 函数的输出为X_train、X_test、y_train 和y_test,它们都是NumPy数组。X_train 包含75% 的行数据,X_test 包含剩下的25%:

print("X_train shape: {}".format(X_train.shape))        # X_train shape: (112, 4)
print("y_train shape: {}".format(y_train.shape))        # y_train shape: (112,)
print("X_test shape: {}".format(X_test.shape))          # X_test shape: (38, 4)
print("y_test shape: {}".format(y_test.shape))          # y_test shape: (38,)

3 探索数据

        检查数据也是发现异常值和特殊值的好方法。检查数据的最佳方法之一就是将其可视化。先查看数据集各特征列的摘要统计信息:

iris_local.describe()

        箱线图描述了数据的分布情况,包括:上下界,上下四分位数和中位数,可以简单的查看数据的分布情况。比如:上下四分位数相隔较远的话,一般可以很容易分为2类。

iris_local.plot(kind='box', subplots=True, layout=(2, 2), sharex=False, sharey=False)

        直方图,反馈的是数据的频度,一般常见的是高斯分布(正态分布)。

iris_local.hist()

        plot直接展示数据的分布情况,kde核密度估计对比直方图来看

iris_local.plot()
iris_local.plot(kind='kde')

        径向可视化是多维数据降维的可视化方法,不管是数据分析还是机器学习,降维是最基础的方法之一,通过降维,可以有效的减少复杂度。径向坐标可视化是基于弹簧张力最小化算法。它把数据集的特征映射成二维目标空间单位圆中的一个点,点的位置由系在点上的特征决定。把实例投入圆的中心,特征会朝圆中此实例位置(实例对应的归一化数值)“拉”实例。

ax = pd.plotting.radviz(iris_local, 'species', colormap='brg')
ax.add_artist(plt.Circle((0,0), 1, color='r', fill = False))

        通过Violinplot 和 Pointplot,分别从数据分布和斜率,观察各特征与品种之间的关系

# 设置颜色主题
antV = ['#1890FF', '#2FC25B', '#FACC14', '#223273', '#8543E0', '#13C2C2', '#3436c7', '#F04864'] 

# 绘制  Violinplot
f, axes = plt.subplots(2, 2, figsize=(8, 8), sharex=True)
sns.despine(left=True)

sns.violinplot(x='species', y='sepal_length', data=iris_local, palette=antV, ax=axes[(0, 0)])
sns.violinplot(x='species', y='sepal_width', data=iris_local, palette=antV, ax=axes[(0, 1)])
sns.violinplot(x='species', y='petal_length', data=iris_local, palette=antV, ax=axes[(1, 0)])
sns.violinplot(x='species', y='petal_width', data=iris_local, palette=antV, ax=axes[(1, 1)])

plt.show()
# 绘制  pointplot
f, axes = plt.subplots(2, 2, figsize=(8, 8), sharex=True)
sns.despine(left=True)

sns.pointplot(x='species', y='sepal_length', data=iris_local, color=antV[0], ax=axes[0, 0])
sns.pointplot(x='species', y='sepal_width', data=iris_local, color=antV[0], ax=axes[0, 1])
sns.pointplot(x='species', y='petal_length', data=iris_local, color=antV[0], ax=axes[1, 0])
sns.pointplot(x='species', y='petal_width', data=iris_local, color=antV[0], ax=axes[1, 1])

plt.show()

        生成各特征之间关系的矩阵图

g = sns.pairplot(data=iris_local, palette=antV, hue= 'species')

        从图中可以看出,利用花瓣和花萼的测量数据基本可以将三个类别区分开。这说明机器学习模型很可能可以学会区分它们。

        Andrews曲线将每个样本的属性值转化为傅里叶序列的系数来创建曲线,这对于检测时间序列数据中的异常值很有用。通过将每一类曲线标成不同颜色可以可视化聚类数据,属于相同类别的样本的曲线通常更加接近并构成了更大的结构。

# 使用 Andrews Curves 将每个多变量观测值转换为曲线并表示傅立叶级数的系数,这对于检测时间序列数据中的异常值很有用。
plt.subplots(figsize = (10,8))
pd.plotting.andrews_curves(iris_local, 'species', colormap='cool')

plt.show()

        平行坐标可以看到数据中的类别以及从视觉上估计其他的统计量。使用平行坐标时,每个点用线段联接,每个垂直的线代表一个属性, 一组联接的线段表示一个数据点。可能是一类的数据点会更加接近。

pd.plotting.parallel_coordinates(iris_local, 'species', colormap = 'brg')
#下面分别基于花萼和花瓣做线性回归的可视化:

g = sns.lmplot(data=iris_local, x='sepal_width', y='sepal_length', palette=antV, hue='species')
g = sns.lmplot(data=iris_local, x='petal_width', y='petal_length', palette=antV, hue='species')
#最后,通过热图找出数据集中不同特征之间的相关性,高正值或负值表明特征具有高度相关性:
fig=plt.gcf()
fig.set_size_inches(12, 8)
fig=sns.heatmap(iris_local.corr(), annot=True, cmap='GnBu', linewidths=1, linecolor='k', \
                square=True, mask=False, vmin=-1, vmax=1, cbar_kws={"orientation": "vertical"}, cbar=True)

        温馨提示: 如果你想更方便快捷地了解数据的全貌,泣血推荐一个python库:pandas_profiling,这个库只需要一行代码就可以生成数据EDA报告。pandas_profiling基于pandas的DataFrame数据类型,可以简单快速地进行探索性数据分析。

        对于数据集的每一列,pandas_profiling会提供以下统计信息:

  • 概要:数据类型,唯一值,缺失值,内存大小
  • 分位数统计:最小值、最大值、中位数、Q1、Q3、最大值,值域,四分位
  • 描述性统计:均值、众数、标准差、绝对中位差、变异系数、峰值、偏度系数
  • 最频繁出现的值,直方图/柱状图
  • 相关性分析可视化:突出强相关的变量,Spearman, Pearson矩阵相关性色阶图
import pandas_profiling as pp 
report = pp.ProfileReport(iris_local)
report.to_file('report.html')

4 构建模型

        scikit-learn 中有许多可用的分类算法。这里我们用的是 k 近邻分类器,这是一个很容易理解的算法。

        要对一个新的数据点做出预测,算法会在训练集中寻找与这个新数据点距离最近的数据点,然后将找到的数据点的标签赋值给这个新数据点。

        k 近邻算法中 k 的含义是,我们可以考虑训练集中与新数据点最近的任意 k 个邻居(比如说,距离最近的3 个或5 个邻居),而不是只考虑最近的那一个。然后,我们可以用这些邻居中数量最多的类别做出预测。

        k 近邻分类算法是在 neighbors 模块 KNeighborsClassifier 类中实现的。KNeighborsClassifier 最重要的参数就是邻居的数目,这里我们设为1:

from sklearn.neighbors import KNeighborsClassifier

knn = KNeighborsClassifier(n_neighbors=1)

        想要基于训练集来构建模型,需要调用 knn 对象的fit 方法,输入参数为 X_train 和 y_train,二者都是 NumPy 数组,前者包含训练数据,后者包含相应的训练标签:

knn.fit(X_train, y_train)

5 做出预测

        想象一下,我们在野外发现了一朵鸢尾花,花萼长5cm 宽2.9cm,花瓣长1cm 宽0.2cm。这朵鸢尾花属于哪个品种?我们可以将这些数据放在一个NumPy 数组中,再次计算形状,数组形状为样本数(1)乘以特征数(4):

X_new = np.array([[5, 2.9, 1, 0.2]])
print("X_new.shape: {}".format(X_new.shape))

        注意,我们将这朵花的测量数据转换为二维NumPy 数组的一行,这是因为scikit-learn的输入数据必须是二维数组。我们调用knn 对象的predict 方法来进行预测:

prediction = knn.predict(X_new)
print("Prediction: {}".format(prediction))          # Prediction: [0]
print("Predicted target name: {}".format(iris_dataset['target_names'][prediction]))     # Predicted target name: ['setosa']

        根据我们模型的预测,这朵新的鸢尾花属于类别0,也就是说它属于setosa 品种。


6 评估模型

        我们可以对测试数据中的每朵鸢尾花进行预测,并将预测结果与标签(已知的品种)进行对比。我们可以通过计算精度(accuracy)来衡量模型的优劣,精度就是品种预测正确的花所占的比例:

y_pred = knn.predict(X_test)
print("Test set predictions: \n {}".format(y_pred))
'''
Test set predictions: 
 [2 1 0 2 0 2 0 1 1 1 2 1 1 1 1 0 1 1 0 0 2 1 0 0 2 0 0 1 1 0 2 1 0 2 2 1 0
 2]
 '''
print("Test set score: {:.2f}".format(np.mean(y_pred == y_test)))   # Test set score: 0.97

        这一步为了方便,也可以直接使用下面的方法来计算测试集的精度:

print('Test set score: {:.2f}'.format(metrics.accuracy_score(y_pred, y_test)))   # Test set score: 0.97

        我们还可以使用knn 对象的 score 方法来计算测试集的精度:

print("Test set score: {:.2f}".format(knn.score(X_test, y_test)))   # Test set score: 0.97

        对于这个模型来说,测试集的精度约为0.97,也就是说,对于测试集中的鸢尾花,我们的预测有 97% 是正确的。下面对比其他模型在该数据集的分类效果。

7 模型对比

1. 使用全部特征

from sklearn.linear_model import LogisticRegression 
from sklearn.neighbors import KNeighborsClassifier
from sklearn import svm
from sklearn.tree import DecisionTreeClassifier
from sklearn import metrics 
# Support Vector Machine
model = svm.SVC()
model.fit(X_train, y_train)
prediction = model.predict(X_test)
print('The accuracy of the SVM is: {:.3f}'.format(metrics.accuracy_score(prediction, y_test)))    

The accuracy of the SVM is: 0.974

# Logistic Regression
model = LogisticRegression()
model.fit(X_train, y_train)
prediction = model.predict(X_test)
print('The accuracy of the Logistic Regression is: {:.3f}'.format(metrics.accuracy_score(prediction, y_test)))      

The accuracy of the Logistic Regression is: 0.974

# Decision Tree
model=DecisionTreeClassifier()
model.fit(X_train, y_train)
prediction = model.predict(X_test)
print('The accuracy of the Decision Tree is: {:.3f}'.format(metrics.accuracy_score(prediction, y_test)))     

The accuracy of the Logistic Regression is: 0.974

# K-Nearest Neighbours
model=KNeighborsClassifier(n_neighbors=3)
model.fit(X_train, y_train)
prediction = model.predict(X_test)
print('The accuracy of the KNN is: {:.3f}'.format(metrics.accuracy_score(prediction, y_test)))    

The accuracy of the Logistic Regression is: 0.974

2. 使用部分特征

        上面使用了数据集的所有特征,下面将分别使用花瓣和花萼的尺寸:

petal = iris_local[['petal_length', 'petal_width', 'species']]
train_p, test_p = train_test_split(petal, test_size=0.3, random_state=0) 
X_train_p = train_p[['petal_length', 'petal_width']]
y_train_p = train_p.species
X_test_p = test_p[['petal_length', 'petal_width']]
y_test_p = test_p.species

sepal = iris_local[['sepal_length', 'sepal_width', 'species']]
train_s, test_s = train_test_split(sepal, test_size=0.3, random_state=0)
X_train_s = train_s[['sepal_length','sepal_width']]
y_train_s = train_s.species
X_test_s = test_s[['sepal_length','sepal_width']]
y_test_s = test_s.species
model=svm.SVC()

model.fit(X_train_p, y_train_p) 
prediction=model.predict(X_test_p) 
print('The accuracy of the SVM using Petals is: {:.3f}'.format(metrics.accuracy_score(prediction, y_test_p)))  

model.fit(X_train_s, y_train_s) 
prediction=model.predict(X_test_s) 
print('The accuracy of the SVM using Sepal is: {:.3f}'.format(metrics.accuracy_score(prediction, y_test_s)))    

The accuracy of the SVM using Petals is: 0.978
The accuracy of the SVM using Sepal is: 0.800

model = LogisticRegression()

model.fit(X_train_p, y_train_p) 
prediction = model.predict(X_test_p) 
print('The accuracy of the Logistic Regression using Petals is: {:.3f}'.format(metrics.accuracy_score(prediction, y_test_p)))  

model.fit(X_train_s, y_train_s) 
prediction = model.predict(X_test_s) 
print('The accuracy of the Logistic Regression using Sepals is: {:.3f}'.format(metrics.accuracy_score(prediction, y_test_s)))   

The accuracy of the Logistic Regression using Petals is: 0.978
The accuracy of the Logistic Regression using Sepals is: 0.822

model=DecisionTreeClassifier()

model.fit(X_train_p, y_train_p) 
prediction = model.predict(X_test_p) 
print('The accuracy of the Decision Tree using Petals is: {:.3f}'.format(metrics.accuracy_score(prediction, y_test_p)))     

model.fit(X_train_s, y_train_s) 
prediction = model.predict(X_test_s) 
print('The accuracy of the Decision Tree using Sepals is: {:.3f}'.format(metrics.accuracy_score(prediction, y_test_s)))     

The accuracy of the Decision Tree using Petals is: 0.956
The accuracy of the Decision Tree using Sepals is: 0.644

model=KNeighborsClassifier(n_neighbors=3) 

model.fit(X_train_p, y_train_p) 
prediction = model.predict(X_test_p) 
print('The accuracy of the KNN using Petals is: {:.3f}'.format(metrics.accuracy_score(prediction, y_test_p)))  

model.fit(X_train_s, y_train_s) 
prediction = model.predict(X_test_s) 
print('The accuracy of the KNN using Sepals is: {:.3f}'.format(metrics.accuracy_score(prediction, y_test_s)))   

The accuracy of the KNN using Petals is: 0.978
The accuracy of the KNN using Sepals is: 0.733

        从中不难看出,使用花瓣的尺寸来训练数据较花萼更准确。正如在探索性分析的热图中所看到的那样,花萼的宽度和长度之间的相关性非常低,而花瓣的宽度和长度之间的相关性非常高。


参考

  • 鸢尾花(iris)数据集分析:https://www.jianshu.com/p/52b86c774b0b
  • iris鸢尾花数据集最全数据分析:https://blog.csdn.net/HBYaAnn/article/details/105078986
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

sklearn基础篇(三)-- 鸢尾花(iris)数据集分析和分类 的相关文章

  • 矩阵特征值的求解例子

    请点击上面公众号 xff0c 免费订阅 实例 阐述算法 xff0c 通俗易懂 xff0c 助您对算法的理解达到一个新高度 包含但不限于 xff1a 经典算法 xff0c 机器学习 xff0c 深度学习 xff0c LeetCode 题解 x
  • 51单片机学习笔记:串口接收和发送数据

    芯片STC89C52RC 在PC端向单片机发送任意数据后 单片机向PC端发送4行文本 由于在windos下 回车换行用 r n include lt reg52 h gt include 34 MY51 h 34 void initSer
  • 51单片机学习笔记:利用ADC0804模数转换器采集电压

    电位器调节待检测电压值 在数码管上显示出来 代码大多从书上搬过来的 书上例5 3 1要求前3个数码管显示AD转换后的8位数字量 即0 255 我这里让前4个数码管显示具体电压值 比如1 352 include lt reg52 h gt i
  • 51单片机学习笔记,模拟iic总线连续读写24c02存储器

    AT24C02A 2K SERIAL EEPROM Internally organized with 32 pages of 8 bytes each the 2K requires an 8 bit data word address
  • 51单片机学习笔记:定时器产生PWM可调方波,控制led灯亮度

    使用定时器T0产生PWM方波 用按键调整占空比 20级可调 控制led灯的亮度等级 include 34 my51 h 34 include 34 timer0 h 34 define grading 20 亮度20级变化 sbit key
  • 汉字与GBK内码互转工具(支持批量转换)

    注 原程序不是我写的 原作者没有署名 我只是让它更好用些而已 感谢未署名的原作者 汉字与GBK内码互转工具 exe 支持批量转换 修改记录如下 1 修改标题 2 修改文本框位置和大小 3 修改按钮位置和大小 修改按钮内容 4 修改光标的初始
  • 51单片机学习笔记:ST7920控制器的12864液晶使用总结

    总结 1 控制芯片不同 液晶接口定义 或者寄存器定义也可能不同 2 显示方式有并行和串行 串行方式据说不能读数据寄存器 DR 那指令暂存器IR是否可读 3 含字库芯片显示字符时不必对字符取模了 但字库有可能缺斤少两 就是说有一部分字 哪怕是
  • 启用SecureCRT自带的tftp服务

    以前用Tftpd32在win端开启tftp服务 Tftpd32功能很多 但我暂时用不到那些功能 今天试试SecureCRT自带的tftp功能 挺好的啊 只能说 SecureCRT 很好很强大 图解 测试 book 64 ubuntu wor
  • 十三、数据清洗

    1 清洗数据 数据清洗是指发现并纠正数据文件中可识别的错误的最后一道程序 xff0c 包括检查数据一致性 xff0c 处理无效值和缺失值等 xff1a 缺失值处理 xff1b 噪声数据处理 xff1b 不一致数据的处理 xff1b 清洗数据
  • Ubuntu 16 安装32位兼容库

    由于电脑是64位系统 但是linux下很多软件还是32的 所以需要32位运行库 如果没装的话 运行32位程序时会跳出来说没有这个文件或者目录 xff0c 但是ls看又有这个文件的 小白一脸懵逼啊 然后就是一阵gg搜 折腾了好久 终于搞定了
  • Ubuntu 16 安装samba

    sudo apt get install samba 安装samba 本来想用图形界面配置下 但是运行 system config samba失败 就手动配置 这里系统用户名sjj 创建的samba账户也为sjj 但为了安全的话最好不要相同
  • Ubuntu 16.04 安装tftp

    准备工作 新建一个777权限的tftpdir服务文件夹 例如 home sjj work tftpdir 放一个有内容的1 txt文本用来测试 安装tftp的增强版本 服务端tftpd hpa 客户端tftp hpa sudo apt ge
  • VS粘贴word时中文乱码修复工具v1

    部分VS版本复制代码到word时 中文注释变成乱码 就做了个小工具实时修复 以前在网上也下载过类似工具 但每次都要点一下 很麻烦 本工具可自动监控剪切板 自动修复 可谓全自动了
  • 正斜杠/和反斜杠\的区别

    近来研究源码时发现 xff0c 常常在路径中出现正斜杠 和反斜杠 xff0c 之前就一直不胜其扰 xff0c 所幸查资料把它一次弄懂 xff0c 求个明白 在这里做个记录 我认真搜了一下 xff0c 发现问这个问题的人还不少 xff0c 知
  • Gazebo需要的protoc版本与google-cartographer需要的版本不一致

    问题 xff1a 编译ROS工作空间时出现了问题 xff1a 错误提示是Gazebo代码由更新的protoc版本产生 xff0c 而当前安装的protobuf库的版本低了 xff11 xff0e ubuntu 18 04 Gazebo依赖的
  • vue 2.0项目 favicon.ico不显示 解决方案

    1 最好把favicon ico放到 index html放到同一目录 2 在webpack 配置文件里面配置 在webpack dev conf js 里面的 plugins配置 new HtmlWebpackPlugin filenam
  • 来自IT公司速查手册的各大IT公司薪资和待遇内幕

    来自IT公司速查手册的各大IT公司薪资和待遇内幕 xff08 转载于 http xuchaoyi99 cnblogs com xff09 编号 1 杭州 诺基亚 2 南京 趋势科技 Trend 3 北京 联想 xff08 北京 xff09
  • GCC中SIMD指令的应用方法

    X86架构上的多媒体应用开发 xff0c 如果能够使用SIMD指令进行优化 xff0c 性能将大大提高 目前 xff0c IA 32的SIMD指令包括MMX xff0c SSE xff0c SSE2等几级 在GCC的开发环境中 xff0c
  • ffmpeg mplayer x264 代码重点详解 详细分析

    ffmpeg和mplayer中求平均值得方法 1 ordinary c language level define avg2 a b a 43 b 43 1 gt gt 1 define avg4 a b c d a 43 b 43 c 4
  • 基于Region Proposal的深度学习目标检测简述

    转载链接 开篇需要跟大家道歉 xff0c 一切忙没时间的理由都是借口 xff0c 实际上就是偷懒了 xff0c 这么久才更新 xff0c 非常抱歉 xff01 本篇争取以最简明的叙述 xff0c 帮助大家理解下基于Region Propos

随机推荐

  • 3D电视,你知道多少?

    1 3D电视常见知识 系统概述篇 1 什么是3D电视 xff1f 答 xff1a 3D电视是一种能够模拟实际景物的真实空间关系的新型电视 xff0c 它利用人眼的视觉特性产生立体感 xff0c 让观众感受到观看的影像是具有深度特性的三维立体
  • 程序员成熟的标志《程序员成长路线图:从入门到优秀》

    对好书进行整理 xff0c 把好内容共享 我见证过许多的程序员的成长 xff0c 他们很多人在进入成熟期之后 xff0c 技术上相对较高 xff0c 一般项目开发起来比较自信 xff0c 没有什么太大的困难 xff0c 有的职位上也有所提升
  • 前端工程师的价值体现在哪里?

    这是一个很老的话题 前端工程师的价值体现在哪里 xff1f 有人说 xff1a 前端工程师之于网站的价值犹如化妆师之于明星的价值 一位好的Web前端开发工程师在知识体系上既要有广度 xff0c 又要有深度 当然 xff0c Web前端工程师
  • 设计公共API的六个注意事项

    摘要 xff1a 俗话说 xff1a 好东西就要贡献出来和大家一起分享 xff0c 尤其是在互联网业务高度发达的今天 xff0c 如果你的创业公司提供了一项很酷的技术或者服务 xff0c 并且其他用户也非常喜欢该产品 xff0c 在这种情况
  • 从工具的奴隶到工具的主人

    摘要 xff1a 我们每个人都是工具的奴隶 随着我们的学习 xff0c 我们不断的加深自己对工具的认识 xff0c 从而从它们里面解脱出来 现在我就来说一下我作为各种工具的奴隶 xff0c 以及逐渐摆脱它们的思想控制的历史吧 当我高中毕业进
  • C语言 常用API

    MySQL的C语言API接口 1 首先当然是连接数据库 xff0c 函数原型如下 xff1a MYSQL STDCALL mysql real connect MYSQL mysql const char host const char u
  • linux下的C语言开发

    linux下的C语言开发 xff08 开篇 xff09 在很多人的眼里 xff0c C语言和linux常常是分不开的 这其中的原因很多 xff0c 其中最重要的一部分我认为是linux本身就是C语言的杰出作品 当然 xff0c linux操
  • C读写ini文件

    read write ini file with c function 64 file testini c chinayaosir blog http blog csdn net chinayaosir connect ini databa
  • 职场必知的20条黄金法则

    时间紧张 xff0c 先记一笔 xff0c 后续优化与完善 1 办公室里只有两种人 xff0c 角主和龙套 职场上 xff0c 想要过的省力 xff0c 不想往上爬 xff0c 那就只能做一生的龙套 作龙套的处坏就是 xff1a 死送你先去
  • 检测是浏览器还是手机,需求为是否支持FLASH,此文为检测是否支持FLASH的代码(含demo下载)

    步骤 xff1a 1 导入swfobject js文件 2 写一个函数 3 在需要用的地方调用方法 xff0c 此处为页面加载时调用 以下为示例代码 xff1a Java代码 lt script src 61 34 Public js sw
  • Jetson NX安装opencv3.2.0报错及问题汇总

    先放一个完整的cmake命令 cmake D CMAKE BUILD TYPE 61 Release D ENABLE PRECOMPILED HEADERS 61 OFF D CMAKE EXE LINKER FLAGS 61 lcbla
  • Ubuntu16.04环境下安装python3.8

    一 首先下载安装包 xff1a python官网 xff1a https www python org downloads 下载相应版本的python xff0c 如下图所示为Linux版本的安装包 二 配置依赖环境 xff0c 如果不进行
  • 超好用的网站推荐(持续更新)

    1 在线学习 1 1 网课学习 网易公开课 链接 xff1a https open 163 com 中国大学MOOC 链接 xff1a https www icourse163 org 哔哩哔哩 链接 xff1a https www bil
  • ROS基础篇(五)-- C++如何实现Topic & Service(roscpp)

    文章目录 1 Client library与roscpp1 1 Client Library简介1 2 roscpp 2 节点初始化 关闭与NodeHandle3 Topic in roscpp3 1 Topic通信3 2 创建Person
  • ROS基础篇(一)-- 最新学习路线,快从这里开始

    资料目录 ROS官网必看资料Diego Robot系列机器人开发目录古月居大神专栏创客智造系列博客文字补充 ROS官网必看资料 学习ros在查看国内相关资料的同时 xff0c 一定要学会首先翻看官网英文文档 xff0c 尤其是教程 Code
  • Git基础篇(二)-- Git安装与配置

    文章目录 1 下载与安装2 Git配置2 1 初始配置2 2 Git项目搭建 3 和服务器同步3 1 GitHub3 2 Gitee 参考 1 下载与安装 1 下载 打开 Git 官网 xff0c 下载 Git 对应操作系统的版本 xff0
  • Arduino基础篇(六)-- 如何使用Arduino的IIC总线(Wire)

    文章目录 1 IIC总线1 1 IIC概述1 2 IIC通信协议 2 Wire类库2 1 成员函数2 2 IIC连接方法2 3 主机写数据 xff0c 从机接收数据2 4 从机发送数据 xff0c 主机读取数据 1 IIC总线 1 1 II
  • ROS基础篇(八)-- Arduino中如何使用ROS自定义的msg

    使用rosserial arduino时 xff0c 总会面对多传感器的处理 xff0c 由于不同传感器的数据类型不同 xff0c 为了方便起见 xff0c 我们需要自定义数据文件 那么如何自定义的传感器数据 xff0c 并在Arduino
  • 多视图学习 (Multi-View Learning)

    1 介绍 多视图学习也称作多视角学习 xff08 Multi view learning xff09 是陶大成提出的一个研究方向 在实际应用问题中 xff0c 对于同一事物可以从多种不同的途径或不同的角度进行描述 xff0c 这些不同的描述
  • sklearn基础篇(三)-- 鸢尾花(iris)数据集分析和分类

    后面对Sklearn的学习主要以 Python机器学习基础教程 和 机器学习实战基于scikit learn和tensorflow xff0c 两本互为补充进行学习 xff0c 下面是开篇的学习内容 1 初识数据 iris数据集的中文名是安